Inferno #08
30 ноября 2005

For Coderz - Программирование устройства генерации звука Turbo Sound.

 Программирование Turbo Sound
   Данная  статья Shiru Otaku опубликована
в бумажном виде  в журнале NedoPC#3. Здесь 
публикуется по просьбе автора и с согласия 
редакции журнала NedoPC. 

                Выбор чипа

   Оба  чипа  управляются одними и теми же
стандартными портами (#FFFD - выбор регис─
тра AY, #BFFD - вывод  значения  в регистр 
AY). В один  момент  времени к этим портам 
подключается один из чипов, и все выводы в
регистры AY направляются в него.При сбросе
выбирается чип номер 0. Переключение между
чипами  производится путём выбора регистра
AY с номером,находящимся вне диапазона су─
ществующих  регистров. Выбор  регистра #FF
подключает нулевой чип, #FE - первый.
   Условная процедура выбора 0-го чипа:

 selChip0: 
         LD BC,#FFFD
         LD A,#FF
         OUT (C),A
        RET

   Аналогично происходит выбор 1-го чипа:

 selChip1: 
         LD BC,#FFFD
         LD A,#FE
         OUT (C),A
        RET

   Можно сделать простую процедуру,выбира─
ющую нужный чип  по его номеру в аккумуля─
торе (0...1):

 selChip: 
         LD BC,#FFFD
        AND 1  ; во избежание ошибок
               ; при числе в аккумуляторе,
                ; не равном 0 или 1
         XOR B
         OUT (C),A
        RET

   Полная  совместимость TS  со всем ранее
написанным  ПО обеспечивается при условии,
что  оно  не  пытается  производить  выбор
несуществующих  регистров  AY  (на текущий
момент программ, не отвечающих этому усло─
вию, не замечено).

             Использование TS

   Так как второй чип не имеет собственных
управляющих портов, обеспечивается возмож─
ность  использовать любые ранее написанные
процедуры  вывода звука без всяких дорабо─
ток. Например,есть две процедуры: проигры─
вающая  музыку  и  проигрывающая  звуковые
эффекты. На  одном  чипе  для проигрывания
звуковых  эффектов  параллельно  с музыкой
приходится временно выключать один или не─
сколько каналов музыки, чтобы дать возмож─
ность  проиграться  звуковому эффекту. При
наличии Turbo Sound можно запустить музыку
на одном чипе, а эффекты на втором,исполь─
зуя те же процедуры. Нужно только вставить
переключение чипов между ними.
   Например, было:
 

         CALL musicPlay
        CALL soundPlay

   Стало:
 

         CALL selChip1
         CALL musicPlay
         CALL selChip0
        CALL soundPlay

   При  отсутствии  TS новый вариант будет
работать точно так же, как старый.
   На текущий момент не существует специа─
лизированных  плееров  музыки под TS. Но в
тестовых  целях возможно осуществить такое
проигрывание, создав два обычных трёхкана─
льных модуля (в каждом из них должно соде─
ржаться  по три канала шестиканальной ком─
позиции) и откомпилировав их  в разные ад─
реса. Для  проигрывания  достаточно  будет
сделать следующее:
 

         CALL selChip1
         CALL player1
         CALL selChip0
        CALL player0

   При  этом  каждому  из плееров не нужно
знать, на какой чип он выводит данные.
   Важный  момент: после завершения работы
с TS нужно выбирать нулевой чип. Также это
нужно делать перед выполнением программно─
го сброса.В противном случае возможны про─
блемы  с работой устройств, подключаемых к
портам  ввода-вывода AY, так как на разъём
TS заводятся только линии портов ввода-вы─ 
вода нулевого чипа. Примеры кода,приведён─
ные выше, учитывают это требование.

      Другие реализации Turbo Sound

   Всё вышесказанное относилось к работе с
TS версии  NedoPC. Но существует также два 
старых  варианта схемы Turbo Sound: QUADRA
от  Amazing Soft Making  и  вариант  TS от
Power of Sound. 
   Вариант  QUADRA полностью несовместим с
NedoPC  TS - в  нём предполагается наличие 
собственных управляющих портов для второго
чипа (#EEFD - выбор  регистра  AY, #AFFD -
вывод  значения). Поддержка этого варианта 
схемы лишена смысла ввиду его непопулярно─
сти и полном отсутствии программного обес─
печения.
   Вариант TS  от Power of Sound поддержан
в единственном  на данный момент редакторе
шестиканальной музыки, Turbo Sound Editor.
С точки зрения программирования он отлича─
ется  только  способом переключения чипов,
что позволяет легко добавить его поддержку
в создаваемом  для  NedoPC TS  программном
обеспечении.Для этого достаточно предоста─
вить  пользователю возможность выбора типа
TS  и соответствующим  образом  доработать 
процедуры выбора чипа.
   Переключение  чипов в PoS TS происходит
посредством  вывода  значения  0..1 в порт
#1F (номер  выбираемого чипа соответствует 
выводимому значению).
   Ниже  приводится  вариант универсальной
