    ▄▄▄▄▄▄
   ▄█░░░░░░
   █░░   █░░
   █░░▄▄▄█░░
   █░░░░░░░░
   █░░   █░░
   █░░   █░░ рхитектура компьютера Sprinter.
   ▀░░   ▀░░

        Введение.

        Данное описание предполагает наличие определенных знаний читателя,
а именно знание архитектуры компьютера ZX-Spectrum и их разновидностей, в
частности Pentagon-128 и Scorpion-256, а так же знание языка BASIC и
некоторое знакомство с языком ассемблера Z80.
        Здесь я буду называть конфигурацией машины - конкретную реализацию
конкретной схемы в перепрограммируемой логической микросхеме (ППЛМ).
Это означает, что машина имеет множество конфигураций, каждая из которых
имеет свою схему.
        Я так же использую понятие КЭШ-ОЗУ. Это не КЭШ в формальном
смысле, а быстрое ОЗУ, в котором процессор может работать на высокой
частоте без ожидания. КЭШ-ем это ОЗУ называется только по традиции,
подобно КЭШ-у на КР537РУ10 в компьютерах Pentagon-128.


        Краткие данные компьютера Sprinter.

        Пpоцессоp . . . . . . . . . . . Z84C15
        Тактовая частота . . . .  21MHz/3.5MHz
        ОЗУ . . . . . . . . . . . . . . 4096Kb
        КЭШ ОЗУ . . . . . . . . . . . . . 64Kb
        ПЗУ . . . . . . . . . . . . . . .128Kb
        Видео-ОЗУ . . . . . . . . . 256Kb(512)
        Контpоллеp дисков . . . . . Кp1818ВГ93
        Поддеpжка 1.44Mb фоpмата . . 3.5"диска
        Контpоллеp винчестеpа . . . . . IDE/AT
        Контpоллеp клавиатуpы . . .  101key/AT
        Контpоллеp мыши . . . . . . . MS-Mouse
        Два слота . . . . . . . стандаpт ISA-8
        Железная эмуляция AY-3-8910 стерео-OUT
        COVOX . . . . . . . . . 8bit x 4chanel
        Видео-pежимы: . . .  Spectrum standart
        GRAF 320x256x256,640x256x16, TXT 80x32
        Выход видео на TV или CGA монитоp, RGB


        Техническая реализация.

        Ядром машины являются процессор Z84C15 и ППЛМ EPF10K10QC208.
Кроме них на плате присутствуют микросхемa ПЗУ, 72х-пиновый SIMM
на 4Mb, 256Kb видео-ОЗУ, 64Kb КЭШ-ОЗУ, схема контроллера дисковода на
БИС КР1818ВГ93, буферы для подключения джойстика, магнитофона, принтера,
клавиатуры, дисководов, винчестера, мыши, буферные микросхемы шины ISA-8
и еще одна ППЛМ фирмы ALTERA - EPM7032LC44. Эта ППЛМ не меняет своей
конфигурации и предназначена для обеспечения синхронизации и начального
запуска компьютера. На плате так же предусмотрена возможность подключения
CMOS часов на основе микросхемы DALLAS. Кроме периферии и буферов имеются
микросхемы дешифрации, входы которых подключаются к процессору через ППЛМ.
Это позволяет легко менять адресацию устройств без какого либо изменения
разводки печатной платы.


        Возможности архитектуры машины.

        Схема компьютеpа основана на большой пеpепpогpаммиpуемой логической
микpосхеме. Подключение периферийных устройств через ППЛМ позволяет получить
высокую гибкость машины по конфигурациям.
        Пpогpаммиpование ППЛМ осуществляется непосpедственно в момент
включения, а так же пpи пеpезагpузке, что позволяет каpдинально менять
схему в ППЛМ непосpедственно во вpемя pаботы. Это сильно выделяет
архитектуру компьютера из ряда существующих компьютеров и поэтому многие
понятия, присущие обычным машинам, меняют свой смысл. Фактически компьютер
имеет изменяемую архитектуру, в которой возможны изменения во многих частях
схемы. Так, например, нельзя говорить о конкретных адресах портов
подключения периферии, так как они могут быть изменены в одну секунду
путем перепрограммирования ППЛМ и данных в ОЗУ, отвечающих за конфигурацию
портов. Конкретные адреса появляются только в конкретных конфигурациях,
например, такой как конфигурация ZX-Spectrum.
        Перепрограммируемость схемы дает довольно большую свободу
