1 Отредактировано sintech (19-11-2017 00:07)

Тема: Звуковая плата для Агат на базе AY-8910

Привет, наконец-то я довел свой проект до того уровня, когда можно что-то показать.
Первоначальная задумка была в том, чтобы попробовать создать карту расширения для шины Apple II/Агат. Я долго думал, что будет делать этот девайс и решил, что звуковая карта на базе AY-8910/8912 – это лучший выбор, т.к. музычка это всегда весело 😊

Почитав Мымрина и книги по Apple II, решил что ничего сложного в этом нет. Заказал у китайцев макетные платы на основе разводки уважаемого Wierzbowsky только под размер 10х10.

После прихода плат собрал на макетке схему из буферного формирователя, логики и пары регистров, помигал светодиодами через запись в $C0x0-$C0xF.

Изучил еще раз схему включения AY-8910, а также прототипы подобных карт для Apple II и решил, что мне хватит одной АП6 и ЛЕ1 (ИЛИ-НЕ), т.к. все уже придумано до нас. За запись в AY номера регистра будет отвечать ячейка памяти $C0x1, а запись значения регистра - $C0x0. Запаял все на макетку и добавил модуль усилителя с ali.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=294&download=1
http://forum.agatcomp.ru/misc.php?action=pun_attachment&item=295&download=1

Потом написал простецкую программу на бейсике, убедился, что звук есть. Для этого нужно было включить выход канала A в регистре R7, поднять громкость в R8 и задать частоту в R0(R1).

poke $C0E1,7 # R7 00000111
poke $C0E0,56 # 00111000 (0x38)

poke $C0E1,8 # R10 00001000
poke $C0E0,15 # 15 00001111

poke $C0E1,0 # R0
poke $C0E0,254 # FE

Пришло время писать музыкальный проигрыватель!
Потратил несколько вечеров на изучение Агат BASIC и особенностей встроенного мини-ассемблера, в итоге родился примерно следующий код. В видео финальная версия программы. https://youtu.be/xnIm5mABi5Q

70 DATL=$1D: DATH=$1E
75 DATEL=$BA: DATEH=$7B    ; address of data end
80 PWAIT=$FB94
100 *$5000
110  !        LDA #$10            ; load start address
     !        STA DATL            
     !        LDA #$70
     !        STA DATH
120  !    LOOP:
     !        LDA DATL         ; compare current address
     !        CMP #DATEL        ; with end address
     !        LDA DATH
     !        SBC #DATEH
     !        BCS QUIT            ; quit if song has ended
130  !        LDY #$0            ; write 0 to Y
     !        LDA (DATL),Y     ; load data to A
     !        CMP #$FF         ; compare to $FF
     !        BEQ SLEEP        ; jmp to delay
     !        STA $C0E1        ; write reg num to C0E1
140  !        INY                ; inc Y
     !        LDA (DATL),Y     ; load data to A
     !        STA $C0E0        ; write val to C0E0
     !        LDX #$2            ; write 2 inc cycles to X
150  !    IN1:    
     !        INC DATL          ; inc low byte
     !        BNE IN2          ; jump to loop if <=255
     !        INC DATH            ; inc high byte
     !        JMP IN2            ; jump to loop
160  !    IN2:    
     !        DEX                ; decrement X
     !        BEQ LOOP            ; if X==0 return to LOOP
     !        JMP IN1            ; increment one more time
170  !    SLEEP:
     !        LDA #$4F            ; delay for ~ 16 ms
     !        JSR PWAIT
     !        LDX #$1
     !        JMP INC
180  !    QUIT:
     !        BRK
200 CALL ($5000) 

В планах на будущее:

  • добавить на плату генератор прерываний с частотой 50hz, т.к. встроенный в агат работает на частоте 500hz для сигнала IRQ, а 50hz там только NMI, что тоже не удобно. Переписать код, чтобы он мог работать по прерыванию.

  • добавить в программу возможность выбора произвольного файла с музыкой.

  • самое главное, перейти на более экономный формат хранения AY/YM музыки, например, RSF

  • еще есть идея, прикрутить простой ЦАП типа КР572ПА1 для звуковых эффектов.

Но об этом в следующий раз!

Post's attachments

Attachment icon Agatmusic.JPG 626.75 kb, 716 downloads since 2017-11-18 

Attachment icon Agatmusic_sch.jpg 139.57 kb, 556 downloads since 2017-11-18 

2 Отредактировано Wierzbowsky (19-11-2017 05:37)

Re: Звуковая плата для Агат на базе AY-8910

Обалдеть! PSG на Агате! Автору респектище. :)

Я не знаком с Apple так близко, чтобы много знать о его музыкальных возможностях. А для Агата мой предел мечтаний - плата ЯЗС, клон которой пока не воплощён в железе. А вот эта новая плата открывает много возможностей для переделки музык с других платформ для Агата. И это уже реальное развитие, а не клонирование уже созданного железа. Буду следить за темой.

3

Re: Звуковая плата для Агат на базе AY-8910

Архикруто! Молодец!! Респект!!!

sintech пишет:

