О Z80 на "Орионе-128"

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: В.Чистяков

Источник: http://www.nedopc.org/forum/viewtopic.php?t=8161

В.Чистяков о Z80 на «Орионе-128»

Первоначально процессор Z80 в ОРИОН устанавливался просто взамен процессора КР580ВМ80, без доработок архитектуры. Замена процессора при монтаже Z80 в посадочное место процессора ВМ80 требует больших коррекций на плате, много разрезов печати и дополнительных проводов. Основным выигрышем при Z80 считалась возможность турбировать ОРИОН, а также бОльший выбор CP/M-компиляторов ЯВУ.

Вскоре выяснилось, что архитектура ОРИОНА имеет недостатком то, что при цвете в обоих страницах памяти располагается экранное ОЗУ, что оставляет для программ пользователя всего 48К сплошного ОЗУ. Для написанных любителями программ этого достаточно, но большая часть CP/M программ и все компиляторы требуют не менее 60 кб сплошного ОЗУ. Когда осенью 1991 изготавливалась партия печатных платок, предназначенных для упрощения замены процессора на Z80, то решено было одновременно разместить на этой платке, названной Z80CARD, дополнительный диспетчер памяти позволяющий одновременно решить проблему с цветом для CP/M.

Диспетчер применённый на этой платке позволял в окне 32К в адресах 0...7FFF включать любой из 4-х участков памяти в 32К из общей памяти в 128К. Это позволяло не только доступ к участку ОЗУ в 6 кб закрытому портами и ПЗУ, но и позволяло иметь одновременно цвет и сплошное ОЗУ в 60К для программ. В 1992 году для ОРИОНА на Z80 было адаптировано несколько игр от ZX-Spectrum. Выяснилось, что при адаптации ZX-игр гораздо удобнее иметь сегментирование по 16К, т.е возможность коммутировать ОЗУ по адресам 0-3FFFH (т.к в ZX-Spectrum именно в этих адресах располагается ПЗУ). Поэтому в 1993 году схема платки для Z80 была изменена на более оптимальную с окном диспетчера в 16К.

......

При установке Z80 по любой схеме учтите, что такая доработка совместима с базовым вариантом ОРИОНА насколько позволяет совместимость процессоров (в основном это касается вывода звуков, бейсика и игры Silent Service для ВМ80, - она использует IN/OUT для доступа в ОЗУ).

Основная цель предлагаемых усовершенствований - обеспечить максимально легкую адаптацию программ от ZX-Spectrum, облегчить доступ к ОЗУ и поднять быстродействие ОРИОНА, а также, возможно, улучшить его музыкальные возможности. Вы можете выполнить лишь часть этих переделок, потеряв при этом совместимость с какой-то частью новых программ.

1. Центральный процессор - Z80. Для работы на такте 2.5 МГЦ годится любой Z80. В том числе и ГДР-овский UB880, но его лучше не ставить, если планируется турбирование. Как показала практика, обычные Z80A предназначенные для работы на такте до 4 МГЦ, без проблем работают в ОРИОНЕ на удвоенном такте в 5 МГЦ.

2. Быстродействие - желательно не менее 3.5...4 МГЦ реального такта. Следует различать быстродействие (т.е реальный такт) и такт процессора. В случае, если нет WAIT, реальный такт и такт процессора равны. Качественно адаптированные игры (т.е с переделанным экранным алгоритмом) нормально работают и при 2.5 МГЦ, но новые игры адаптированные более простым способом на прерываниях при клоке в 2.5 МГЦ заметно тормозят.

3. Прерывание INT. Отключаемое прерывание по кадровому бланку, т.е с частотой 50 Герц. По сбросу выключено поступление импульсов на вход INT и поэтому даже после команды "EI" прерывание не наступает. Для разрешения прерываний в порт по адресу FB надо вывести байт с единицей в 6-м разряде. В связи с прерываниями IM2 стоит упомянуть о необходимости привязки шины данных процессора на "+5В" резисторами в 10К. Игры сделанные до марта 1993 (кроме GALAXY) этого не требовали (это решалось программно); но все последующие будут считать, что при обработке INT в режиме 2, с шины читается FF. Резисторы - до ШФ, к ногам CPU.

4. Прерывание NMI пока не используются. Эмуляция Синклера по прерываниям NMI резервирована на будущее, хотя для этого понадобится скорость в 5 МГЦ и более. К тому же реализация "режима эмуляции" целесообразна лишь на новой плате ОРИОНА - иначе будет просто 3-этажная "макетная плата". Идея эмуляции такая. Несколько раз в секунду вызывается NMI и подпрограммой визуализации экран ZX копируется в экран ОРИОНА, картинка становится видимой. Кроме доп.узла для NMI добавляется и ZX-клавиатура в 40 клавиш (или требуется дорабатывать программы, что правда на порядок проще, чем дорабатывать вывод на экран). Это упоминается на случай, если кто-то выполняя доработки, решит занять NMI чем-то менее-полезным (например, для реализации многозадачности).

