ZX-Ревю 1996 №7-8 1995 г.

Форум - некоторые стандарты для Спектрума.


Рожев Андрей, г.Тюмень, 1996.

   Автор письма предлагает некоторые стандарты для Спектрума.

1. Стандарт для KEMPSTON MOUSE.
   Мышь программно опрашивается по 3-м, известным портам:
            64223 (#FADF) - кнопки;
            64479 (#FBDF) - координата X;
            65503 (#FFDF) - координата Y;

   За эту мышь говорит то, что многие программисты начинают работать под
этот интерфейс, а также существует ряд программ, ее поддерживающих  (Art
Studio, ZX-Format и т.д.). К тому же, именно эта мышь все прочнее начинает 
обосновываться среди пользователей Spectrum-совместимых компьютеров.

2. Расширенный KEMPSTON JOYSTIK.
   Предлагаю закрепить за старшими разрядами порта #1F следующие
функции:
      Биты:   D7 - правая функциональная кнопка
              D6 - левая функциональная кнопка
              D5 - стрельба 2
              D4 - стрельба
              D3 - вниз
              D2 - вверх
              D1 - вправо
              D0 - влево
      Я предлагаю два расширения KEMPSTON JOYSTIK'а:

KEMPSTON 2 - не используется 7 бит.
      Именно этот джойстик удобнее подключать к компьютеру, т.к. можно
использовать очень удобный, стандартный семиштырьковый разъем.

KEMPSTON 3 - использует все биты

      Теперь хочу поговорить о раскладке русских букв на клавиатуре. Считаю
предложение автора статьи об использовании разрядов D5 и D7 для добавления 
новых клавиш не очень удачным, т.к. основная масса владельцев этого компьютера
обладает именно обычной клавиатурой, и чтобы иметь расширенную, придется ее
покупать всем, что нереально, и не каждому доступно. Лучше использовать
контроллер клавиатуры от IBM, разработанный фирмой Scorpion, который можно
подключить к любому Spectrum-совместимому компьютеру.

      Теперь о расширении памяти.
      Я предлагаю все расширения объявить НЕСТАНДАРТНЫМИ и заняться
разработкой нового СТАНДАРТНОГО расширения памяти на основе порта #EF от
INTERFACE-I. После разработки этого расширения предлагаю распространять его на
плате вместе с ВИДЕОПРОЦЕССОРОМ.
      В качестве затравки я предлагаю следующую раскладку битов порта #EF:

      D7 - включен при впечатывании страницы в область ПЗУ
      D6 - включен при впечатывании страницы в область #8000 - #BFFF
      D5 -ї
      D4  і
      D3  і
      D2  Г- номер страницы
      D1  і
      D0 -Щ

      При D7=D6=0 страница впечатывается в обычную область #C000 - #FFFF.
      Таким образом можно расширить память до 1 Мб. Также желательно иметь
возможность постепенного наращивания ОЗУ.
      ИФК: здесь возникает проблема с адаптацией программ. Если отбросить
старый порт #7FFD и применить новый, то множество программ придется
адаптировать под новый стандарт. Можно использовать методы, примененные в
Scorpion'е, т.к. он становится наиболее распространенным.

**************************************************************************
     (C) Шмелев Сергей, 1996

                      Некоторые вопросы стандартизации.

     Читая статьи по распределению адресного пространства, я пришел к мнению,
что даже те, кто пишет об этом, не совсем понимают что такое неполная
дешифрация адреса. За счет таких решений, как частичная дешифрация, мы имеем
такой замечательный компьютер, так как это дает возможность использовать
меньшее количество корпусов микросхем, а это значит уменьшение стоимости,
размеров и потребления энергии. Можно сказать: "Что позволено схемщику - не
позволено программисту". Но это не значит, что схемщики могут делать все, что
хотят. Неполная дешифрация накладывает некоторые ограничения (не очень
значительные) как на одних, так и на других. Неполный адрес или адрес, у
которого в ноль сброшено несколько адресных разрядов, просто не имеет права на
существование в архитектуре этого компьютера. А схемщиков это обязывает
создавать интерфейсы, однозначно выбираемые стандартным адресом. Например, для 
выбора порта переключения страниц, т.е. порта #7FFD, что в двоичной системе 
%0111 1111 1111 1101, обязательным условием является определение наличия ноля в 
разрядах A15 и A1 адресной шины.
     Дополнительное тестирование единиц в остальных разрядах, приводящее к более
полной дешифрации, не обязательно, но допустимо. Поэтому более полная
дешифрация имеет право на существование. А вот программа с безграмотным (т.е.
не полным) обращением к порту не имеет такого права. Но уже есть исключения.
     Мы имеем порт Kempston-джойстика #DF (%1101 1111), но он выбирается, не
соответствующим архитектуре, адресом #1F (%0001 1111), т.к. и в том и в другом
случае разряд A5 сброшен в ноль. Такой адрес, как #1F просто не заложен в
архитектуре компьютера, но появился и стал стандартом потому, что при
разработке платы компьютера наши умельцы делали его, как правило, для своих
нужд. И не всегда имея полную информацию, решили установить микросхему ВВ55,
получив сразу и порт кемпстона и возможность подключить принтер или
программатор, но все нестандартно, и тем самым, создав нам головную боль и этот
"нестандартный" стандарт. 
     Так получилось потому, что микросхема 580ВВ55 имеет соадресную дешифрацию, 
т.е. кроме основного имеет еще три дополнительных адреса. Но, что сделано, то 
сделано. Однако, есть предложение переделать подключение микросхемы ВВ55. Если 
на вход CS подать IORQ при тесте A5, а на A0 и A1 - A7 и A6 соответственно, то 
адресация у портов станет другая (схемы 1 и 2):

                      (см. СХЕМЫ)




     #1F - порт A
     #9F - порт B
     #5F - порт C
     #DF - регистр управления только для записи

     Т.к. при чтении регистра управления шина данных остается в свободном
состоянии, это дает возможность читать этот порт другим схемным решением. Но
нужна более полная дешифрация, т.е. дополнительное тестирование единиц в
разрядах A6 и A7. Переделка несложная, а дает большие возможности. Во первых,
выбор кемпстона в любом из двух стандартов одновременно (по схеме 2), либо
возможность использовать порт #DF под интерфейс "мышки". Во-вторых, снимается 
конфликт между микросхемой ВВ55 и интерфейсом ZX LPRINT, что позволяет иметь и 
тот и другой интерфейс подключенными одновременно. Только придется в программах, 
использующих интерфейс ВВ55, исправить адреса #3F на #9F и #7F на #DF. А 
главное то, что разряды A6 и A7 остаются свободными и могут использоваться как 
соадресные и в других интерфейсах.
     А теперь вашему вниманию хотел бы предложить подборку адресов всех портов
ввода-вывода известных на данный момент:

----------------------------------------------------------------------------¬
¦  ПОРТ, ВЫБИРАЕМЫЙ 8-РАЗРЯДНЫМ АДРЕСОМ, т.е. командой IN или OUT (XX),A    ¦
+-------T-----------------T-------------------------------------------------+
¦   #FF ¦ не тестируется  ¦ состояние шины данных и подхват атрибутов       ¦
¦       ¦                 ¦ для синхронизации                               ¦
+-------+-----------------+-------------------------------------------------+
¦ #XXFE ¦ тестируется A0  ¦ при чтении: клавиатура и вход сигнала с магни-  ¦
¦       ¦ становится 16-  ¦             тофона                              ¦
¦       ¦ разрядным при   ¦ при записи: цвет бордюра, выход на динамик и    ¦
¦       ¦ опросе клавиа-  ¦             магнитофон                          ¦
¦       ¦ туры            ¦                                                 ¦
+-------+-----------------+-------------------------------------------------+
¦   #FB ¦ тест A2         ¦ ZX LPRINT                                       ¦
+-------+-----------------+ конфликт с ВВ55 по A7                           ¦
¦   #7B ¦ тест A2 и A7    ¦                                                 ¦
+-------+-----------------+-------------------------------------------------+
¦   #EF ¦ тест A4         ¦ МОДЕМ (в Москве стал стандартом)                ¦
+-------+-----------------+-------------------------------------------------+
¦   #DF ¦ тест A5         ¦ КЕМПСТОН                                        ¦
+-------+-----------------+-------------------------------------------------+
¦   #7F ¦ тест A7 +       ¦ Регистр управления                              ¦
¦   #5F ¦ комбинация      ¦ Порт C   BUSY и STROBE                          ¦
¦   #3F ¦ из A5 и A6      ¦ Порт B   Данные на принтер                      ¦
¦   #1F ¦                 ¦ Порт A   Кемпстон                               ¦
+-------+-----------------+-------------------------------------------------+
¦                    ЕСЛИ ПЕРЕДЕЛКА ПРИНИМАЕТСЯ                             ¦
+-------T-----------------T-------------------------------------------------+
¦   #1F ¦ тест A5 +       ¦ Порт A   Кемпстон                               ¦
¦   #5F ¦ комбинация      ¦ Порт B   Данные на принтер                      ¦
¦   #9F ¦ из A5 и A6      ¦ Порт C   BUSY и STROBE                          ¦
¦   #DF ¦                 ¦ Регистр управления только для записи            ¦
¦       ¦                 ¦ При чтении (????????)                           ¦
+-------+-----------------+-------------------------------------------------+
¦    ПОРТ, ВЫБИРАЕМЫЙ 16-РАЗРЯДНЫМ АДРЕСОМ,т.е. регистром BC                ¦
+-------T-----------------T-------------------------------------------------+
¦ #7FFD ¦ тест A1 + A15   ¦ Только для записи                               ¦
¦       ¦                 ¦ Переключение страниц памяти                     ¦
+-------+-----------------+-------------------------------------------------+
¦ #FEFE ¦ тест A0 + A8    ¦ Выбираются отдельные ряды клавиатуры            ¦
¦ #FDFE ¦         + A9    ¦                                                 ¦
¦ #FBFE ¦         + A10   ¦                                                 ¦
¦ #F7FE ¦         + A11   ¦                                                 ¦
¦ #EFFE ¦         + A12   ¦                                                 ¦
¦ #DFFE ¦         + A13   ¦                                                 ¦
¦ #BFFE ¦         + A14   ¦                                                 ¦
¦ #7FFE ¦         + A15   ¦                                                 ¦
+-------+-----------------+-------------------------------------------------+
¦ #FFFD ¦ тест A1=0 A15=1 ¦ МУЗЫКАЛЬНЫЙ СОПРОЦЕССОР                         ¦
+-------+-----------------+                                                 ¦
¦ #BFFD ¦ тест A1=0 A14=0 ¦                                                 ¦
¦       ¦      A15=1      ¦                                                 ¦
L-------+-----------------+--------------------------------------------------

     Кто такое натворил с адресацией музыкального сопроцессора, не знаю, но
этим исчерпано все адресное пространство при младшем байте #FD, т.к. любой
другой старший байт приводит к выбору одного из этих портов. Чтобы выделить
еще адреса при младшем байте #FD, нужна более полная дешифрация. В некоторых
схемах подключения музыкального сопроцессора, дополнительной дешифрацией
является тестирование A13 на единицу. Такое решение позволяет использовать 
стандартный адрес #DFFD. Есть еще возможность с помощью дополнительного 
тестирования или микросхем дешифрации типа ИД получить и другие адреса, но все 
это имеет тенденцию к накладкам. Слишком много разных схемных решений, и 
несовместимость где-нибудь да проявится. А использовать порт с таким адресом, 
как #1FFD (тем более что он занят под расширение до 256 Кб в Scorpion'е) - 
значит всегда встречаться с неприятностями. Хватит и порта кемпстона с такой 
убогой адресацией. Подводя черту, предлагаю отказаться от использования новых 
адресов с младшим байтом #FD. И уж если делаем и пользуемся компьютером, 
созданным лордом Синклером, давайте использовать принцип адресации, заложенный 
им, а не лепить отсебятину. Это касается и схемщиков, и программистов.
     А теперь, что у нас осталось. Остался адрес #BF, который напрямую
использовать невозможно, т.к. разряд A6 соадресный порта ВВ55, но совместно со
старшим байтом можно получить 8 адресов:

        #FEBF  тест A6 + A8             #FDBF  тест A6 + A9
        #FBBF  тест A6 + A10            #F7BF  тест A6 + A11
        #EFBF  тест A6 + A12            #DFBF  тест A6 + A13
        #BFBF  тест A6 + A14            #7FBF  тест A6 + A15

     Если со мной согласятся относительно переделки адресации ВВ55, то
появится возможность использовать также разряд A7, что даст еще 8 адресов:

        #FE7F............................#7F7F  тест A7 + старший байт

     Еще остался разряд A3, что дает адрес #F7, и я хочу предложить его
использование. Вам не надоело загружать и держать на каждом диске "boot". Я
еще согласен держать красивый музыкальный загрузчик на игровых дискетах, но
для работы это одна морока. Ведь кроме основных функций, таких как копирование,
запуск и т.д. хочется, чтобы он имел функции: текстового редактора, дискового
монитора и т.д. и т.п. А это значит, что он будет занимать очень много места на 
диск и в памяти, долго грузиться и медленно работать. В ZX РЕВЮ 96/1-2 
была статья "ROM-Drive" о загрузке программ из теневого ПЗУ по типу картриджа. 
Может для магнитофонной версии компьютера и есть необходимость в такой загрузке 
игр, только вот подключение картриджа непосредственно к шинам компьютера 
вызывает опасения. Я предлагаю другой вариант - ROM диск. Если установить еще 
одну микросхему 580ВВ55 по схеме 1 с основным адресом #F7, т.е. тест A3 и 
соадресные разряды A6 и A7, а вместо регистра будем считывать байт из ПЗУ, 
подключенного адресными входами к порту ВВ55, то получим такую адресную 
раскладку (схема 3):



                 (СМ.РИС.)



        #F7  -  при чтении: байт из ПЗУ
                при записи: регистр управления
        #37  -  порт A. Младший байт адреса
        #77  -  порт B. Старший байт адреса
        #B7  -  порт C. Младший полубайт. Выбор одной из 15 ПЗУ.

     Разрядность порта позволяет иметь максимальный размер ROM диска почти
16 Мбайт, начав с 64 Кбайт и наращивая постепенно по мере установки микросхем.
Чтобы не было большого расхода электроэнергии, можно предусмотреть динамическое
питание, т.е. подавать напряжение только на выбираемую микросхему. Я, конечно,
понимаю, что это очень дорого, поэтому не имеет смысла пока использовать
старший полубайт порта C, хотя желательно его зарезервировать. Но и без 
старшего полубайта размер ROM диска составит почти мегабайт, что вполне 
достаточно для оболочки операционной системы и многих ее драйверов, плюс 
несколько системных программ на ваше усмотрение. Для постепенного наращивания 
нужен стандарт. Предлагаю такой.
     Каждый файл начинается с 16-ти байт элемента каталога, как на дискете,
только три последних байта используем как адрес следующего файла. Файлы,
конечно, лучше заносить в ПЗУ вплотную, но для наращивания отдельными
микросхемами, с функционально законченными программами, байт равный #00
в начале имени, должен игнорироваться и, соответственно, остаток микросхемы 
забиватьсяим. А байт #FF будет означать конец диска, т.к. если микросхема не 
выбрана, будет читаться свободная шина данных. 
     И еще один вопрос, где держать BIOS, работающую с этим диском? Мое 
предложение неконкретно, поэтому схему не привожу, но принцип одинаков для 
разных схем. Для BIOS предлагаю задействовать оставшуюся четверть штатного ПЗУ, 
перенеся туда исправленный TR-DOS, добавленный функциями работы с расширенной 
памятью ОЗУ (диск E) и ROM диском (F).
     Появится новая версия TR-DOS - альтернативная. Но надо изменить схему
так, чтобы интерфейс TR-DOS не блокировал переключение страниц ПЗУ. И в то же
время, для совместимости, блокировка нужна. Для этого предлагаю использовать
7-ой бит порта переключения страниц по схеме "ИЛИ" с 5-м битом, блокирующим
порт, т.е. наличие единицы в 5 или 7 бите приведет к тому, что при включении
интерфейса подключится старый TR-DOS. При входе в новый TR-DOS по адресу #3D00
(на BASIC - USR 15616) надо, чтобы проверялся дисковод A на наличие дискеты и
запускался "boot", если он там присутствует, а если его нет, то обращение к
ROM диску и запуск операционки оттуда. Такое решение позволит запускать
защищенные дискеты с динамичным музыкальным загрузчиком и в то же время иметь
мощную и удобную оболочку операционной системы для работы.
     Еще хотел бы предложить использование 6-го бита порта #7FFD под
расширение ОЗУ до 256 Кбайт. Почему только его и почему до 256-ти? Я считаю,
что это разумный предел для платы, использующей микросхемы памяти РУ5.
Дальнейшее расширение возможно только при создании новой платы - на другой 
основе, иначе плата превращается в подобие паутины и становится ненадежной. 
Доработка только тогда существенна, когда может быть произведена на 
существующем парке компьютеров, а используя 6-ой бит в 128-ой машине достаточно 
добавить микросхему ТМ2 к порту #7FFD, сигнал с нее подать на уже существующий
мультиплексор, сигнал с которого, в свою очередь, будет подключать верхние или
нижние ОЗУ первой и второй линеек.
     Относительно кемпстон-джойстика предлагаю использовать разряд D5 для
функции "отмена" (ESC).

     ИФК: Сергей предложил интересную идею об использовании ROM диска для
загрузки мощной операционной системы. Но т.к. стандарта пока что нет, можно
было бы, например, перехватить какое либо прерывание Спектрума и на него
"повесить" функции общения с ROM диском, чтобы любой пользователь мог
обратиться к той или иной функции ПЗУ. Этот метод можно взять из операционной
системы iS-DOS, но доработать и составить полную документацию на использование
операционной системы. Такой прием используется в ОС MS-DOS на IBM. По
определенному прерыванию находится группа процедур, которые отвечают,
например, за работу экрана или дисковода.
     На Спектруме можно вызывать эти функции через аккумулятор, задавая номер
функции (работа с принтером, экраном, дисководами и т.п.), а в каком-либо
другом регистре задавать номер процедуры (чтение сектора, форматирование
трека, печать символа и т.п.).



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Технология спрайтов - часть 1: введение.
Системки - Теневой ассемблер АLАSМ 3.8с (pаrt 1).
Содержание
Игры - Диззи с Бодуна - соЦиальная мини-новелла.
Железо - Прерывания: Кое-что непонятное о прерываниях второго рода.

В этот день...   20 апреля