фантазии программиста по конфигурации машины. Задумывая конкретную
работу программист может определить в какой конфигурации ее можно
сделать лучше, а, возможно, и придумать свою конфигурацию, которую
затем можно реализовать в ППЛМ и включить перед запуском этой программы.


                Блочная схема компьютера Sprinter.

  ┌───────┐ ┌──────────────────────────────┐    ┌────────────>Sinc
  │Принтер│ │   2 ISA SLOTS                │    │    ┌───────>R
  ├───────┤ └───┬─┬─┬─┬─┬───────┬─┬─┬─┬─┬──┘    │    │ ┌─────>G
  │ Мышь  │ ┌───┴─┴─┴─┴─┴───────┴─┴─┴─┴─┴──┐    │    │ │ ┌───>B
  └─┬─┬─┬─┘ │   Буферы и дешифраторы       │    │  ┌─┴─┴─┴─┐
    │ │ │   └───┬──────────┬─┬──┬─┬────┬─┬─┘    │  │  ЦАП  │
    │ │ │       │INT       │ │  │ │    │ │      │  │ буфер │
 ┌──┴─┴─┴┬─┐    │          │ │  │ │   ┌┴─┴──────┴─┐└──┬─┬──┘   ┌────────┐
 │ Внутр │ ├────│──────────┘ └──│ │───┤ EPF10K10  ├───┘ └──────┤ видео  │
 │ порты │ ├────│──────────DATA─│ │───┤           ├──V_DATA────┤        │
 ├───────┘ ├────│───┐ ┌─────────│ │───┤           ├────────────┤  ОЗУ   │
 │         ├<───┘   │ │         │ │   │           │            │        │
 │         ├────────────────────┘ └───┤           ├────────────┤        │
 │ Z84C15  ├───────────────ADRESS─────┤           ├─V_ADRESS───┤        │
 │         ├────┐ ┌───────────────────┤           ├────────────┤        │
 │         │    │ │ │ │               │           │            │        │
 │         ├<───│ │─│ │──────────────>┤           ├──WE,CSi───>┤        │
 │         ├<───│ │─│ │────DIR───────>┤           │            └────────┘
 │         ├<───│ │─│ │──────────────>┤           ├───────> Audio OUTs
 │         │    │ │ │ │               │           │            ┌────────┐
 │         │  ┌─┴─┴─┴─┴───────┐       │           ├────────────┤ MAIN   │
 │         │  │ ПЗУ и КЭШ-ОЗУ ├<─ADR'─┤           ├──DATA──────┤  RAM   │
 └─┬─┬─┬──┬┘  │            CS ├<─CS───┤           ├────────────┤        │
   │ │ │  │   └───────────────┘       │           │            │ SIMM   │
   │ D │  │   ┌──────────────┐        │           ├────────────┤        │
   │ A │  │   │ EPM7032      ├───────>┤           ├──ADRESS────┤        │
   │ T │  └──>┤ Sinchro      │        │           ├────────────┤        │
   │ A │      │ HDD_DIR      ├<───────┤           │            │        │
   │ │ │      │ ФАПЧ         ├<───────┤           ├─RAS,CAS,WE─┤        │
   │ │ │      └─┬─┬─┬─┬─┬────┘        │           │            └────────┘
   │ │ │        │ │ │ │ │             │           │
 ┌─┴─┴─┴────────┴─┴─┴─┴─┴───────┐     │           │
 │ Периферийные устройства      ├<────┤           │
 │ FDD,HDD,KEMPSTON             ├<DIR─┤           │
 │                              ├<────┤           │
 └──────────────────────────────┘     │           │
                ┌────────────────────>┤           │
   ┌────────┐   │ ┌────────┐          │           │
   │ TAPE   ├<──┘ │Keyboard├─────────>┤           │
   │ in/out │     ├┬┬┬┬┬┬┬┬┤          │           │
   └────────┘     └┴┴┴┴┴┴┴┴┘          └───────────┘

                                Рисунок 1.



        Для простоты некоторые буферы и дешифраторы на схеме не указаны.
Количество Проводов в шинах так же условны. Часть сигналов управления
устройств с ППЛМ смультиплицированы с адресами SIMM-а.


        Дальнейшее описание архитектуры является описанием конкретных
