Автор Тема: [NES] Guardian Legend Устройство Звука, RAM имена $300-$3FF  (Прочитано 419 раз)

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

Оффлайн teremochek

  • Пользователь
  • Сообщений: 100
    • Просмотр профиля
[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
« Последнее редактирование: 30 Апрель 2025, 23:15:50 от teremochek »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5465
    • Просмотр профиля
Потом можете добавить RAM map сюда https://datacrystal.tcrf.net/wiki/The_Guardian_Legend. Или на tasvideos по аналогии https://tasvideos.org/GameResources/NES/MikeTysonsPunchout/RamMap.

Оффлайн teremochek

  • Пользователь
  • Сообщений: 100
    • Просмотр профиля
Что-бы упростить осмысление переменных 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

  • Пользователь
  • Сообщений: 100
    • Просмотр профиля
[NES] Guardian Legend Устройство Звука, RAM имена $300-$3FF
« Ответ #3 : 28 Апрель 2025, 19:29:14 »
(Обновление)

      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

  • Пользователь
  • Сообщений: 100
    • Просмотр профиля
[NES] Guardian Legend Устройство Звука, RAM имена $300-$3FF
« Ответ #4 : 30 Апрель 2025, 23:33:02 »
   Как в общем приблизительно функционирует проигрывание звука?
По указателю находится заголовок трека, который часто состоит из трёх
инструментов. Прочитав параметры,
каждый инструмент начинает играть со своего адреса. Обычно, во время игры инструмент 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)

Полный лист Звуковых кодов узнать точнее будет можно после детального разбора
ассемблера.