Прочитался ROM из 1811ВУ1 и проведена сверка со значениями вытащенными из схемы. В схеме матрицы найдено всего 6 ошибок (что очень круто для почти 9К транзисторов), подтверждено фотографией кристалла (то есть ошиблись когда топологию по фотографии перерисовывали). Теперь надо вычитывать матрицу PLA и матрицу модификации адресов, там объемы данных побольше будут - до 32 мегабайт надо будет скачивать на PC для последующего анализа. Читалка, конечно, весьма нетривиальная вышла, функции чтения сложные и непрямые.
Код:
//_____________________________________________________________________________
//
int read_ac(unsigned int addr, unsigned int data, int na)
{
int ret;
set_clk(1);
set_rst(0);
set_ezn(0);
set_ad(NOT_USED_PLA);
set_mi(NANO_CMD_LD);
ena_mi(1);
wait_ck();
set_clk(0); // jump to non-existing chip
set_mi(NOT_USED_CHIP << 6); // to reset AXT and CS
wait_ck();
set_clk(1);
set_mi(NANO_CMD_NOP);
wait_ck();
if (get_cs())
{
dbg_printf("\r\nread_mi: no CS deassert after selection non-used chip");
return -1;
}
set_clk(0);
set_mi((sel_cs << 6) | 0x10 | (addr_ta & 0xF) | ((addr & 0x200) ? 0 : 0x20));
wait_ck();
set_clk(1);
set_mi(NANO_CMD_AXT);
wait_ck();
set_clk(0);
set_mi(DUMMY_MI | 0x30);
wait_ck();
set_clk(1);
set_ad(addr);
set_mi(NANO_CMD_AXT);
wait_ck();
set_clk(0);
set_mi(DUMMY_MI);
wait_ck();
if (na)
{
set_clk(1);
set_ad(data);
set_mi(NANO_CMD_LD);
wait_ck();
set_clk(0);
set_mi(DUMMY_MI);
wait_ck();
}
set_clk(1);
set_ezn(1);
set_ad(data);
set_mi((NANO_CMD_LD & ~0x400) | (na ? 0 : 0x400));
wait_ck();
ena_mi(0);
set_clk(0);
wait_ck();
wait_ck();
wait_ck();
wait_ck();
ret = get_mi();
set_ezn(0);
set_clk(1);
ena_mi(1);
wait_ck();
// if (na && (ret ^ addr) & 0x200) // RNI (next address == 0) resets AXT
// dbg_printf("\r\nread_mi: AXT address bit mismatch %03X", addr);
if (na)
{
if ((ret & 0xFC00) != 0xFC00)
dbg_printf("\r\nread_mi: invalid high address %04X", ret);
ret &= 0x1FF;
}
return ret;
}