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

Материал из Emuverse
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

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

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

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


В.Чистяков о 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|=================|