конфигураций и частей конфигураций. Но перед этим следует сказать несколько
слов о переключении самих конфигураций.

        Загрузка конфигураций.

        В момент включения компьютера, а так же после нажатия на RESET вся
информация, находившаяся в ППЛМ отвечающая за конкретную конфигурацию,
стирается. ППЛМ переходит в режим ожидания загрузки блока данных схемы.
        В этот момент процессор полностью отключен от какой либо периферии.
В его адресное пространство памяти оказывается включена одна страница ПЗУ и
одна страница ОЗУ КЭШ-памяти. Любая запись в адресное пространство памяти
процессора в этот момент приводит к записи данных в ППЛМ и программа в
подключенной странице ПЗУ имеет только одну единственную цель - загрузить
в ППЛМ данные конфигурации. В этой же странице ПЗУ находятся данные
начальной конфигурации. (В данный момент это конфигурация Sprinter-1.)
Программа загрузки конфигурации проверяет флаг в КЭШ-памяти и, если он
установлен, загружает в ППЛМ данные из ОЗУ, если сброшен, то данные из
ПЗУ. На этом основано переконфигурирование схемы компьютера.
        Для изменения схемы надо загрузить в последнюю страницу КЭШ-памяти
блок данных конфигурации со смещения #100 и выставить флаг, которым является
текстовая строка "FLEX_10K_LOADING", записанная по смещению #80 в этой же
странице КЭШ-а. После этого надо произвести полный сброс, который
осуществляется программно записью в специальную страницу памяти RESET_PAGE.
Программа в ПЗУ, запускаемая по сбросу находит флаг FLEX_10K_LOADING и
начинает загрузку данных в ППЛМ. При этом она одновременно затирает флаг,
что предотвращает повторную загрузку новой конфигурации при нажатии на
кнопку RESET и позволяет вернуться после "ручного" сброса в начальную
конфигурацию. Затирание флага так же избавляет от мучений в случае
подключения неправильной конфигурации во время экспериментов с программами.
Нажатие на RESET всегда вернет схему в начальную конфигурацию.

        Примечание:
        Внутренняя информация блока данных ППЛМ является закрытой
информацией фирмы ALTERA. Кроме самих микросхем ППЛМ ALTERA поставляет
и программное обеспечение для разводки схем внутри ППЛМ. К сожалению, эта
программа не может работать на компьютере типа ZX-Spectrum и в ближайшем
обозримом будущем не предвидится ее версия для Sprinter-а. Поэтому
разработка новых конфигураций может производится только при наличии
достаточно мощной машины (все делалось на Pentium-166) и программы разводки
схем в ППЛМ, цена на которую составляет сотни долларов США.
        В связи с этим, в данный момент Sprinter имеет несколько конкретных
конфигураций, две из которых записаны в ПЗУ, а остальные могут быть
подгружены с дискеты или винчестера. Постоянно ведется совершенствование
конкретных конфигураций и разработка новых.

        Конфигурация Sprinter-1.

        Включает в себя конфигурацию Spectrum-128/256, распределение памяти
до 4Mb, расширенный экран с режимами Spectrum, Text-80x32, Graf-320x256x256,
контроллер дисковода, контроллер IDE винчестера, контроллер клавиатуры AT,
подключенной как ZX-Keyboard, 8-bit COVOX.
        Эта конфигурация максимально приближена к конфогурации ZX-Spectrum
и позволяет работать на обычных спектрумовских программах и постепенно
менять их под расширенные режимы экрана и памяти, а так же для работы с
новыми устройствами.

        Конфигурация Sprinter-2.

        Включает в себя конфигурацию Spectrum-128/256, распределение памяти
до 4Mb, расширенный экран с режимами Spectrum, Text-80x32, Graf-320x256x256,
контроллер дисковода, контроллер IDE винчестера, контроллер клавиатуры AT,
подключенной как ZX-Keyboard, Accelerator.
        Конфигурация, как и Sprinter-1 приближена к спектрумовской, но
имеет более жесткие требования к программам по совместимости. Позволяет
использовать акселератор операций с основным и видео-ОЗУ. Акселератор
ускоряет операции пересылки блоков данных и заполнения ОЗУ одним байтом
до физического предела скорости основного ОЗУ.
        В последней версии конфигурация Sprinter-2 не имеет Spectrum-овской
