Код HTML:
Управление:
После посылки активации Wild Sound'а, регистры выше 15-ти
воспринимаются как управление возможностями Wild Sound'а. Так
выглядят регистры:
+-----+------+---------------------------------------------
| Reg | Data | Note
+-----+------+---------------------------------------------
| 000 | xxxx | Ay-0 R00
| 001 | xxxx | Ay-0 R01
| 002 | xxxx | Ay-0 R02
| 003 | xxxx | Ay-0 R03
| 004 | xxxx | Ay-0 R04
| 005 | xxxx | Ay-0 R05
| 006 | xxxx | Ay-0 R06
| 007 | xxxx | Ay-0 R07
| 008 | xxxx | Ay-0 R08
| 009 | xxxx | Ay-0 R09
| 010 | xxxx | Ay-0 R10
| 011 | xxxx | Ay-0 R11
| 012 | xxxx | Ay-0 R12
| 013 | xxxx | Ay-0 R13
| 014 | xxxr < Serial Status [xxxx0000B]
| | r < ||||||||
| | r < |||||||+--> 1-Transfer Buffer Not Empty
| | r < ||||||+---> 1-Transfer Buffer Is Full
| | r < |||||+----> 1-Recive Buffer Not Empty !INT!
| | r < ||||+-----> 1-Recive Buffer Is Full !ERROR!
| | r < |||+------>
| | r < ||+------->
| | r < |+------- >
| | r < +-------- >
| | 000w > Serial-OFF [режим соединения с COM - MASON]
| | 001w > Serial-ON [Clear Buffer]
| 015 | xxxx | R/W To Serial Data
| 016 | xxxx | Ay-1 R00
| 017 | xxxx | Ay-1 R01
| 018 | xxxx | Ay-1 R02
| 019 | xxxx | Ay-1 R03
| 020 | xxxx | Ay-1 R04
| 021 | xxxx | Ay-1 R05
| 022 | xxxx | Ay-1 R06
| 023 | xxxx | Ay-1 R07
| 024 | xxxx | Ay-1 R08
| 025 | xxxx | Ay-1 R09
| 026 | xxxx | Ay-1 R10
| 027 | xxxx | Ay-1 R11
| 028 | xxxx | Ay-1 R12
| 029 | xxxx | Ay-1 R13
| 030 | xxxr < SPI Status [xxxx0000B]
| | r < ||||||||
| | r < |||||||+--> 1-Transfer Buffer Not Empty
| | r < ||||||+---> 1-Transfer Buffer Is Full
| | r < |||||+----> 1-Recive Buffer Not Empty !INT!
| | r < ||||+-----> 1-Recive Buffer Is Full !ERROR!
| | r < |||+------>
| | r < ||+------->
| | r < |+------- >
| | r < +-------- >
| | 000w > SPI-OFF [режим соединения с LPT - MASON]
| | 001w > SPI-ON [Clear Buffer]
| 031 | xxxx | R/W To SPI
|-----|------|---------------------------------------------
| 064 | xxxx | R/W Memory Addr [00..07],[08..15],[16..18]
| 065 | xxxx | R/W Memory Addr [08..15]
| 066 | xxxx | R/W Memory Addr [16..18]
| 067 | xxxx | R/W Data To Memory
| 068 | xxxx | R/W Data To Memory And INC Addr !!!
| 071 | xxxr < Memory Status [00xxx000B]
| | r < ||||||||
| | r < |||||||+--> 1-Busy
| | r < ||||||+---> 1-Clear Error
| | r < |||||+----> 1-Addr Upper Size
| | r < ||||+----->
| | r < |||+------>
| | r < ||+------->
| | r < || /| 0 Memory Not Found !!!
| | r < |+------- | 1-Memory 128k
| | r < +-------- | 2-Memory 256k
| | r < \| 3-Memory 512k
| | 000w > Clear Memory By Zerro
|-----|------|---------------------------------------------
| 096 | xxxr < Mason Player Status [xxx0xxxxB]
| | r < |
| | r < +-------> Mason Player Busy
| | 000w > Stop Mason Player And Wait Data
| | 001w > Init Mason Player
| | 002w > Play Mason Player
| | 003w > Stop Digital Player And Wait Data
| | 004w > Init Digital Player
| 097 | xxxx | R/W Song Of Mason Or Digital Data
| 098 | xxxr < Player Pos
| 099 | xxxr < Player Pat
| 100 | xxxr < Player Line
| 101 | xxxr < Player Tick
|-----|------|---------------------------------------------
| 128 | xxxx | R/W Select Pattern
| 129 | xxxx | R/W Select Line
| 130 | xxxx | R/W Line Data |Per 8 Bytes
| 131 | xxxx | R/W Line Data And Inc Line/Pattern |Per 8 Bytes
| 132 | xxxx | R/W Lines In Pattern
| 133 | xxxx | R/W Select Position
| 134 | xxxx | R/W Pos Data
| 135 | xxxx | R/W Pos Data And Inc Pos [255,N-End Of Pos And Loop To N]
| 136 | xxxx | R/W PTR Of Player Header
| 137 | xxxx | R/W Header Data And Inc PTR [256 Bytes]
| 144 | xxxx | R/W Select Sample [Reset Addr To 0]
| 145 | xxxx | R/W Select Sample Addr [00..07],[08..15],[16..23]
| 146 | xxxx | R/W Select Sample Addr [08..15]
| 147 | xxxx | R/W Select Sample Addr [16..23]
| 148 | xxxx | R/W Data Of Sample [0-End Of Sample]
| 160 | xxxx | R/W Select Instrument [Reset Offset To 0]
| | | Instrument 64..255 - Convert Him
| 161 | xxxx | R/W Select Ins Offset [63 Bytes]
| | | Offset 63-Loop Data
| 162 | xxxx | R/W Data-0 Of Instrument
| 163 | xxxx | R/W Data-1 Of Instrument
| 164 | xxxx | R/W Data-2 Of Instrument
| 165 | xxxx | R/W Data-3 Of Instrument
| 168 | xxxx | R/W Select Ornament [Reset Offset To 0]
| | | Ornament 64..255 - Convert Him
| 169 | xxxx | R/W Select Orn Offset [63 Bytes]
| | | Offset 63-Loop Data
| 170 | xxxx | R/W Data Of Ornament
| 191 | xxxr < Digital Player Status [xx0xxxxxB]
| | r < |
| | r < +-------> 1-Digital Player Busy
| | 000w > Stop Digital Player
| | 001w > Play Digital Player
| | 240w > Select 04 Channels
| | 241w > Select 06 Channels
| | 242w > Select 08 Channels
| | 243w > Select 10 Channels
| | 244w > Select 12 Channels
| | 245w > Select 14 Channels
| | 246w > Select 16 Channels
| | 254w > Stop Digital Player And Memory UnLock
| | 255w > Reset Digital Player And Clear Memory
|-----|------|---------------------------------------------
| 254 | xxxr < Wild Sound Status [00000000B]
| | r < ||||||||
| | r < |||||||+--|---------
| | r < ||||||+---| Current
| | r < |||||+----| Mode
| | r < ||||+-----|---------
| | r < |||+------> 1-Mason Player Busy
| | r < ||+-------> 1-Digital Player Busy
| | r < || /| 0 Memory Not Found !!!
| | r < |+------- | 1-Memory 128k
| | r < +-------- | 2-Memory 256k
| | r < \| 3-Memory 512k
| | 000w > Mode-0 (один AY)
| | 001w > Mode-1 (AYx2)
| | 002w > Mode-2 (AY + Digital Sound 4 channels)
| | 003w > Mode-3 (Digital Sound)
| 255 | xxxr < "Wild Sound v.XXX (C) By Entire Group ..."+0
| | xxxw > "Speccy Computer ... PiCya Calculator ..."+0 (Active)
| | > 255 (Wild Sound Lock)
| | > !!! Примечание, если выбран режим Digital Sound,
| | > то режим AY блокируется полностью, до Activ'ации
| | > и не будет откликаться ни на один IN !!!
| | > !!! Примечание, если выбран режим AY+Digital Sound,
| | > то режим AY работает, но Digital Sound не доступен
| | > до Activ'ации. Так что, если запустите XM'ку, будет
| | > играть до RESET'а
+-----+------+---------------------------------------------
Лажа:
Без них никак. По-сути это причина вдохновения для программирования.
Можно сказать - Вдохно-Баги !!! Итак:
* SPI - Мечта идиота, соединить НОРМАЛЬНО два Speccy. Но облажался,
поэтому SPI'ем можно читать только всякие флешки и другую хрень. Но с
другой стороны вы можете CLK и NSS отрезать от буфера, запустив их
через транзистор, подтянув резистором к единицы.
* Player - При INIT'е данные распаковываются, поэтому если что-то не
то с форматом, будет полный ХРЕН (это, типа, растение такое).
* Если активирован Wild Sound, и начать, например отсылать данные в
Serial, не проверяя статус Busy, то может начать ХРЕНИТь. Так же не
стоит отсылать данные в турбо режиме более 14-ти мегагерц, ВАС НЕ
ПОЙМУТ, хотя, вроде и настоящий AY не поймёт.
* Частота 1750000 Hz, и изменить, пока, нельзя.
* Ни в коем случае не юзайте регистры 224..239, ничего туда не писать
и не читать (остальное можно), иначе будет супер зависание. Хотя с другой
стороны вы можете услышать необычные звуки. Там не доделанный Synthezzz
* Не выбирать MODE [4..7]. 4-ый это Synthezzz, 5-ый это Atari, 6-ой это
Commodore. Скорее всего 6-ой вообще пропадёт, как факт, не могу до конца
разобраться.
Издержки:
* При выборе Mode-0 (один AY), эмуляция 100%. Ну, вообще-то, практически
100%. Максимальная частота из DAC-ов 100000 Hz, хотя программно всё
происходит на частоте 875000 Hz. Будем считать, что интерполяция будет
происходить аппаратно. Но искажения в звуке появляются только при значении
регистров частоты ниже 2-ух. То есть 1 и 2, всё остальное звучит идеально.
* При выборе Mode-1 (AYx2) всё происходит на частоте 109375 Hz, и
искажения появляются искажения в звуке появляются только при значении
регистров частоты ниже 8-и, То есть 1,2,3,4,5,6,7,8 звучит не супер
классно, хотя проигрывая мелодии я не заметил искажений. Как правило такие
высокие тона используют для достижения эффектов "тарелок", а на них эти
искажения не заметны.
* При использовании Digital Sound, Sample'ы не могут иметь значение
данных "0" !!! Это значение используется для определения конца Sample'а,
поэтому все "0" замените на "1", думаю глупо думать, что будут потери.
* Для защиты, до первой активации Wild Sound'а, Serial Port и SPI
заблокированы и при чтении будут 255 !!!
---[Заключение]--------------------------------------------
Просто привет всем Spectrum'истам. А так же тем, кто
любит слово миф.
------------------[By Entire Group]------------------------