процедуры  выбора чипа по его номеру в ак─
кумуляторе. Предполагается,что тип TS сох─
ранён по адресу chipType+1, нулевое значе─
ние  соответствует  варианту TS от NedoPC,
ненулевое - варианту от PoS.

 selChip: 
        AND 1
 chipType: 
        LD B,0  ; вместо нуля присутствует
              ;число, соответствующее типу
 TS 
         DEC B
         JR NC,chipPoS
         LD C,#FD
         XOR B
         OUT (C),A
        RET
 chipPoS: 
         OUT (#1F),A
        RET

    Автоопределение наличия и типа TS

   Ниже приводится текст процедуры автома─
тического  определения  наличия  и типа TS
(варианты NedoPC и PoS ), использующаяся в
Turbo Sound Editor . Следует учесть, что в 
случае невозможности чтения значений реги─
стров  AY  (встречается  в редких случаях)
автоматическое определение работать не бу─
дет.Поэтому желательно предусматривать во─
зможность указания типа TS 'вручную'.

;Turbo-Sound checker by Himik's ZxZ/PoS-WT 
;24.05.05 at work ;) 
 ;Found: 
   ;No AY/YM chip on board
   ;Single AY/YM chip on board
   ;Turbo-Sound port by PoS & Bitwalker
                      ;(port #1F for swith)
   ;Turbo-Sound port by NedoPC
             ;(registers #FE-#FF selection)
  

        ORG #61A8
 C_1 
         DI
         XOR A
         LD HL,#FE00
         LD DE,#FFBF
         LD BC,#FFFD
         OUT (C),B   ;SELECT TS AY0 CHRV
         OUT (C),A   ;SELECT REG 0
         LD B,E
         OUT (C),B   ;#BF-> REG 0 AY0 CHRV
         INC A
         OUT (#1F),A ;SELECT TS AY1 POS
         OUT (C),C   ;#FD-> REG 0 AY1 POS
         LD B,D
         OUT (C),H   ;SELECT TS AY1 CHRV
         OUT (C),L   ;SELECT REG 0
         LD B,E
         OUT (C),H   ;#FE-> REG 0 AY1 CHRV
         LD A,L
         OUT (#1F),A ;SELECT TS AY0 POS
         OUT (C),L   ;#00-> REG 0 AY0 POS
         INC A
         OUT (#1F),A ;SELECT TS AY1 POS
         LD B,D
         OUT (C),D   ;SELECT TS AY0 CHRV
         OUT (C),L   ;SELECT REG 0
         IN A,(C)    ;READ BYTE FROM REG 0
        CP C
 ;переходим, если найден TS by NedoPC 
        JR Z,TS_ENABLE_CHRV
 ;переходим, если найден TS by PoS 
         CP #FE
        JR Z,TS_ENABLE_POS
 ;переходим, если ни одного чипа не найдено 
         CP #FF
        JR Z,NO_AY
C_2 
;найден только один чип 
 TE_DISABLE 
         LD A,1
         OUT (#FE),A
        RET
 NO_AY 
         LD A,2
         OUT (#FE),A
        RET
 TS_ENABLE_CHRV 
         LD A,4
         OUT (#FE),A
        RET
 TS_ENABLE_POS 
         LD A,6
         OUT (#FE),A
        RET
DISPLAY /A, "Length: ",C_2-C_1 

Shiru (NedoPC team) 
 

   Ред.: Полагаю,  на  сегодняшний  момент
поддерживать вариант PoS не имеет никакого 
смысла - переделка  TS by PoS под стандарт 
NedoPC  ничего  не  стоит  и даже упрощает 
схему (исчезают D3 и D4.1, на 1/D4 подаёт─ 
ся 10/D1, а на 2/D4 подаётся инвертирован─ 
 ное данное D7 ). 
   В приложении  ищите  6-канальный модуль
X-agon'а, скомпилированный  под NedoPC TS. 
Кроме того, в архиве должно лежать 4 трека 
Shiru Otaku (каждый  состоит  из двух pt3- 
модулей) - это ремиксы известных мелодий с 
приставок. 



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

Inferno - Авторы журнала.

Inferno - Вступление от редактора.

Inferno - Ошибки в предыдущих номерах.

Inferno - Об оболочке.

Железо - CD-ROM - устройство и хитрости подключения.

For Coderz - CD video на ZX. Как написать плеер видео с компакт-диска.

Sofтинка - Техническое руководство по дисковой системе DISCiPLE/+D.

For Coderz - Маленькие программерские хитрости.

Математика - История решения теоремы Ферма.

Gameland - Игра Шестнашки.

Sofтинка - Описания и история изменений программы для работы с жестким диском HDDoctor v0.9.

Секреты - Секретные кнопки в разных приложениях: Wolfenstein'2004, IG#5, ACEdit, DNA OS, Wild Disk Copier.

Sofтинка - Улучшения конвертора графики в Gigascreen.

Звук - Ламповые усилители. Стерео лампочник 2х5 Вт из старых телевизоров.

Железо - Обзор кассетных проигрывателей.

Inferno - Письма в редакцию.

Gamedev - История создания игры Pang.

Gamedev - Советы при написании аркадной игры.

Реклама - Реклама от Романа Чунина.

Реклама - Реклама от Алексея Жабина.

Реклама - Реклама от В. Богдановича.

Интервью - Интервью с Николаем Родионовым, автором известных книг для ZX Spectrum

For Coderz - Вычисление тригонометрических и алгебраических функций в языках высокого уровня.

DIY - схема 16-цветного видео-режим v1.1 для пентагона.

Железо - Описание микросхемы К555ТЛ2.

For Coderz - Программирование устройства генерации звука Turbo Sound.

Sofтинка - 384x304 viewer. программа позволяющая просматривать цветные картинки, по размерам превышающие экран.

Sofтинка - Эмулятор ZX Spectrum на ZX Spectrum.


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

Похожие статьи:
Что-где-почем - Пpогpамм у меня пpибавилось довольно-таки много...
Программирование - Вывод спрайта на экран. Вывод на виртуальный экран.
От редакции - Эксгyмация могил - дeло интeрeсноe!

В этот день...   18 декабря