клавиатуры. Вместо нее из порта 0FEh считывается сканкод пришедший с
AT-клавиатуры.

        Конфигурация ZX-Spectrum-256/AY.

        Эта конфигурация максимально приближена к ZX-Spectrum-128/256
и включает в себя схему музыкального сопроцессора AY-3-8910. В этой
конфигурации отсутствуют расширенные режимы экрана.
        Вторая версия схемы AY включает в себя три генератора голосов,
генератор шума и регуляторы амплитуды. Генератор огибающей отсутствует.
Так же отсутствует возможность чтения из портов данных сопроцессора.
        В третьей версии AY предполагается данные недостатки исключить.

        Конфигурация Sprinter-3.

        Конфигурация отвязана от конфигурации ZX-Spectrum. Полностью
отключается ПЗУ и все адресное пространство разбито на четыре окна по 16k,
в каждое из которых подключается любая из 256-ти страниц ОЗУ. Отсутствует
спектрумовский экран, графический экран такой же, как в конфигурациях
Sprinter-1 и Sprinter-2. Имеет дополнительные функции акселератора.
Позволяет производить операции AND, OR и XOR с блоками данных. Имеет 8-bit
COVOX.
        В дальнейшем предполагается подключение в этой конфигурации
спринтеровской звуковой карты.

        Конфигурация Game-1.

        Похожа на конфигурацию Sprinter-3. Акселератор не имеет логических
функций, а для вывода звука имеет COVOX-Blaster - COVOX с буферным ОЗУ,
позволяющим выводить звук поблочно и освобождать процессорное время для
другой работы. Конфигурация ориентирована на использование в играх для
Sprinter-а.


        Схема распределения памяти.

        Схемы распределения памяти в конфигурациях Sprinter-1 и Sprinter-2
одинаковы и достаточно прозрачны. Фактически она представляет собой схему
распределения памяти компьютера Scorpion, с наложенной на нее
дополнительной схемой, которая позволяет произвольно устанавливать все
страницы памяти, как ПЗУ, так и ОЗУ.
        Каждая страница ПЗУ или ОЗУ имеет свой порт, в котором указывается
действительный номер страницы из 256-ти страниц всех 4Mb. Страницы,
проецируемые в различные окна адресного пространства процессора имеют свои
собственные порты. Т.е. Страница, включаемая в адреса #4000..#7FFF, и
страница номер 5 обычного Spectrum-овского распределения памяти, включаемая
в адреса #C000..#FFFF имеют раздельные порты.
        Всего таких портов страниц памяти - 32.
        16 портов отвечают за номера страниц ОЗУ, подключаемые к адресам
#C000..#FFFF. Еще три порта отвечают за подключение страниц ОЗУ к адресам
#0000..#3FFF, #4000..#7FFF и #8000..#BFFF. Восемь портов используются для
подключения различных страниц ПЗУ. Один порт - для подключения страницы
КЭШ-а вместо ПЗУ. И один порт - это порт системного ПЗУ, подключаемого на
место ПЗУ сразу после сброса машины по клавишам Ctrl+Alt+Del.
        Оставшиеся 3 порта страниц памяти остаются на данный момент в резерве.
Схема распределения памяти позволяет подключить в адресное пространство
процессора не только ОЗУ или ПЗУ, но и порты и память ISA карт, вставляемых
в слот.
        При подключении в адреса #C000..#FFFF скорпионовских расширенных
