Наверно, по той же причине, почему бы не заменить всю конструкцию на ПЛИС и не получить при этом "Комбодевайс2"...А если серьёзно -- если что-то можно решить на обычной логике достаточно малым числом корпусов МС, то я не вижу особой необходимости делать это на ПЗУ. Так же, собственно, было сделано и в последующей конструкции КД (на РУ7)...
- - - Добавлено - - -
И ещё, могу уже похвалиться собранной конструкцией по последней схеме:
Только вот микросхем памяти пока что ещё нет, т.к. они в доставке с ибея... Но всё остальное, что возможно, протестил -- работает так, как и было задумано.
Может, кому пригодится, вот мои тесты для контроллера КД:
Тест 0
Как написано в документации к оригинальному КД, начальный тест -- это просто включение Вектора с подключённым диском. Если загрузке Вектора собранный КД не мешает, то значит всё в порядке.[свернуть]Тест 1
Проверка правильности работы схемы дешифратора адреса порта КД и регистра конфигурации (микросхемы D1, D2:A, D12:A,B,C и D7). Результат тестирования проверяется мультиметром, на соответствующих выводах D7 должны появляться сигналы "1". Запускать с отключённым сигналом "БЛК" (например, без установленной D8), иначе Вектор подвиснет.
Текст теста на ассемблере для запуска в любом мониторе-отладчике:
Код:.ORG 00100h L_0100: LDA L_DATA RLC STA L_DATA OUT 010h ; отправляем в порт LDA L_DT INR A STA L_DT LXI D, L_TEXT MVI C, 009h CALL 5 ; вывод сообщения MVI C,1 LXI D,2000h CALL 5 ; ожидание нажатия клавиши LDA L_DATA CPI 080h ; проверка JNZ L_0100 ; цикл MVI A, '0' STA L_DT RET ; выход ---->>>> L_TEXT: .db 0Dh, 0Ah, "OUT DATA: " L_DT: .db "0$" L_DATA: .db 080h .END[свернуть]Тест 2
Проверка работы в режиме "стек", проверяется формирователь сигнала "БЛК" на МС D8 (и, конечно, дополнительно и то, что проверялось в тесте 1). Этим тестом производится запись данных во все четыре банка КД по адресам, совпадающим с экранной областью монитора-отладчика, и в случае сбоя на экране будут видны "артефакты".
Код:.ORG 00100h L_0100: LXI D, L_DATA PUSH D ; сохраняем в стеке ссылку L_MAIN: POP D ; считываем ссылку LDAX D ; загружаем A по ссылке ORA A RZ ; выход, если там ноль ---->>>> INX D ; DE=DE+1 PUSH D ; сохраняем в стеке новую ссылку DI ; запрещаем прерывания OUT 010h ; отправляем в порт LXI H, 0000h ; заполнение памяти DAD SP ; SP+0 в HL SHLD L_SAVE ; сохранить указатель на стек LXI D, 55AAh ; чем заполнять LXI H, 1000h ; сколько/2 LXI SP,0E000h ; свой указатель на стек L_LOOP: PUSH D ; заполняем через стек... DCX H MOV A, L ORA H JNZ L_LOOP ; зациклено XRA A ; обнуляем аккумулятор OUT 010h ; отправляем в порт -- отключаем КД LHLD L_SAVE ; считать сохранённый указатель на стек в HL SPHL ; восстанавливаем SP EI ; разрешаем прерывания LXI D, L_TEXT MVI C, 009h CALL 5 ; вывод сообщения MVI C,1 LXI D, 2000h CALL 5 ; ожидание нажатия клавиши JMP L_MAIN ; цикл ; L_SAVE: .dw 0000h L_TEXT: .db 0Dh, 0Ah, "-- DONE --$" L_DATA: .db 1Ch ; 00011100b -- вкл. 0 банк как стек на КД .db 18h ; 00011000b -- вкл. 1 банк как стек на КД .db 14h ; 00010100b -- вкл. 2 банк как стек на КД .db 10h ; 00010000b -- вкл. 3 банк как стек на КД .db 00h ; конец .END[свернуть]Тест 3
Проверка работы КД в режиме "замена ОЗУ" по стандартной конфигурации. Дополнительно к предыдущим тестам, проверяются правильность работы МС D5 и D6. Ошибка выдаётся в случае совпадения последнего записанного в КД байта и считанного из ОЗУ после отключения КД.
Код:.ORG 00100h L_0100: LXI D, L_DATA PUSH D ; сохраняем в стеке ссылку L_MAIN: POP D ; считываем ссылку LDAX D ; загружаем A по ссылке ORA A RZ ; выход, если там ноль ---->>>> INX D ; DE=DE+1 PUSH D ; сохраняем в стеке новую ссылку OUT 010h ; отправляем в порт LXI H, 02000h ; заполнение памяти -- сколько LXI B, 0C000h ; с какого адреса L_LOOP: MVI A, 055h ; чем заполнять STAX B ; пишем INX B DCX H MOV A, L ORA H JNZ L_LOOP ; пока HL не обнулится XRA A ; обнуляем аккумулятор OUT 010h ; отправляем в порт -- отключаем КД DCX B ; на шаг назад LDAX B ; считываем последний байт CPI 055h ; сравниваем с тем, что писали LXI D, L_ERRT ; ссылка на сообщение об ошибке JZ L_DONE ; если равны -- значит КД работает не правильно LXI D, L_TEXT L_DONE: MVI C, 009h CALL 5 ; вывод сообщения MVI C,1 LXI D, 2000h CALL 5 ; ожидание нажатия клавиши JMP L_MAIN ; цикл ; L_SAVE: .dw 0000h L_TEXT: .db 0Dh, 0Ah, "-- DONE --$" L_ERRT: .db 0Dh, 0Ah, "-- ERROR --$" L_DATA: .db 23h ; 00100011b -- вкл. 0 банк как ОЗУ A000h-DFFFh .db 22h ; 00100010b -- вкл. 1 банк как ОЗУ A000h-DFFFh .db 21h ; 00100001b -- вкл. 2 банк как ОЗУ A000h-DFFFh .db 20h ; 00100000b -- вкл. 3 банк как ОЗУ A000h-DFFFh .db 00h ; конец .END[свернуть]Тест 4
То же самое, что и в третьем тесте, но только для схемы доработки Баркаря
Код:.ORG 00100h L_0100: LXI D, L_DATA PUSH D ; сохраняем в стеке ссылку L_MAIN: POP D ; считываем ссылку LDAX D ; загружаем A по ссылке ORA A RZ ; выход, если там ноль ---->>>> INX D ; DE=DE+1 PUSH D ; сохраняем в стеке новую ссылку OUT 010h ; отправляем в порт LXI H, 02000h ; заполнение памяти -- сколько CPI 080h LXI B, 08000h ; с какого адреса 1 JC L_LOOP ; если A < 080h LXI B, 0E000h ; с какого адреса 2 L_LOOP: MVI A, 055h ; чем заполнять STAX B ; пишем INX B DCX H MOV A, L ORA H JNZ L_LOOP ; пока HL не обнулится XRA A ; обнуляем аккумулятор OUT 010h ; отправляем в порт -- отключаем КД DCX B ; на шаг назад LDAX B ; считываем последний байт CPI 055h ; сравниваем с тем, что писали LXI D, L_ERRT ; ссылка на сообщение об ошибке JZ L_DONE ; если равны -- значит КД работает не правильно LXI D, L_TEXT L_DONE: MVI C, 009h CALL 5 ; вывод сообщения MVI C,1 LXI D, 2000h CALL 5 ; ожидание нажатия клавиши JMP L_MAIN ; цикл ; L_SAVE: .dw 0000h L_TEXT: .db 0Dh, 0Ah, "-- DONE --$" L_ERRT: .db 0Dh, 0Ah, "-- ERROR --$" L_DATA: .db 43h ; 01000011b -- вкл. 1 банк как ОЗУ 8000h-9FFFh .db 42h ; 01000010b -- вкл. 2 банк как ОЗУ 8000h-9FFFh .db 41h ; 01000001b -- вкл. 3 банк как ОЗУ 8000h-9FFFh .db 40h ; 01000000b -- вкл. 4 банк как ОЗУ 8000h-9FFFh .db 83h ; 10000011b -- вкл. 1 банк как ОЗУ E000h-FFFFh .db 82h ; 10000010b -- вкл. 2 банк как ОЗУ E000h-FFFFh .db 81h ; 10000001b -- вкл. 3 банк как ОЗУ E000h-FFFFh .db 80h ; 10000000b -- вкл. 4 банк как ОЗУ E000h-FFFFh .db 00h ; конец .END[свернуть]
А дальше, я думаю, надо ставить память и тестировать стандартными программами, типа "дождь" и т.д.
Все тесты откомпилированные для монитора-отладчика в одном архиве: MyTestKD.7z
Запускать можно под любым монитором-отладчиком, режим распределения памяти МО рекомендую выбирать <2>.





А если серьёзно -- если что-то можно решить на обычной логике достаточно малым числом корпусов МС, то я не вижу особой необходимости делать это на ПЗУ. Так же, собственно, было сделано и в
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
