Автор Тема: Sega MD Sound (Yamaha 2612/PSG) - Что оно такое и с чем его едят  (Прочитано 13068 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Подскажите пожалуйста доку по сеговскому звуку. Ато уже много знаю про звук, даж драйвер из соника выдрал и довел до совершенства, а как им управлять ничо не знаю. Или хотябы расскажите как юзать сеговский ЦАП (DAC), он же шестой канал синтезатора. тот шо PCM звук выдаёт. Ато в сонике за него отвечает з80, а я в нём ничерта не сооброжу, как он звук выдаёт в йамаху.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Или хотябы расскажите как юзать сеговский ЦАП (DAC), он же шестой канал синтезатора. тот шо PCM звук выдаёт.
Чип FM-2612 доступен по адресам 4000H - 4003H в адресном пространстве Z80, или по адресам A04000H - A04003H в адресном пространстве 68000. Далее будут использованы значения с 4000H до 4003H.


Регистр   D7   D6   D5   D4   D3   D2   D1   D0     
2AH   8 бит данных ЦАП     
2BH   Включение ЦАП   не используется   

В регистр 2AH записываются данные 8 бит PCM. Все тайминги (дискретизацию) должен делать процессор.

Доступ к регистрам 1 части осуществляется так: 8-ми битный адрес регистра (его номер) записывается по адресу 4000Н, а доступ к данным через 4001Н. Для доступа ко второй части используется адреса 4002Н для адреса и 4003Н для данных.

(сега теч док, кэп)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Спасиб огромное. Всё понял, очень помог. Свои наработки можт потом сдесь выложу. Хочю прост движ звуковой написать, уже неплохое сжатие для звука придумал.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Там же, чтоб юзать сеговский цап нужно обращаться во вторую часть. В первой цапа нид. + к этому ты не написал, что нужно ещё и статус йамахи проверять. Ну т.е. занята она или нет. Это читаем 4000h и проверяем бит d7. Если бит установлен, то йамаха занята и юзать её нереально. Я правильно говорю?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Там же, чтоб юзать сеговский цап нужно обращаться во вторую часть. В первой цапа нид. + к этому ты не написал, что нужно ещё и статус йамахи проверять. Ну т.е. занята она или нет. Это читаем 4000h и проверяем бит d7. Если бит установлен, то йамаха занята и юзать её нереально. Я правильно говорю?
судя по этому - первую:
Цитата
Регистры с 22H по 2BH доступны только по адресам 4000Н-4001Н. Регистры с 30H по B4H доступны по адресам 4000H-4001H для каналов 1..3 и по адресам 4002H-4003H для каналов 4..6 (Канал 1=4, 2=5 и 3=6).
проверять занятость по доку надо, но я не проверял. (т.к. только цапу и тестил)

Оффлайн feos

  • Пользователь
  • Сообщений: 785
  • Пол: Мужской
    • Просмотр профиля

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
музыка проигрывается сдесь с использованием PSG ? только ?

мне просто затестить нужно. а как проверить работает ли PSG хз..
с этой демкой можно ?

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
В этой демке задействован только 6-й канал YM2612 в режиме DAC.

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
ну этого достаточно.
я просто делаю стерео мод приставки... и не мог найти псг канал. а приставка видимо супер китайская. псг уже видимо с эти 2 канала засунули :)

ну если всё слышно и всё поет значит псг есть и я его слышу .) так ? :)

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
ну если всё слышно и всё поет значит псг есть и я его слышу .) так ? :)
Ещё раз, в этой демке ПСГ не задействован, как ты его можешь слышать? При чём тут стерео-мод и эта демка? Если ты хочешь проверить звук, включи, например, Comix Zone, там в большинстве мелодий на двух каналах разный звук совсем. ПСГ там тоже есть: гудящий такой звук. Особенно его хорошо слышно в мелодии Episode 1, Page 2-2 (5-я мелодия в саунд-тесте ), он играет основную партию. В эмуляторе поиграйся, поотключай PSG и YM отдельно.
Добавлено позже:
Или After Burner, там все ударные на ПСГ сделаны. Но стерео там нет, по-моему.

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
ну насчет отключения поиграюсь.

стерео мод притом, что .. я нашёл 2 канала стерео но на всех сегах с процессора выходит псг сигнал отдельно (конечно потом он преобразовывается либо в нормальное стерео либо в нормальное моно) но изначально с процессора выходят левый правый и псг каналы. вот я нашёл только 2 левый и правый.