страниц ОЗУ, на их место можно переадресовать слоты. Для этого надо просто
записать в порт одной из этих страниц значение, соответствующее ISA-слоту,
к которому необходимо произвести обращение. Это значение так же указывает
к чему ведется обращение, к портам или памяти.


                Схема распределения памяти Sprinter-а.

  Адресное пространство       Страничные порты             ПЗУ компьютера
  процессора                 подключаемых страниц          страницы по 16k
 ┌──────────────┐  ┌───────┐   ┌──────────────┐            ┌──────────────┐
 │ #0000..#3FFF ├─>┤ порты ├──>┤ ROM_BASIC    ├──>┬──┬──┬─>┤ EXPANSION    │
 │              │  │ #7FFD,│   ├──────────────┤   │  │  │  ├──────────────┤
 │              │  │ #1FFD ├─┐ │ ROM_TR-DOS   ├──>┤  │  ├─>┤ TR-DOS       │
 ├──────────────┤  └───────┘ │ ├──────────────┤   │  │  │  ├──────────────┤
 │ #4000..#7FFF ├──────────┐ │ │              │   │  │  ├─>┤ BASIC128     │
 │              │          │ │ ├─ ─ ─ ─ ─ ─ ─ ┤   │  │  │  ├──────────────┤
 │              │          │ │ │ ROM_SYSTEM   ├──>┘  │  ├─>┤ BASIC48      │
 ├──────────────┤          │ │ ├──────────────┤      │  │  ├──────────────┤
 │ #8000..#BFFF ├────┐     │ └>┤ RAM_0000     ├───>┐ │  ├─>┤ SYSTEM ROM   │
 │              │    │     │   └──────────────┘    │ │  │  ├──────────────┤
 │              │    │     │   ┌──────────────┐    │ │  ├─>┤ SYSTEM ROM2  │
 ├──────────────┤    │     └──>┤ RAM_4000     ├───>┤ │  │  ├──────────────┤
 │ #C000..#FFFF ├┐   │         └──────────────┘    │ │  ├─>┤ CONFIG 2     │
 │              ││   │                             │ │  │  ├──────────────┤
 │              ││   │         ┌──────────────┐    │ │  └─>┤ CONFIG 1     │
 └──────────────┘│   └────────>┤ RAM_8000     ├───>┤ │     └──────────────┘
                 │             └──────────────┘    │ │
                 │                                 │ │      ОЗУ компьютера
                 │ ┌───────┐   ┌──────────────┐    │ │     страницы по 16k
                 │ │ Порты ├──>┤ RAM_0        ├───>┤ │     ┌──────────────┐
                 │ │ #7FFD,│   ├──────────────┤    ├───>┬─>┤ RAM_00       │
                 └>┤ #1FFD ├──>┤              ├───>┤ │  │  ├──────────────┤
                   │       │   ├─ ─ ─ ─ ─ ─ ─ │    │ │  ├─>┤ RAM_01       │
                   │       ├──>┤ RAM_7        ├───>┤ └─>┤  ├──────────────┤
                   │       │   ├──────────────┤    │    │  │              │
                   │       ├──>┤ RAM_8        ├─>┬─│───>┤  ├─ ─ ─ ─ ─ ─ ─ ┤
                   │       │   ├─ ─ ─ ─ ─ ─ ─ ┤  │ │    └──┤ RAM_7F       │
                   │       ├──>┤              ├─>┤ │       ├──────────────┤
                   │       │   ├──────────────┤  │ └───>┬─>┤ RAM_80       │
                   │       ├──>┤ RAM_F        ├─>┴─>┐   │  ├─ ─ ─ ─ ─ ─ ─ ┤
                   └───────┘   └──────────────┘     │   │  │              │
                              Внешние устройства    │   │  ├──────────────┤
      ───────────────────┐     ┌──────────────┐     │   ├─>┤ RAM_FE       │
             Порты       ├────>┤ ISA_1        ├<────┤   │  ├──────────────┤
             компьютера  │     ├──────────────┤     │   └─>┤ RAM_FF       │
                         ├────>┤ ISA_2        ├<────┤      └──────────────┘
                         │     ├──────────────┤     │
                         ├────>┤ HDD          ├<────┤
                         │     ├──────────────┤     │
                         ├────>┤ OVER DEVICES ├<────┘
      ───────────────────┘     └──────────────┘

                                Рисунок 2.



        В других конфигурациях схема распределения памяти упрощается для
освобождения ресурсов ППЛМ. Могут отсутствовать порты #1FFD и #7FFD, а так
же упрощается схема работы с устройствами, отображаемыми на память.


        Схема распределения портов.

        Sprinter имеет две обособленные группы портов. Первая группа, это
внутренние порты процессора Z84C15, вторая - внешние порты. Адресация
портов первой группы не может быть изменена, так как эти порты на одном
кристалле с процессором. Вторая группа погключается через ППЛМ и их адреса
могут изменяться как угодно, с единственным условием, непересечения с
адресами первой группы.
        О том какие порты имеются на кристалле Z84C15 можно прочитать в
документации по этому процессору и здесь я упомяну некоторые из них. Один
из последовательных портов используется для ввода данных с активной мыши.
Один из параллельных используется для вывода данных, на второй параллельный
порт заведены сигналы прерываний и запросов прямого доступа со слотов ISA.
Параллельный порт процессора Z84C15 устроен таким образом, что на нем
возможна организация прерываний по сигналам приходящим через параллельный
порт. Фактически второй параллельный порт используется как контроллер
прерываний.
        Схема распределения портов второй группы имеет свою особенность.
