Spectrofon #16
20 декабря 1995

Система - о проблемах совместимости клонов Спектрума. Основы программирования музыкального процессора AY-8910/12.

<b>Система</b> - о проблемах совместимости клонов Спектрума. Основы программирования музыкального процессора AY-8910/12.
┌──────────────────────────────┐
│ ───────   СИСТЕМА   ──────── │
└──────────────────────────────┘

 Потехин Леонид
    LeoSOFTWARE from *SA*

   Я  хотел бы продолжить тему о
совместимости  компьютеров. Сна-
чала  немного  о известном прог-
раммном приеме OUT (#FD),A. Этот
прием  применяется в двух случа-
ях: для переключения страниц ОЗУ
(порт  #7FFD)  и для обращения к
музыкальному  сопроцессору (порт
#FFFD). По моим исследованиям он
не  срабатывает  на SCORPION'ах,
АТМ, некоторых 128К машинах соб-
ранных либо на одном большом чи-
пе,  либо  на бывших 48К машинах
память   которых   расширена  до
128k.


   Основная  цель  использования
этого  приема  - немного сэконо-
мить на быстродействии и освобо-
дить регистр ВС под другие цели.
Список нерабочих программ доста-
точно    велик,   очень   многое
исправлено. Но самое плохое, что
несмотря на все, многие програм-
мисты продолжают выпускать прог-
раммы  с  подобной недоработкой.
Переключать  страницы через порт
#FD еще можно (как - об этом ни-
же), но обращаться к музыкально-
му сопроцессору наверное все-та-
ки стоит через порт #FFFD.

   Идея  использования порта #FD
для смены страниц ОЗУ заключает-
ся  в  том, что на выше перечис-
ленных  компьютерах  через  порт
#FD  страницы  ОЗУ корректно пе-
реключаюся,   меняются  активные
экраны,  но для этого необходимо
в  байте, который отправляется в
порт,  устанавливать шестой бит,
т.е.:

для переключения на 0 банк ОЗУ в
порт направится байт #50

для переключения на 1 банк ОЗУ в
порт направится байт #51

для переключения на 2 банк ОЗУ в
порт направится байт #52

для переключения на 3 банк ОЗУ в
порт направится байт #53

и т.д.

   Вполне возможно, что подобный
фокус может не пройти на компью-
терах,   где  шестой  бит  порта
#7FFD  используется  в  каких-то
целях. (Кстати,  хотелось бы уз-
нать, что это за машины. В прог-
рамме CONVER COMMANDER v3.02 су-
ществует подобное обращение, су-
дя  по  всему  для  переключения
страниц).   Для  универсальности
можно  предложить простой способ
распознавания  различных компью-
теров:

Текст  программы с переключением
страниц выглядит так:

ADR1    LD    A,#11
        OUT   (#FD),A

Аналогично,  пусть где-то дальше
встречается такой же кусок прог-
раммы  с  меткой  ADR2. В начале
работы  программы  должна выпол-
няться примерно такая процедура:
(естественно,  она  должна нахо-
дится  в  памяти  не выше адреса
#C000)



DI
LD  BC,#7FFD
LD  DE,#1011
LD  A,(#FFFF)
LD  L,A
INC A
LD  (#FFFF),A    ;RAM 0,(#FFFF)<A+1
OUT (C),E
LD  A,(#FFFF)
LD  H,A
LD  A,L
LD  (#FFFF),A    ;RAM 1, (#FFFF)<A
LD  A,D
OUT (#FD),A

При  этом  происходит следующее:
на  SCORPION'е  включается  8-ой
банк   ОЗУ  (у  SCORPION'а  256К
ОЗУ), на машинах с коррекной од-
нобайтовой  адресацией  к  #7FFD
включается  0 банк, на остальных
изменений   не   происходит  (не
знаю,  как на АТМ, т.к. я не на-
шел  ни одной такой машины у нас
в городе). На 8 банке Scorpion'а
по  адресу #FFFF обычно лежит 0,
и если туда положить что-то дру-
гое,  изменений  не  происходит.
Далее:

LD      A,(#FFFF)
INC     L
CP      L              ; проверка на 0 банк ОЗУ
PUSH    AF             ; сохранение флаг. регистра
DEC     L
LD      B,#1F          ; для Scorpion'а необходимо
XOR     A              ; вернуться на 0 банк ОЗУ
OUT     (C),A          ;
LD      B,#7F          ;
OUT     (C),D          ;
LD      A,L
LD      (#FFFF),A
OUT     (C),E
LD      A,H
LD      (#FFFF),A
OUT     (C),D
POP     AF
RET     Z

LD      HL,ADR1        ; адаптация программы для
LD      A,(HL)         ; корректного переключения
OR      #50            ; страниц под компьютеры,
LD      (HL),A         ; где обычное обращение к
LD      HL,ADR2        ; порту #FD не срабатывает.
LD      A,(HL)
OR      #50
LD      (HL),A
RET


   Программа  написана на скорую
руку, возможны различные упроще-
ния и изменения. Важен сам прин-
цип. Способ испытан на TASM 3.1,
SIMPSONS,  SATISFACTION, INSULT,
STS 2.6 и др. (Только для перек-
лючения  страниц!!!  А  для кор-
ректного обращения к музыкально-
му  сопроцессору  пришлось пере-
писывать    программу-проигрыва-
тель!).

   Для  исправления  чужих прог-
рамм  этот способ более приятен,
так как найти необходимые адреса
и  прицепить  маленькую подпрог-
рамму  с вызовом где-то из нача-
ла,  чаще оказывается легче, чем
использовать  порт  #7FFD. (Если
Вы  занимались аналогичной пере-
делкой чужих программ, то причи-
ны понятны).

"S":  Следующий материал, подго-
товленный   Леонидом   Потехиным
затрагивает  музыкальный  сопро-
цессор.  Речь  пойдет о том, как
можно непосредственно программи-
ровать  AY 8910/12.  Думаем, что
этот  материал  поможет в работе
всем, кто работает над созданием
игрового  программного обеспече-
ния.



          AY-8910/12:
    ОСНОВЫ ПРОГРАММИРОВАНИЯ

   Микросхема  содержит  16  ре-
гистров,  которые отбираются пу-
тем записи вначале по адресу за-
писи   (адрес   ввода/вывода   -
#FFFD(65533))  номера регистра и
затем считывание содержимого ре-
гистра  (того же адреса) или за-
писи в регистр данных адреса за-
писи  (#BFFD(49149)).  Когда ре-
гистр отобран, может быть выпол-
нено несколько  считываний/запи-
сей:  адрес  порта записи должен
изменятся  только  тогда,  когда
требуется  доступ  к другому ре-
гистру.

Основная  частота  часов в схеме
равна 1.7734 МГц (с точностью до
0.01%).   Назначенние  регистров
следующее:

R0 - тонкое управление тоном ка-
нала  А;
R1 - грубое управление тоном ка-
нала А;
R2 - тонкое управление тоном ка-
нала B;
R3 - грубое управление тоном ка-
нала В;
R4 - тонкое управление тоном ка-
нала С;
R5 - грубое управление тоном ка-
нала С.

   Тон   канала  есть  12-битное
значение,  получаемое  из  суммы
разрядов  D3-D0 грубых регистров
и D7-D0 тонких регистров. Основ-
ное устройство тона есть частота
часов,  разделенная  на 16 (т.е.
110.83 кГц)  и с диапазона счет-
чика  в 12 бит могут быть порож-
дены  частоты  от  27 Гц  до 110
кГц.

R6  - управление генератора шума
(D4-D0);  Период  источника шума
берется отсчетом 5 младших битов
регистра  шума каждый период ча-
сов звука, разделенный на 16.

R7  - управление миксером и вво-
дом/выводом.  При  этом: D7 - не
используется;

D6 - 1-порт ввода, 0-порт вывода

     D5 - шум канала С;
     D4 - шум канала В;
     D3 - шум канала А;
     D2 - тон канала С;
     D1 - тон канала В;
     D0 - тон канала А.

  Этот   регистр  управляет  как
смешением  уровней  шума  и тона
для  каждого  канала, так и нап-
равлением восьмиразрядного порта
ввода/вывода.
   Ноль в бите смешения указыва-
ет на то, что функция разрешена.

R8 - управление амплитудой кана-
ла А;

R9 - управление амплитудой кана-
ла В;

RA - управление амплитудой кана-
ла С.

   При этом:

D4 - 1-использование генератора
пакета.

D4  -  0-использование  значения
D3-D0 для амплитуды.

D3-D0 - амплитуда.



   Эти  три  регистра  управляют
амплитудой каждого канала, кото-
рая  либо моделируется, либо нет
регистрами пакета.

   RB - грубое управление перио-
дом пакета;
   RC - тонкое управление перио-
дом пакета.

   Значения 8 бит в RB-RC сумми-
руются  для получения разрядного
числа,  которое считывается вниз
в единицах по 256 раз часов зву-
ка.  Частоты  пакета  могут быть
между 0.1 Гц и 5 кГц.

RD - управление пакетом:
 D3 - продолжение;
 D2 - нарастание;
 D1 - изменение;
 D0 - держать.

             *  *  *
 Кирилл Громов

     И СНОВА О СОВМЕСТИМОСТИ

   Меня  последнее  время  часто
спрашивают:  "Почему у нас в не-
которых  программах  не работает
KEMPSTON  JOYSTICK?"  Причин тут
несколько,  и я спешу их разьяс-
нить. Для этого окунемся немного
в схемотехнику нашего обожаемого
SPECCY.

    Первое,  изначально в родном
SPECCY все порты дешифрировались
грубо,  по  одному  разряду шины
младшего  байта шины данных. Это
станет понятно из следующей таб-
лицы:

#FF 11111111 O-O-O-H, MY GOD!
#FE 11111110 BORD,MAG,BEEP,KEYB
#FD 11111101 ! ЧИТАЙ НИЖЕ !
#FB 11111011 ZX-PRINTER
   Порт  #FF на самом деле чита-
ется не только по своему истори-
ческому  адресу, а вообще по лю-
бому   незадействованному.  Порт
#FD  на  самом  деле  нельзя ис-
пользовать   напрямую,  так  как
возможен   "ответ"   сразу  нес-
кольких устройств - порта конфи-
гурации  ZX-128,  муз. сопроцес-
сора.  Хотя  его очень часто ис-
пользуют  для переключения стра-
ниц  памяти.  На компьютерах где
он  реализован  как  в фирменном
SPECCY эти номера проходят. Зато
на  горе-компьютерах  типа "АТМ"
ну  и так далее (вы меня поняли)
это  приводит  к  печальным  ре-
зультатам.

   Это  были основные порты, те-
перь далее.



Порт #F7 11110111 \
Порт #EF 11101111  > ZX-LPRINT 3
Порт #E7 11100111 /

Как  видите,  остались  адреса с
#1F  до #DF. В двоичном виде это
выглядит так:

Порт #1F 00011111
Порт #3F 01011111
Порт #9F 10011111
Порт #DF 11011111

   Это - адреса, по которым мож-
но  обращаться, избегая конфлик-
тов  на шине данных. Легко заме-
тить, что во всех адресах разряд
A5  равен  0. Именно по принципу
грубой  дешифрации  этот  разряд
"отвечает" за KEMPSTON JOYSTICK.
То  есть значения джойстика тео-
ретически   должны  читаться  по
всем этим адресам.

   На  деле  же, у кого KEMPSTON
JOYSTICK   выполнен  на  м/схеме
КР580ВВ55,   значения  джойстика
будут  читаться ТОЛЬКО по адресу
#1F (31).  Именно поэтому, в не-
которых программах, где идет оп-
рос по маске #DF, джойстик рабо-
тать  не будет. Решение проблемы
видится  в  замене маски на #1F.
Действительно,   зачем  городить
лишнюю  логику  и мучить компью-
тер, когда адрес #1F стал факти-
чески стандартом в нашей стране.
Я полагаю, что дал исчерпывающий
ответ на данный вопрос.

   В заключение хочется сказать,
что  все,  кому  не  безразличны
вопросы  железа,  и  у кого есть
собственные  находки, могут зво-
нить ко мне на мою ZX, повторяю,
именно ZX BBS.


   Свои находки желательно офор-
мить  в  виде файла в ZX-WORD, и
поместить мне на сервер. Это ка-
сается,  правда,  только жителей
Москвы  и области. Остальные мо-
гут мне писать.

   Выражаю огромную признательность:

 МИХАИЛУ ХОХЛОВУ (фирма "КОНДОР") за большую помощь
в моей работе.

 ДЕНИСУ ЛЕЖЕНКО (L.D.E.Soft) за солидарность и ори-
гинальные технические находки.

 АЛЕКЕСЕЮ и всей FFC за сотрудничество.

 "ИНФОРКОМ"у за их нужное всем дело.

 "SPECTROFON"  и STEP CREATIVE GROUP  за красивый и
полезный журнал.

 "ONLINE"  и  ГРИГОРЬЕВУ ДМИТРИЮ (OLDMAN) за опера-
тивность и компетентность.
   Мой  адрес: г. Москва, Гурьевский пр-зд, дом 19,
корпус 2, кв. 311.

   Телефон: 397-65-08

   Звонить с 20.00 до 22.00.

   CS BBS  работает  по  средам,  четвергам, пятни-
цам с 01.00 до 06.00.

         Громов Кирилл (C) CHUNG
                  Software (FFC)



Другие статьи номера:

Экспертиза - подробный разбор игры "Hacker".

Обзор - "жизнь на спектруме бьет ключем" - обзор основных событий 1995 года.

С миру по биту - ответы на письма читателей по игре "Звёздное Наследие".

С миру по биту - интервью с группой STEP (создателями Spectrofon и Звёздного Наследия).

Чемпионат - финал чемпионата вирусов по игре "ВИРУС-1".

Система - о проблемах совместимости клонов Спектрума. Основы программирования музыкального процессора AY-8910/12.

Конструктор - универсальная схема дешифрации порта расширения для машин с дополнительной памятью. Сравнение компьютеров "PROFI" и "SCORPION".

Фантазия - "Невыполнимое задание" - компьютерная новелла по мотивам игры "Impossible Mission".

Реклама - бесплатные обьявления.


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

Похожие статьи:
Анонс - В следующем номере ожидаются.
WANTED - Розыск программ...
Система - Обзор новых системок: Sprite Maker v4.0, Turbo Copier v2.0, Sample Studio, Art Works 1, Burst Eyes v1.2, Excess Sample Editor v1.4.25, Excess Deluxe Paint v1.1, Graphic Station, BA v1.0, Global Commander v1.31, Quick Commander v2.3, Stall Spriter v0.1, AGA v1.0, Ultra Sonic v0.1, Universal Sprite Studio v1.0, HRUST v1.1, STORM v1.3.
Железо - Описание микросхемы К555ТЛ2.
Чудо техники - Десять байт.

В этот день...   29 марта