О Z80 на "Орионе-128"
| Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: В.Чистяков |
В.Чистяков о Z80 на «Орионе-128»
--------------------------------
.....Оказалось, что при адаптации гораздо удобнее было бы иметь сегментирование по
16К, т.е возможность коммутировать ОЗУ по адресам 0-4000H. Дело в том, что у
"Синклера" в этих адресах располагается ПЗУ, а из-за архитектуры "Ориона", ОЗУ
экрана (при цвете) всегда присутствует в адресном пространстве. Поэтому при
адаптации игр (для того, чтобы экран не мешал размещению собственно программы
"Синклера") на "Орионе" включается экран N4 (0-2FFF), т.е вместо ПЗУ Синклера.
Итак
весной 1992 г. я установил "минимальный вариант доработки", а именно: требуется
только наличие самого процессора Z80 и прерываний аналогичных ZX-Spectrum -
50 Герц на вход INT, включаемых битом D6 порта 0FBH. ......
-----------------------
Далее описывается "стандарт" для доработанного "Ориона-128", которого будут
придерживаться в SP-Computer Club-е при создании новых программ в 1993 г.
Прошу не думать, что мы навязываем кому-то из пользователей "свои стандарты" -
мы не авторы "Ориона", не публикуемся в журналах и не имеем таких прав. Наши
доработки лишь - предложения на ваше рассмотрение: вы можете их отвергнуть или
одобрить: выбор Ваш. При принятии решения учтите, что такая доработка совмести-
ма с "классическим" вариантом "Ориона" (насколько возможно), а те несколько
программ, которые работают с ОЗУ командами IN/OUT давно доработаны для Z80.
Основная цель предлагаемых усовершенствований - обеспечить максимально легкую
адаптацию программ от "Синклера", облегчить доступ к ОЗУ и поднять быстродейст-
вие "Ориона" а также немного улучшить его муз.возможности. Вы можете выполнить
лишь часть этих переделок, потеряв при этом также "совместимость" с какой-то
частью наших программ.
1. Центральный процессор - Z80. Любой процессор, обеспечивающий требуемое
быстродействие. Возможно также применение процессора Z80H, хоть про него
и написано в справочниках, что он имеет сокращенный набор команд (мы прове-
ряли на "Синклере" - игры работают, возможно нет команд типа "OTIR").
2. Быстродействие - не менее 4 МГЦ. Следует различать быстродействие (т.е реа-
льный такт) и такт процессора. В случае если нет WAIT, реальный такт и такт
процессора равны. Обычно мы указываем, если адаптированная игра будет слиш-
ком медленно работать на 2.5 МГЦ (напр: цветной SPACE RAIDERS сделаный на
прерываниях всего за 3 часа работы - страшный "тормоз").
3. Прерывание NMI пока не используются. Опробован режим "эмуляции Синклера"
по прерываниям NMI, с теневой ПЗУ - этот вариант доработки оставлен "на
смертный час Ориона": первые опыты показали - скорости в 5 МГЦ достаточно,
но реализация "режима эмуляции" целесообразна лишь на новой плате - иначе
будет просто 3-этажная "макетная плата". Идея эмуляции не нова: "ПОИСК-1"
(советский плагиат первого Amstrad PC) эмулирует таким образом на графичес-
ком экране текстовый адаптер MDA. По каждой записи в экран "Синклера" (4000-
4AFF) вызывается NMI, п/программа NMI по 66-му адресу определяет, "куда хо-
тели записать" и записывает аналогичный байт (байты) в экран "Ориона", вклю-
ченный с 0-го адреса (экран 4). Однако из-за отличия клавиатур нужно или
дорабатывать программы (дорабатывать только клавиатуру совсем легко) или
эмулировать по прерыванию NMI, как и экран. Этот текст написан для того, кто
выполняя доработки "Ориона", решит "занять" NMI, чем-то "менее-серьезным",
например для реализации многозадачности (это нецелесообразно, пока у Вас
нет RSX-11, UNIX или хотя-бы MP/M-80). Давайте сохраним это прерывание до
"последнего часа Ориона", как его последний шанс (эмулятор - 9 ИМС).
4. Прерывание INT. Отключаемое прерывание по кадровому "бланку" т.е с частотой
50 Герц. По сбросу выключено поступление импульсов на вход INT и поэтому
даже после команды "EI" прерывание не наступает. Для разрешения прерываний
в порт по адресу FB надо вывести байт с установленной единицей в 6 разряде.
В связи с прерыванием стоит упомянуть о необходимости привязки шины данных
процессора на "+5В" резисторами в 10К. Игры сделанные до марта 1993 (кроме
GALAXY) этого не требовали; но все последующие будут считать, что при обра-
ботке INT в режиме 2, с шины читается FF. Резисторы - до ШФ, к ногам CPU.
5. Звук. Выводится двумя способами: TOGGLE OUT FF, PORT OUT FE/D4. Первый спо-
соб удобен при адаптации программ со звуком "в стиле РК-86" (DI/EI) и позво-
ляет "тратить" меньше тактов процессора на звук, а второй - звук "Синклера",
позволяет при адаптации не адаптировать вывод звука вообще. На платах
Z80-CARD, версии 1993 г. имеются оба "звука". На старых платах 1991 года
проще всего ввести звук по порту FE, используя имеющийся "порт FE" - ИЕ7.
Подключите вместо D7 к 9 ноге ИЕ7 - D4, а соотв.выход ИЕ7 через резистор на
эмиттерный повторитель для звука. Если Вы не ставили ИЕ7, то для организа-
ции звука FE можно использовать тот-же триггер звука FF (используя R/S вх).
Наличия "бордера" не требуется. В некоторых играх (адапт.В.Смирнова) он под-
держивался. В дальнейшем будет считаться, что у Вас "бордера" - нет, но в
тех программах, где звук не переделывается на FF - использование BORDER-а
получится автоматически (т.к в "Синклере" он такой-же).
6. Освобождение ОЗУ в области выше F400. Так как все, самые лучшие программы
как раз работают в старших адресах ОЗУ, где у "Ориона" ПЗУ и ВУ мы ввели
возможность иметь ОЗУ по этим адресам. При этом аппаратные переделки мини-
мальны (1 вентиль от 155ЛИ1 и провода). Для отключения ПЗУ/ВУ используется
разряд D5 порта FB (на старых схемах сигнал XROM). При выводе единицы в
этот разряд по адресам выше F400 оказывается ОЗУ 0-й банки памяти (естест-
венно ПЗУ и ВУ становятся при этом недоступны). Чтобы получить доступ к ВУ
необходимо "вернуть их назад" выполнив команду OUT FB с 0 в 5-м разряде.
К марту 1993 только одна программа "KRAKOUT" требует такой доработки.
7. Диспетчер ОЗУ. Диспетчер ОЗУ по 32К, как указано выше был неудобен в работе
и был отвергнут программистами. Поэтому его пришлось доработать, обеспечив
коммутацию по 16К в области адресов 0-3FFFH. На плате Z80-CARD "образца
1991 года" легко выполнить такую доработку. Как ее сделать становится по-
нятно, если сравнить схемы этих двух плат. Естественно изменилось и назна-
чение разрядов D0-D4 порта FB: сигналы SS0 и SS1 определяют номер 16-ти
килобайтового участка, а BS0-BS1 номер банки ОЗУ, включаемого в область
коммутации с 0000 по 3FFF. Естественно, как и ранее работа диспетчера отклю-
чается записью единицы в 7-й разряд порта FB. Однако так, как большинство
пользователей вообще не имеет диспетчера, в играх он не будет использоваться
Некоторые програмисты и пользователи, поддерживающие отношения со мной (это
около 15 человек) переделали Z80CARD под коммутацию по 16К, и используют дис-
петчер для работы. Возможно, что платы Z80CARD-II будут выпущены в Ижевске.
8. Таймер 580ВИ53. Стоит по адресу F740-F743. Такты каналов 0, 1, 2 - 2 МГЦ,
причем эти 2 мГц удобно брать от контроллера НГМД (т.к такт CPU - меняется).
Однако таймер 580ВИ53 не Z80, его наличие не обязательно, его не подержи-
вают производители программ, поэтому для "звукопроизводства" более перспек-
тивен MSX SOUND CHIP - AY8912. К сожалению пока нет возможности (нет оплаты
программиста) сделать подержку AY8912, а обьявлять стандарты без этого -
обман пользователей (пусть этим занимаются другие). Что касается ВИ53, то
в начале 92 г. А.Балдин сделал муз.редактор (адрес F740), но больше ника-
кие программы его не используют.
9. Обьем ОЗУ. Не менее 128К.
Чистяков Владимир, Санкт-Петербург, март 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 | При включенном диспетчере номер блока памяти дос-
| | тупного в этом сегменте, определяется портом FBh.
0000|=================|