Главной идеей было получение возможности бысро изменять конфигурацию портов
без перегрузки ППЛМ. Это достигнуто путем применения карты распределения
портов, располагающейся на специальной странице ОЗУ.
        При появлении цикла обращения к порту сначала происходит обращение
к ОЗУ карты портов. В карте портов записано какой именно порт подключен к
данному адресу. Далее происходит внутренняя дешифрация по байту из карты
портов и обращение к выбранному порту. В режиме нетурбо это происходит без
каких либо задержек, а в режиме турбо процессору выставляется сигнал WAIT в
зависимости от необходимой длины цикла обращения к порту.
        Для подключения к какому либо адресу или отключения от него какого
либо порта достаточно открыть карту портов и вписать в нужное место один
байт.
        В странице карты портов содержится четыре карты, которые могут
переключаться через системный порт. Таким образом можно осуществить быстрое
переключение конфигурации портов, что может быть полезно при работе
Spectrum-овских программ совместно со Sprinter-овским биосом.


        Конкретные адреса портов, используемые в Sprinter-е.

        Здесь я приведу адресацию портов для конфигураций Sprinter-1 и
Sprinter-2. Сразу отмечу, что эти адреса легко могут быть изменены простой
программой, в случае появления такой необходимости.


        Стандартные порты.

        #FE - RD_KBD - порт клавиатуры
        #FE - WR_BRD - порт бордюра
        #7FFD - порт расширения ZX-Spectrum 128k
        #1FFD - порт расширения Scorpion ZS-256
        #1F,#0F - RD_KEMPS - порт джойстика. В конфигурации Sprinter-1 порт
                #1F аппаратно переадресуется на порт #0F
        #BFFD,#FFFD - AY-PORTS - порты AY-сопроцессора (ZX-Spectrum-256/AY)

        Не совсем стандартные порты.

        #FB,#4F - порт COVOX-а.


        Дополнительные 8-битные порты Sprinter-а.

        #82 - PAGE0 - страница ОЗУ, подключаемая вместо ПЗУ через порт #1FFD
        #A2 - PAGE1 - страница ОЗУ, подключенная по адресу #4000
        #C2 - PAGE2 - страница ОЗУ, подключенная по адресу #8000
        #E2 - PAGE2 - страница ОЗУ, подключенная по адресу #C000
        Здесь надо отметить особо, через порт #E2 можно изменить любую из
        16-ти страниц скорпионовского распределения памяти.
        #89 - PORT_Y - вертикальная координата точки на графическом экране
        или страница VIDEO-RAM для спектрумовского режима
        #C9 - RGMOD - порт режима экрана. Переключает страницы режима экрана.
        #3C,#7C - SYS_PORT - системный порт трогать не рекомендуется

        #10..#1F,#EE,#EF,#F0,#F1,#F4  - внутренние порты Z84C15

        Порты страниц ОЗУ открыты как на запись, так и на чтение. Это
позволяет легко выполнять программы, использующие переключение страниц, а
затем возвращать эти страницы назад. При работе BIOS-а все страницы
сохраняются.


        Дополнительные 16-тибитные порты Sprinter-а.

        #xx50..#xx55 - порты HDD - использовать внешними программами не
        рекомендуется. Функции работы с HDD записаны в ПЗУ.


        Скрытые порты Sprinter-а.

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

        Порт ПЗУ BASIC48
        Порт ПЗУ BASIC128
        Порт ПЗУ TR-DOS
        Порт ПЗУ EXPANSION
        Порт ПЗУ SYSTEM

        Через эти порты можно установить новые прошивки ПЗУ. Для этого их
достаточно записать в ОЗУ с номерами страниц меньше #80 и записать в
соответствующий порт номер этой страницы. При таком подключении страницы
Эти страницы будут защищены от записи.
        Частично скрытыми, так же являются и порты #7FFD,#1FFD в обычном
состоянии они доступны только на запись, но значения, записываемые в эти
порты можно прочитать, открыв соответствующие порты на чтение.
        В других конфигурациях может отсутствовать часть портов или
присутствовать новые порты.


        Организация видеопамяти и видеорежимов.

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

        Устройство экрана.

        Весь экран разбит на квадраты, размером в стандартное
