Прочитался 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; }




Ответить с цитированием