а при игре в комикс зон слышу все звуки хорошо :) звук офигенный... видимо смешение уже на уровне процессора происходит. в моё случае.

Оффлайн Rumata

  • Супермодератор
  • Сообщений: 24588
    • Просмотр профиля
Это ты опять про свой Gopher?

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
ну да .. нельзя ? :)

хоть приставка не так уж и хороша, сделаю ей стерео мод хотябы :)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
в ней физически стерео нет.
у неё звукоэмуляция. проц мощный позволяет.
+ эмулит з80. тут программно нужно разбирать и железно.
звук стерео не выдавить.
а так юзай саунд тест в контре.
там стерео :)

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
запишу тебе то что там есть :)
но как я слышу в эмуляторе и там... дык один в один))))

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
мнительность никто не запрещал

эмуляция в эмуляторе звучит также, как эмуляция в гуфе

Оффлайн goodbye

  • Пользователь
  • Сообщений: 2421
  • Пол: Мужской
  • 6 66
    • Youtube
    • Просмотр профиля
пусть :)
полюбому лучше слушать такое стерео чем хреновое моно в оригинале.

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Цитата
звук стерео не выдавить.
Можно. Разумеется, это не поддерживается на нативном уровне, а делается программным трюком (подобно тому, как можно растягивать слои по вертикали с помощью VDP-трюков).

Заключается трюк в следующем:
- Задаешь панорамирамирование на левое (B6 80)
- Посылаешь сэмпл в DAC, он, соотвественно, играет в левом динамике
- Задаешь панорамирование на правое (B6 40)
- Посылаешь сэмпл в DAC, и он заиграет в правом динамике

Способ довольно ресурсоемкий, и в плане обращений к YM, и в плане того, что стерео сэмплы весят в два раза больше.

Цитата
Ато в сонике за него отвечает з80, а я в нём ничерта не сооброжу, как он звук выдаёт в йамаху.
Воспроизведение DAC сэмплов всегда возлагают на плечи Z80. Для этого пишут так называемый Z80-драйвер, который работает постоянно и посылает сэмплы в DAC через определенные интервалы времени. Помимо воспроизведения сэмплов, драйвер еще должен реагировать на команды, например, чтобы стороние программы могли сообщить, какой именно сэмпл воспроизводить.

В Соник 1 реализован наиболее простой Z80-драйвер. Если отбросить некоторые нюансы, драйвер управляется лишь одним байтом в памяти, и через него ему сообщают, какой сэмпл проиграть. В Sonic 1 очень немного DAC-сэмплов, причем они настолько малы, что целиком умешаются в памяти Z80 (в 8 килобайтах, включая размер кода самого драйвера).

В Соник 1 для сэмплов используется формат сжатия с потерями - 4 bit DPCM (Дифференциальная Импульсно-кодовая модуляция, где вместо абсолютных значений дается разность между предыдущим и новым положением волны, с использованием дельта-массива из 16 возможных значений разности). Такой же формат использовался во всех последующих Сониковских играх, включая 3Д Бласт.

Дизасембл драйвера можно скачать здесь: http://info.sonicretro.org/images/0/0a/S1_z80_dasm.7z

Еще, если тебя сильно интерисуют DAC-драйвера, советую посмотреть мою гордость: драйвер Mega PCM =) Он заточен под SMPS Соник 1, в замену его родного, не очень функционального драйвера, хотя драйвер может использоваться где угодно и для чего угодно.
Его особенности:

Цитата
* Автоматическое переключение банков (благодаря чему драйвер может воспроизводить сэмплы любого размера, вплоть до 8 МБ, им даже можно играть песни)
* Поддержка двух звуковых форматов (8 bit PCM и 4 bit DPCM)
* Расширенное управление воспроизведением: Стоп, Пауза, Повтор, Приоритет
* Панорамирование звука (невероятно, но этого не было в родном драйвере Соник 1)
* (В SMPS Соник 1) До $5F слотов для сэмплов

Что самое невероятное, несмотря на перегруженность новыми функциями (ничего из вышеперечисленного не было в оригинальном драйвере), он умудуряется работать немного быстрее старого драйвера, потому что я оптимизировал все по максимуму. Более быстрая работа означает, что сэмплы можно играть на более высоких частотах (выше 27 кГц, старый драйвер играл примерно 23-24 кГц)

http://forum.sonic-world.ru/topic/20447-sonic-1-mega-pcm-driver/ - Драйвер с открытым исходным кодом.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
за дравину респект, правда чтото подобное я сам уже написал.
правда до паузы я не додумался)
« Последнее редактирование: 12 Ноябрь 2012, 08:20:45 от Segaman »

