Spectrofon
#16
20 декабря 1995 |
|
Система - о проблемах совместимости клонов Спектрума. Основы программирования музыкального процессора 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)
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября