Итак, ситуация следующая. На работе тоже не получилось зашить АТФку. Видимо какие-то вопросы с ЛПТ или с Windows. Возможно мешают какие-то драйвера от других программаторов, попробую поставить чистую систему и прошить АТФ, на это нужно некоторое время. Камиль, у меня есть верхняя плата от Профи 5.06, в неё, может вспомнишь, я интегрировал ZXMC2, АТФку я перенес в ПЛИС, а мега осталась само-собой подключена по стандартной схеме zxmc2 со всей обвязкой.
я попробовал перевести исходник АТФки в ПЛИС для изменения дешифрации, но, как выяснилось существует проблема с портом BF - перестает работать контроллер дисковода с такой дешифрацией, скорее всего пересекается с расширенными портами контроллера дисковода.
вот твой исходник:
Код:
/** Inputs **/
pin 1 = a0;
pin 2 = a1;
pin 3 = a2;
pin 4 = a3;
pin 5 = a7;
pin 6 = a6;
pin 7 = a5;
pin 8 = a4;
pin 9 = !IORQ;
pin 11 = M1_n;
pin 13 = READY_n; /** 0 - ready **/
pin 18 = !INT0I; /** 1 - block KBD **/
/** Outputs **/
pin 19 = !INT0; /** get KBD **/
pin 16 = !INT1; /** get ports **/
pin 15 = ADR0; /** port kempston mouse **/
pin 14 = ADR1; /** port RS232 **/
pin 17 = SEL;
pin 12 = !WAIT;
/** Declarations and Intermediate Variable Definitions **/
/** Logic Equations **/
p_sel = a1 & a2 & a7 & IORQ & M1_n;
portFE = !a0 & a3 & a4 & a5 & a6 & p_sel;
portF7 = a0 & !a3 & a4 & a5 & a6 & p_sel; /** ADR0,ADR1 = 11 **/
portEF = a0 & a3 & !a4 & a5 & a6 & p_sel; /** ADR0,ADR1 = 10 **/
portDF = a0 & a3 & a4 & !a5 & a6 & p_sel; /** ADR0,ADR1 = 01 **/
portBF = a0 & a3 & a4 & a5 & !a6 & p_sel; /** ADR0,ADR1 = 00 **/
ports1 = portF7 # portEF # portDF # portBF;
INT0 = portFE;
INT1 = ports1;
SEL = INT0I # ports1;
WAIT = READY_n & SEL;
ADR0 = a5 & a6;
ADR1 = a4 & a6;
Вот так я его перевел в VHDL:
Код:
p_sel <= adress(7) and adress(2) and adress(1) and not iorq and m1;
portFE <= not adress(0) and adress(3) and adress(4) and adress(5) and adress(6) and p_sel;
portF7 <= adress(0) and not adress(3) and adress(4) and adress(5) and adress(6) and p_sel;
portEF <= adress(0) and adress(3) and not adress(4) and adress(5) and adress(6) and p_sel;
portDF <= adress(0) and adress(3) and adress(4) and not adress(5) and adress(6) and p_sel;
portBF <= adress(0) and adress(3) and adress(4) and adress(5) and not adress(6) and p_sel;
ports1 <= portF7 or portEF or portDF or portBF;
INT0 <= not portFE;
INT1 <= not ports1;
SEL <= not INT0I or ports1;
wait_mc <= READY_n and SEL;
ADR0 <= adress(5) and adress(6);
ADR1 <= adress(4) and adress(6);
iorqge_mc <= wr and SEL;
Сигналы, которые инвертируются в самом начале - входы, и выходы я инвертирую внутри прошивки. Далее я сделал загрузочный HDD, загрузился с него и запустил утилиту теста часов, к сожалению утилита не нашла часы. если заблокировать порт BF, то функциональность контроллера дисковода восстанавливается. Порт BF отвечает в контроллере дисковода за RQ от ВГ93. В дешифраторе часов также есть сигналы CPM и ROM14. CP/M - бит 5 порта DFFD, ROM14 - бит 4 порта 7FFD. часы выбираются только тогда, когда эти оба бита в 1це (по сигналам на плате Profi получается /CPM = 0 и ROM14 = 1). если вставить их в дешифрацию портов DF и BF, то контроллер снова заработает, но часы по прежнему не видны. и еще - в дешифраторе часов на плате периферии Profi не учитывается адрес A6 (ADR6), из-за этого получаются "основные" и "не основные" порты, фактически, часы должны отзываться на два порта. может выкинуть А6 из дешифратора? пока у меня идей нет, если такая проверка подойдет, то я готов дальше тестировать в таком виде, если нет, и нужна чистая проверка, то буду пытаться прошить АТФку.