добавить на плату генератор прерываний с частотой 50hz, т.к. встроенный в агат работает на частоте 500hz для сигнала IRQ, а 50hz там только NMI, что тоже не удобно. Переписать код, чтобы он мог работать по прерыванию.

Чем неудобно то? И на семерке и на девятке шпарит с одинаковой частотой (в отличии от IRQ).

sintech пишет:

еще есть идея, прикрутить простой ЦАП типа КР572ПА1 для звуковых эффектов.

Супер! Для простоты можно и на R-2R попробовать. А еще к нему же прикрутить собственный программируемый генератор опорной частоты и FIFO на 256-1К выборок, и для программера это будет чудо!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

4 Отредактировано Voldemar0 (19-11-2017 11:22)

Re: Звуковая плата для Агат на базе AY-8910

> еще есть идея, прикрутить простой ЦАП типа КР572ПА1 для звуковых эффектов.

Сперва прикиньте, какую максимальную частоту вы сможете вопроизвести.
Потом: какая полоса осмысленного (хотя бы по таблице) сигнала возможна.
Я имею ввиду ограничение производительности ЦП.
А для демки ведь нужно ещё, помимо шума, что-то ещё на экране делать.

5

Re: Звуковая плата для Агат на базе AY-8910

Voldemar0, именно поэтому я предложил отдельные гену и фифо.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

6 Отредактировано Voldemar0 (19-11-2017 13:27)

Re: Звуковая плата для Агат на базе AY-8910

Я боюсь, его fifo мало спасёт - он ведь только джиттер уменьшит, если что, а средняя скорость же всё равно потребуется высокая.

Разве что сделать некий кольцевой стек, чтобы в него забить хотя бы 256 семплов и запустить их по кругу.
Или несколько стеков, которые бы можно было быстро переключать....

(мы щас тут нафантазируем на устройство, посложнее ЯЗС... :)

7 Отредактировано LeoN (19-11-2017 14:10)

Re: Звуковая плата для Агат на базе AY-8910

Voldemar0 пишет:

(мы щас тут нафантазируем на устройство, посложнее ЯЗС... :)

А шо? Эт мы могё-ё-ё-ё-ём! И могЁм, и мОжем! ;)
У меня в планах и было (и есть) реализовать в плиске такой ковокс с геной и фифо (именно для уменьшения потерь в обработчике). Правда, думаю ограничиться моно-режимом, от стерео профит с гулькин нос, а обработчику, как минимум, вдвое тяжелее будет...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

8

Re: Звуковая плата для Агат на базе AY-8910

Мини-макеточка отличная получилась. Думаю, что надо выложить на сайте в дополнение к моей. В Китае можно уже за 2$ за десяток заказывать эти платки 10х10.

9 Отредактировано garnizon (19-11-2017 18:14)

Re: Звуковая плата для Агат на базе AY-8910

Прикольно, что сказать. Главное что корпусов по минимуму -  это фирменный знак  sintech как мне кажется.   
А как с совместимостью с простыми эпловскими(правцевскими) картами на AY? Скажем музычка из pitfall2  заиграет?


Но я почему-то думал что если что-то такое будут для агата создавать, то обязательно на более родном Агату, и несравнимо более мощном SID.

https://ru.wikipedia.org/wiki/MOS_Technology_SID

Или AY + SID, и плеер под это симпатичный :)

10 Отредактировано sintech (20-02-2018 21:22)

Re: Звуковая плата для Агат на базе AY-8910

Спасибо за отзывы и советы.

Чем неудобно то? И на семерке и на девятке шпарит с одинаковой частотой (в отличии от IRQ).

В книгах по Apple II очень не рекомендовали использовать NMI по причине не совместимости с работой дисковода. Но наверное, если вовремя включать и отключать генератор, это не так критично.

Супер! Для простоты можно и на R-2R попробовать. А еще к нему же прикрутить собственный программируемый генератор опорной частоты и FIFO на 256-1К выборок, и для программера это будет чудо!

Как заметил Voldemar0, не хочется сильно усложнять схему, да и как использовать ЦАП я толком незнаю.

Сперва прикиньте, какую максимальную частоту вы сможете вопроизвести.
Потом: какая полоса осмысленного (хотя бы по таблице) сигнала возможна.
Я имею ввиду ограничение производительности ЦП.

Да, все верно, поэтому я думал о чем-то типа драм машины работающей по прерываниям, либо какието реальные эффекты но уже с высокой загрузкой CPU. После DogFighters of Mars 2 я готов поверить, что возможности 6502 безграничны ;) (отлично идет на реальном A2)

Мини-макеточка отличная получилась.

В Китае можно уже за 2$ за десяток заказывать эти платки 10х10.

Именно! У меня осталось еще 9 штук, если кому надо, штук 5 могу раздать.

А как с совместимостью с простыми эпловскими(правцевскими) картами на AY? Скажем музычка из pitfall2  заиграет?

С совместимостью думаю все плохо, Mockingbird точно работает по-другому, а вот с Sound Card Pro для правца возможно и будет совместима, т.к. использует такие-же порты управления AY.

