О 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|=================|