PDA

Просмотр полной версии : Конвертация "на лету" YM2149F регистров в SAA1099



Tronix
29.09.2017, 09:55
Прошу помощи, всемогущий All!

Хочу написать DOS плеер PSG файлов для звуковухи Creative Music System (http://www.vgmpf.com/Wiki/index.php/Game_Blaster) . Она состоит из двух SAA1099.

За основу взял код и заметку: http://www.worldofsam.org/node/670 . Все в нем хорошо, кроме того, что огибающую проигнорировали, от слова совсем. Нашел другой код http://simoncooke.com/samcoupe/infobase/source/infyjoke.txt , тут огибающая вроде бы обрабатывается (в процедуре play.chip:). Но моих знаний, а точнее их отсутствия Z80 ассемблера не хватает, что бы понять логику работы.

Например, не ясны следующие моменты: Вот у YM есть регистры R8-RA, в которых задаются уровень звука (4 бит) и некий M-mode. Когда M=0, все понятно - уровень сигнала постоянный. Когда M=1 - не ясно по даташиту. Короче я запутался полностью.

Исходник на Turbo Pascal на всякий случай прилагаю. В настройках DosBox можно выставить sbtype=gb, для эмуляции звуковухи.

Mick
29.09.2017, 13:15
Тебе надо поковырятся в SAM Coupe софте. Там где были сборники игр с ZX с эмуляцией AY. Вот собственно узнаешь как народ перекодировал.
Также еще немного тут упоминается - http://www.worldofsam.org/node/668#comment-1390

NEO SPECTRUMAN
29.09.2017, 22:21
Например, не ясны следующие моменты: Вот у YM есть регистры R8-RA, в которых задаются уровень звука (4 бит) и некий M-mode. Когда M=0, все понятно - уровень сигнала постоянный. Когда M=1 - не ясно по даташиту. Короче я запутался полностью.
этот бит вместо уровня звука подключает генератор огибающей (все что в младших 4-х битах тогда просто игнорируется)
такой себе LFO


частота которого в регах rB rC
и rD форма огибающей

найди ємуль который позволяет менять реги
и поклацай посмотри как оно работает
например это можно делать в E3000 (прям можно вписать ручками и послушать что будет)
но там плохая ємуляция Ау-ка...

- - - Добавлено - - -


Вот собственно узнаешь как народ перекодировал.
зачем что то ковырять
делается все это элементарно (поняв как работает чип(метод научного тыка наше все))

Tronix
05.10.2017, 13:03
этот бит вместо уровня звука подключает генератор огибающей (все что в младших 4-х битах тогда просто игнорируется)
такой себе LFO


частота которого в регах rB rC
и rD форма огибающей



С этим примерно понятно. Огибающая она только для одного канала получается может быть, ну или все три канала с одинаковой огибающей? Вопрос как это положить на SA1099. Там как я понял огибающая может быть разная у двух каналов одновременно:

https://habrastorage.org/webt/59/d6/02/59d6025548c81661968802.png

Frequensy generator 1 и Frequensy generator 4. При этом ноты играются в каналы 2(A),3(B) и 5(C).
То есть если я получаю от YM в регистре RA канала С что это не уровень звука, а включить огибающую, я в SAA1099 должен вырубить 5 генератор и включить микшером 4 генератор, в котором уже есть данные от регистров RB, RC?

NEO SPECTRUMAN
05.10.2017, 22:38
С этим примерно понятно. Огибающая она только для одного канала получается может быть, ну или все три канала с одинаковой огибающей? Вопрос как это положить на SA1099. Там как я понял огибающая может быть разная у двух каналов одновременно:
У Ау-ка огибающая может модулировать любое количество каналов.
Ау может выжать даже 3 уровня сигнала такой сложной формы
огибающая в канале A
огибающая в канале A,B
огибающая в канале A,B,C
(тоесть sa1099 это не повторит в принципе)

но обычно она звучит только в одном канале
и как правило она модулирует основной тон (по своему прямому назначению она давно не используется)
а там сильно важна точность интервала между частотой тона и огибающей
так что на sa1099 многие эффекты будут уже не те
или она вообще может переть прямо на выход когда тон выключен
в придачу у Ау-ка есть пере инициализация огибающей при смене ее типа
а в sa яхз...

А как положить это тебе уже решать
Он не может на 100% заменить Ау-к

ты можешь сделать фиксированную огибающую для одного канала

ты можешь на ходу перераспределять по 6 разным каналам данные так чтоб для огибающей все время был канал с огибающей
тк Ау-к не использует все 3 канала одновременно на протяжении 100% времени
А в sa1099 их целых 6
(но тогда могут возникнуть некоторые артефакты тк у каналов Ау-ка скачащих по 6 каналам Sa1099 будет постоянно сбиваться фаза)


ты можешь вообще забуферизировать n-е количество данных посылаемых на Ау-к
и глядя на перед где появится огибающая правильно распределять каналы

ты можешь вообще повесить огибающую на тон 3-х других каналов
и понижать громкость в обоих когда включается огибающая
и получишь совершенно новое уникальное звучание и легкое решение этой проблемы
только учитывай что некоторые формы огибающей сразу же "замолкают" а некоторые умножают частоту на 2