Оффлайн SEGADreamFAN

  • Пользователь
  • Сообщений: 3892
  • Пол: Мужской
  • Lets PLAY!
    • Просмотр профиля
vladikcomper, Спасибо за чудесный драйвер! Реально крутая вещица раскрывающая возможности СМД ещё больше.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Блин, с GEMS бы так (.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
пусть :)
полюбому лучше слушать такое стерео чем хреновое моно в оригинале.
блин это то же самое что китацские колонки наворачивать.
у мну были одни. так они моно. я их разобрал, узнал че за усилок стоит. стоял стерео, но звук моно.
изучил схему...спаяли вместе :lol:

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
vladikcomper, тесты на железе были? узреть можно?

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Конечно были. Все выпущенные версии Mega PCM и дополнения к ним (в виде гидов для Соник 1) проверялись на реальном железе, и широкой общественности уже предоставлялся полностью работоспособный продукт, что было подтверждено экспериментально =)

К сожалению, у меня нет флэш катриджа, так что приходилось просить разных людей. В частности, я протестировал и это:
http://www.youtube.com/watch?v=LCDx7YUzFZ4

Человек, который для меня это протестировал, даже сделал запись звука с железа, так что я сам мог услышать, как оно в реале звучит. Оказалось довольно впечатляюще, но чуть хуже, чем в эмуляторах, потому что на реальном железе действуют многие факторы, которые удерживают работу Z80, а значит и вывод звука (например, Z80 останавливается, когда выполняется DMA, что не эмулируют эмуляторы. во всех деталях я это описал здесь: http://forum.sonic-world.ru/topic/20447-sonic-1-mega-pcm-driver/page__st__25#entry253074637)

Узреть, увы не получится. Запись ту я уже удалил, когда чистил файлы.
Добавлено позже:
Цитата
Блин, с GEMS бы так (.
С GEMS такого точно не добиться, как и со всеми звуковыми движками, которые полностью работают на Z80. Они должны каждый кадр отвлекаться на обновление FM/PSG звука, так что непрерывно выводить DAC никак не получится. Задержки в выводе вызовут нехилое падения качества.

Например, звуковая волна была такой:

а из-за задержек вывода звука сильно искажается:

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9364
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Цитата: vladikcomper
на реальном железе действуют многие факторы, которые удерживают работу Z80, а значит и вывод звука (например, Z80 останавливается, когда выполняется DMA, что не эмулируют эмуляторы.

а ты уверен в этом ? если мне не изменяет склероз, во время DMA Z80 вполне себе продолжает работать, разумеется в это время обращаться к области картриджа нельзя.
то есть если Z80 будет играть PCM из буфера в своей памяти (который периодически должен наполняться M68K) вывод звука будет постоянным и равномерным.

и я кстати не уверен, что нормальные эмуляторы типа Regen или GenesisPlusGX не эмулируют это дело.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Добавлено позже:С GEMS такого точно не добиться, как и со всеми звуковыми движками, которые полностью работают на Z80.
vladikcomper, твой драйвер что ли не только в Z80 работает? он ещё и жрёт постоянно такты M68k?
моё представление крутого звукового драйвера: живёт в z80, а M68k только посылает команды. Ну и логично время от времени z80 читает через своё "окно" - нужный ему участок рома.
Добавлено позже:
На сколько я понимаю, z80 работает параллельно с M68k, и M68k не должен подпинывать z80 никакими прерываниями или прочей лабудой.
Единственное, ага, отсановки могут быть только во время синхронизаций и во время "не успевания" чего-либо, например чтения ))).

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
MetalliC, ты гений!
так же по моему и в гемс делается.
сам видел в дюне.

Оффлайн vladikcomper

  • Пользователь
  • Сообщений: 57
  • Пол: Мужской
    • Просмотр профиля
Цитата
а ты уверен в этом ? если мне не изменяет склероз, во время DMA Z80 вполне себе продолжает работать, разумеется в это время обращаться к области картриджа нельзя.
Да, во время DMA Z80 может спокойно работать, пока он не обратиться к РОМу.
Обращаться к РОМу можно, но как раз при этом Z80 останавливается вместе с 68K, пока DMA не будет завершен (только тогда 68K даст Z80 ответ).

В моем представлении, написать хороший DAC-драйвер, который бы не обращался постоянно к РОМу, нереально.
Когда-то я рассматривал идею использования буферов, но по моим прикидкам, это выходит нереально невыгодно.