5. Звук. Выводится двумя способами: TOGGLE OUT FF, PORT OUT FE/D4. Первый способ удобен при адаптации программ со звуком РК86 (DI/EI) и позволяет тратить меньше байтов и тактов процессора на звук, а второй - звук "Синклера", позволяет при адаптации не адаптировать вывод звука вообще. На платах Z80CARD новой версии 1993 года имеются оба эти "звука". На старых платах 1991 года проще всего ввести звук по порту FE используя имеющийся "порт FE" 155ИЕ7. Подключите вместо D7 к 9 ноге ИЕ7 - D4, а соотв.выход ИЕ7 через резистор - на эмиттерный повторитель для звука. Если Вы не ставили ИЕ7, то для организации звука FE можно использовать тот-же триггер звука FF (используя R/S вх). Наличия бордера не требуется. В некоторых ZX-играх (адаптации В.Смирнова) бордер работает. В дальнейшем будет считаться, что бордера - нет, хотя в тех программах, где звук не переделывается - вывод бордера получится автоматически (т.к в "Синклере" он такой-же).

6. Освобождение ОЗУ в области выше F400. Т.к лучшие ZX-игры большие по объёму и используют ОЗУ в старших адресах, где у ОРИОНА ПЗУ и В/У, потребовалась возможность иметь ОЗУ по этим адресам. При этом аппаратные переделки минимальны (1 вентиль из 155ЛИ1 и провода). Для отключения ПЗУ/ВУ используется разряд D5 порта FB (на старых схемах сигнал XROM). При выводе единицы в этот разряд по адресам выше F400 оказывается ОЗУ 0-й банки памяти (естественно ПЗУ и В/У становятся при этом недоступны). Чтобы снова получить доступ к В/У необходимо "вернуть их назад" выполнив команду OUT FB с нулём в 5-м разряде. К марту 1993 пока лишь одна программа «KRAKOUT» требует такой доработки, но вскоре программ использующих режим FULL RAM будет больше.

7. Диспетчер ОЗУ. Диспетчер ОЗУ по 32К, как указано выше был неудобен в работе и был отвергнут программистами. Поэтому схему пришлось изменить, обеспечив коммутацию по 16К. На плате Z80CARD "образца 1991 года" легко выполнить такую доработку. Как её сделать становится понятно, если сравнить схемы двух плат. Естественно, слегка изменилось и назначение разрядов D0...D4 порта FB: сигналы BS0-BS1 определяют номер банки ОЗУ, а SS0 и SS1 - номер 16-ти килобайтового сегмента, включаемого в окне коммутации с 0000 по 3FFF. Как и ранее, работа диспетчера полностью отключается записью единицы в 7-й разряд порта FB, что необходимо для совместимости с базовым ОРИОНОМ.

8. Таймер 580ВИ53. В начале 1991 года было предложено его ставить по адресу F740-F743. Такты всех каналов - 2 МГЦ. К сожалению, из-за отсутствия рекламы в журналах, ВИ53 до сих пор в любительских программах никто серъёзно не поддержал. А для ZX-игр наличие ВИ53 бесполезно. Для музыки и шумовых эффектов, видимо более перспективен AY8912, установленный как в ZX (по схеме Adelaide). Известно, что есть поддержка AY-8912 в некоторых играх для ZX-48K. Если такие игры будут конвертированы для ОРИОНА, то при такой схеме AY-звук переделывать не придётся. Кстати, аналогичная ситуация возможна и с джойстиком.

9. Объём ОЗУ. Достаточно базовых 128К. Больше требуется лишь, если нужно больше квазидисков ORDOS и эл.диск в CP/M.

Чистяков Владимир, Санкт-Петербург, март 1993 г.

FFFF|=================|    
    |`````````````````|    
    |``ROM-BIOS area``|    
F800|`````````````````|    
    |``````Ports``````|    
F400|`````````````````|    
    | некоммутируемое | 
    | портом "F9" ОЗУ |<------------------ !!! Но при FB/D5=1 эта область 
F000|-----------------|<-----\             перестаёт быть некоммутируемой 
    |    Segment 3    |      |             и тогда порт "F9" действует на 
    |                 |      |             всё адресное пространство 64К. 
C000|=================|      | 
    |                 |      |      Эта область переключается портом "F9" 
    |    Segment 2    |      |      То есть при FB/D7=FB/D5=0 область уп- 
    |                 |      |----- равляемая портом "F9" не включает 16К 
8000|=================|      |      памяти, входящие в Segment 0  и таким 
    |                 |      |      образом порт F9 управляет окном в 48К 
    |    Segment 1    |      |      Но при FB/D7=1 порт F9 коммутирует на 
    |                 |      |      всё адресное пространство в 60 Кбайт. 
4000|=================|<-----/ 
    |                 | Segment 0 соответствует окну диспетчера Z80CARD-2 
    |    Segment 0    | При включённом диспетчере номер блока памяти дос- 
    |                 | тупного в этом сегменте,  определяется портом FB. 
0000|=================|