Вложений: 1
Схема расширения 256К "LSY"
Итак, выкладываю схему расширения до 256К с подключением AY для "Орели БК-08" - "LSY".
Этот рисунок - самое лучшее, что осталось от записей тех времен. Кроме платы расширения, которую нужно собрать по данной схеме, в компьютере и контроллере надо проделать ряд изменений. Часть их опишу в этом посте, остальное - постепенно после. Все по памяти - не додумался в свое время на бумажке записать.
Начну с простых частей схемы.
На микросхеме ИД7, двух элементах ЛА3, одном ЛИ1 и одном ЛЕ1 выполнена дешифрация портов AY и 7FFD. Я назвал сигналы IORQ и RESET так, как они называются в схеме "Орели" - IQ и RT. Остальные сигналы я также называл в соответствии с орелевской схемой, за исключением DV0.
Полагаю, что включение ТМ9 также будет многим знакомо - это порт 7FFD с тремя битами выбора страницы PA0,PA1,PA2; сигналом выбора экрана CHSCR, ПЗУ 48/128 (CSROM) и блокировкой 7FFD. Включение элемента ЛИ1 возле ИД7 осуществляет выборку порта 7FFD также по адресу 00FD. Без этого не работают многие программы.
Вырабатывается сигнал R7FFD, использование которого в схеме не показано - он позволяет осуществить чтение из порта 7FFD с помощью некоторых дополнительных переделок.
Выходные сигналы BDIR и BC1 осуществляют выборку AY. В остальном включение AY в схеме не показано - оно стандартное, надо шину данных к нему подключить, сброс и так далее.
Внизу слева схема на логических элементах ЛИ1 и ЛЕ1 формирует сигналы CA0, CA1 и CSE. Ее входами служат A14, A15, EMUL, RD. Сигнал EMUL берется со специального порта LSY и включает режим эмуляции ПЗУ. Сигнал CSE (активный уровень - низкий) вырабатывается при попытке записи в режиме эмуляции ПЗУ и используется для блокирования обращения к памяти.
Работает эта схема в зависимости от того, к какой части адресного пространства обращается Z80: 0000-3FFF (теневое ОЗУ, эмуляция ПЗУ); 4000-BFFF (ОЗУ), C000-FFFF (выбранная пользователем страница).
Таким образом, имеется следующая таблица истинности:
0000-3FFF (EMUL=0): CA0=1, CA1=1 - теневое ОЗУ
0000-3FFF (EMUL=1): CA0=0, CA1=1 - эмуляция ПЗУ
4000-BFFF: CA0=1, CA1=0
C000-FFFF: CA0=0, CA1=0
И в каждом из этих случаев на линии A14', A15', A16' и A17' памяти микросхемами КП12 подается своя комбинация, а именно:
При обращении к адресам C000-FFFF на адресные линии памяти подается номер страницы, выбранный портом 7FFD. 3й бит номера страницы, не входящий в стандарт 128К - сигнал PA3 - берется со спецпорта LSY.
При обращении к 4000-BFFF, как можно видеть из схемы, на A14-A16 подаются такие сигналы, чтобы обеспечивать видимость страницы 2 в области 8000-BFFF и страницы 5 в области 4000-7FFF. На A17 при этом подается лог. 0 - это значит, что все стандартные 128К страницы, а также область 8000-BFFF обращаются к первой половине 256К памяти.
В режиме эмуляции ПЗУ при обращении к 0000-3FFF на линии A14, A15, A16, A17 памяти подаются сигналы CSROM, BETA, 0, 1 соответственно. Это значит, что эмулируемая прошивка бейсик-128 находится в 8й странице памяти; бейсик-48 - в 9й, TR-DOS - в 11й.
И, наконец, при обращении к 0000-3FFF, когда сигнал EMUL=0, то на линии A14, A15, A16, A17 подается комбинация: DV0, 0, 1, 1. Таким образом, имеется две страницы теневого ОЗУ, которые отображаются на страницы ОЗУ 12 и 13. Сигнал DV0 выбирает нужную, и берется он со спецпорта LSY.
Спецпорт LSY (в схеме не показан) содержит еще один сигнал - BLKROM - для блокирования ПЗУ. Именно когда основное ПЗУ заблокировано, то в действие включается режим теневого ОЗУ либо эмуляции ПЗУ.
Еще одна микросхема КП12 мультиплексирует сигналы A16 и A17, вырабатывая сигнал AM8. Этот сигнал я назвал аналогично сигналам AM0-AM7 схемы "Орели" - это мультиплексированные адресные линии памяти. У 256-килобитных микросхем РУ7 эта дополнительная линия находится на 1й ножке. Таким образом, при расширении до 256К необходимо заменить все микросхемы КР565РУ5В на КР565РУ7В или РУ7И. И на первый вывод всех РУ7 подать сигнал AM8.
Для мультиплексирования используется сигнал C7 (инверсный) - тот же, что и для остальных адресных линий ОЗУ "Орели". А вот использование сигналов HM (инверсный) - и IKB (инверсный) это уже очень интересное дело и "ноу-хау".
Сигнал HM в "Орели" указывает, что обращается к памяти: процессор или видеоконтроллер. В зависимости от этого на адресную шину памяти подаются либо адресные сигналы процессора, либо видеоконтроллера.
Первый вариант данной схемы был реализован без использования IKB (только HM). У меня была линейка каких-то хитрых микросхемы MB81256, привезенных из Москвы, и с ними все заработало без проблем. Когда же мы у Андрея Гетало собрали для него эту схему с советскими РУ7, то обнаружилась проблема - отсутствие регенерации ОЗУ! Те области ОЗУ, к которым видеоконтроллер не обращался - а это практически 1/2 в данной конфигурации - не подвергались периодическому считыванию и в течение нескольких секунд начинали постепенно "забывать" информацию!
Мы перепробовали множество решений, в том числе установили 9-разрядный счетчик и пытались таким сложным способом регенерировать ОЗУ. Все было тщетно. И однажды мне пришла в голову идея - чтобы видеоконтроллер считывал информацию из верхних областей ОЗУ тогда, когда луч находится в области бордюра. Ведь все равно считанная информация при этом не используется. Мы сначала взяли сигнал BORDER (инверсный) из схемы "Орели", и это помогло, однако первое знакоместо начало давать "снег". И когда мы взяли сигнал IKB (из которого впоследствии формируется BORDER) - то все волшебным образом заработало!
Сигнал IKB на "Орели" присутствует на выходах "видеоконтроллерных" РЕ3 и РТ4 (РЕ3 формирует сигнал бордюра в пределах строки, а РТ4 - в пределах кадра по строкам, и они объединены по схеме "монтажное И").
Вот так для начала.
Пишите, у кого есть вопросы, комментарии.
Я продолжу описывать схему и остальные переделки чуть позже.