Sound Hacking/MSX Computer

From vgmrips

Simple Triggers

Game Developer Music Trigger + Comments
... ... maincpu.b@YYYY = xx

Advanced Hacks

Eggerland 2

General ROM locations:

8520 - play music (needs ID to be loaded to register A; 00h=stop, 01h~1Dh = valid)
8537 - play PCM voice(needs ID to be loaded to register A; 00h~02h = valid)

Sound Bank calls:
4000 = StopMusic
4003 = PlayMusic
4006 = wait for something
4009 = UpdateSound

ROM patches:

play voice, then freeze:
00CD    3E id       LD      A, id
00CF    CD 37 85    CALL    8537h   ; call PlayVoice
00D2    18 FE       JR      $

skip voice, play music, then freeze
00CE    90 90 90    NOP / NOP / NOP (replace CALL 8537h)

00D8    3E id       LD      A, id
00DA    CD 20 85    CALL    8520h   ; call PlayMusic
00DD    18 FF       JR      $

Seed of Dragon

Disk 1: BP 0525 then change register A value

Disk 2 & 3: BP 0B3B then change value @0B7D

Zoids

Note: Offsets below refer to the CPU space. When modifying the ROM, you have to remap the offsets from CPU space to ROM space.
CPU space layout:

  • ROM bank: 4000~7FFF (CPU space), equals 0000~3FFF in the ROM while processing sound
  • MSX RAM: C000~FFFF

General ROM locations:

59E8 - check whether or not Track [Register A] is already playing
59F7 - Play Track with ID [Register A] (puts it into Track List), valid IDs are 00h..27h
5A2E - Stop All Sound
5BBC - Sound Queue processing
5C82 - start of AY8910 register write routine
5CA3~5CB0 - AY8910 register initialization values
BEC6~BED4 - stage music track list (3 IDs per song) [ROM offset 017EC6]
C192~C19F - AY8910 register cache (for registers 00h..0Eh)
C1A0~C1A7 - list of active tracks (0FFh = inactive)
C1A8~C1E7 - track RAM (8 bytes per track)

Sound Test Hack:

1. disable register write optimization
5C88    00 00       NOP / NOP       ; dummy out the JR that skips writing to the AY8910

2. play an arbitrary song at the title screen
4286    3E tt       LD      A, tt   ; load first track ID (must be 01h, 04h, 07h, ..., 25h)
4288    06 03       LD      B, 3    ; each song has 3 tracks
428A    F5          PUSH    AF
428B    C5          PUSH    BC
428C    CD F7 59    CALL    59F7h   ; play track
428F    C1          POP     BC
4290    F1          POP     AF
4291    3C          INC     A
4292    10 F6       DJNZ    428Ah

3. freeze the game after starting the song
4294    18 FE       JR      $

known IDs:

  • music: 04/05/06, 07/08/09, 0B/0C/0D, 0E/0F/10, 14/15/16, 17/18/19, 1D/1E/1F, 20/21/22, 23/24/25
  • SFX: 03, 0A, 26