Как я понимаю работу дешифратора адресов.
Джамперы X2 и X3 могут быть в положении 2-3 (64k) или 1-2 (32k)
CI3, pin14: 0 если ADR12=1, ADR13=1
CI3, pin13: 0 если ARD15=0 (для X2 в положении 32k) или просто 0 (для X2 64k)
CI2, CS1 = 0 если CS12=0, pin13=0, pin14=0.
IC1, CE = 0 если CS12=0, pin13=0, pin14=1 (то есть ADR13-ADR12 = 00, 01, 10).
Есть ROM 32k 0000-7FFF или ROM 64k 0000-FFFF
Есть SRAM 0000-1FFF
Чтобы было понятнее, когда и какими диапазонами ROM и SRAM будут отображаться
в адресное пространство, запишем старшие разряды 15-12 битами, остальные хексами:
0000 000 - 0000 FFF - ROM 0000 - 0FFF
0001 000 - 0001 FFF - ROM 1000 - 1FFF
0010 000 - 0010 FFF - ROM 2000 - 2FFF
0011 000 - 0011 FFF - SRAM 0000 - 0FFF
0100 000 - 0100 FFF - ROM 4000 - 4FFF
0101 000 - 0101 FFF - ROM 5000 - 5FFF
0110 000 - 0110 FFF - ROM 6000 - 6FFF
0111 000 - 0111 FFF - SRAM 0000 - 0FFF
Только для X2 в положении 64k:
1000 000 - 1000 FFF - ROM 8000 - 8FFF
1001 000 - 1001 FFF - ROM 9000 - 9FFF
1010 000 - 1010 FFF - ROM A000 - AFFF
1011 000 - 1011 FFF - SRAM 1000 - 1FFF
1100 000 - 1100 FFF - ROM C000 - CFFF
1101 000 - 1101 FFF - ROM D000 - DFFF
1110 000 - 1110 FFF - ROM E000 - EFFF
1111 000 - 1111 FFF - SRAM 1000 - 1FFF
Или компактнее:
0000h-2FFFh: ROM, диапазон 0000h-2FFFh
3000h-3FFFh: SRAM, диапазон 0000h-0FFFh
4000h-6FFFh: ROM, диапазон 4000h-6FFFh
7000h-7FFFh: SRAM, диапазон 0000h-0FFFh
Только для X2 в положении 64k:
8000h-AFFFh: ROM, если X3 в положении 64k, то диапазон 8000h-AFFFh, если X3 в положении 32k, то диапазон 0000h-2FFFh
B000h-BFFFh: SRAM, диапазон 1000h-1FFFh
C000h-EFFFh: ROM, если X3 в положении 64k, то диапазон C000h-EFFFh, если X3 в положении 32k, то диапазон 4000h-6FFFh
F000h-FFFFh: SRAM, диапазон 1000h-1FFFh
Но всё это работает только при установке в 0 сигнала CS12, что соответствует чтению (??? а как же запись в SRAM?)
по адресам 4000-BFFF (Или не так? Как он формируется????).
То есть остаётся только:
4000h-6FFFh: ROM, диапазон 4000h-6FFFh
7000h-7FFFh: SRAM, диапазон 0000h-0FFFh
Только для X2 в положении 64k:
8000h-AFFFh: ROM, если X3 в положении 64k, то диапазон 8000h-AFFFh, если X3 в положении 32k, то диапазон 0000h-2FFFh
B000h-BFFFh: SRAM, диапазон 1000h-1FFFh
Чтобы отображение SRAM не зависело от X2, полагаю надо завести на CS1 микросхемы CI2 сигнал с ног 7 и 14 микросхемы CI3.
Не разбирался, чего там бразильцы эволюционировали за десятилетия (ну почти). Вот маппер на g16v8 для моей карточки OPL2 под биос 1.3b и схемку надо пошукать. Вроде не выкладывал.
/** Inputs **/ PIN 1 = A1; PIN 2 = A2; PIN 3 = A3; PIN 4 = A4; PIN 5 = A5; PIN 6 = A6; PIN 7 = A7; PIN 8 = !M1; PIN 9 = !IORQ; PIN 11 = !SLTSL; PIN 14 = A12; PIN 15 = A13; /** Outputs **/ PIN 12 = !ROMSL; PIN 13 = !RAMSL; PIN 19 = !IOC0; /** Equations **/ IOC0 = !A1 & !A2 & !A3 & !A4 & !A5 & A6 & A7 & IORQ & !M1; ROMSL = !A12 & SLTSL # !A13 & SLTSL; RAMSL = A12 & A13 & SLTSL;
Еще поищу мой не замысловатый стенд в Proteus-e на рассыпухе для этого маппера.
Схема Module OPL2.pdf
p.s. Если уже делать под бразильский биос, то зачем думать о совместимости с оригинальным? Не зачем. Я так думаю.
Да я просто не могу понять, как оно умудряется в модифицированном варианте работать. Проверил, как формируется сигнал CS12 (а без него не будет выставлен чип-селект и для EEPROM, и для SRAM) по исходникам для эмуляции архитектуры на ПЛИС - действительно, при установке адреса в диапазоне 4000-BFFF, выставлении RD и MREQ. То есть и EEPROM, и SRAM будут включаться-откликаться только при этих условиях. Но тогда SRAM не будет доступна на запись, когда RD не выставлено, и у EEPROM не будет доступно в адресном пространстве начало 0000h-2FFFh. Но ведь оно как-то работает всё же? А в базовом варианте используется CS12 в связке с SLTSL, то есть отображается (откликается данными на установленный адрес) в адресное пространство 4000h - BFFFh вся память EEPROM при выполнении операции чтения из памяти (MREQ, RD).
Да я просто не могу понять, как оно умудряется в модифицированном варианте работать. Проверил, как формируется ...
Все так. С сигналом /CS12 кашу не сваришь. А каким первоисточником вы пользовались (схема, документ)?
А в базовом варианте используется CS12 в связке с SLTSL, то есть ...
В базовом варианте не было ОЗУ в маппере, поэтому там все Ок с /CS12.
p.s. /CS12 стал анахронизмом еще при жизни MSX, когда карики стали чуть сложней чем одно ПЗУ. ПЗУ выбирается /RD и /SLTSL (плюс логика).
Ориентировался на моддинг отсюда. По описанию всё апробировано и должно работать.
Ну, фиг его знает Есть железобетонный факт - /CS12 активируется только при чтении (/RD). Т.е. доступ на запись к ОЗУ не получить.
Как вариант просить владельцев апдейта сделать реверс этой доработки. И уточнить какой версией биоса они пользуются.
Для себя этот вопрос я закрыл. Тем более биос начиная с v1.3 требует доработки маппера до 64кб (как я понял). На что и ориентировался. Эта же разновидность биоса используется с кариком OPL3 и Toshiba HX-MU900.
p.s. Кстати с помощью Alexey-я, я пытался продвинуть тему с изготовлением биоса под OPL2, но все заглохло. Видимо у автора или желания, или времени нет. Правда есть и положительный момент. Теперь с OPL3 (или даже с NMS1205) мне можно не делать маппер, он у меня уже есть
Ну и что же делать? По-моему, достаточно завести в схему MREQ вместо CS12. Тогда вроде всё логично будет.
Не совсем. Нужен еще сигнал /RFSH. Обратите внимание, как формирует на схеме сигнал /SELMEM, который разрешает доступ процессора ко всей памяти. И он же разрешает прохождения сигналов /SLTSL*.
Видимо при публикации материалов о доработке вмешался человеческий фактор (банальная ошибка). И вместо /SLTSL в схему попал /CS12.
p.s. В принципе достаточно по упрощенной схеме и /MERQ, но тогда память будет в холостую включаться в моменты регенерации ОЗУ от процессора.
В схеме апгрейда берётся сигнал с ноги 20, по схеме NMS1205 это /CS12. Возможно, на схеме NMS перепутаны 20 и 22, то есть /CS12 и /SLTSL. На плате они идут рядом (можно легко ошибиться, отслеживая их по киартинке дорожек из сервис-мануала и фото платы), так что я вполне допускаю, что разведены они наоборот, а на схеме в мануале соответственно ещё одна ошибка. Если так, то всё получается логично и работа апгрейда понятен. Тогда получается мне в схеме надо просто заменить /CS12 на /SLTSL.