Но я почему-то думал что если что-то такое будут для агата создавать, то обязательно на более родном Агату, и несравнимо более мощном SID.

С SID идея интересная, но их сложно купить, очень много подделок, да и стоят дороже.
AY/YM пока еще продают по 500р за пучок на ali/ebay. И то, все мои 8912 оказались фейками, у них явно не работает какая-то часть музыкального тракта, поэтому звук получается совсем не такой как в эмуляторе.
А купленные по такой же цене 5 YM2149F играют точно также как эмулятор, но зато корпус в 40 ног занимает очень
много места.

11

Re: Звуковая плата для Агат на базе AY-8910

sintech пишет:

С совместимостью думаю все плохо, Mockingbird точно работает по-другому, а вот с Sound Card Pro для правца возможно и будет совместима, т.к. использует такие-же порты управления AY.

Это просто проверить, я уже выложил первую прогу которая играет на Sound Card Pro
http://agatcomp.ru/Pravetz/ColorLines.shtml


sintech пишет:

С SID идея интересная, но их сложно купить, очень много подделок, да и стоят дороже.

Кстати не особенно. Время от времени делают реплики (в том числе на известных форумах) плат для PC с чипом SID.
Вот они обычно кучей заказывают, а потом остатки SIDов продают, дважды видел.
Или когда плату с SID для ZX, тоже видимо так заказывали.
Можно на барахолке ZX/PK спросить - может толк быть.

Но гораздо интереснее эмуляторы SID железные, они и по размеру не больше самого сида,
и даже бывают с программным переключением 6581/8580... а это вообще жир.
http://www.swinkels.tvtom.pl/swinsid/

12 Отредактировано Wierzbowsky (19-11-2017 19:58)

Re: Звуковая плата для Агат на базе AY-8910

Интересно, а технически возможно сделать на одной плате PSG (AY8910) + OPLL (YM2413) + MIDI (опционально)?

13

Re: Звуковая плата для Агат на базе AY-8910

Круть

14

Re: Звуковая плата для Агат на базе AY-8910

А как Вам такой комбо: ЯЗС + 8910 (на параллельных портах которой сидят два джойстика) + ковокс с геной и фифо? Звуковые выходы каждого из них смикшированы. Все это использует АП одной ячейки.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

15 Отредактировано Wierzbowsky (19-11-2017 23:23)

Re: Звуковая плата для Агат на базе AY-8910

LeoN пишет:

А как Вам такой комбо: ЯЗС + 8910 (на параллельных портах которой сидят два джойстика) + ковокс с геной и фифо? Звуковые выходы каждого из них смикшированы. Все это использует АП одной ячейки.

Идея хорошая, но тогда надо будет всю логику и некоторый другой функционал запихивать в ПЛИС. Иначе места на плате тупо не хватит. :)

У нас есть спецы по ПЛИСам?

16

Re: Звуковая плата для Агат на базе AY-8910

Звуковуха на AY-8910 вещь беспроигрышная. Конструкция простая, музыки под нее полно, так что автору зачет.

Но я лично все таки хотел бы дождаться реплики ЯЗС. По многим причинам: потому что она изначально делалась под Агат, потому что это экзотика, потому что отфильтрованные прямоугольники не так режут ухо. Мне кажется ее возможности не успели в свое время полностью раскрыть. Например, через мелодические каналы ЯЗС в режиме ШИМ я думаю, вполне можно воспроизводить оцифрованные звуки. (На все 5 каналов проца точно не хватит, но на 1 канал с частотой 11КГц должно хватить с запасом.)

Проблема в том, что оригинальный софт ЯЗС не блещет. Можно было бы сделать какой-нибудь упрощенный MIDI плеер или хотя бы конвертор в формат родного драйвера-плеера, и тогда музыки под ЯЗС сразу стало бы больше.

В общем, карты разные важны, карты разные нужны :)

17

Re: Звуковая плата для Агат на базе AY-8910

LeoN пишет:

А как Вам такой комбо: ЯЗС + 8910 (на параллельных портах которой сидят два джойстика) + ковокс с геной и фифо? Звуковые выходы каждого из них смикшированы. Все это использует АП одной ячейки.

Чего-то я элементарно лоханулся... ЯЗС и так отъедает все порты слота, правда расточительно, не может она их делить более ни с кем.
Тады другой комбо: 8910 (с джойстиками) + турбоковокс + SDC (с загрузчиком на $Cx00-$CxFF и $C800-$CFFF, с аппаратным сдвигрегистром и геной).

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

18

Re: Звуковая плата для Агат на базе AY-8910

garnizon пишет:

Но гораздо интереснее эмуляторы SID железные, они и по размеру не больше самого сида

https://www.c64-wiki.com/wiki/SwinSID
И платы продают:
http://zx-pk.com/forum/viewtopic.php?f=7&t=5895

Для AY тоже оказывается есть:
http://www.avray.ru/ru/ay_ym_emulator/

19

Re: Звуковая плата для Агат на базе AY-8910

Зырьте, что на AY вытворяют. Муза ваще абалденная!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).