Выделилoсь отсюда
Как известно, разработчики консоли Famicon-NES сэкономили центами на микросхемах, что сказалось на последующем избыточном содержании многих картриджей.
Теоретически, для РЛК можно тоже разработать подобный картридж для замены им оригинальной РФ2…
Так как к РФ2 подходит лишь сигнал ЧТЕНИЯ, выбор страницы ПЗУ через ЗАПИСЬ никак, казалось бы, недостижим без дополнительных проводков…
Однако, можно прибегнуть к трюку как в старом анекдоте про «Ошибку записи при чтении»: Ячейки FFF0…FFFF зарезервировать под накопительный регистр.
Скажем, включить последовательно две микросхемы К155ИР1, чтобы биты с адреса A0…A4 записывались в регистры при чтении ячеек FFF0…FFFF.
Затем все 8 бит с этих двух регистров можно чтением из FF00…FFEF записать уже в сам К531ИР23 и активировать нужную страницу…
(Получается: две ИР1, одна ИР23, одна ЛА2 для старших бит адреса и ещё ЛА4 для ИР1…)
Как пример, вот набросок кода для этого дела:Пример вызовов:Код:; Аккумулятор - код страницы Page_Select: PUSH PSW PUSH H MVI H,0FFh CALL Page_Switch POP H POP PSW RET Page_Switch: PUSH PSW RRC RRC RRC RRC CALL Page_Nibble POP PSW Page_Nibble: ORI 0F0h MOV L,A ; Код нужной страницы накапливается тетрадами CMP M ; Чтением FFF0…FFFF заносим в накопительный регистр RETСледует также позаботиться о стеке вызовов страниц, чтобы вызывать из любых страниц произвольно другие страницы и корректно возвращаться. Но это уже вопрос программный…Код:MVI A,015h ; Странница подпрограммы F815 CALL Page_Select MOV A,M CALL 0FF00h ; Вызов подпрограммы MVI A,04Dh ; Странница директивы M CALL Page_Select CALL 0FF00h ; Вызов подпрограммы
Можно ещё больше сэкономить на регистрах/логике и все 256 ячеек FF00…FFFF отнять под выбор страницы:В этом случае потребуется одна ЛА2 и один ИР23. Но это не совместимо с оригинальным ПЗУ, так как там подпрограммы обслуживания клавиатуры, отладки, текст и директива «X»…Код:PUSH H LXI H,0FFFDh; Адрес входа в подпрограмму страницы XTHL PUSH H LXI H,0FF15h; Код страницы XTHL RET ; Передача управления по адрес FEFD после FF15, где одни C9
Хотя, можно использовать две ИР23 - буферную и индексную.
В буферный регистр заносить по всем адресам (A8…A1), если на A0 логическая «1».
А в индексный регистр - только по FFFE.Можно, напротив, применить К555ИР8 и использовать лишь две ячейки - FFFE/FFFF.Код:?????XXX XXXXXXXX - ROM-Address ------------------------------- ???????X XXXXXXX1 - Prepare Page ?????111 1111111? - Select Page Switch_Page: PUSH H PUSH D MOV L,A MVI H,07Fh DAD H INX H LXI D,0FFFEh MOV A,M ; <- Odd address only LDAX D ; <- Even address only POP D POP H RET
Загружать индекс страницы в ИР23 можно через адреса FFF0…FFFD.
Тогда МОНИТОР будет практически полностью совместим на странице #0, а код страницы потребуется набирать по одному биту.
Данный вариант обеспечивает максимальную совместимость, но требует логики побольше и код переключения будет громоздок…
Словом, вариантов - очень много!
P.S.: По мереудачногоразвития темы подредактирую здесь зарезервированное…


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 