Спектрумовское знакоместо. Для каждого квадрата устанавливается свой
собственный режим вывода, а так же адрес видео-ОЗУ, откуда производится
вывод в этот квадрат.
        В каждом знакоместе может быть задан свой собственный режим вывода.
В данный момент можно устанавливать такие режимы:
        ZX-40 - обычный спектрумовский режим с одним битпланом и
одним атрибутом на знакоместо.
        ZX-80 - Режим, похожий на спектрумовский по строению
символов, но в каждом знакоместе оказывается два символа, сжатые по
горизонтали.
        G256-8 - Графический режим. Квадрат представляет собой массив 8x8
точек. В каждой точке задается один из 256-ти цветов, выбираемых из палитры
16 миллионов цветов. Квадраты могут иметь разные палитры. Таких палитр для
режима G256-8 - четыре.
        G16-16 - Графический режим. Квадрат представляет собой массив
16x8 точек. Каждая точка имеет один из 16 цветов, выбираемых из палитры 16
миллионов цветов. Так же, как и G256-8 в квадрате может быть установлена
одна из 4-х палитр. Палитры графических режимов пересекаются друг с другом.
Палитра 16-тицветного режима это первые 16 цветов из палитры 256-тицветного.
        BORDER - В квадрат выводится цвет бордера.
        BLANK - Квадрат гасится - становится черным.

        Объем данных режима квадрата составляет 2 байта,
поэтому изменение режима всего экрана сводится к перезаписи 2.5 килобайт
данных в видео-ОЗУ.
        Подобная структура экрана позволяет легко производить скроллинги
как всего, так и частей экрана по знакоместам.

        Режим экрана устанавливается при включении, а так же с помощью
функций биоса. Функции биоса позволяют открывать на экране графические и
текстовые окна в нужных местах и нужного размера.

        В биосе имеются функции открытия графического экрана на весь экран
320x256 точек. После открытия этого режима экран представляет собой.
набор из 256-ти линий, длиной по 320 байт. Соседние точки в линии - это
соседние байты. Переключение линий производится через PORT_Y, в котором
устанавливается номер линии, выводимой на экран. Номера линий считаются
сверху экрана, начиная с нулевой.
        Для вывода в графический экран так же требуется открыть
соответствующую страницу основного ОЗУ. В этой странице будет содержаться
копия видеоизображения.
        Видео-ОЗУ является теневым ОЗУ, поэтому информация, находящаяся в
основном ОЗУ, под которым находится видео-ОЗУ не обязательно будет
совпадать с информацией, находящейся в этом видео-ОЗУ. Запись видео-данных
может производиться и без перезаписи данных в оснвном ОЗУ, что оказывается
полезным при работе, например, со спрайтами. Для работы со спрайтами так же
предусмотрен режим записи в видео-ОЗУ с прозрачным цветом. В этом режиме
информация, передаваемая в видео-ОЗУ проверяется на наличие байта #FF. Если
этот байт обнаруживается, то цикл записи пропускается и на экране в этом
месте остается те данные, какие были ранее. Таким образом на экране можно
быстро прорисовывать спрайты, представляющие из себя прямоугольные картинки
с "прозрачными" цветами.

        Пример программы вывода прямоугольной картинки на экран:

PAGE3   EQU #E2
RGADR   EQU #89

        LD A,#50        ; страница графического видеоэкрана
        OUT (PAGE3),A   ; установить в PAGE3
        LD HL,Pucture   ; адрес картинки (Прямые Данные)
        LD DE,#C040+HorPlace  ; положение картинки на экране по горизонтали
        LD A,VerPlace   ; положение картинки на экране по вертикали
        OUT (RGADR),A
        LD B,VerSize    ; высота картинки
LOOP:   PUSH DE         ; запомнить положение на линии
        PUSH BC         ; запомнить счетчик высоты
        LD BC,HorSize   ; длина картинки
        LDIR            ; копировать линию
        POP BC
        POP DE
        INC A           ; следующая координата по Y
        OUT (RGADR),A
        DJNZ LOOP       ; повторять нужное количество раз

        Управление режимом вывода на экран (включение вывода с прозрачными
цветами, отключение копирования в основное ОЗУ) осуществляется через
младшие биты порта страницы графического экрана.


        Акселератор операций с ОЗУ.

        Акселератор операций с ОЗУ предназначен для ускорения операций