Использование буферов требует намного больше ресурсов, как памяти Z80, так и времени на его наполнение. В случае с прямым чтением из РОМа надо просто прочитать, а в случае с буфером, нужно прочитать, сохранить, чтобы потом прочитать. Скажем, чтобы воспроизводить сэмпл на частоте дискретизации ~26 kHz, нужно за один кадр заносить в буфер примерно 433 байта. Такой объем памяти будет переноситься очень долго (к тому же речь идет о Z80 и его 8-битной шине), а это выливается в задержки в воспроизведении. Качество будет хуже некуда.

Цитата
то есть если Z80 будет играть PCM из буфера в своей памяти (который периодически должен наполняться M68K) вывод звука будет постоянным и равномерным.
Наполнение со стороны 68K еще хуже. Замучаешься с синхронизацией. Z80 не может сгенерировать прерывание для 68K, чтобы пополнить буфер в нужный момент. Т.е. 68K понятия не имеет, когда наполнить буфер, и сколько z80 успеет проиграть за определенный интервал времени.

И Z80 все равно придется останавливать во время выполнения, а значит - от какой проблемы пытались уйти, к тому и придем.

Цитата
и я кстати не уверен, что нормальные эмуляторы типа Regen или GenesisPlusGX не эмулируют это дело.
Да, эмуляторы остановку Z80 при DMA не эмулируют. В этом я сам убедился.
Я также сомневаюсь, что они эмулируют так называемый 'cycle stealing' между процессорами. Когда Z80 обращается к РОМу через шину 68K, он крадет у 68K по 4 цикла на каждый акт чтения или записи (да, Z80 может даже писать в 68K RAM, проверено на железе).

Цитата
vladikcomper, твой драйвер что ли не только в Z80 работает? он ещё и жрёт постоянно такты M68k?
У меня лишь DAC-драйвер. Все, что он делает - проигрывает PCM-ки (но делает это он профессионально =Р).
В Соник 1 используется звуковой движок SMPS, и он работает на стороне 68K. Все такие движки состоят из двух частей: сам движок, обновляющий FM/PSG (со стороны 68k), и собственно DAC-драйвер (со стороны Z80). Mega PCM - это мой новый драйвер, который может заменить родной драйвер в Соник 1, чтобы расширить возможности и качество воспроизведения цифровых сэмплов в игре.

Да, когда звуковой движок работает на стороне 68k, это отнимает немного времени от работы движка самой игры. Но у них есть одно преимущество. Только с ними можно добиться максимально возможного качества воспроизведения DAC-сэмплов (что я и делаю =Р). Ведь Z80 может непрерывно выдавать звук, не отвлекаясь ни на что. А в движках полностью на Z80, Z80 должен отвлекаться на обновление FM/PSG.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9364
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Цитата: vladikcomper
Скажем, чтобы воспроизводить сэмпл на частоте дискретизации ~26 kHz, нужно за один кадр заносить в буфер примерно 433 байта. Такой объем памяти будет переноситься очень долго

8бит 26кГц нежатый pcm это жирно слишком. да и где такой объем хранить ? карика не хватит же
в идеале нужно чтобы хватало 256б буфера, например пользовать 4бит ADPCM (или другое сжатие) и/или меньшую частоту.
Цитата: vladikcomper
Наполнение со стороны 68K еще хуже. Замучаешься с синхронизацией. Z80 не может сгенерировать прерывание для 68K, чтобы пополнить буфер в нужный момент. Т.е. 68K понятия не имеет, когда наполнить буфер, и сколько z80 успеет проиграть за определенный интервал времени.

не вижу никаких проблем, с кольцевым буфером на стороне Z80 в 256байт всё легко и просто.
Z80 просто извлекает из этого буфера данные и играет, даже проверок при инкременте не нужно - допустим если указатель на буфер в HL - INC L. из минусов - этот L нужно постоянно записывать в память.

далее, раз в кадр M68K останавливает зилог, читает где сейчас его указатель, также берет указатель куда был записан последний байт в прошлый раз, вычитаем и получаем кол-во байт которое надо "долить", ну и доливает их в буферок.
короче, реализуем самый элементарнейший ринг-буфер.

и что-то мне кажется, что копирование не более чем 256байт один раз в кадр даст ощутимый глюк звука.

Оффлайн feos

  • Пользователь
  • Сообщений: 785
  • Пол: Мужской
    • Просмотр профиля
vladikcomper, ты случайно не эмукодер?