┌──────────────────────────────┐
│ ─────── СИСТЕМА ──────── │
└──────────────────────────────┘
Потехин Леонид
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)