по пересылке данных или по заполнению ОЗУ одним байтом. Акселератор
присутствует в чисто Sprinter-овских конфигурациях и поэтому никак не
мешает работе обычных Spectrum-овских программ.
        Основой акселератора является быстрое внутреннее ОЗУ в ППЛМ.
Операции по пересылке данных производятся путем записи блока данных в это
внутреннее ОЗУ, а затем копировании его в нужное место памяти из этого ОЗУ.
После одной записи копирование может производиться несколько раз и таким
образом можно производить заполнение экрана текстурами.
        Для заполнения экрана одним цветом используется другой режим
акселератора. В нем вместо копируемого блока данных из внутреннего ОЗУ
производится запись данных с шины процессора, которые в этот момент не
изменяются.
        Блок данных, записываемый в ОЗУ акселератора может иметь различную
длинну из диапазона 1..256 байт.
        Управление акселератором производится непосредственно из программы.
Для этого изпользуются команды процессора, которые фактически являются
операциями типа NOP.
        Это команды LD A,A; LD B,B; LD C,C; LD D,D; LD E,E; LD H,H, LD L,L
        Назначение команд следующее:
        LD B,B - выключить акселетарор.
        LD D,D - включить акселератор в режим приема байта размера блока
                далее следует команда типа LD A,dat, где dat и будет новым
                размером блока. Если размер блока был установлен ранее,
                его можно не устанавливать.
        LD C,C - Операция Fill - заполнение одним байтом. Последующая
                команда типа LD (HL),A приведет к заполнению указанного
                ранее количества байт значением A
        LD E,E - Операция Fill для графического экрана - заполнение
                вертикальных линий.
        LD H,H - rezerved
        LD L,L - копирование блока. Последующая команда типа LD A,(HL)
                приведет к заполнению ОЗУ акселератора данными из адреса (HL),
                а команда типа LD (DE),A приведет к перезаписи данных из ОЗУ
                акселератора в основное или видео-ОЗУ.
        LD A,A - копирование блока для графического экрана подобна команде
                LD L,L, но работает с вертикальными линиями экрана.

        Пример использования акселератора:

        ; Считаем, что экранная страница уже открыта по адресу #C000
        LD HL,#C040     ; адрес начала линии первого экрана
        LD DE,#C180     ; адрес начала линии второго экрана
        LD BC,#140      ; длина экрана по горизонтали
        DI              ; запретить прерывания для работы с акселератором
        LD D,D          ; включить акселератор на установку размера блока
        LD A,0          ; установить размер блока - 256 байт
        LD A,A          ; установить акселератор на копирование
                        ; вертикальных линий.
        LDIR            ; копировать !
        LD B,B          ; выключить акселератор
        EI              ; включить прерывания

        Этот отрезок программы произведет копирование всего экрана с одного
экрана на другой. Время его исполения составляет примерно 1.2 инта.

        Дополнительные функции акселератора появляющиеся в конфигурации
Sprinter-3 работают подобным же образом. Для выполнения логических функций
используются команды XOR (HL); OR (HL); AND (HL).

        Пример ксорки блока в 256 байт.

        LD HL,ADRES_1
        LD DE,XOR_DAT
        DI
        LD D,D
        LD A,0     ; число байт, которые надо проксорить
        LD L,L
        LD A,(DE)  ; Взять блок в ОЗУ акселератора
        XOR (HL)   ; произвести операцию XOR с данными акселератора
        LD (HL),A  ; запомнить в ОЗУ результат операции
        LD B,B
        EI

        Скорость работы акселератора ограничивается только физической
скоростью работы основного ОЗУ. Определить время работы команды с
акселератором можно по такой примерной формуле:

        Время работы = время работы команды без акселератора + время
                       работы акселератора
        Время работы акселератора = число пересылаемых байт /7000000 (секунд)

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


        Заключение.

        Работа над Sprinter-ом продолжается. Совершенствуется железо и
биос. Пишется софт, поддерживающий расширенные режимы работы компьютера.

        По всем коммерческим вопросам связанным с приобретением компьютера
можно обращаться в фирму "Петерс":

              Adress: Санкт-Петербург, ул. Восстания, д. 35, оф. 31.
               Phone: (812)-327-35-31
              E-mail: peters@atlant.ru

        По техническим вопросам обращаться ко мне:

                Fido: Ivan Mak (2:5030/529.24)
              E-mail: ivan_mak@yahoo.com (временно закрыт)

