| Разработка и ромхакинг > Ромхакинг |
| [NES] Guardian Legend - устройство звука (RAM $300-$3FF) |
| (1/1) |
| teremochek:
[NES] Guardian Legend Планирую проименовать память третьей страницы ($300-$3FF), которая (как известно) управляет звуком и музыкой в игре! На данный момент не известно ни одного имени, но кое-что открыто мною в РОМе. Думаю это несколько облегчит задачу. Итак, сам драйвер располагается в нулевом банке. (Автор: Takayuki "Jemini" Hirono) $ 01B04 - 01B93 Указатели на треки (72 шт.) $ 01B94 - 03F9D Музыка и звуки. $ 0185A - 01932 Частоты звукоряда Указатель ссылается на заголовок трека. который состоит из: заголовков инструментов и одного байта. (Кол-во инструментов) Заголовок инструмента (10 байт): 00 - (№) инструмента (00-03) 04 05 для SFX 01 - ? 01,02,03,41,61,00 02 - (тембр / громкость) - F/F 03 - (атака) 00-полно, 01-легато, 02-03 стакато 04 - (FX) 01-вибрато, 02-тремоло, 04-глиссандо, 05-hit, 06-fx.. 05 - (тональность) 06 - (темп) чем больше, тем медленнее 07 - (инструмент) 00-01-square1&2, 02-bass, 03-FX, 04-Triangle 08 - Указатель адреса старта инструмента Lo 09 - Указатель адреса старта инструмента Hi |
| Sharpnull:
Потом можете добавить RAM map сюда https://datacrystal.tcrf.net/wiki/The_Guardian_Legend. Или на tasvideos по аналогии https://tasvideos.org/GameResources/NES/MikeTysonsPunchout/RamMap. |
| teremochek:
Что-бы упростить осмысление переменных RAM, можно ширину окна сделать равной числу групп. В текущем случае подобралась ширина = 7 байт. Внимание на табло! (так в одной телепередаче говорили :D). <Табло> [ Указанное вложение недоступно ] Определённо видно вертикальную линию в три байта! Выясняем - каждая линия отвечает за один звуковой канал! И соответственно всего каналов = 7. Обычно 4 канала занимает музыка, остальные 3 для звуков/эффектов. Далее поочереди подменяем значения, и слушаем результат. Выясняется: xx xx xx xx xx xx xx (7 байт = 7 каналов ) ... $ 335-33B + (Tone) $ 33С-342 + (Tempo) Замедление $ 343-349 + (Instrument) (Square1, Square2, Triangle, Noise) $ 34A-350 + (Instrument address loByte) $ 351-357 + (Instrument address hiByte) $ 358-35E + (Tempo2 Ускорение) $ 35F-365 + TimerHigh $ 366-36C + TimerHigh limit $ 36D-373 + Instrument Data $ 374-37A + TimerLow Dec ... |
| teremochek:
(Обновление) TGL Sound RAM $300-3FF // Управление звуком (Sound Engine Control) $ 300 Трек проигрался (№ 26,27,01,..) $ 301 PauseSoundEngine1 enable = 3,2 disable = 1,0 $ 302 PauseSoundEngine2 FF when pause = 06 $ 303 ? $ 304 Номер трека $ 305 General Volume $ 306 General Channels (S1 S2 T N) (4) $ 307 не используется, но любое значение зацикливает звук // Предполагаю это данные, которые записываюся прямо в регистры PPU. $ 308-30B Square 1 $ 30C-30F Square 2 $ 310-313 Triangle $ 314-317 Noise (ссылка для подробного объяснения) http://dendy.migera.ru/nes/g05.html $ 318 Общий байт - additionalSubChannell xx xx xx xx xx xx xx (7 байт = 7 подКаналов ) $ 319-31F additionalSubChannell // если первый бит, то к подканалу подлючен дополнительный подканал Noise $ 320-326 (Tembr / volumeLimit) // !Вероятнее это - "ddle nnnn – duty, loop env.." см. ссылку выше $ 327-32D (Atack) $ 32E-334 (Fx) $ 335-33B (Tone) $ 33С-342 (Tempo) // Замедление $ 343-349 (Instrument) (Square1, Square2, Triangle, Noise) $ 34A-350 (Instrument address loByte) $ 351-357 (Instrument address hiByte) $ 358-35E (Tempo2) // Ускорение $ 35F-365 TimerHigh $ 366-36C TimerHigh limit $ 36D-373 Instrument Data $ 374-37A TimerLow (-) $ 37B-381 (note Lenght) // Длинна ноты $ 382-388 (TembrMirror / volume) $ 389-38F RetryLoop counter (-) $ 390-396 RetryLoop counter Low (only used in track 11&12) $ 397-39D offset_of_timer_pause // Пауза после каждой ноты (Шаг) $ 39E-3A4 timer_pause $ 3A5-3AC Volume Fade // Окончание ноты с уменьшением громкости $ 3AB-3B2 FX_timer $ 3B3-3B9 toneLB // Период частоты $ 3BA-3C0 toneHB $ 3C1-3C7 sfx timerOffset Шаг // Эти переменные используются только для звуков $ 3C8-3CE sfx timer (+) $ 3CF-3D5 sfx Укорочение длинны $ 3D6-3DC sfx (Noise+Triangle tone) Тембр ударных, исп всего в двух треках $ 3DD-3E3 Номер Трека в подКанале $ 3E4-3EA Ограничитель period High $ 3EB-3F1 Noise DATA (Used only 2-3 Noise_subchannels 3EC& 3ED) $ 3F2-3F8 Noise Addr loByte $ 3F9-3FF Noise Addr hiByte |
| teremochek:
Как в общем приблизительно функционирует проигрывание звука? По указателю находится заголовок трека, который часто состоит из трёх инструментов. Прочитав параметры, каждый инструмент начинает играть со своего адреса. Обычно, во время игры инструмент Triangle вызывает в свой дополнительный подканал Ударные - Noise. Данные инструментов состоят из параметров высоты и длинны, и спец кодов, которые приведены ниже: $ 80 xx xx (JUMP) To Address $ 81 $70 xx xx (RETRY) Повторить муз отрывок по адресу $ 82 (STOP) $ 86 xx (Тональность) $ 88 $70 xx (RETRY count) Сколько раз повторить рутину ($81 $70) $ 8F xx (Sync TIME) Начальное время синхронизация инструментов $ 90 xx xx (Drums) Вызов барабанов по адресу $ 93 xx (Sound) Вызов целого звука по адресу Drums: $ 00 xx xx (Jump) Полный лист Звуковых кодов узнать точнее будет можно после детального разбора ассемблера. |
| Навигация |
| Главная страница сообщений |