Actions

SCHG How-to

Difference between revisions of "Port Sonic 3's Sound Driver to Sonic 2"

From Sonic Retro

(sound effects)
(Lotsa cleanup, but I think a lot more will be needed, ignoring that the guide's unfinished, look at the talk page)
Line 1: Line 1:
{{GuideBy|Kram1024}}<br>
+
{{GuideBy|Kram1024}}
  
You probably saw my method of placing the sonic3 sound driver in sonic 1. Well, we are going to put it in sonic2 Rev01 this time. The changes are very similar to that of the sonic1 port.  over the years I found that the s3 driver actually works without a sonic game with minimal hacking (it just needs a wait routine to time it.Thus it is actually possible to put it into sonic2 with rather ease as well and into a homebrew too, though in homebrew it might not be legal anyways due to IP laws but sega no longer enforces them on genesis games anyways, thus why nobody gets sued for sonic hacks, but lets get back to the hack.
+
You probably saw my method of placing the Sonic 3 sound driver in Sonic 1. Well, we are going to put it in Sonic 2 Rev01 this time. The changes are very similar to that of the Sonic 1 port.  Over the years, I found that the S3 driver actually works without a Sonic game with minimal hacking (it just needs a wait routine to time it). Thus it is actually possible to put it into Sonic 2 with relative ease as well and into a homebrew too, though in homebrew it might not be legal anyways due to IP laws but Sega no longer enforces them on Genesis games anyways, thus why nobody gets sued for Sonic hacks, but let's get back to the hack.
  
 
==Overview==
 
==Overview==
First off, Sonic 3's sound driver has the V_Int reloader built into it so it is not needed, some routines need replacement, sounds need fixing, and we need to replace the sounds and music.  We will be using the latest github version, if you wish to do it via a different version, I am sure you can come up with a way that works by seeing what changes I made in the github version.
+
First off, Sonic 3's sound driver has the V_Int reloader built into it so it is not needed, some routines need replacement, sounds need fixing, and we need to replace the sounds and music.  We will be using the latest [[Disassemblies#Revision_01|Github version of Sonic 2]], if you wish to do it via a different version, I am sure you can come up with a way that works by seeing what changes I made in the Github version.
  
==Preparing to use Sonic 3/K/3K sound system==
+
==Preparing to Use Sonic 3/K/3K Sound System==
The Vertical Interrupt and Horizontal Interrupt need to be fixed, since the sonic 1/2 system uses them but the Sonic 3/K/3K system doesn't.
+
The Vertical Interrupt and Horizontal Interrupt need to be fixed, since the Sonic 1/2 system uses them but the Sonic 3/K/3K system doesn't.
  
===Removal of all callbacks to the s2 driver in the vertical interupt===
+
===Removal of all Callbacks to the S2 Driver in the Vertical Interrupt===
Unlike the s1 driver, sonic2 actually calls the driver over and over again after stopping the z80 then restarting the z80. The playsound routine of our new driver will do that automatically, so we do not really need any of that kind of code.
+
Unlike the S1 driver, Sonic 2 actually calls the driver over and over again after stopping the Z80 then restarting the Z80. The PlaySound routine of our new driver will do that automatically, so we do not really need any of that kind of code.
we will search for all instances of:  
+
We will search for all instances of:  
 
<asm>
 
<asm>
 
stopZ80 ; stop the Z80
 
stopZ80 ; stop the Z80
Line 17: Line 17:
 
startZ80 ; start the Z80
 
startZ80 ; start the Z80
 
</asm>
 
</asm>
and comment it out or just plain remove it. I prefer to replace it with a nop instruction, but even comments or removal work as well.
+
and comment it out or just plain remove it. I prefer to replace it with a nop instruction, but even comments or removal work as well.
In case you are a little lazy, here is a list of routines with this code:<br>
+
In case you are a little lazy, here is a list of routines with this code:
'''VintSub0'''<br>
+
*'''VintSub0'''
'''Loc_54A'''<br>
+
*'''Loc_54A'''
'''Vint0_noWater''' (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)<br>
+
*'''Vint0_noWater''' (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)
'''loc_748''' (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)<br>
+
*'''loc_748''' (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)
'''Vint10_specialStage''' (only touch the " jsr (sndDriverInput).l)<br>
+
*'''Vint10_specialStage''' (only touch the " jsr (sndDriverInput).l)
'''loc_92A+++++''' (only touch the " jsr (sndDriverInput).l)<br>
+
*'''loc_92A+++++''' (only touch the " jsr (sndDriverInput).l)
'''loc_BD6''' (only touch the " jsr (sndDriverInput).l)<br>
+
*'''loc_BD6''' (only touch the " jsr (sndDriverInput).l)
'''VintSub18''' (only touch the " bsr.w sndDriverInput)<br>
+
*'''VintSub18''' (only touch the " bsr.w sndDriverInput)
'''VintSub16''' (only touch the " bsr.w sndDriverInput)<br>
+
*'''VintSub16''' (only touch the " bsr.w sndDriverInput)
'''Loc_EFE''' (only touch the " bsr.w sndDriverInput)<br>
+
*'''Loc_EFE''' (only touch the " bsr.w sndDriverInput)
  
 
===Removal of sndDriverInput===
 
===Removal of sndDriverInput===
Okay, we disabled the sonic2 z80 sound driver junk, but we still have a vestage of the old driver taking up valuable rom space. Locate:
+
Okay, we disabled the Sonic 2 Z80 sound driver junk, but we still have a vestige of the old driver taking up valuable ROM space. Locate:
 
<asm>
 
<asm>
 
sndDriverInput:
 
sndDriverInput:
Line 75: Line 75:
 
; End of function sndDriverInput
 
; End of function sndDriverInput
 
</asm>
 
</asm>
and remove it.  We don't need it anymore because the sonic 3 driver does this stuff on its own in its own way
+
and remove it.  We don't need it anymore because the Sonic 3 driver does this stuff on its own, in its own way.
  
==Upgrading the Load Driver Routine==
+
==Upgrading the SoundDriverLoad Routine==
Okay now we are finally ready to install the sonic 3 sound driver itself. SoundDriverLoad is located at the end of the rom in sonic2 instead of the beginning, but we have some artwork entangled with it as well. We will have to relocated it while we insert the new code. Locate: <asm>
+
Okay, now we are finally ready to install the Sonic 3 sound driver itself. SoundDriverLoad is located at the end of the ROM in Sonic 2 instead of the beginning, but we have some artwork entangled with it as well. We will have to relocate it while we insert the new code.
; ---------------------------------------------------------------------------
 
; Subroutine to load the sound driver
 
; ---------------------------------------------------------------------------
 
; sub_EC000:
 
SoundDriverLoad:
 
move sr,-(sp)
 
movem.l d0-a6,-(sp)
 
move #$2700,sr
 
lea (Z80_Bus_Request).l,a3
 
lea (Z80_Reset).l,a2
 
moveq #0,d2
 
move.w #$100,d1
 
move.w d1,(a3) ; get Z80 bus
 
move.w d1,(a2) ; release Z80 reset (was held high by console on startup)
 
- btst d2,(a3)
 
bne.s - ; wait until the 68000 has the bus
 
jsr DecompressSoundDriver(pc)
 
btst #0,(VDP_control_port+1).l ; check video mode
 
sne (Z80_RAM+zPalModeByte).l ; set if PAL
 
move.w d2,(a2) ; hold Z80 reset
 
move.w d2,(a3) ; release Z80 bus
 
moveq #$E6,d0
 
- dbf d0,- ; wait for 2,314 cycles
 
move.w d1,(a2) ; release Z80 reset
 
movem.l (sp)+,d0-a6
 
move (sp)+,sr
 
rts
 
 
 
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
 
; slightly modified Saxman decompression of the sound driver
 
; a4 == $A00000 (start of Z80 RAM)
 
; a5 == current position in Z80 RAM?
 
; a6 == current position in compressed sound driver?
 
; d0 == data to decompress? (byte)
 
; d4 == ???
 
; d5 == ???
 
; d6 == ???
 
; d7 == bytes left to decompress
 
; loc_EC04A:
 
DecompressSoundDriver:
 
lea Snd_Driver(pc),a6
 
; WARNING: the build script needs editing if you rename this label
 
movewZ80CompSize: move.w #Snd_Driver_End-Snd_Driver,d7 ; patched (by fixpointer.exe) after compression since the exact size can't be known beforehand
 
moveq #0,d6
 
lea (Z80_RAM).l,a5
 
moveq #0,d5
 
lea (Z80_RAM).l,a4
 
 
 
loc_EC062:
 
lsr.w #1,d6
 
btst #8,d6
 
bne.s +
 
jsr sub_EC0DE(pc)
 
move.b d0,d6
 
ori.w #$FF00,d6
 
+
 
btst #0,d6
 
beq.s loc_EC086
 
jsr sub_EC0DE(pc)
 
move.b d0,(a5)+
 
addq.w #1,d5
 
bra.w loc_EC062
 
; ---------------------------------------------------------------------------
 
 
 
loc_EC086:
 
jsr sub_EC0DE(pc)
 
moveq #0,d4
 
move.b d0,d4
 
jsr sub_EC0DE(pc)
 
move.b d0,d3
 
andi.w #$F,d3
 
addq.w #2,d3
 
andi.w #$F0,d0
 
lsl.w #4,d0
 
add.w d0,d4
 
addi.w #$12,d4
 
andi.w #$FFF,d4
 
move.w d5,d0
 
andi.w #$F000,d0
 
add.w d0,d4
 
cmp.w d4,d5
 
bhs.s loc_EC0CC
 
subi.w #$1000,d4
 
bcc.s loc_EC0CC
 
add.w d3,d5
 
addq.w #1,d5
 
 
 
- move.b #0,(a5)+
 
dbf d3,-
 
 
 
bra.w loc_EC062
 
; ---------------------------------------------------------------------------
 
 
 
loc_EC0CC:
 
add.w d3,d5
 
addq.w #1,d5
 
 
 
- move.b (a4,d4.w),(a5)+
 
addq.w #1,d4
 
dbf d3,-
 
 
 
bra.w loc_EC062
 
; End of function DecompressSoundDriver
 
 
 
 
 
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
 
 
 
 
 
sub_EC0DE:
 
move.b (a6)+,d0
 
subq.w #1,d7
 
bne.s +
 
addq.w #4,sp
 
+
 
rts
 
; End of function sub_EC0DE
 
 
 
; ===========================================================================
 
; ---------------------------------------------------------------------------
 
; S2 sound driver (Sound driver compression (slightly modified Saxman))
 
; ---------------------------------------------------------------------------
 
; loc_EC0E8:
 
Snd_Driver:
 
save
 
include "s2.sounddriver.asm" ; CPU Z80
 
restore
 
padding off
 
!org (Snd_Driver+Size_of_Snd_driver_guess) ; don't worry; I know what I'm doing
 
 
 
 
 
; loc_ED04C:
 
Snd_Driver_End:
 
 
 
 
 
 
 
 
 
; ---------------------------------------------------------------------------
 
; Filler (free space)
 
; ---------------------------------------------------------------------------
 
; the DAC data has to line up with the end of the bank.
 
 
 
; actually it only has to fit within one bank, but we'll line it up to the end anyway
 
; because the padding gives the sound driver some room to grow
 
cnop -Size_of_DAC_samples, $8000
 
 
 
; ---------------------------------------------------------------------------
 
; DAC samples
 
; ---------------------------------------------------------------------------
 
; loc_ED100:
 
SndDAC_Start:
 
 
 
SndDAC_Sample1:
 
BINCLUDE "sound/DAC/Sample 1.bin"
 
SndDAC_Sample1_End
 
 
 
SndDAC_Sample2:
 
BINCLUDE "sound/DAC/Sample 2.bin"
 
SndDAC_Sample2_End
 
 
 
SndDAC_Sample5:
 
BINCLUDE "sound/DAC/Sample 5.bin"
 
SndDAC_Sample5_End
 
 
 
SndDAC_Sample6:
 
BINCLUDE "sound/DAC/Sample 6.bin"
 
SndDAC_Sample6_End
 
 
 
SndDAC_Sample3:
 
BINCLUDE "sound/DAC/Sample 3.bin"
 
SndDAC_Sample3_End
 
 
 
SndDAC_Sample4:
 
BINCLUDE "sound/DAC/Sample 4.bin"
 
SndDAC_Sample4_End
 
 
 
SndDAC_Sample7:
 
BINCLUDE "sound/DAC/Sample 7.bin"
 
SndDAC_Sample7_End
 
 
 
SndDAC_End
 
 
 
if SndDAC_End - SndDAC_Start > $8000
 
fatal "DAC samples must fit within $8000 bytes, but you have $\{SndDAC_End-SndDAC_Start } bytes of DAC samples."
 
endif
 
if SndDAC_End - SndDAC_Start > Size_of_DAC_samples
 
fatal "Size_of_DAC_samples = $\{Size_of_DAC_samples}, but you have $\{SndDAC_End-SndDAC_Start} bytes of DAC samples."
 
endif
 
 
 
; ---------------------------------------------------------------------------
 
; Music pointers
 
; ---------------------------------------------------------------------------
 
align $8000
 
 
 
; loc_F0000:
 
MusicPoint1:
 
MusPtr_Continue: rom_ptr_z80 Mus_Continue-MusicPoint2
 
 
 
 
 
Mus_Continue:  BINCLUDE    "sound/music/Continue.bin"
 
 
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (20 blocks)
 
; Buzzer's fireball
 
ArtNem_Buzzer_Fireball: BINCLUDE "art/nemesis/Fireball 1 (Buzzer).bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (24 blocks)
 
; Waterfall tiles
 
ArtNem_Waterfall: BINCLUDE "art/nemesis/Waterfall tiles.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (16 blocks)
 
; Another fireball
 
ArtNem_HtzFireball: BINCLUDE "art/nemesis/Fireball 2.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (8 blocks)
 
; Bridge in EHZ
 
ArtNem_EHZ_Bridge: BINCLUDE "art/nemesis/EHZ bridge.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (48 blocks)
 
; Diagonally moving lift in HTZ
 
ArtNem_HtzZipline: BINCLUDE "art/nemesis/HTZ zip-line platform.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (4 blocks)
 
; One way barrier from HTZ
 
ArtNem_HtzValveBarrier: BINCLUDE "art/nemesis/One way barrier from HTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (24 blocks)
 
; See-saw in HTZ
 
ArtNem_HtzSeeSaw: BINCLUDE "art/nemesis/See-saw in HTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (24 blocks)
 
; Unused Fireball
 
;ArtNem_F0B06:
 
BINCLUDE "art/nemesis/Fireball 3.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (20 blocks)
 
; Rock from HTZ
 
ArtNem_HtzRock: BINCLUDE "art/nemesis/Rock from HTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (4 blocks)
 
; Orbit badnik from HTZ ; ArtNem_HtzSol:
 
ArtNem_Sol: BINCLUDE "art/nemesis/Sol badnik from HTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (120 blocks)
 
; Large spinning wheel from MTZ
 
ArtNem_MtzWheel: BINCLUDE "art/nemesis/Large spinning wheel from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (9 blocks)
 
; Indent in large spinning wheel from MTZ
 
ArtNem_MtzWheelIndent: BINCLUDE "art/nemesis/Large spinning wheel from MTZ - indent.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (8 blocks)
 
; Spike block from MTZ
 
ArtNem_MtzSpikeBlock: BINCLUDE "art/nemesis/MTZ spike block.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (15 blocks)
 
; Steam from MTZ
 
ArtNem_MtzSteam: BINCLUDE "art/nemesis/Steam from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (8 blocks)
 
; Spike from MTZ
 
ArtNem_MtzSpike: BINCLUDE "art/nemesis/Spike from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (54 blocks)
 
; Similarly shaded blocks from MTZ
 
ArtNem_MtzAsstBlocks: BINCLUDE "art/nemesis/Similarly shaded blocks from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (9 blocks)
 
; Lava bubble from MTZ
 
ArtNem_MtzLavaBubble: BINCLUDE "art/nemesis/Lava bubble from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (4 blocks)
 
; Lava cup
 
ArtNem_LavaCup: BINCLUDE "art/nemesis/Lava cup from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (8 blocks)
 
; End of a bolt and rope from MTZ
 
ArtNem_BoltEnd_Rope: BINCLUDE "art/nemesis/Bolt end and rope from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (12 blocks)
 
; Small cog from MTZ
 
ArtNem_MtzCog: BINCLUDE "art/nemesis/Small cog from MTZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (4 blocks)
 
; Unknown. Four blocks that are all the same colour from MTZ.
 
ArtNem_MtzUnkBlocks: BINCLUDE "art/nemesis/Unknown MTZ sprite.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (32 blocks)
 
; Large wooden box from MCZ ; ArtNem_F187C:
 
ArtNem_Crate: BINCLUDE "art/nemesis/Large wooden box from MCZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (26 blocks)
 
; Collapsing platform from MCZ ; ArtNem_F1ABA:
 
ArtNem_MCZCollapsePlat: BINCLUDE "art/nemesis/Collapsing platform from MCZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (16 blocks)
 
; Switch that you pull on from MCZ ; ArtNem_F1C64:
 
ArtNem_VineSwitch: BINCLUDE "art/nemesis/Pull switch from MCZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (10 blocks)
 
; Vine that lowers in MCZ ; ArtNem_F1D5C:
 
ArtNem_VinePulley: BINCLUDE "art/nemesis/Vine that lowers from MCZ.bin"
 
; --------------------------------------------------------------------
 
; Nemesis compressed art (20 blocks)
 
; Log viewed from the end for folding gates in MCZ (start of MCZ2) ; ArtNem_F1E06:
 
ArtNem_MCZGateLog: BINCLUDE "art/nemesis/Drawbridge logs from MCZ.bin"
 
 
 
; ----------------------------------------------------------------------------------
 
; Filler (free space)
 
; ----------------------------------------------------------------------------------
 
; the PCM data has to line up with the end of the bank.
 
cnop -Size_of_SEGA_sound, $8000
 
 
 
; -------------------------------------------------------------------------------
 
; Sega Intro Sound
 
; 8-bit unsigned raw audio at 16Khz
 
; -------------------------------------------------------------------------------
 
; loc_F1E8C:
 
Snd_Sega: BINCLUDE "sound/PCM/SEGA.bin"
 
Snd_Sega_End:
 
 
 
if Snd_Sega_End - Snd_Sega > $8000
 
fatal "Sega sound must fit within $8000 bytes, but you have a $\{Snd_Sega_End-Snd_Sega} byte Sega sound."
 
endif
 
if Snd_Sega_End - Snd_Sega > Size_of_SEGA_sound
 
fatal "Size_of_SEGA_sound = $\{Size_of_SEGA_sound}, but you have a $\{Snd_Sega_End-Snd_Sega} byte Sega sound."
 
endif
 
 
 
; ------------------------------------------------------------------------------
 
; Music pointers
 
; ------------------------------------------------------------------------------
 
align $8000
 
soundBankStart := *
 
 
 
; loc_F8000:
 
MusicPoint2:
 
MusPtr_CNZ_2P: rom_ptr_z80 Mus_CNZ_2P
 
MusPtr_EHZ: rom_ptr_z80 Mus_EHZ
 
MusPtr_MTZ: rom_ptr_z80 Mus_MTZ
 
MusPtr_CNZ: rom_ptr_z80 Mus_CNZ
 
MusPtr_MCZ: rom_ptr_z80 Mus_MCZ
 
MusPtr_MCZ_2P: rom_ptr_z80 Mus_MCZ_2P
 
MusPtr_ARZ: rom_ptr_z80 Mus_ARZ
 
MusPtr_DEZ: rom_ptr_z80 Mus_DEZ
 
MusPtr_SpecStage: rom_ptr_z80 Mus_SpecStage
 
MusPtr_Options: rom_ptr_z80 Mus_Options
 
MusPtr_Ending: rom_ptr_z80 Mus_Ending
 
MusPtr_EndBoss: rom_ptr_z80 Mus_EndBoss
 
MusPtr_CPZ: rom_ptr_z80 Mus_CPZ
 
MusPtr_Boss: rom_ptr_z80 Mus_Boss
 
MusPtr_SCZ: rom_ptr_z80 Mus_SCZ
 
MusPtr_OOZ: rom_ptr_z80 Mus_OOZ
 
MusPtr_WFZ: rom_ptr_z80 Mus_WFZ
 
MusPtr_EHZ_2P: rom_ptr_z80 Mus_EHZ_2P
 
MusPtr_2PResult: rom_ptr_z80 Mus_2PResult
 
MusPtr_SuperSonic: rom_ptr_z80 Mus_SuperSonic
 
MusPtr_HTZ: rom_ptr_z80 Mus_HTZ
 
MusPtr_ExtraLife: rom_ptr_z80 Mus_ExtraLife
 
MusPtr_Title: rom_ptr_z80 Mus_Title
 
MusPtr_EndLevel: rom_ptr_z80 Mus_EndLevel
 
MusPtr_GameOver: rom_ptr_z80 Mus_GameOver
 
MusPtr_Invincible: rom_ptr_z80 Mus_Invincible
 
MusPtr_Emerald: rom_ptr_z80 Mus_Emerald
 
MusPtr_HPZ: rom_ptr_z80 Mus_HPZ
 
MusPtr_Drowning: rom_ptr_z80 Mus_Drowning
 
MusPtr_Credits: rom_ptr_z80 Mus_Credits
 
 
 
; loc_F803C:
 
Mus_HPZ: BINCLUDE "sound/music/HPZ.bin"
 
Mus_Drowning: BINCLUDE "sound/music/Drowning.bin"
 
Mus_Invincible: BINCLUDE "sound/music/Invincible.bin"
 
Mus_CNZ_2P: BINCLUDE "sound/music/CNZ_2p.bin"
 
Mus_EHZ: BINCLUDE "sound/music/EHZ.bin"
 
Mus_MTZ: BINCLUDE "sound/music/MTZ.bin"
 
Mus_CNZ: BINCLUDE "sound/music/CNZ.bin"
 
Mus_MCZ: BINCLUDE "sound/music/MCZ.bin"
 
Mus_MCZ_2P: BINCLUDE "sound/music/MCZ_2p.bin"
 
Mus_ARZ: BINCLUDE "sound/music/ARZ.bin"
 
Mus_DEZ: BINCLUDE "sound/music/DEZ.bin"
 
Mus_SpecStage: BINCLUDE "sound/music/SpecStg.bin"
 
Mus_Options: BINCLUDE "sound/music/Options.bin"
 
Mus_Ending: BINCLUDE "sound/music/Ending.bin"
 
Mus_EndBoss: BINCLUDE "sound/music/End_Boss.bin"
 
Mus_CPZ: BINCLUDE "sound/music/CPZ.bin"
 
Mus_Boss: BINCLUDE "sound/music/Boss.bin"
 
Mus_SCZ: BINCLUDE "sound/music/SCZ.bin"
 
Mus_OOZ: BINCLUDE "sound/music/OOZ.bin"
 
Mus_WFZ: BINCLUDE "sound/music/WFZ.bin"
 
Mus_EHZ_2P: BINCLUDE "sound/music/EHZ_2p.bin"
 
Mus_2PResult: BINCLUDE "sound/music/2player results screen.bin"
 
Mus_SuperSonic: BINCLUDE "sound/music/Supersonic.bin"
 
Mus_HTZ: BINCLUDE "sound/music/HTZ.bin"
 
Mus_Title: BINCLUDE "sound/music/Title screen.bin"
 
Mus_EndLevel: BINCLUDE "sound/music/End of level.bin"
 
 
 
; The following act mostly like sound effects
 
; despite being listed with the music.
 
; This means they're uncompressed format with absolute pointers
 
; instead of compressed with relative pointers.
 
; Because they have absolute pointers,
 
; they have to be assembled rather than BINCLUDE'd.
 
; See below (right before Sound20) for other notes
 
; about the sound format that apply to these too.
 
 
 
;Mus_ExtraLife: BINCLUDE "sound/music/Extra life.bin"
 
Mus_ExtraLife: dc.w z80_ptr(Mus_EL_Voices),$0603,$02CD
 
dc.w z80_ptr(Mus_EL_DAC),$0000
 
dc.w z80_ptr(Mus_EL_FM1),$E810
 
dc.w z80_ptr(Mus_EL_FM2),$E810
 
dc.w z80_ptr(Mus_EL_FM3),$E810
 
dc.w z80_ptr(Mus_EL_FM4),$E810
 
dc.w z80_ptr(Mus_EL_FM5),$E810
 
dc.w z80_ptr(Mus_EL_PSG1),$D008,$0005
 
dc.w z80_ptr(Mus_EL_PSG2),$DC08,$0005
 
dc.w z80_ptr(Mus_EL_PSG3),$DC00,$0004
 
Mus_EL_FM4: dc.b $E1,$03,$E0,$40,$F6
 
dc.w z80_ptr(+)
 
Mus_EL_FM1: dc.b $E0,$80
 
+ dc.b $EF,$00,$E8,$06,$D9,$06,$03,$03,$06,$06
 
dc.b $E8,$00,$DB,$09,$D7,$D6,$06,$D9,$18,$F2
 
Mus_EL_FM2: dc.b $EF,$01,$E8,$06,$E2,$01,$D6,$06,$03,$03,$06,$06
 
dc.b $E8,$00,$D7,$09,$D4,$D2,$06,$D6,$18,$E2,$01,$F2
 
Mus_EL_FM5: dc.b $E1,$03,$E0,$40,$F6
 
dc.w z80_ptr(+)
 
Mus_EL_FM3: dc.b $E0,$80
 
+ dc.b $EF,$02,$BA,$0C,$80,$06,$BA,$B8,$80,$03
 
dc.b $B8,$06,$80,$03,$B8,$06,$BA,$18,$F2
 
Mus_EL_PSG1: dc.b $E8,$06,$D6,$06,$03,$03,$06,$06,$E8,$00,$D7,$09
 
dc.b $D4,$D2,$06,$D6,$18
 
Mus_EL_PSG2:
 
Mus_EL_PSG3: dc.b $F2
 
Mus_EL_DAC: dc.b $88,$12,$06,$8B,$09,$09,$06,$88,$06,$8A,$88,$8A
 
dc.b $88,$0C,$E4
 
Mus_EL_Voices: dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$00,$1F,$1F,$FF,$0F,$18,$16,$4E,$80
 
dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$00,$1F,$1F,$FF,$0F,$18,$27,$28,$80
 
dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$07,$1F,$1F,$FF,$0F,$18,$27,$28,$80
 
 
 
 
 
;Mus_GameOver: BINCLUDE "sound/music/Game over.bin"
 
Mus_GameOver: dc.w z80_ptr(MusGO_Voices),$0603,$02F2
 
dc.w z80_ptr(MusGOver_DAC),$0000
 
dc.w z80_ptr(MusGOver_FM1),$E80A
 
dc.w z80_ptr(MusGOver_FM2),$F40F
 
dc.w z80_ptr(MusGOver_FM3),$F40F
 
dc.w z80_ptr(MusGOver_FM4),$F40D
 
dc.w z80_ptr(MusGOver_FM5),$DC16
 
dc.w z80_ptr(MusGOver_PSG),$D003,$0005
 
dc.w z80_ptr(MusGOver_PSG),$DC06,$0005
 
dc.w z80_ptr(MusGOver_PSG),$DC00,$0004
 
MusGOver_FM1: dc.b $EF,$00
 
dc.b $F0,$20,$01,$04,$05
 
dc.b $80,$0C,$CA,$12,$80,$06,$CA,$80,$CB,$12,$C8,$1E
 
dc.b $CA,$06,$80,$CA,$80,$CA,$80,$C6,$80,$C4,$12,$C8
 
dc.b $0C,$80,$12,$C9,$04,$80,$C9,$C8,$06,$80,$C7,$80
 
dc.b $C6,$80
 
dc.b $F0,$28,$01,$18,$05
 
dc.b $C5,$60,$F2
 
MusGOver_FM2: dc.b $EF,$01,$80,$01,$D9,$06,$80,$D9,$80,$D6,$80,$D6
 
dc.b $80,$D7,$15,$D7,$1B,$D9,$06,$80,$D9,$80,$D6,$80
 
dc.b $D6,$80,$DC,$15,$DC,$1B,$F2
 
MusGOver_FM3: dc.b $EF,$01,$D6,$0C,$D6,$D2,$D2,$D4,$15,$D4,$1B,$D6
 
dc.b $0C,$D6,$D2,$D2,$D7,$15,$D7,$1B,$F2
 
MusGOver_FM4: dc.b $EF,$02,$E2,$01,$AE,$06,$80,$AE,$80,$A9,$80,$A9
 
dc.b $80,$AC,$15,$AB,$0C,$AC,$03,$AB,$0C,$AE,$06,$80
 
dc.b $AE,$80,$A9,$80,$A9,$80,$B3,$15,$B2,$0C,$B3,$03
 
dc.b $B2,$0C,$AE,$04,$80,$AE,$AD,$06,$80,$AC,$80,$AB
 
dc.b $80,$AB,$60,$E2,$01,$F2
 
MusGOver_FM5: dc.b $EF,$03,$80,$30,$D7,$12,$80,$03,$D7,$1B,$80,$30
 
dc.b $DC,$12,$80,$03,$DC,$1B
 
MusGOver_PSG: dc.b $F2
 
MusGOver_DAC: dc.b $80,$18,$81
 
dc.b $F7,$00,$04
 
dc.w z80_ptr(MusGOver_DAC)
 
dc.b $F2
 
MusGO_Voices: dc.b $3A,$51,$51,$08,$02,$1E,$1E,$1E,$10,$1F,$1F,$1F
 
dc.b $0F,$00,$00,$00,$02,$0F,$0F,$0F,$1F,$18,$22,$24,$81
 
dc.b $3C,$33,$73,$30,$70,$94,$96,$9F,$9F,$12,$14,$00
 
dc.b $0F,$04,$04,$0A,$0D,$2F,$4F,$0F,$2F,$33,$1A,$80,$80
 
dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$07,$1F,$1F,$FF,$0F,$1C,$27,$28,$80
 
dc.b $1F,$66,$53,$31,$22,$1C,$1F,$98,$1F,$12,$0F,$0F
 
dc.b $0F,$00,$00,$00,$00,$FF,$0F,$0F,$0F,$8C,$8A,$8D,$8B
 
 
 
;Mus_Emerald: BINCLUDE "sound/music/Got an emerald.bin"
 
Mus_Emerald: dc.w z80_ptr(MusEmrldVoices),$0703,$01D5
 
dc.w z80_ptr(MusEmeraldDAC),$0000
 
dc.w z80_ptr(MusEmeraldFM1),$F408
 
dc.w z80_ptr(MusEmeraldFM2),$F408
 
dc.w z80_ptr(MusEmeraldFM3),$F407
 
dc.w z80_ptr(MusEmeraldFM4),$F416
 
dc.w z80_ptr(MusEmeraldFM5),$F416
 
dc.w z80_ptr(MusEmeraldFM6),$F416
 
dc.w z80_ptr(MusEmeraldPSG1),$F402,$0004
 
dc.w z80_ptr(MusEmeraldPSG2),$F402,$0005
 
dc.w z80_ptr(MusEmeraldPSG3),$F400,$0004
 
MusEmeraldFM3: dc.b $E1,$02
 
MusEmeraldFM1: dc.b $EF,$00,$C1,$06,$C4,$C9,$CD,$0C,$C9,$D0,$2A,$F2
 
MusEmeraldFM2: dc.b $EF,$00,$BD,$06,$C1,$C4,$C9,$0C,$C6,$CB,$2A,$F2
 
MusEmeraldFM4: dc.b $EF,$01,$C1,$0C,$C1,$06,$C4,$06,$80,$C4,$80,$C9
 
dc.b $2A,$F2
 
MusEmeraldFM5: dc.b $EF,$01,$C9,$0C,$C9,$06,$CD,$06,$80,$CD,$80,$D0
 
dc.b $2A,$F2
 
MusEmeraldFM6: dc.b $EF,$01,$C4,$0C,$C4,$06,$C9,$06,$80,$C9,$80,$CD
 
dc.b $2A,$F2
 
MusEmeraldPSG2: dc.b $80,$2D
 
- dc.b $C4,$06,$C2,$C1,$BF,$EC,$03
 
dc.b $F7,$00,$04
 
dc.w z80_ptr(-)
 
dc.b $F2
 
MusEmeraldPSG1: dc.b $E2,$01,$80,$02,$80,$2D
 
- dc.b $C4,$06,$C2,$C1,$BF,$EC,$03
 
dc.b $F7,$00,$04
 
dc.w z80_ptr(-)
 
MusEmeraldPSG3:
 
MusEmeraldDAC: dc.b $E2,$01,$F2
 
MusEmrldVoices: dc.b $04,$35,$54,$72,$46,$1F,$1F,$1F,$1F,$07,$07,$0A
 
dc.b $0D,$00,$00,$0B,$0B,$1F,$1F,$0F,$0F,$23,$1D,$14,$80
 
dc.b $3C,$31,$50,$52,$30,$52,$52,$53,$53,$08,$08,$00
 
dc.b $00,$04,$04,$00,$00,$10,$10,$07,$07,$1A,$16,$80,$80
 
 
 
;Mus_Credits: BINCLUDE "sound/music/Credits.bin"
 
Mus_Credits: dc.w z80_ptr(MusCred_Voices),$0603,$01F0
 
dc.w z80_ptr(MusCred_DAC),$0000
 
dc.w z80_ptr(MusCred_FM1),$000E
 
dc.w z80_ptr(MusCred_FM2),$180A
 
dc.w z80_ptr(MusCred_FM3),$0014
 
dc.w z80_ptr(MusCred_FM4),$0016
 
dc.w z80_ptr(MusCred_FM5),$0C16
 
dc.w z80_ptr(MusCred_PSG1),$E806,$000B
 
dc.w z80_ptr(MusCred_PSG2),$DC07,$000B
 
dc.w z80_ptr(MusCred_PSG3),$0002,$0003
 
MusCred_FM1: dc.b $E9,$F4,$E6,$FE,$F8
 
dc.w z80_ptr(MusCreditsDB06)
 
dc.b $E9,$0C,$E6,$02
 
- dc.b $80,$30
 
dc.b $F7,$00,$08
 
dc.w z80_ptr(-)
 
dc.b $EF,$03,$F8
 
dc.w z80_ptr(MusCreditsD9D1)
 
dc.b $AE,$06,$A2,$F8
 
dc.w z80_ptr(MusCreditsD9D1)
 
dc.b $E6,$FD
 
- dc.b $EF,$00,$B7,$06,$BA,$F8
 
dc.w z80_ptr(MusCreditsDA13)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$06,$80,$80,$30,$80,$EF,$0B,$E9,$18,$E6,$02
 
- dc.b $94,$0C,$8F,$92,$8F,$06,$94,$05,$94,$07,$06,$8F
 
dc.b $0C,$92,$8F
 
dc.b $F7,$00,$05
 
dc.w z80_ptr(-)
 
dc.b $80,$30,$80,$EF,$0E,$E6,$FF,$E9,$E8,$F8
 
dc.w z80_ptr(MusCreditsDAE5)
 
dc.b $80,$12,$91,$94,$06,$80,$18,$96,$12,$9A,$06,$80
 
dc.b $80,$12,$8F,$93,$08,$80,$16,$96,$06,$91,$92,$94
 
dc.b $96,$F8
 
dc.w z80_ptr(MusCreditsDAE5)
 
dc.b $80,$12,$9D,$9A,$08,$80,$16,$96,$12,$9D,$08,$80
 
dc.b $04,$EF,$12
 
dc.b $F0,$18,$01,$0A,$04
 
dc.b $80,$30,$80,$F8
 
dc.w z80_ptr(MusCreditsDA5F)
 
dc.b $E7,$24,$E7,$C5,$01,$E7,$C4,$E7,$C3,$E7,$C2,$E7
 
dc.b $C1,$E7,$C0,$E7,$BF,$E7,$BE,$E7,$BD,$E7,$BC,$E7
 
dc.b $BB,$E7,$BA,$80,$60,$EF,$01,$E9,$F4,$E6,$FA,$F4
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsDA99)
 
dc.b $B1,$03,$F8
 
dc.w z80_ptr(MusCreditsDA99)
 
dc.b $80,$03,$80,$60,$E6,$04,$E1,$01,$EF,$1B,$E6,$06
 
dc.b $C1,$0C,$E8,$06,$BD,$06,$BA,$BD,$0C,$80,$80,$EF
 
dc.b $1C,$E6,$FA,$E8,$00,$BC,$0C,$12,$06,$EF,$1B,$E6
 
dc.b $06,$E8,$06,$C2,$06,$C2,$80,$C2,$80,$C2,$E8,$00
 
dc.b $C3,$0C,$C4,$80,$E8,$06,$C4,$06,$06,$C6,$C4,$E8
 
dc.b $00,$C1,$0C,$E8,$06,$BD,$06,$BA,$BD,$0C,$80,$80
 
dc.b $E8,$00,$EF,$1C,$E6,$FA,$C1,$C4,$C1,$EF,$1A,$E6
 
dc.b $06,$E8,$06,$C2,$06,$C2,$80,$C2,$80,$C2,$E8,$00
 
dc.b $C3,$0C,$C4,$06,$80,$80,$24,$80,$30,$80,$EF,$1F
 
dc.b $E9,$18,$E6,$F7,$E1,$00,$80,$06,$AC,$AE,$80,$B1
 
dc.b $80,$B3,$80,$B4,$80,$B3,$80,$B1,$B3,$80,$B1,$E9
 
dc.b $F4,$EF,$00,$80,$0C,$AC,$06,$AE,$B1,$80,$12,$AC
 
dc.b $06,$AE,$B1,$80,$B4,$B1,$80,$B1,$E9,$0C,$EF,$1F
 
dc.b $80,$06,$B8,$12,$B4,$06,$80,$B3,$80,$B4,$80,$B3
 
dc.b $80,$B1,$AE,$80,$B1,$E9,$F4,$EF,$00,$80,$06,$AF
 
dc.b $12,$AE,$06,$80,$12,$AF,$06,$80,$AE,$80,$AF,$B1
 
dc.b $80,$B1,$80,$30,$80,$EF,$21,$E9,$0C,$80,$30,$80
 
dc.b $08,$A0,$04,$9E,$0C,$9D,$9B,$99,$08,$04,$91,$0C
 
dc.b $92,$93,$94,$98,$99,$9B,$9D,$98,$95,$93,$91,$98
 
dc.b $9D,$91,$96,$98,$99,$98,$96,$99,$9D,$96,$95,$97
 
dc.b $99,$97,$95,$96,$97,$98,$99,$98,$99,$9B,$9D,$08
 
dc.b $04,$98,$0C,$91,$95,$96,$98,$99,$9D,$9E,$08,$96
 
dc.b $10,$97,$0C,$98,$F8
 
dc.w z80_ptr(MusCreditsDAFE)
 
dc.b $9E,$E6,$04,$F8
 
dc.w z80_ptr(MusCreditsDAFE)
 
dc.b $9E,$E6,$FC,$F8
 
dc.w z80_ptr(MusCreditsDAFE)
 
dc.b $9E,$08,$99,$04,$EF,$23,$E9,$E8,$E6,$07,$80,$60
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsDABE)
 
dc.b $80,$60,$E6,$FB,$80,$0C,$CD,$06,$80,$D4,$CD,$06
 
dc.b $80,$0C,$CD,$06,$80,$D4,$CD,$06,$80,$18,$E6,$05
 
dc.b $80,$0C,$AE,$80,$AE,$80,$24,$E1,$02,$E6,$08,$A2
 
dc.b $6C,$F2
 
MusCreditsD9D1: dc.b $A5,$0C,$B1,$06,$80,$B1,$0C,$AC,$B3,$12,$B1,$0C
 
dc.b $AC,$06,$AE,$B1,$A7,$0C,$B3,$06,$80,$B3,$0C,$AE
 
dc.b $B5,$12,$B3,$06,$80,$AE,$B0,$B3,$A3,$0C,$AF,$06
 
dc.b $80,$AF,$0C,$AA,$B1,$12,$AF,$0C,$AA,$06,$AC,$AF
 
dc.b $A2,$0C,$AE,$06,$A2,$A4,$0C,$B0,$06,$A4,$A5,$0C
 
dc.b $B1,$06,$A5,$A2,$0C,$E3
 
MusCreditsDA13: dc.b $BE,$0C,$BC,$06,$BA,$BC,$BA,$04,$E7,$08,$BA,$04
 
dc.b $80,$0E,$EF,$07,$B7,$06,$B2,$B5,$B7,$EF,$00,$B7
 
dc.b $BA,$BE,$0C,$BC,$06,$BA,$BC,$BA,$0C,$BC,$04,$80
 
dc.b $08,$BA,$04,$80,$08,$BC,$04,$80,$08,$BE,$12,$BA
 
dc.b $06,$B7,$80,$B7,$80,$24,$EF,$07,$B7,$06,$B2,$B5
 
dc.b $B7,$80,$0C,$80,$30,$BE,$06,$BE,$BA,$04,$80,$08
 
dc.b $BC,$06,$BE,$E3
 
MusCreditsDA5F: dc.b $C3,$01,$E7,$C4,$E7,$C5,$E7,$C6,$2D,$E9,$02,$C3
 
dc.b $01,$E7,$C4,$E7,$C5,$E7,$C6,$2D,$E9,$01,$C3,$01
 
dc.b $E7,$C4,$E7,$C5,$E7,$C6,$2D,$E9,$FC,$C3,$01,$E7
 
dc.b $C4,$E7,$C5,$E7,$C6,$2D,$E9,$01,$C3,$01,$E7,$C4
 
dc.b $E7,$C5,$E7,$C6,$2D,$E7,$30,$E7,$30,$E3
 
MusCreditsDA99: dc.b $A7,$0C,$B3,$06,$80,$B1,$80,$B3,$0C,$A7,$03,$80
 
dc.b $06,$A7,$03,$B3,$0C,$B1,$B3,$09,$AE,$03,$AC,$06
 
dc.b $80,$AC,$0C,$AE,$06,$80,$AE,$0C,$AF,$06,$80,$27
 
dc.b $E3
 
MusCreditsDABE: dc.b $80,$0C,$CA,$15,$80,$03,$CA,$06,$80,$CB,$0F,$80
 
dc.b $03,$C8,$18,$80,$06,$CA,$80,$CA,$80,$CA,$80,$C6
 
dc.b $80,$C4,$0F,$80,$03,$C8,$18,$80,$06
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(MusCreditsDABE)
 
dc.b $E3
 
MusCreditsDAE5: dc.b $80,$12,$94,$97,$06,$80,$18,$99,$12,$94,$06,$80
 
dc.b $80,$12,$92,$96,$06,$80,$18,$97,$12,$92,$06,$80
 
dc.b $E3
 
MusCreditsDAFE: dc.b $80,$99,$80,$99,$80,$9E,$80,$E3
 
MusCreditsDB06: dc.b $EF,$07,$80,$54,$C7,$04,$C8,$C9,$CA,$24,$CD,$D2
 
dc.b $18,$D0,$24,$CF,$CB,$18,$CB,$0C,$CA,$80,$CD,$60
 
dc.b $E7,$3C,$CA,$24,$CD,$D2,$18,$D4,$24,$D0,$D4,$18
 
dc.b $D4,$24,$D6,$60,$E7,$3C,$E3
 
MusCred_FM2: dc.b $80,$60,$EF,$01,$E8,$06,$F8
 
dc.w z80_ptr(MusCreditsDE2A)
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsDE2A)
 
- dc.b $85,$0C
 
dc.b $F7,$00,$0C
 
dc.w z80_ptr(-)
 
dc.b $8A,$87,$88,$89,$F8
 
dc.w z80_ptr(MusCreditsDE2A)
 
- dc.b $88
 
dc.b $F7,$00,$0B
 
dc.w z80_ptr(-)
 
- dc.b $8A
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $E8,$00,$E6,$FC,$8A,$8B,$8C,$E6,$04,$E8,$09
 
- dc.b $8D,$0C
 
dc.b $F7,$00,$0C
 
dc.w z80_ptr(-)
 
dc.b $E8,$00,$8D,$8A,$8B,$8C,$E8,$09
 
- dc.b $8D,$0C
 
dc.b $F7,$00,$0C
 
dc.w z80_ptr(-)
 
dc.b $8D,$06,$99,$E8,$00,$8A,$0C,$8B,$8C,$E9,$E8,$E6
 
dc.b $0C,$EF,$04
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDD59)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $E6,$F9,$EF,$08
 
MusCreditsDB93: dc.b $F8
 
dc.w z80_ptr(MusCreditsDD8D)
 
- dc.b $9F,$04,$80,$08,$9F,$0C
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $06,$9C,$12,$9D,$0C,$9E,$F8
 
dc.w z80_ptr(MusCreditsDD8D)
 
- dc.b $9D,$04,$80,$08,$9D,$0C
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
- dc.b $9C,$04,$80,$08,$9C,$0C
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $F7,$01,$02
 
dc.w z80_ptr(MusCreditsDB93)
 
dc.b $80,$60,$80,$48,$EF,$0C,$E6,$13,$F8
 
dc.w z80_ptr(MusCreditsDD9D)
 
dc.b $24,$80,$60,$EF,$0F,$E6,$F3
 
dc.b $F0,$04,$02,$03,$02
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsDDB5)
 
dc.b $C4,$18,$C3,$30,$E7,$18,$80,$0C,$F8
 
dc.w z80_ptr(MusCreditsDDB5)
 
dc.b $BE,$EF,$13,$E6,$F5,$F4,$80,$60
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDDEA)
 
dc.b $A8,$0C,$A9,$08,$A1,$10,$F8
 
dc.w z80_ptr(MusCreditsDDEA)
 
dc.b $A8,$08,$A9,$04,$80,$18
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$17,$E1,$02,$E9,$F4,$E6,$0A,$F8
 
dc.w z80_ptr(MusCreditsDDD5)
 
dc.b $CE,$15,$CD,$03,$CB,$06,$80,$C9,$0C,$CD,$06,$80
 
dc.b $C9,$0C,$CB,$06,$80,$12,$80,$60,$EF,$1B,$E1,$00
 
dc.b $E8,$06,$80,$3C,$B8,$06,$06,$BA,$BD,$BD,$BA,$EF
 
dc.b $1D,$E6,$FA,$E8,$00,$F8
 
dc.w z80_ptr(MusCreditsDDF9)
 
dc.b $80,$F8
 
dc.w z80_ptr(MusCreditsDE09)
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsDDF9)
 
dc.b $EF,$1C,$BD,$EF,$1D,$F8
 
dc.w z80_ptr(MusCreditsDE09)
 
dc.b $80,$30,$80,$EF,$01,$E9,$18,$E6,$F9
 
- dc.b $99,$0C,$A5,$06,$80,$96,$0C,$A2,$06,$80,$97,$0C
 
dc.b $A3,$06,$80,$98,$0C,$A8,$06,$A7,$99,$06,$99,$12
 
dc.b $96,$0C,$A2,$06,$80,$97,$0C,$A3,$06,$80,$98,$0C
 
dc.b $A4,$06,$80
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$22,$E9,$E8,$E6,$03
 
dc.b $F0,$1C,$01,$06,$04
 
dc.b $80,$50,$AC,$04,$AE,$08,$B1,$04,$B5,$30,$80,$0C
 
dc.b $B5,$08,$80,$04,$B6,$08,$B5,$10,$B9,$08,$04,$80
 
dc.b $08,$B5,$34,$80,$0C,$B5,$BA,$08,$04,$80,$08,$B5
 
dc.b $04,$B1,$24,$80,$0C,$B1,$08,$80,$04,$B3,$08,$B1
 
dc.b $04,$B4,$0C,$B3,$08,$B1,$4C,$80,$0C,$B5,$08,$80
 
dc.b $04,$B6,$08,$80,$04,$B5,$08,$80,$04,$B9,$08,$04
 
dc.b $80,$08,$B5,$1C,$80,$0C,$BA,$18,$BC,$08,$BA,$04
 
dc.b $BD,$18,$80,$0C,$BA,$04,$80,$08,$B8,$18,$B5,$B1
 
dc.b $B3,$0C,$E6,$04,$F8
 
dc.w z80_ptr(MusCreditsDE17)
 
dc.b $B3,$0C,$E6,$FC,$F8
 
dc.w z80_ptr(MusCreditsDE17)
 
dc.b $B3,$14,$B1,$04,$E6,$FF,$EF,$24,$F4,$80,$60
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDE20)
 
dc.b $AC,$12,$AB,$0C,$AC,$06,$AB,$0C,$F8
 
dc.w z80_ptr(MusCreditsDE20)
 
dc.b $B3,$12,$B2,$0C,$B3,$06,$B2,$0C
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $AC,$06,$80,$A9,$80,$AA,$80,$AB,$80,$AC,$AC,$A9
 
dc.b $80,$AA,$80,$AC,$80,$A9,$80,$A9,$80,$AD,$80,$AD
 
dc.b $80,$B0,$80,$B0,$80,$B3,$80,$B3,$80,$80,$0C,$A2
 
dc.b $12,$80,$06,$A2,$12,$AD,$AE,$06,$80,$E6,$FD,$A2
 
dc.b $6C,$F2
 
MusCreditsDD59: dc.b $80,$0C,$C4,$06,$80,$C6,$80,$C4,$80,$C9,$80,$C9
 
dc.b $80,$CB,$CD,$80,$0C,$80,$CB,$18,$C6,$06,$80,$C9
 
dc.b $C9,$80,$CB,$0C,$80,$12,$80,$1E,$C7,$06,$C9,$C7
 
dc.b $CB,$80,$C9,$80,$C7,$C9,$80,$C6,$E7,$C6,$30,$E7
 
dc.b $18,$80,$18,$E3
 
MusCreditsDD8D: dc.b $9F,$04,$80,$08,$9F,$0C
 
dc.b $F7,$00,$03
 
dc.w z80_ptr(MusCreditsDD8D)
 
dc.b $06,$AB,$9F,$0C,$E3
 
MusCreditsDD9D: dc.b $B8,$08,$BA,$BC,$B6,$30,$E7,$30,$E7,$B6,$80,$18
 
dc.b $B8,$08,$BA,$BC,$B6,$30,$E7,$30,$E7,$30,$E7,$E3
 
MusCreditsDDB5: dc.b $BF,$06,$BD,$BF,$12,$C2,$BF,$0C,$C1,$80,$06,$12
 
dc.b $C4,$0C,$C2,$06,$80,$C9,$C6,$3C,$80,$06,$0C,$C7
 
dc.b $12,$C6,$C4,$06,$C2,$C1,$18,$E3
 
MusCreditsDDD5: dc.b $CE,$15,$CD,$03,$CB,$06,$80,$C9,$0C,$CD,$06,$80
 
dc.b $C9,$0C,$CB,$06,$80,$12,$80,$60,$E3
 
MusCreditsDDEA: dc.b $A2,$0C,$AE,$AC,$08,$AE,$04,$AC,$08,$A9,$04,$A7
 
dc.b $08,$04,$E3
 
MusCreditsDDF9: dc.b $80,$0C,$B1,$AE,$06,$06,$AC,$0C,$80,$B0,$AE,$06
 
dc.b $06,$AC,$0C,$E3
 
MusCreditsDE09: dc.b $AE,$AC,$06,$06,$AA,$0C,$80,$AC,$0C,$06,$06,$AE
 
dc.b $AC,$E3
 
MusCreditsDE17: dc.b $BA,$04,$80,$08,$B8,$18,$B5,$B1,$E3
 
MusCreditsDE20: dc.b $AE,$06,$80,$AE,$80,$A9,$80,$A9,$80,$E3
 
MusCreditsDE2A: dc.b $8A,$0C
 
dc.b $F7,$00,$08
 
dc.w z80_ptr(MusCreditsDE2A)
 
dc.b $E3
 
MusCred_FM3: dc.b $80,$60,$F8
 
dc.w z80_ptr(MusCreditsE065)
 
dc.b $E9,$18,$EF,$02,$F8
 
dc.w z80_ptr(MusCreditsE040)
 
dc.b $B8,$3C,$F8
 
dc.w z80_ptr(MusCreditsE040)
 
dc.b $BD,$3C,$E9,$E8,$E6,$02,$E1,$03,$EF,$04,$E0,$80
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDD59)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $EF,$09,$E9,$0C,$E6,$FD,$E0,$40
 
dc.b $F0,$06,$01,$05,$04
 
dc.b $E1,$00
 
- dc.b $9F,$0C,$AB,$06,$80,$A9,$80,$AB,$9F,$80,$9F,$AB
 
dc.b $80,$A9,$80,$AB,$0C
 
dc.b $F7,$00,$03
 
dc.w z80_ptr(-)
 
dc.b $9D,$0C,$A9,$06,$80,$A8,$80,$A9,$9C,$80,$9C,$A8
 
dc.b $80,$A6,$80,$A8,$0C
 
dc.b $F7,$01,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$0D,$E6,$FB,$E0,$C0,$F4,$80,$60
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDFF2)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$0F,$E0,$80,$E6,$0B,$F8
 
dc.w z80_ptr(MusCreditsDDB5)
 
dc.b $C4,$18,$C3,$48,$80,$0C,$F8
 
dc.w z80_ptr(MusCreditsDDB5)
 
dc.b $BE,$0C
 
dc.b $F0,$18,$01,$03,$04
 
dc.b $E6,$F3,$E0,$C0,$EF,$14,$A2,$14,$A4,$04,$A5,$04
 
dc.b $80,$08,$A9,$04,$80,$08,$A8,$04,$80,$08,$A9,$04
 
dc.b $80,$08,$AC,$08,$A9,$10
 
- dc.b $80,$30
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $EF,$18,$E9,$F4,$E6,$08,$F4,$E0,$40,$80,$60,$80
 
dc.b $30,$C6,$06,$80,$C2,$0C,$C4,$09,$C2,$03,$BF,$0C
 
dc.b $80,$60,$80,$3C,$80,$60,$EF,$1B,$E6,$FB,$E0,$C0
 
dc.b $E8,$06,$C4,$06,$06,$C6,$C9,$C9,$C6,$E8,$00,$CD
 
dc.b $0C,$E8,$06,$C9,$06,$C6,$C9,$0C,$80,$80,$12,$EF
 
dc.b $1C,$E8,$00,$BD,$BA,$0C,$E8,$06,$EF,$1B,$CE,$06
 
dc.b $CE,$80,$CE,$80,$CE,$E8,$00,$CF,$0C,$D0,$80,$E8
 
dc.b $06,$D0,$06,$06,$D2,$D0,$E8,$00,$CD,$0C,$E8,$06
 
dc.b $C9,$06,$C6,$C9,$0C,$E8,$00,$EF,$1C,$80,$1E,$C2
 
dc.b $0C,$C2,$BD,$06,$80,$60,$80,$60,$EF,$00,$E9,$18
 
dc.b $80,$60,$80,$0C,$AC,$06,$AE,$B1,$80,$12,$AC,$06
 
dc.b $AE,$B1,$80,$B4,$B1,$80,$B1,$80,$60,$80,$06,$AF
 
dc.b $12,$AE,$06,$80,$12,$AF,$06,$80,$AE,$80,$AF,$B1
 
dc.b $80,$B1,$80,$60,$EF,$22,$E9,$DC,$E6,$FF,$E0,$80
 
dc.b $80,$60,$F8
 
dc.w z80_ptr(MusCreditsE004)
 
dc.b $CD,$30,$CB,$18,$CD,$0C,$CB,$C9,$30,$CE,$F8
 
dc.w z80_ptr(MusCreditsE051)
 
dc.b $E6,$04,$F8
 
dc.w z80_ptr(MusCreditsE051)
 
dc.b $E6,$FC,$80,$C4,$80,$C4,$80,$C6,$18,$08,$C4,$04
 
dc.b $E9,$0C,$E6,$FF,$E0,$C0,$EF,$00,$80,$60
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE05B)
 
dc.b $CB,$12,$CB,$1E,$F8
 
dc.w z80_ptr(MusCreditsE05B)
 
dc.b $D0,$12,$D0,$1E
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$0C,$CB,$12,$80,$06,$CB,$80,$CA,$12,$CB,$CA
 
dc.b $0C,$C5,$18,$C8,$CB,$D1,$80,$0C,$CD,$80,$CD,$12
 
dc.b $CC,$CD,$06,$80,$E6,$F8,$EF,$01,$E1,$03,$A2,$6C
 
dc.b $F2
 
MusCreditsDFF2: dc.b $80,$60,$BC,$06,$BD,$BC,$B8,$BA,$B6,$0C,$B8,$B3
 
dc.b $B3,$06,$B6,$0C,$B8,$E3
 
MusCreditsE004: dc.b $80,$0C,$CD,$04,$80,$10,$CD,$04,$80,$0C,$CD,$0C
 
dc.b $CE,$08,$CD,$04,$80,$18,$80,$0C,$CB,$04,$80,$10
 
dc.b $CB,$04,$80,$0C,$CB,$0C,$CD,$08,$CB,$04,$80,$18
 
- dc.b $80,$0C,$C9,$04,$80,$10,$C9,$04,$80,$0C,$C9,$0C
 
dc.b $CB,$08,$C9,$04,$80,$18
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $E3
 
MusCreditsE040: dc.b $80,$18,$B8,$0B,$80,$0D,$BA,$0C,$0B,$80,$19,$BD
 
dc.b $0C,$0B,$80,$0D,$E3
 
MusCreditsE051: dc.b $80,$0C,$C4,$80,$C4,$80,$C6,$80,$C6,$E3
 
MusCreditsE05B: dc.b $CD,$06,$80,$CD,$80,$CA,$80,$CA,$80,$E3
 
MusCreditsE065: dc.b $EF,$05,$E9,$F4,$C6,$60,$CB,$CD,$E7,$CD,$C6,$60
 
dc.b $D0,$D0,$24,$D2,$60,$E7,$3C,$E3
 
MusCred_FM4: dc.b $80,$60,$E9,$FB,$E6,$FE,$F8
 
dc.w z80_ptr(MusCreditsE065)
 
dc.b $E9,$1D,$E6,$02,$EF,$02,$F8
 
dc.w z80_ptr(MusCreditsE2AE)
 
dc.b $B5,$3C,$F8
 
dc.w z80_ptr(MusCreditsE2AE)
 
dc.b $B8,$3C,$E6,$06,$EF,$05
 
dc.b $F0,$02,$01,$FE,$04
 
- dc.b $C1,$30,$E7,$30,$C3,$E7,$30,$BF,$E7,$30,$BD,$E7
 
dc.b $30
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $EF,$0A,$E9,$F4,$E6,$F7
 
dc.b $F0,$0C,$01,$FB,$04
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE2BF)
 
dc.b $80,$25,$C3,$06,$C3,$80,$0C,$C3,$06,$C3,$05,$80
 
dc.b $0D,$C3,$06,$C5,$30,$E7,$06,$F8
 
dc.w z80_ptr(MusCreditsE2BF)
 
dc.b $80,$31,$80,$60
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$80,$48,$EF,$0C,$E6,$05,$F4,$E1,$02,$E0
 
dc.b $80,$F8
 
dc.w z80_ptr(MusCreditsDD9D)
 
dc.b $24,$80,$0C,$80,$60,$EF,$10,$E6,$F7,$E1,$00,$E0
 
dc.b $40,$F8
 
dc.w z80_ptr(MusCreditsE2D2)
 
dc.b $B3,$B7,$06,$AE,$0C,$B1,$B3,$B7,$06,$80,$B7,$AE
 
dc.b $0C,$B1,$F8
 
dc.w z80_ptr(MusCreditsE2D2)
 
dc.b $EF,$15,$E6,$01,$F8
 
dc.w z80_ptr(MusCreditsE22D)
 
- dc.b $EF,$14,$80,$4E,$E0,$40,$A1,$12,$A2,$06,$E0,$C0
 
dc.b $EF,$16,$80,$30,$80,$06,$BA,$08,$B9,$04,$B8,$08
 
dc.b $B7,$04,$B6,$08,$B5,$04
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$17,$E9,$F4,$E6,$02,$E0,$C0
 
dc.b $F0,$01,$01,$03,$03
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDDD5)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$1E,$E0,$40,$E6,$FE,$E9,$F4,$F4,$E8
 
dc.b $06,$80,$0C,$C1,$06,$12,$18,$C4,$06,$12,$0C,$EF
 
dc.b $1C,$E0,$C0,$E6,$FA,$E8,$00,$C6,$E8,$06,$E6,$06
 
dc.b $EF,$1E,$E0,$40,$C2,$06,$12,$18,$C4,$06,$12,$18
 
dc.b $C1,$06,$12,$18,$C4,$06,$12,$0C,$EF,$1A,$E0,$C0
 
dc.b $E9,$0C,$C6,$06,$C6,$80,$C6,$80,$C6,$E8,$00,$C7
 
dc.b $0C,$C8,$06,$EF,$1E,$E0,$40,$E9,$F4,$E8,$06,$80
 
dc.b $C4,$06,$12,$0C,$80,$60,$EF,$20,$E9,$18,$E6,$FA
 
dc.b $E0,$C0,$E8,$00,$B4,$03,$E7,$B6,$5D,$B3,$03,$E7
 
dc.b $B5,$5D,$B1,$03,$E7,$B3,$5D,$B3,$03,$E7,$B5,$5D
 
dc.b $80,$60,$EF,$22,$E0,$40,$E9,$E8,$E6,$04,$80,$30
 
dc.b $80,$F8
 
dc.w z80_ptr(MusCreditsE246)
 
dc.b $C9,$30,$C8,$18,$C9,$0C,$C8,$C6,$30,$C9,$80,$0C
 
dc.b $C1,$80,$C1,$80,$C2,$80,$C2,$E6,$04,$80,$C1,$80
 
dc.b $C1,$80,$C2,$80,$C2,$E6,$FC,$80,$C1,$80,$C1,$80
 
dc.b $C2,$18,$08,$C1,$04,$E9,$0C,$E6,$FF,$E0,$C0,$EF
 
dc.b $00,$80,$60
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE2C8)
 
dc.b $C8,$12,$C8,$1E,$F8
 
dc.w z80_ptr(MusCreditsE2C8)
 
dc.b $CB,$12,$CB,$1E
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $E1,$03,$E6,$08,$F8
 
dc.w z80_ptr(MusCreditsE28F)
 
dc.b $E6,$F0,$EF,$01
 
dc.b $F0,$00,$01,$06,$04
 
dc.b $A2,$6C,$F2
 
MusCreditsE22D: dc.b $A2,$14,$A4,$04,$A5,$04,$80,$08,$A9,$04,$80,$08
 
dc.b $A8,$04,$80,$08,$A9,$04,$80,$08,$AC,$08,$A9,$10
 
dc.b $E3
 
MusCreditsE246: dc.b $80,$0C
 
dc.b $C9,$04,$80,$10
 
dc.b $C9,$04,$80,$0C
 
dc.b $C9,$0C
 
dc.b $CB,$08
 
dc.b $C9,$04,$80,$18,$80,$0C
 
dc.b $C8,$04,$80,$10
 
dc.b $C8,$04,$80,$0C
 
dc.b $C8,$0C
 
dc.b $C9,$08
 
dc.b $C8,$04,$80,$18,$80,$0C
 
 
 
    if 1==1
 
; this part of the original credits music (CNZ PSG) sounds buggy (dissonant)
 
dc.b $C6,$04,$80,$10
 
dc.b $C6,$04,$80,$0C
 
dc.b $C6,$0C
 
dc.b $C8,$08
 
dc.b $C6,$04,$80,$18,$80,$0C
 
dc.b $C5,$04,$80,$10
 
dc.b $C5,$04,$80,$0C
 
dc.b $C5,$0C
 
dc.b $C7,$08
 
    else
 
; replace the above block of notes with this to fix it.
 
; (I'm not sure why, but the notes $C6 and $C7 are broken here,
 
;  so I've replaced them with pitch-shifted $C8s)
 
dc.b $E1,-64
 
dc.b $C8,$04,$80,$10 ; $C6
 
dc.b $C8,$04,$80,$0C ; $C6
 
dc.b $C8,$0C ; $C6
 
dc.b $E1,0
 
dc.b $C8,$08
 
dc.b $E1,-64
 
dc.b $C8,$04,$80,$24 ; $C6
 
dc.b $E1,0
 
dc.b $C5,$04,$80,$10
 
dc.b $C5,$04,$80,$0C
 
dc.b $C5,$0C
 
dc.b $E1,-32
 
dc.b $C8,$08 ; $C7
 
dc.b $E1,0
 
    endif
 
 
 
dc.b $C5,$04,$80,$18
 
dc.b $E3
 
MusCreditsE28F: dc.b $EF,$25,$80,$0C,$D0,$D4,$D7,$DB,$0C,$80,$06,$DB
 
dc.b $0C,$DC,$06,$DB,$0C,$DD,$60,$DE,$0C,$80,$DE,$80
 
dc.b $80,$06,$DD,$12,$DE,$0C,$E3
 
MusCreditsE2AE: dc.b $80,$18,$B5,$0B,$80,$0D,$B7,$0C,$0B,$80,$19,$BA
 
dc.b $0C,$0B,$80,$0D,$E3
 
MusCreditsE2BF: dc.b $C3,$05,$80,$13,$C3,$12,$C3,$05,$E3
 
MusCreditsE2C8: dc.b $CA,$06,$80,$CA,$80,$C6,$80,$C6,$80,$E3
 
MusCreditsE2D2: dc.b $AF,$0C,$B3,$06,$B6,$0C,$AF,$B1,$06,$80,$B1,$0C
 
dc.b $B5,$06,$B8,$0C,$B1,$06,$80,$B6,$0C,$BA,$06,$B1
 
dc.b $0C,$B5,$B6,$BA,$06,$80,$BA,$AF,$0C,$B3,$B5,$B8
 
dc.b $06,$B2,$0C,$B3,$B5,$B8,$06,$80,$B8,$B2,$0C,$B5
 
dc.b $E3
 
MusCred_FM5: dc.b $E9,$E8,$E6,$F8,$E1,$05,$F8
 
dc.w z80_ptr(MusCreditsDB06)
 
dc.b $E9,$18,$E6,$08,$E1,$00,$EF,$02
 
dc.b $F0,$0C,$01,$FC,$04
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsE4E8)
 
dc.b $B1,$3C,$F8
 
dc.w z80_ptr(MusCreditsE4E8)
 
dc.b $B5,$3C,$E9,$F4,$E6,$07
 
dc.b $F0,$30,$01,$04,$04
 
dc.b $EF,$06
 
- dc.b $C4,$30,$E7,$30,$C6,$E7,$30,$C2,$E7,$30,$C1,$E7
 
dc.b $30
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $EF,$0A,$E6,$F6
 
dc.b $F0,$0C,$01,$05,$04
 
dc.b $E0,$80
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE4F9)
 
dc.b $80,$25,$C6,$06,$C6,$80,$0C,$C6,$06,$C6,$05,$80
 
dc.b $0D,$C6,$06,$C8,$30,$E7,$06,$F8
 
dc.w z80_ptr(MusCreditsE4F9)
 
dc.b $80,$31,$80,$60
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$80,$48,$E6,$05,$F4,$80,$01,$EF,$0C,$E1
 
dc.b $FE,$E0,$40,$F8
 
dc.w z80_ptr(MusCreditsDD9D)
 
dc.b $23,$80,$0C,$80,$60,$EF,$11,$E9,$F4,$E6,$F4,$E1
 
dc.b $00,$E0,$C0
 
dc.b $F0,$06,$01,$06,$05
 
dc.b $80,$60,$80,$30,$C2,$06,$C2,$C9,$C6,$1E,$80,$60
 
dc.b $80,$06,$CB,$80,$CB,$C9,$80,$C9,$80,$C7,$80,$C7
 
dc.b $80,$C6,$03,$80,$C6,$80,$09,$80,$06,$80,$60,$80
 
dc.b $30,$C2,$06,$C2,$C9,$C6,$1E,$80,$60,$EF,$16,$E9
 
dc.b $0C,$E6,$04,$F4,$E0,$80,$80,$01,$F8
 
dc.w z80_ptr(MusCreditsE22D)
 
dc.b $80,$2F,$F8
 
dc.w z80_ptr(MusCreditsE4CD)
 
dc.b $80,$30,$F8
 
dc.w z80_ptr(MusCreditsE4CD)
 
dc.b $80,$60,$EF,$19,$E9,$F4,$E0,$C0,$F8
 
dc.w z80_ptr(MusCreditsE502)
 
dc.b $80,$27,$B1,$03,$F8
 
dc.w z80_ptr(MusCreditsE502)
 
dc.b $80,$2A,$80,$60,$EF,$1E,$E9,$F4,$E8,$06
 
- dc.b $80,$0C,$C4,$06,$12,$18,$C8,$06,$12,$0C,$80,$C6
 
dc.b $06,$12,$18,$C8,$06,$12,$0C
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EF,$20,$E8,$00,$E9,$18,$E6,$FA,$B8,$03
 
dc.b $E7,$BA,$5D,$B6,$03,$E7,$B8,$5D,$B4,$03,$E7,$B6
 
dc.b $5D,$B6,$03,$E7,$B8,$5D,$80,$60,$EF,$22,$E9,$F4
 
dc.b $E6,$05
 
dc.b $F0,$1C,$01,$06,$04
 
dc.b $80,$50,$A7,$04,$A9,$08,$AC,$04,$B1,$30,$80,$0C
 
dc.b $B1,$08,$80,$04,$B3,$08,$B1,$10,$B5,$08,$B5,$04
 
dc.b $80,$08,$B0,$34,$80,$0C,$B0,$B5,$08,$04,$80,$08
 
dc.b $B1,$04,$AE,$24,$80,$0C,$AE,$08,$80,$04,$B0,$08
 
dc.b $AE,$04,$B1,$0C,$AF,$08,$AD,$4C,$80,$0C,$B1,$08
 
dc.b $80,$04,$B3,$08,$80,$04,$B1,$08,$80,$04,$B5,$08
 
dc.b $B5,$04,$80,$08,$B0,$1C,$80,$0C,$B5,$18,$B8,$08
 
dc.b $B5,$04,$BA,$18,$80,$0C,$B6,$04,$80,$08,$B5,$18
 
dc.b $B1,$AE,$B0,$0C,$E6,$04,$B6,$04,$80,$08,$B5,$18
 
dc.b $B1,$AE,$B0,$0C,$E6,$F8,$B6,$04,$80,$08,$B5,$18
 
dc.b $B1,$AE,$AA,$14,$A9,$04,$E6,$0C,$EF,$23,$E1,$03
 
dc.b $E6,$F7,$80,$60,$F8
 
dc.w z80_ptr(MusCreditsDABE)
 
dc.b $E6,$09
 
dc.b $F0,$00,$01,$06,$04
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsE28F)
 
dc.b $F2
 
MusCreditsE4CD: dc.b $80,$1E,$EF,$14,$A4,$12,$A5,$06,$EF,$16,$80,$30
 
dc.b $80,$06,$BD,$08,$BC,$04,$BB,$08,$BA,$04,$B9,$08
 
dc.b $B8,$04,$E3
 
MusCreditsE4E8: dc.b $80,$18,$B1,$0B,$80,$0D,$B3,$0C,$0B,$80,$19,$B6
 
dc.b $0C,$0B,$80,$0D,$E3
 
MusCreditsE4F9: dc.b $C6,$05,$80,$13,$C6,$12,$C6,$05,$E3
 
MusCreditsE502: dc.b $80,$60,$AC,$06,$80,$AC,$0C,$AE,$06,$80,$AE,$0C
 
dc.b $AF,$06,$E3
 
MusCred_PSG1: dc.b $80,$30
 
dc.b $F7,$00,$1A
 
dc.w z80_ptr(MusCred_PSG1)
 
- dc.b $C4,$30,$E7,$30,$C6,$E7,$30,$C2,$E7,$30,$C1,$E7
 
dc.b $30
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$10
 
dc.w z80_ptr(-)
 
dc.b $80,$60
 
- dc.b $80,$30
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$E9,$F4,$E6,$FE,$F5,$01,$F8
 
dc.w z80_ptr(MusCreditsE635)
 
dc.b $AE,$B3,$06,$AC,$0C,$AE,$AE,$B3,$06,$80,$B3,$AB
 
dc.b $0C,$AE,$F8
 
dc.w z80_ptr(MusCreditsE635)
 
dc.b $F5,$0B,$80,$04,$80,$60,$F8
 
dc.w z80_ptr(MusCreditsDA5F)
 
dc.b $E7,$20,$E7,$C5,$01,$E7,$C4,$E7,$C3,$E7,$C2,$E7
 
dc.b $C1,$E7,$C0,$E7,$BF,$E7,$BE,$E7,$BD,$E7,$BC,$E7
 
dc.b $BB,$E7,$BA,$80,$60,$F5,$00,$E8,$06,$E9,$F4,$F8
 
dc.w z80_ptr(MusCreditsE62C)
 
dc.b $C2,$80,$C2,$F8
 
dc.w z80_ptr(MusCreditsE62C)
 
dc.b $C2,$04,$80,$C2,$80,$0C,$C2,$80,$60,$F5,$08,$E9
 
dc.b $04,$EC,$02,$E8,$06
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE618)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$F5,$00,$E9,$F0,$EC,$FF,$80,$60
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsE004)
 
dc.b $E9,$18,$EC,$02,$B5,$30,$B3,$18,$B5,$0C,$B3,$B1
 
dc.b $30,$B6,$EC,$FE,$80,$0C,$B8,$80,$B8,$80,$BA,$80
 
dc.b $BA,$EC,$03,$C4,$18,$C1,$BD,$BF,$0C,$80,$EC,$FC
 
dc.b $80,$B8,$80,$B8,$80,$BA,$18,$08,$B8,$04,$E9,$F4
 
dc.b $EC,$01,$F5,$05
 
- dc.b $80,$60
 
dc.b $F7,$00,$05
 
dc.w z80_ptr(-)
 
dc.b $80,$0C,$C8,$12,$80,$06,$C8,$80,$C6,$12,$C8,$C6
 
dc.b $0C,$C1,$18,$C5,$C8,$CB,$80,$0C,$CA,$80,$CA,$12
 
dc.b $C9,$CA,$06,$80,$09,$E9,$30,$EC,$FC,$F6
 
dc.w z80_ptr(MusCreditsE770)
 
dc.b $F2
 
MusCreditsE618: dc.b $80,$0C,$BD,$06,$12,$18,$C4,$06,$12,$0C,$80,$C2
 
dc.b $06,$12,$18,$C4,$06,$12,$0C,$E3
 
MusCreditsE62C: dc.b $80,$60,$80,$0C,$C2,$80,$C2,$80,$E3
 
MusCreditsE635: dc.b $AC,$0C,$AF,$06,$B3,$0C,$AC,$AC,$06,$80,$AC,$0C
 
dc.b $AF,$06,$B5,$0C,$AC,$06,$80,$06,$B1,$0C,$B6,$06
 
dc.b $AE,$0C,$B1,$B3,$B6,$06,$80,$B6,$AA,$0C,$AF,$AF
 
dc.b $B5,$06,$AC,$0C,$AF,$B2,$B5,$06,$80,$B5,$AE,$0C
 
dc.b $B2,$E3
 
MusCred_PSG2: dc.b $80,$30
 
dc.b $F7,$00,$1A
 
dc.w z80_ptr(MusCred_PSG2)
 
- dc.b $C1,$30,$E7,$30,$C3,$E7,$30,$BF,$E7,$30,$BD,$E7
 
dc.b $30
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$10
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$E9,$0C,$EC,$FD,$F5,$04,$80
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsDFF2)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
dc.b $80,$60
 
dc.b $F0,$03,$02,$01,$05
 
dc.b $F5,$0A,$E9,$E8,$EC,$02,$80,$30,$80,$80,$BD,$06
 
dc.b $BF,$C6,$C2,$1E,$80,$60,$80,$06,$C6,$80,$C6,$C4
 
dc.b $80,$C4,$80,$C3,$80,$C3,$80,$BF,$03,$80,$BF,$80
 
dc.b $09,$80,$06,$80,$30,$80,$80,$BD,$06,$BF,$C6,$C2
 
dc.b $1E,$80,$60,$F4
 
- dc.b $80,$30
 
dc.b $F7,$00,$0C
 
dc.w z80_ptr(-)
 
dc.b $F5,$00,$EC,$FE,$E8,$06,$80,$60,$80,$0C,$BF,$80
 
dc.b $BF,$80,$BF,$80,$BF,$80,$60,$80,$0C,$BF,$80,$BF
 
dc.b $80,$BF,$04,$80,$BF,$80,$0C,$BF,$80,$60,$EC,$02
 
- dc.b $F8
 
dc.w z80_ptr(MusCreditsE618)
 
dc.b $F7,$00,$02
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$F5,$00,$E9,$F4,$EC,$FF,$E9,$E8,$80,$60
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsE246)
 
dc.b $E9,$18,$EC,$02,$B1,$30,$B0,$18,$B1,$0C,$B0,$AE
 
dc.b $30,$B1,$EC,$FE,$80,$0C,$B5,$80,$B5,$80,$B6,$80
 
dc.b $B6,$EC,$03,$80,$B1,$80,$B1,$80,$B1,$80,$B1,$EC
 
dc.b $FC,$80,$B1,$80,$B1,$80,$B1,$18,$08,$B1,$04,$EC
 
dc.b $01,$E9,$18,$F5,$05,$E1,$01,$80,$60,$80,$80,$80
 
dc.b $80,$80,$80,$0C,$CD,$06,$80,$D4,$CD,$80,$0C,$CD
 
dc.b $06,$80,$D4,$CD,$80,$18,$80,$54,$E9,$24,$EC,$FD
 
MusCreditsE770: dc.b $F5,$03,$80,$06
 
- dc.b $BF,$03,$C1,$C3,$EC,$01,$E9,$FF
 
dc.b $F7,$00,$05
 
dc.w z80_ptr(-)
 
- dc.b $BF,$03,$C1,$C3,$EC,$01,$E9,$01
 
dc.b $F7,$00,$07
 
dc.w z80_ptr(-)
 
dc.b $F2
 
MusCred_PSG3: dc.b $F3,$E7,$80,$60,$F5,$02
 
- dc.b $C6,$0C,$0C,$0C,$06,$06,$0C,$0C,$06,$06,$0C
 
dc.b $F7,$00,$08
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$08
 
dc.w z80_ptr(-)
 
- dc.b $C6,$0C,$06,$06
 
dc.b $F7,$00,$1F
 
dc.w z80_ptr(-)
 
dc.b $0C,$F5,$03,$C6,$F5,$02
 
- dc.b $C6,$0C,$06,$06
 
dc.b $F7,$00,$07
 
dc.w z80_ptr(-)
 
dc.b $06,$06,$06,$06
 
dc.b $F7,$01,$04
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$0C
 
dc.w z80_ptr(-)
 
dc.b $F5,$04,$EC,$02
 
- dc.b $E8,$03,$C6,$06,$06,$E8,$00,$0C
 
dc.b $F7,$00,$04
 
dc.w z80_ptr(-)
 
dc.b $F5,$02,$EC,$FD
 
- dc.b $80,$0C,$C6,$06,$80,$07,$C6,$06,$80,$11,$C6,$0C
 
dc.b $80,$06,$C6,$0C,$80,$06,$C6,$80
 
dc.b $F7,$00,$07
 
dc.w z80_ptr(-)
 
dc.b $EC,$02
 
- dc.b $C6,$0C,$08,$04
 
dc.b $F7,$00,$18
 
dc.w z80_ptr(-)
 
- dc.b $C6,$0C,$0C,$0C,$08,$04
 
dc.b $F7,$00,$08
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$F5,$04,$EC,$02
 
- dc.b $C6,$06,$06,$0C
 
dc.b $F7,$00,$10
 
dc.w z80_ptr(-)
 
- dc.b $80,$30
 
dc.b $F7,$00,$0A
 
dc.w z80_ptr(-)
 
dc.b $80,$60,$EC,$FF
 
- dc.b $F5,$01,$C6,$0C,$F5,$02,$EC,$FF,$08,$F5,$01,$EC
 
dc.b $01,$04
 
dc.b $F7,$00,$27
 
dc.w z80_ptr(-)
 
dc.b $EC,$FF,$F5,$04
 
- dc.b $E8,$03,$C6,$0C,$E8,$0C,$0C
 
dc.b $F7,$00,$1E
 
dc.w z80_ptr(-)
 
dc.b $E8,$03,$C6,$06,$E8,$0E,$12,$E8,$03,$0C,$E8,$0F
 
dc.b $0C,$F2
 
MusCred_DAC: dc.b $82,$06,$82,$82,$82,$82,$0C,$06,$0C,$06,$0C,$0C
 
dc.b $0C
 
- dc.b $81,$18,$82
 
dc.b $F7,$00,$0E
 
dc.w z80_ptr(-)
 
dc.b $81,$0C
 
- dc.b $82
 
dc.b $F7,$00,$07
 
dc.w z80_ptr(-)
 
dc.b $EA,$EA,$F8
 
dc.w z80_ptr(MusCreditsEA6E)
 
dc.b $81,$0C,$8D,$82,$81,$81,$8E,$82,$84,$04,$06,$02
 
dc.b $81,$0C,$82,$06,$82,$82,$82,$81,$0C,$82,$06,$82
 
dc.b $81,$81,$82,$82,$82,$82
 
- dc.b $81,$18,$82,$81,$82
 
dc.b $F7,$00,$07
 
dc.w z80_ptr(-)
 
dc.b $81,$0C,$82,$82,$82,$82,$06,$82,$8C,$8C,$8D,$8D
 
dc.b $8E,$8E,$F8
 
dc.w z80_ptr(MusCreditsEA84)
 
dc.b $81,$18,$82,$0C,$81,$18,$82,$0C,$82,$82,$06,$82
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsEA84)
 
dc.b $81,$0C,$82,$82,$82,$8D,$06,$8D,$8E,$8E,$82,$06
 
dc.b $82,$8D,$0C,$82,$0C,$82,$06,$82,$80,$82,$82,$0C
 
MusCreditsE8E5: dc.b $82,$0C,$82,$82,$06,$82,$8D,$8D
 
- dc.b $81,$0C,$8F,$06,$90,$82,$0C,$90,$06,$91,$81,$0C
 
dc.b $8F,$06,$91,$82,$0C,$8F,$06,$91
 
dc.b $F7,$00,$04
 
dc.w z80_ptr(-)
 
dc.b $81,$0C,$8F,$06,$91,$82,$0C,$8F,$06,$91,$8C,$06
 
dc.b $03,$03,$8D,$06,$8D,$8D,$8E,$8E,$8E,$81,$06,$0C
 
dc.b $82,$06,$80,$0C,$81,$82,$8E,$82,$06,$82,$82,$82
 
- dc.b $81,$0C,$82,$06,$81,$12,$81,$06,$81,$12,$8C,$06
 
dc.b $82,$0C,$83,$06,$81,$80
 
dc.b $F7,$00,$06
 
dc.w z80_ptr(-)
 
dc.b $81,$0C,$82,$06,$81,$12,$81,$06,$81,$06,$82,$06
 
dc.b $81,$0C,$06,$82,$0C,$08,$04,$EA,$CD,$82,$30,$82
 
dc.b $0C,$82,$82,$82,$08,$04,$F8
 
dc.w z80_ptr(MusCreditsEA9F)
 
dc.b $F8
 
dc.w z80_ptr(MusCreditsEA9F)
 
dc.b $81,$08,$0C,$04,$82,$0C,$81,$08,$04,$82,$08,$04
 
dc.b $08,$04,$04,$04,$04,$08,$04,$EA,$C5
 
- dc.b $81,$09,$81,$03,$0C,$82,$81,$81,$18,$82
 
dc.b $F7,$00,$03
 
dc.w z80_ptr(-)
 
dc.b $81,$09,$81,$03,$0C,$82,$81,$81,$18,$82,$0C,$06
 
dc.b $06,$81,$0C,$82,$06,$82,$82,$82,$8D,$0C,$82,$0C
 
dc.b $0C,$0C,$06,$06
 
- dc.b $81,$0C,$81,$82,$80,$81,$81,$82,$83
 
dc.b $F7,$00,$03
 
dc.w z80_ptr(-)
 
dc.b $81,$82,$82,$82,$82,$06,$06,$06,$06,$0C,$06,$06
 
dc.b $81,$06,$81,$82,$82,$81,$82,$81,$81,$82,$02,$82
 
dc.b $04,$81,$0C,$06,$82,$0C,$06,$06,$81,$18,$82,$0C
 
dc.b $81,$81,$18,$82,$81,$06,$81,$12,$82,$0C,$81,$81
 
dc.b $18,$82,$81,$18,$82,$0C,$81,$81,$18,$82,$81,$06
 
dc.b $81,$12,$82,$0C,$0C,$06,$06,$06,$06,$0C,$06,$06
 
dc.b $82,$02,$04,$81,$0C,$06,$0C,$82,$02,$04,$81,$0C
 
dc.b $06,$0C,$82,$06,$82,$82,$82,$EA,$C0,$81,$0C,$82
 
dc.b $81,$82,$81,$82,$81,$08,$82,$04,$0C
 
- dc.b $81,$0C,$82
 
dc.b $F7,$00,$0F
 
dc.w z80_ptr(-)
 
dc.b $81,$08,$82,$04,$0C
 
- dc.b $81,$0C,$82
 
dc.b $F7,$00,$13
 
dc.w z80_ptr(-)
 
dc.b $82,$08,$0C,$04,$81,$0C,$82,$81,$82,$81,$0C,$82
 
dc.b $81,$06,$80,$02,$82,$82,$82,$09,$82,$03
 
- dc.b $81,$0C,$82
 
dc.b $F7,$00,$06
 
dc.w z80_ptr(-)
 
dc.b $81,$0C,$82,$81,$06,$80,$02,$82,$82,$82,$09,$82
 
dc.b $03
 
dc.b $F7,$01,$03
 
dc.w z80_ptr(-)
 
dc.b $81,$0C,$82,$81,$82,$81,$06,$82,$12,$82,$0C,$81
 
dc.b $F2
 
MusCreditsEA6E: dc.b $81,$0C,$8D,$82,$81,$81,$8E,$82,$84,$04,$06,$02
 
dc.b $81,$0C,$8D,$82,$81,$81,$8E,$82,$83,$E3
 
MusCreditsEA84: dc.b $81,$18,$82,$0C,$81,$18,$0C,$82,$81,$81,$18,$82
 
dc.b $0C,$81,$12,$81,$82,$18,$81,$82,$0C,$81,$18,$0C
 
dc.b $82,$81,$E3
 
MusCreditsEA9F: dc.b $81,$08,$0C,$04,$82,$0C,$81,$08,$0C,$82,$04,$81
 
dc.b $0C,$82,$81,$81,$08,$0C,$04,$82,$0C,$81,$08,$0C
 
dc.b $82,$04,$81,$0C,$82,$82,$08,$04,$E3,$81,$06,$80
 
dc.b $03,$81,$81,$06,$82,$81,$06,$80,$03,$81,$81,$06
 
dc.b $82,$03,$82,$81,$06,$80,$03,$81,$81,$06,$82,$E3
 
MusCred_Voices: dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$01,$1F,$1F,$FF,$0F,$17,$27,$28,$80
 
dc.b $08,$09,$30,$70,$00,$1F,$5F,$1F,$5F,$12,$0A,$0E
 
dc.b $0A,$00,$04,$04,$03,$2F,$2F,$2F,$2F,$25,$0E,$30,$84
 
dc.b $3C,$31,$50,$52,$30,$52,$52,$53,$53,$08,$08,$00
 
dc.b $00,$04,$04,$00,$00,$10,$10,$0B,$0D,$19,$0B,$80,$80
 
dc.b $08,$0A,$30,$70,$00,$1F,$5F,$1F,$5F,$12,$0A,$0E
 
dc.b $0A,$00,$04,$04,$03,$2F,$2F,$2F,$2F,$24,$13,$2D,$80
 
dc.b $3D,$01,$51,$21,$01,$12,$14,$14,$0F,$0A,$05,$05
 
dc.b $05,$00,$00,$00,$00,$2B,$2B,$2B,$1B,$19,$80,$80,$80
 
dc.b $04,$57,$70,$02,$50,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$06,$00,$0A,$0A,$00,$00,$0F,$0F,$1A,$10,$80,$80
 
dc.b $35,$01,$13,$01,$00,$1F,$18,$1D,$19,$00,$06,$09
 
dc.b $0D,$00,$02,$00,$03,$00,$15,$06,$16,$1E,$83,$80,$80
 
dc.b $3C,$31,$50,$52,$30,$52,$52,$53,$53,$08,$08,$00
 
dc.b $00,$04,$04,$00,$00,$1F,$1F,$0F,$0F,$1A,$16,$88,$88
 
dc.b $20,$36,$30,$35,$31,$DF,$9F,$DF,$9F,$07,$09,$06
 
dc.b $06,$07,$06,$06,$08,$2F,$1F,$1F,$FF,$14,$0F,$37,$80
 
dc.b $3B,$0F,$01,$06,$02,$DF,$1F,$1F,$DF,$0C,$0A,$00
 
dc.b $03,$0F,$00,$00,$01,$F3,$55,$05,$5C,$22,$22,$20,$80
 
dc.b $3C,$31,$50,$52,$30,$52,$52,$53,$53,$08,$08,$00
 
dc.b $00,$04,$04,$00,$00,$1F,$1F,$0F,$0F,$1C,$14,$84,$80
 
dc.b $3A,$69,$50,$70,$60,$1C,$1A,$18,$18,$10,$02,$0C
 
dc.b $09,$08,$06,$06,$03,$F9,$06,$56,$06,$28,$14,$15,$00
 
dc.b $3D,$00,$02,$01,$01,$4C,$50,$0F,$12,$0C,$00,$02
 
dc.b $05,$01,$00,$00,$00,$28,$2A,$29,$19,$1A,$06,$00,$00
 
dc.b $2C,$71,$31,$71,$31,$1F,$1F,$16,$16,$00,$00,$0F
 
dc.b $0F,$00,$00,$0F,$0F,$00,$00,$FA,$FA,$15,$14,$00,$00
 
dc.b $18,$37,$31,$32,$31,$9E,$1C,$DC,$9C,$0D,$04,$06
 
dc.b $01,$08,$03,$0A,$05,$B6,$36,$B6,$28,$2C,$14,$22,$00
 
dc.b $3D,$01,$02,$02,$02,$10,$50,$50,$50,$07,$08,$08
 
dc.b $08,$01,$00,$00,$00,$24,$18,$18,$18,$1C,$82,$82,$82
 
dc.b $32,$71,$33,$0D,$01,$5F,$5F,$99,$94,$05,$05,$05
 
dc.b $07,$02,$02,$02,$02,$11,$11,$11,$72,$23,$26,$2D,$80
 
dc.b $3A,$32,$52,$01,$31,$1F,$1F,$1F,$18,$01,$00,$1F
 
dc.b $00,$00,$00,$0F,$00,$5A,$03,$0F,$1A,$3B,$4F,$30,$00
 
dc.b $3C,$42,$32,$41,$41,$12,$12,$12,$12,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$06,$06,$08,$08,$24,$24,$08,$08
 
dc.b $31,$34,$30,$35,$31,$DF,$9F,$DF,$9F,$0C,$0C,$07
 
dc.b $09,$07,$07,$07,$08,$2F,$1F,$1F,$2F,$17,$14,$32,$80
 
dc.b $3D,$01,$01,$01,$01,$10,$50,$50,$50,$07,$08,$08
 
dc.b $08,$01,$00,$00,$00,$20,$1A,$1A,$1A,$19,$84,$84,$84
 
dc.b $24,$70,$30,$74,$38,$12,$1F,$1F,$1F,$05,$05,$03
 
dc.b $03,$05,$05,$03,$03,$36,$26,$2C,$2C,$0A,$06,$08,$08
 
dc.b $3A,$01,$01,$01,$02,$8D,$07,$07,$52,$09,$00,$00
 
dc.b $03,$01,$02,$02,$00,$5F,$0F,$0F,$2F,$18,$18,$22,$80
 
dc.b $3A,$01,$01,$07,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$00,$1F,$1F,$FF,$0F,$18,$16,$4E,$80
 
dc.b $3A,$03,$03,$08,$01,$8E,$8D,$8E,$53,$0E,$0E,$0E
 
dc.b $03,$00,$00,$00,$00,$1F,$1F,$FF,$0F,$17,$20,$28,$80
 
dc.b $20,$7A,$00,$31,$00,$9F,$DC,$D8,$DF,$10,$04,$0A
 
dc.b $04,$0F,$08,$08,$08,$5F,$BF,$5F,$BF,$14,$17,$2B,$80
 
dc.b $3A,$61,$51,$08,$02,$5D,$5D,$5D,$50,$04,$1F,$0F
 
dc.b $1F,$00,$00,$00,$00,$1F,$0F,$5F,$0F,$22,$22,$1E,$80
 
dc.b $02,$01,$02,$55,$04,$92,$8E,$8D,$54,$0D,$00,$0C
 
dc.b $03,$00,$00,$00,$00,$FF,$0F,$2F,$5F,$16,$1D,$2A,$80
 
dc.b $02,$75,$73,$71,$31,$1F,$96,$58,$9F,$01,$03,$1B
 
dc.b $08,$01,$01,$04,$05,$FF,$3F,$2F,$2F,$24,$30,$29,$80
 
dc.b $20,$66,$60,$65,$60,$DF,$9F,$DF,$1F,$00,$09,$06
 
dc.b $0C,$07,$06,$06,$08,$2F,$1F,$1F,$FF,$1C,$16,$3A,$80
 
dc.b $0D,$32,$06,$08,$01,$1F,$19,$19,$19,$0A,$05,$05
 
dc.b $05,$00,$02,$02,$02,$3F,$2F,$2F,$2F,$28,$86,$80,$8D
 
dc.b $38,$3A,$11,$0A,$02,$D4,$50,$14,$0E,$05,$02,$08
 
dc.b $88,$00,$00,$00,$00,$99,$09,$09,$1A,$2D,$19,$2C,$86
 
dc.b $0D,$32,$02,$04,$01,$1F,$19,$19,$19,$0A,$05,$05
 
dc.b $05,$00,$02,$02,$02,$3F,$2F,$2F,$2F,$28,$8B,$86,$93
 
dc.b $3A,$20,$60,$23,$01,$1E,$1F,$1F,$1F,$0A,$0B,$0A
 
dc.b $0A,$05,$0A,$07,$08,$A4,$96,$85,$78,$21,$28,$25,$00
 
dc.b $3A,$32,$32,$56,$42,$8D,$15,$4F,$52,$06,$07,$08
 
dc.b $04,$02,$00,$00,$00,$18,$28,$18,$28,$19,$2A,$20,$00
 
dc.b $3A,$51,$51,$08,$02,$1E,$1E,$1E,$10,$1F,$1F,$1F
 
dc.b $0F,$00,$00,$00,$02,$0F,$0F,$0F,$1F,$18,$22,$24,$81
 
dc.b $20,$36,$30,$35,$31,$DF,$9F,$DF,$9F,$07,$09,$06
 
dc.b $06,$07,$06,$06,$08,$2F,$1F,$1F,$FF,$19,$13,$37,$80
 
dc.b $3D,$01,$02,$02,$02,$14,$8C,$0E,$0E,$08,$02,$05
 
dc.b $05,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$1A,$80,$80,$80
 
; end of Mus_Credits
 
 
 
; ------------------------------------------------------------------------------------------
 
; Sound effect pointers
 
; ------------------------------------------------------------------------------------------
 
; WARNING the sound driver treats certain sounds specially
 
; going by the ID of the sound.
 
; SndID_Ring, SndID_RingLeft, SndID_Gloop, SndID_SpindashRev
 
; are referenced by the sound driver directly.
 
; If needed you can change this in s2.sounddriver.asm
 
 
 
 
 
; NOTE: the exact order of this list determines the priority of each sound, since it determines the sound's SndID.
 
;      a sound can get dropped if a higher-priority sound is already playing.
 
;      the rules for sound priority are currently unknown, but you can generally swap pointer lines around to resolve priority conflicts.
 
; loc_FEE91: SoundPoint:
 
SoundIndex:
 
SndPtr_Jump: rom_ptr_z80 Sound20 ; jumping sound
 
SndPtr_Checkpoint: rom_ptr_z80 Sound21 ; checkpoint ding-dong sound
 
SndPtr_SpikeSwitch: rom_ptr_z80 Sound22 ; spike switch sound
 
SndPtr_Hurt: rom_ptr_z80 Sound23 ; hurt sound
 
SndPtr_Skidding: rom_ptr_z80 Sound24 ; skidding sound
 
SndPtr_BlockPush: rom_ptr_z80 Sound25 ; block push sound
 
SndPtr_HurtBySpikes: rom_ptr_z80 Sound26 ; spiky impalement sound
 
SndPtr_Sparkle: rom_ptr_z80 Sound27 ; sparkling sound
 
SndPtr_Beep: rom_ptr_z80 Sound28 ; short beep
 
SndPtr_Bwoop: rom_ptr_z80 Sound29 ; bwoop
 
SndPtr_Splash: rom_ptr_z80 Sound2A ; splash sound
 
SndPtr_Swish: rom_ptr_z80 Sound2B ; swish
 
SndPtr_BossHit: rom_ptr_z80 Sound2C ; boss hit
 
SndPtr_InhalingBubble: rom_ptr_z80 Sound2D ; inhaling a bubble
 
SndPtr_ArrowFiring:
 
SndPtr_LavaBall: rom_ptr_z80 Sound2E ; arrow firing
 
SndPtr_Shield: rom_ptr_z80 Sound2F ; shield sound
 
SndPtr_LaserBeam: rom_ptr_z80 Sound30 ; laser beam
 
SndPtr_Zap: rom_ptr_z80 Sound31 ; zap
 
SndPtr_Drown: rom_ptr_z80 Sound32 ; drownage
 
SndPtr_FireBurn: rom_ptr_z80 Sound33 ; fire + burn
 
SndPtr_Bumper: rom_ptr_z80 Sound34 ; bumper bing
 
SndPtr_Ring:
 
SndPtr_RingRight: rom_ptr_z80 Sound35 ; ring sound
 
SndPtr_SpikesMove: rom_ptr_z80 Sound36
 
SndPtr_Rumbling: rom_ptr_z80 Sound37 ; rumbling
 
rom_ptr_z80 Sound38
 
SndPtr_Smash: rom_ptr_z80 Sound39 ; smash/breaking
 
rom_ptr_z80 Sound3A ; nondescript ding
 
SndPtr_DoorSlam: rom_ptr_z80 Sound3B ; door slamming shut
 
SndPtr_SpindashRelease: rom_ptr_z80 Sound3C ; spindash unleashed
 
SndPtr_Hammer: rom_ptr_z80 Sound3D ; slide-thunk
 
SndPtr_Roll: rom_ptr_z80 Sound3E ; rolling sound
 
SndPtr_ContinueJingle: rom_ptr_z80 Sound3F ; got continue
 
SndPtr_CasinoBonus: rom_ptr_z80 Sound40 ; short bonus ding
 
SndPtr_Explosion: rom_ptr_z80 Sound41 ; badnik bust
 
SndPtr_WaterWarning: rom_ptr_z80 Sound42 ; warning ding-ding
 
SndPtr_EnterGiantRing: rom_ptr_z80 Sound43 ; special stage ring flash (unused)
 
SndPtr_BossExplosion: rom_ptr_z80 Sound44 ; thunk
 
SndPtr_TallyEnd: rom_ptr_z80 Sound45 ; cha-ching
 
SndPtr_RingSpill: rom_ptr_z80 Sound46 ; losing rings
 
rom_ptr_z80 Sound47 ; chain pull chink-chink
 
SndPtr_Flamethrower: rom_ptr_z80 Sound48 ; flamethrower
 
SndPtr_Bonus: rom_ptr_z80 Sound49 ; bonus pwoieeew (unused)
 
SndPtr_SpecStageEntry: rom_ptr_z80 Sound4A ; special stage entry
 
SndPtr_SlowSmash: rom_ptr_z80 Sound4B ; slower smash/crumble
 
SndPtr_Spring: rom_ptr_z80 Sound4C ; spring boing
 
SndPtr_Blip: rom_ptr_z80 Sound4D ; selection blip
 
SndPtr_RingLeft: rom_ptr_z80 Sound4E ; another ring sound (only plays in the left speaker?)
 
SndPtr_Signpost: rom_ptr_z80 Sound4F ; signpost spin sound
 
SndPtr_CNZBossZap: rom_ptr_z80 Sound50 ; mosquito zapper
 
rom_ptr_z80 Sound51
 
rom_ptr_z80 Sound52
 
SndPtr_Signpost2P: rom_ptr_z80 Sound53
 
SndPtr_OOZLidPop: rom_ptr_z80 Sound54 ; OOZ lid pop sound
 
SndPtr_SlidingSpike: rom_ptr_z80 Sound55
 
SndPtr_CNZElevator: rom_ptr_z80 Sound56
 
SndPtr_PlatformKnock: rom_ptr_z80 Sound57
 
SndPtr_BonusBumper: rom_ptr_z80 Sound58 ; CNZ bonusy bumper sound
 
SndPtr_LargeBumper: rom_ptr_z80 Sound59 ; CNZ baaang bumper sound
 
SndPtr_Gloop: rom_ptr_z80 Sound5A ; CNZ gloop / water droplet sound
 
SndPtr_PreArrowFiring: rom_ptr_z80 Sound5B
 
SndPtr_Fire: rom_ptr_z80 Sound5C
 
SndPtr_ArrowStick: rom_ptr_z80 Sound5D ; chain clink
 
SndPtr_Helicopter:
 
SndPtr_WingFortress: rom_ptr_z80 Sound5E ; helicopter
 
SndPtr_SuperTransform: rom_ptr_z80 Sound5F
 
SndPtr_SpindashRev: rom_ptr_z80 Sound60 ; spindash charge
 
SndPtr_Rumbling2: rom_ptr_z80 Sound61 ; rumbling
 
SndPtr_CNZLaunch: rom_ptr_z80 Sound62
 
SndPtr_Flipper: rom_ptr_z80 Sound63 ; CNZ blooing bumper
 
SndPtr_HTZLiftClick: rom_ptr_z80 Sound64 ; HTZ track click sound
 
SndPtr_Leaves: rom_ptr_z80 Sound65 ; kicking up leaves sound
 
SndPtr_MegaMackDrop: rom_ptr_z80 Sound66 ; leaf splash?
 
SndPtr_DrawbridgeMove: rom_ptr_z80 Sound67
 
SndPtr_QuickDoorSlam: rom_ptr_z80 Sound68 ; door slamming quickly (seems unused)
 
SndPtr_DrawbridgeDown: rom_ptr_z80 Sound69
 
SndPtr_LaserBurst: rom_ptr_z80 Sound6A ; robotic laser burst
 
SndPtr_Scatter:
 
SndPtr_LaserFloor: rom_ptr_z80 Sound6B ; scatter
 
SndPtr_Teleport: rom_ptr_z80 Sound6C
 
SndPtr_Error: rom_ptr_z80 Sound6D ; error sound
 
SndPtr_MechaSonicBuzz: rom_ptr_z80 Sound6E ; silver sonic buzz saw
 
SndPtr_LargeLaser: rom_ptr_z80 Sound6F
 
SndPtr_OilSlide: rom_ptr_z80 Sound70
 
SndPtr__End:
 
 
 
; There are many non-relative pointers in these sound effects,
 
; so the sounds shouldn't simply be BINCLUDE'd.
 
; They could be included as separate .asm files using "include" instead of "binclude",
 
; but I wanted to minimize the number of included asm files.
 
 
 
; some comments on what the various script commands do (after the header):
 
;  0x00-0x7F sets the note duration (of the previous note and following notes)
 
;  0x81-0xDF plays a note (the valid range may be smaller for PSG or DAC)
 
;  0x80 plays silence
 
;  0xE0-0xFF does special things. I won't list them here... search for "Coordination flags" sonic 2.
 
 
 
; the FM voices (poorly named "ssamp" or "samples" below)
 
; are 25 bytes each and go directly to YM2612 registers.
 
; they can be hard to edit (there's an art to it)
 
; but search for sonic "Voice editing" for more info if you want to try.
 
 
 
; jumping sound
 
Sound20: dc.w $0000,$0101
 
dc.w $8080,z80_ptr(+),$F400
 
+ dc.b $F5,$00,$9E,$05,$F0,$02,$01,$F8,$65,$A3,$15,$F2
 
 
 
; checkpoint ding-dong sound
 
Sound21: dc.w z80_ptr(ssamp21),$0101
 
dc.w $8005,z80_ptr(+),$0001
 
ssamp21: dc.b $3C,$05,$0A,$01,$01,$56,$5C,$5C,$5C,$0E,$11,$11
 
dc.b $11,$09,$06,$0A,$0A,$4F,$3F,$3F,$3F,$17,$20,$80,$80
 
+ dc.b $EF,$00,$BD,$06,$BA,$16,$F2
 
 
 
; spike switch sound
 
Sound22: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F0,$01,$01,$F0,$08,$F3,$E7,$C0,$04,$CA,$04
 
- dc.b $C0,$01,$EC
 
dc.w $01F7,$0006,z80_ptr(-)
 
dc.b $F2
 
 
 
; hurt sound
 
Sound23: dc.w z80_ptr(ssamp23),$0101
 
dc.w $8005,z80_ptr(+),$F400
 
+ dc.b $EF,$00,$B0,$07,$E7,$AD
 
- dc.b $01,$E6
 
dc.w $01F7,$002F,z80_ptr(-)
 
dc.b $F2
 
ssamp23: dc.b $30,$30,$30,$30,$30,$9E,$DC,$D8,$DC,$0E,$04,$0A
 
dc.b $05,$08,$08,$08,$08,$BF,$BF,$BF,$BF,$14,$14,$3C,$80
 
 
 
; skidding sound
 
Sound24: dc.w $0000,$0102 ; sound header... no sample and 2 script entries
 
dc.w $80A0,z80_ptr(+),$F400 ; entry 1 header
 
dc.w $80C0,z80_ptr(++),$F400 ; entry 2 header
 
+ dc.b $F5,$00,$AF,$01,$80,$AF,$80,$03 ; script entry 1
 
- dc.b $AF,$01,$80
 
dc.w $01F7,$000B,z80_ptr(-) ; loopback
 
dc.b $F2 ; script 1 end
 
+ dc.b $F5,$00,$80,$01,$AD,$80,$AD,$80,$03 ; script entry 2
 
- dc.b $AD,$01,$80
 
dc.w $01F7,$000B,z80_ptr(-) ; loopback
 
dc.b $F2 ; script 2 end
 
 
 
; block push sound
 
Sound25: dc.w z80_ptr(ssamp25),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$80,$01,$8B,$0A,$80,$02,$F2
 
ssamp25: dc.b $FA,$21,$10,$30,$32,$2F,$2F,$1F,$2F,$05,$09,$08
 
dc.b $02,$06,$06,$0F,$02,$1F,$4F,$2F,$2F,$0F,$0E,$1A,$80
 
 
 
; spiky impalement sound
 
Sound26: dc.w z80_ptr(ssamp26),$0101
 
dc.w $8005,z80_ptr(+),$F200
 
+ dc.b $EF,$00,$F0,$01,$01,$10,$FF,$CF,$05,$D7,$25,$F2
 
ssamp26: dc.b $3B,$3C,$30,$39,$31,$DF,$1F,$1F,$DF,$04,$04,$05
 
dc.b $01,$04,$04,$04,$02,$FF,$1F,$0F,$AF,$29,$0F,$20,$80
 
 
 
; sparkling sound
 
Sound27: dc.w z80_ptr(ssamp27),$0101
 
dc.w $8004,z80_ptr(+),$0C1C
 
+ dc.b $EF,$00,$C1,$05,$C4,$05,$C9,$2B,$F2
 
ssamp27: dc.b $07,$73,$33,$33,$73,$0F,$19,$14,$1A,$0A,$0A,$0A
 
dc.b $0A,$0A,$0A,$0A,$0A,$57,$57,$57,$57,$00,$00,$00,$00
 
 
 
; short beep
 
Sound28: dc.w $0000,$0101
 
dc.w $8080,z80_ptr(+),$E803
 
+ dc.b $F5,$04,$CB,$04,$F2
 
 
 
; bwoop
 
Sound29: dc.w $0000,$0101
 
dc.w $80A0,z80_ptr(+),$0000
 
+ dc.b $F0,$01,$01,$E6,$35,$8E,$06,$F2
 
 
 
; splash sound
 
Sound2A: dc.w z80_ptr(ssamp2A),$0102
 
dc.w $80C0,z80_ptr(+),$0000
 
dc.w $8005,z80_ptr(++),$0003
 
+ dc.b $F5,$00,$F3,$E7,$C2,$05,$C6,$05,$E7
 
- dc.b $07,$EC,$01
 
dc.w $E7F7,$000F,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $EF,$00,$A6,$14,$F2
 
ssamp2A: dc.b $00,$00,$02,$03,$00,$D9,$1F,$DF,$1F,$12,$14,$11
 
dc.b $0F,$0A,$0A,$00,$0D,$FF,$FF,$FF,$FF,$22,$27,$07,$80
 
 
 
; swish
 
Sound2B: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F5,$00,$F3,$E7,$C6,$03,$80,$03,$C6,$01,$E7
 
- dc.b $01,$EC,$01
 
dc.w $E7F7,$0015,z80_ptr(-)
 
dc.b $F2
 
 
 
; boss hit
 
Sound2C: dc.w z80_ptr(smashsamp),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$F0,$01,$01,$0C,$01
 
- dc.b $81,$0A,$E6
 
dc.w $10F7,$0004,z80_ptr(-)
 
dc.b $F2
 
smashsamp: dc.b $F9,$21,$10,$30,$32,$1F,$1F,$1F,$1F,$05,$09,$18
 
dc.b $02,$0B,$10,$1F,$05,$1F,$4F,$2F,$2F,$0E,$04,$07,$80
 
 
 
; inhaling a bubble
 
Sound2D: dc.w z80_ptr(ssamp2D),$0101
 
dc.w $8005,z80_ptr(+),$0E00
 
+ dc.b $EF,$00,$F0,$01,$01,$21,$6E,$A6,$07
 
dc.b $80,$06,$F0,$01,$01,$44,$1E,$AD,$08,$F2
 
ssamp2D: dc.b $35,$05,$08,$09,$07,$1E,$0D,$0D,$0E,$0C,$03,$15
 
dc.b $06,$16,$09,$0E,$10,$2F,$1F,$2F,$1F,$15,$12,$12,$80
 
 
 
; arrow firing
 
Sound2E: dc.w z80_ptr(ssamp2E),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$80,$01,$F0,$01,$01,$40,$48,$83,$06,$85,$02,$F2
 
+ dc.b $F5,$00,$80,$0B,$F3,$E7,$C6,$01,$E7
 
- dc.b $02,$EC,$01
 
dc.w $E7F7,$0010,z80_ptr(-)
 
dc.b $F2
 
ssamp2E: dc.b $FA,$02,$00,$03,$05,$12,$0F,$11,$13,$05,$09,$18
 
dc.b $02,$06,$06,$0F,$02,$1F,$4F,$2F,$2F,$2F,$0E,$1A,$80
 
 
 
; shield sound
 
Sound2F: dc.w z80_ptr(ssamp2F),$0101
 
dc.w $8005,z80_ptr(+),$0C00
 
+ dc.b $EF,$00,$80,$01,$A3,$05,$E7,$A4,$26,$F2
 
ssamp2F: dc.b $30,$30,$30,$30,$30,$9E,$AC,$A8,$DC,$0E,$04,$0A
 
dc.b $05,$08,$08,$08,$08,$BF,$BF,$BF,$BF,$04,$14,$2C,$80
 
 
 
; laser beam
 
Sound30: dc.w z80_ptr(ssamp30),$0101 ; sound header... a voice and 1 script entry
 
dc.w $8005,z80_ptr(+),$FB05 ; script entry header
 
+ dc.b $EF,$00,$DF,$7F ; script start
 
- dc.b $DF,$02,$E6 ; script continued
 
dc.w $01F7,$001B,z80_ptr(-) ; loopback
 
dc.b $F2 ; script end
 
ssamp30: dc.b $83,$1F,$1F,$15,$1F,$1F,$1F,$1F,$1F,$00,$00,$00 ; voice
 
dc.b $00,$02,$02,$02,$02,$2F,$FF,$2F,$3F,$0B,$01,$16,$82 ; (fixed length)
 
 
 
; zap
 
Sound31: dc.w z80_ptr(ssamp31),$0101
 
dc.w $8005,z80_ptr(+),$FB02
 
+ dc.b $EF,$00,$B3,$05,$80,$01,$B3,$09,$F2
 
ssamp31: dc.b $83,$12,$13,$10,$1E,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$02,$02,$02,$02,$2F,$FF,$2F,$3F,$05,$34,$10,$87
 
 
 
; drownage
 
Sound32: dc.w z80_ptr(ssamp32),$0102
 
dc.w $8004,z80_ptr(++),$0C04
 
dc.w $8005,z80_ptr(+),$0E02
 
+ dc.b $EF,$00,$F0,$01,$01,$83,$0C
 
- dc.b $8A,$05,$05,$E6
 
dc.w $03F7,$000A,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $80,$06,$EF,$00,$F0,$01,$01,$6F,$0E
 
- dc.b $8D,$04,$05,$E6
 
dc.w $03F7,$000A,z80_ptr(-)
 
dc.b $F2
 
ssamp32: dc.b $35,$14,$04,$1A,$09,$0E,$11,$10,$0E,$0C,$03,$15
 
dc.b $06,$16,$09,$0E,$10,$2F,$4F,$2F,$4F,$2F,$12,$12,$80
 
 
 
; fire + burn
 
Sound33: dc.w z80_ptr(ssamp2E),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$80,$01,$F0,$01,$01,$40,$48,$83,$06,$85,$02,$F2
 
+ dc.b $F5,$00,$80,$0B,$F3,$E7,$A7,$25,$E7
 
- dc.b $02,$EC,$01
 
dc.w $E7F7,$0010,z80_ptr(-)
 
dc.b $F2
 
 
 
; bumper bing
 
Sound34: dc.w z80_ptr(ssamp34),$0103
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $8004,z80_ptr(++),$0000
 
dc.w $8002,z80_ptr(+++),$0002
 
+ dc.b $EF,$00,$F6
 
dc.w z80_ptr(Sound34_3)
 
+ dc.b $EF,$00,$E1,$07,$80,$01
 
Sound34_3:
 
dc.b $BA,$20,$F2
 
+ dc.b $EF,$01,$9A,$03,$F2
 
ssamp34: dc.b $3C,$05,$0A,$01,$01,$56,$5C,$5C,$5C,$0E,$11,$11
 
dc.b $11,$09,$06,$0A,$0A,$4F,$3F,$3F,$3F,$1F,$2B,$80,$80
 
dc.b $05,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$12,$0C,$0C
 
dc.b $0C,$12,$08,$08,$08,$1F,$5F,$5F,$5F,$07,$80,$80,$80
 
 
 
; ring sound
 
Sound35: dc.w z80_ptr(ringsamp),$0101
 
dc.w $8005,z80_ptr(+),$0005
 
+ dc.b $EF,$00,$E0,$40,$C1,$05,$C4,$05,$C9,$1B,$F2
 
 
 
 
 
Sound36: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F0,$01,$01,$F0,$08,$F3,$E7,$C1,$07
 
- dc.b $D0,$01,$EC
 
dc.w $01F7,$000C,z80_ptr(-)
 
dc.b $F2
 
 
 
; rumbling
 
Sound37: dc.w z80_ptr(ssamp37),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$F0,$01,$01,$20,$08
 
- dc.b $8B
 
dc.w $0AF7,$0008,z80_ptr(-)
 
- dc.b $8B,$10,$E6
 
dc.w $03F7,$0009,z80_ptr(-)
 
dc.b $F2
 
ssamp37: dc.b $FA,$21,$10,$30,$32,$1F,$1F,$1F,$1F,$05,$09,$18
 
dc.b $02,$06,$06,$0F,$02,$1F,$4F,$2F,$2F,$0F,$0E,$1A,$80
 
 
 
 
 
Sound38: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F0,$01,$01,$F0,$08,$F3,$E7,$B4,$08
 
- dc.b $B0,$02,$EC
 
dc.w $01F7,$0003,z80_ptr(-)
 
dc.b $F2
 
 
 
; smash/breaking
 
Sound39: dc.w z80_ptr(smashsamp),$0104
 
dc.w $8002,z80_ptr(+),$1000
 
dc.w $8004,z80_ptr(+++),$0000
 
dc.w $8005,z80_ptr(++),$1000
 
dc.w $80C0,z80_ptr(s39s4),$0000
 
+ dc.b $E0,$40,$80,$02,$F6
 
dc.w z80_ptr(++)
 
+ dc.b $E0,$80,$80,$01
 
+ dc.b $EF,$00,$F0,$03,$01,$20,$04
 
- dc.b $81,$18,$E6
 
dc.w $0AF7,$0006,z80_ptr(-)
 
dc.b $F2
 
s39s4: dc.b $F0,$01,$01,$0F,$05,$F3,$E7
 
- dc.b $B0,$18,$E7,$EC
 
dc.w $03F7,$0005,z80_ptr(-)
 
dc.b $F2
 
 
 
; nondescript ding
 
Sound3A: dc.w z80_ptr(ssamp3A),$0101
 
dc.w $8005,z80_ptr(+),$0007
 
+ dc.b $EF,$00,$AE,$08,$F2
 
ssamp3A: dc.b $1C,$2E,$0F,$02,$02,$1F,$1F,$1F,$1F,$18,$14,$0F
 
dc.b $0E,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$20,$1B,$80,$80
 
 
 
; door slamming shut
 
Sound3B: dc.w z80_ptr(ssamp3B),$0101
 
dc.w $8005,z80_ptr(+),$F400
 
+ dc.b $EF,$00,$9B,$04,$80,$A0,$06,$F2
 
ssamp3B: dc.b $3C,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$00,$0F,$16
 
dc.b $0F,$00,$00,$00,$00,$0F,$FF,$AF,$FF,$00,$0A,$80,$80
 
 
 
; spindash unleashed
 
Sound3C: dc.w z80_ptr(ssamp3C),$0102
 
dc.w $8005,z80_ptr(+),$9000
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$F0,$01,$01,$C5,$1A,$CD,$07,$F2
 
+ dc.b $F5,$07,$80,$07,$F0,$01,$02,$05,$FF,$F3,$E7,$BB,$4F,$F2
 
ssamp3C: dc.b $FD,$09,$00,$03,$00,$1F,$1F,$1F,$1F,$10,$0C,$0C
 
dc.b $0C,$0B,$10,$1F,$05,$1F,$4F,$2F,$2F,$09,$92,$84,$8E
 
 
 
; slide-thunk
 
Sound3D: dc.w z80_ptr(ssamp3D),$0102
 
dc.w $8005,z80_ptr(+),$100A
 
dc.w $8004,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$F0,$01,$01,$60,$01,$A7,$08,$F2
 
+ dc.b $80,$08,$EF,$01,$84,$22,$F2
 
ssamp3D: dc.b $FA,$21,$19,$3A,$30,$1F,$1F,$1F,$1F,$05,$09,$18
 
dc.b $02,$0B,$10,$1F,$05,$1F,$4F,$2F,$2F,$0E,$04,$07,$80
 
dc.b $FA,$31,$10,$30,$32,$1F,$1F,$1F,$1F,$05,$05,$18
 
dc.b $10,$0B,$10,$1F,$10,$1F,$1F,$2F,$2F,$0D,$01,$00,$80
 
 
 
; rolling sound
 
Sound3E: dc.w z80_ptr(ssamp3E),$0101
 
dc.w $8004,z80_ptr(+),$0C05
 
+ dc.b $EF,$00,$80,$01,$F0,$03,$01,$09,$FF,$CA,$25,$F4
 
- dc.b $E7,$E6,$01,$D0
 
dc.w $02F7,$002A,z80_ptr(-)
 
dc.b $F2
 
ssamp3E: dc.b $3C,$00,$02,$44,$02,$1F,$1F,$1F,$15,$00,$00,$1F
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$0D,$28,$00,$00
 
 
 
; got continue
 
Sound3F: dc.w z80_ptr(ssamp3F),$0103
 
dc.w $8002,z80_ptr(+),$F406
 
dc.w $8004,z80_ptr(++),$F406
 
dc.w $8005,z80_ptr(+++),$F406
 
+ dc.b $EF,$00,$C9,$07,$CD,$D0,$CB,$CE,$D2,$CD,$D0,$D4,$CE,$D2,$D5
 
- dc.b $D0,$07,$D4,$D7,$E6
 
dc.w $05F7,$0008,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $EF,$00,$E1,$01,$80,$07,$CD,$15,$CE,$D0,$D2
 
- dc.b $D4,$15,$E6
 
dc.w $05F7,$0008,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $EF,$00,$E1,$01,$C9,$15,$CB,$CD,$CE
 
- dc.b $D0,$15,$E6
 
dc.w $05F7,$0008,z80_ptr(-)
 
dc.b $F2
 
ssamp3F: dc.b $14,$25,$36,$33,$11,$1F,$1F,$1F,$1F,$15,$1C,$18
 
dc.b $13,$0B,$0D,$08,$09,$0F,$8F,$9F,$0F,$24,$0A,$05,$80
 
 
 
; short bonus ding
 
Sound40: dc.w z80_ptr(ssamp3F),$0102
 
dc.w $8005,z80_ptr(++),$0008
 
dc.w $8004,z80_ptr(+),$0008
 
+ dc.b $E1,$03,$80,$02
 
+ dc.b $EF,$00,$C4,$16,$F2
 
 
 
; badnik bust
 
Sound41: dc.w z80_ptr(ssamp41),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0002
 
+ dc.b $F0,$03,$01,$72,$0B,$EF,$00,$BA,$16,$F2
 
+ dc.b $F5,$01,$F3,$E7,$B0,$1B,$F2
 
ssamp41: dc.b $3C,$0F,$03,$01,$01,$1F,$1F,$1F,$1F,$19,$19,$12
 
dc.b $0E,$05,$00,$12,$0F,$0F,$FF,$7F,$FF,$00,$00,$80,$80
 
 
 
; warning ding-ding
 
Sound42: dc.w z80_ptr(ssamp3F),$0101
 
dc.w $8005,z80_ptr(+),$0C08
 
+ dc.b $EF,$00,$BA,$08,$BA,$25,$F2
 
 
 
; special stage ring flash (unused)
 
Sound43: dc.w z80_ptr(ssamp43),$0102
 
dc.w $8004,z80_ptr(+),$0C00
 
dc.w $8005,z80_ptr(++),$0013
 
+ dc.b $EF,$01,$80,$01,$A2,$08,$EF,$00,$E7,$AD,$26,$F2
 
+ dc.b $EF,$02,$F0,$06,$01,$03,$FF,$80,$0A
 
- dc.b $C3
 
dc.w $06F7,$0005,z80_ptr(-)
 
dc.b $C3,$17,$F2
 
ssamp43: dc.b $30,$30,$34,$5C,$30,$9E,$AC,$A8,$DC,$0E,$04,$0A
 
dc.b $05,$08,$08,$08,$08,$BF,$BF,$BF,$BF,$24,$04,$1C,$80
 
dc.b $30,$30,$34,$5C,$30,$9E,$AC,$A8,$DC,$0E,$04,$0A
 
dc.b $05,$08,$08,$08,$08,$BF,$BF,$BF,$BF,$24,$04,$2C,$80
 
dc.b $04,$37,$77,$72,$49,$1F,$1F,$1F,$1F,$07,$07,$0A
 
dc.b $0D,$00,$00,$0B,$0B,$1F,$1F,$0F,$0F,$13,$13,$81,$88
 
 
 
; thunk
 
Sound44: dc.w z80_ptr(ssamp44),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$8A,$22,$F2
 
ssamp44: dc.b $FA,$21,$10,$30,$32,$1F,$1F,$1F,$1F,$05,$05,$18
 
dc.b $10,$0B,$10,$1F,$10,$1F,$4F,$2F,$2F,$0D,$04,$07,$80
 
 
 
; cha-ching
 
Sound45: dc.w z80_ptr(ssamp45),$0103
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $8004,z80_ptr(++),$0000
 
dc.w $80C0,z80_ptr(+++),$0000
 
+ dc.b $EF,$00,$8A,$08,$80,$02,$8A,$08,$F2
 
+ dc.b $EF,$01,$80,$12,$C6,$55,$F2
 
+ dc.b $F5,$02,$F3,$E7,$80,$02,$C2,$05,$C4,$04,$C2,$05,$C4,$04,$F2
 
ssamp45: dc.b $3B,$03,$02,$02,$06,$18,$1A,$1A,$96,$17,$0A,$0E
 
dc.b $10,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$00,$39,$28,$80
 
ringsamp: dc.b $04,$37,$77,$72,$49,$1F,$1F,$1F,$1F,$07,$07,$0A
 
dc.b $0D,$00,$00,$0B,$0B,$1F,$1F,$0F,$0F,$23,$23,$80,$80
 
 
 
; losing rings (scatter)
 
Sound46: dc.w z80_ptr(ringsamp),$0102
 
dc.w $8004,z80_ptr(+),$0005
 
dc.w $8005,z80_ptr(++),$0008
 
+ dc.b $EF,$00,$C6,$02,$05,$05,$05,$05,$05,$05,$3A,$F2
 
+ dc.b $EF,$00,$80,$02,$C4,$02,$05,$15,$02,$05,$32,$F2
 
 
 
; chain pull chink-chink
 
Sound47: dc.w z80_ptr(ssamp47),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$BE,$05,$80,$04,$BE,$04,$80,$04,$F2
 
ssamp47: dc.b $28,$2F,$37,$5F,$2B,$1F,$1F,$1F,$1F,$15,$15,$15
 
dc.b $13,$13,$0D,$0C,$10,$2F,$3F,$2F,$2F,$00,$1F,$10,$80
 
 
 
; flamethrower
 
Sound48: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F5,$00,$F3,$E7,$A7,$25,$F2
 
 
 
; bonus pwoieeew (unused)
 
Sound49: dc.w z80_ptr(ssamp49),$0101
 
dc.w $8005,z80_ptr(+),$0E00
 
+ dc.b $EF,$00,$F0,$01,$01,$33,$18,$B9,$1A,$F2
 
ssamp49: dc.b $3B,$0A,$05,$31,$02,$5F,$5F,$5F,$5F,$04,$16,$14
 
dc.b $0C,$00,$00,$04,$00,$1F,$D8,$6F,$FF,$03,$00,$25,$80
 
 
 
; special stage entry
 
Sound4A: dc.w z80_ptr(ssamp4A),$0101
 
dc.w $8005,z80_ptr(+),$0002
 
+ dc.b $EF,$00,$F0,$01,$01,$5B,$02,$CC,$65,$F2
 
ssamp4A: dc.b $20,$36,$30,$35,$31,$41,$3B,$49,$4B,$09,$09,$06
 
dc.b $08,$01,$02,$03,$A9,$0F,$0F,$0F,$0F,$29,$23,$27,$80
 
 
 
; slower smash/crumble
 
Sound4B: dc.w z80_ptr(smashsamp),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$F0,$03,$01,$20,$04
 
- dc.b $81,$18,$E6
 
dc.w $0AF7,$0006,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $F0,$01,$01,$0F,$05,$F3,$E7
 
- dc.b $B0,$18,$E7,$EC
 
dc.w $03F7,$0005,z80_ptr(-)
 
dc.b $F2
 
 
 
; spring boing
 
Sound4C: dc.w z80_ptr(ssamp4C),$0101
 
dc.w $8004,z80_ptr(+),$0002
 
+ dc.b $EF,$00,$80,$01,$F0,$03,$01,$5D,$0F,$B0,$0C,$F4
 
- dc.b $E7,$E6,$02,$BD
 
dc.w $02F7,$0019,z80_ptr(-)
 
dc.b $F2
 
ssamp4C: dc.b $20,$36,$30,$35,$31,$DF,$9F,$DF,$9F,$07,$09,$06
 
dc.b $06,$07,$06,$06,$08,$2F,$1F,$1F,$FF,$16,$13,$30,$80
 
 
 
; selection blip
 
Sound4D: dc.w $0000,$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $BB,$02,$F2
 
 
 
; another ring sound (only plays in the left speaker?)
 
Sound4E: dc.w z80_ptr(ringsamp),$0101
 
dc.w $8004,z80_ptr(+),$0005
 
+ dc.b $EF,$00,$E0,$80,$C1,$04,$C4,$05,$C9,$1B,$F2
 
 
 
; signpost spin sound
 
Sound4F: dc.w z80_ptr(ssamp4F),$0102
 
dc.w $8004,z80_ptr(+),$2703
 
dc.w $8005,z80_ptr(++),$2700
 
+ dc.b $80,$04
 
+ dc.b $EF,$00
 
- dc.b $B4,$05,$E6
 
dc.w $02F7,$0015,z80_ptr(-)
 
dc.b $F2
 
ssamp4F: dc.b $F4,$06,$0F,$04,$0E,$1F,$1F,$1F,$1F,$00,$0B,$00
 
dc.b $0B,$00,$05,$00,$08,$0F,$FF,$0F,$FF,$0C,$03,$8B,$80
 
 
 
; mosquito zapper
 
Sound50: dc.w z80_ptr(ssamp50),$0101
 
dc.w $8005,z80_ptr(+),$F400
 
+ dc.b $EF,$00,$B3,$04,$80,$01
 
- dc.b $B4,$04,$80
 
dc.w $01F7,$0004,z80_ptr(-)
 
dc.b $F2
 
ssamp50: dc.b $83,$12,$13,$10,$1E,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$02,$02,$02,$02,$2F,$FF,$2F,$3F,$06,$34,$10,$87
 
 
 
 
 
Sound51: dc.w z80_ptr(ssamp51),$0102
 
dc.w $80C0,z80_ptr(+),$0001
 
dc.w $8005,z80_ptr(++),$000B
 
+ dc.b $F5,$02,$F3,$E4,$B0,$04,$85,$02,$F2
 
+ dc.b $EF,$00,$E8,$04,$A5,$06,$F2
 
ssamp51: dc.b $3C,$02,$01,$00,$01,$1F,$1F,$1F,$1F,$00,$19,$0E
 
dc.b $10,$00,$00,$0C,$0F,$0F,$FF,$EF,$FF,$05,$00,$80,$80
 
 
 
 
 
Sound52: dc.w z80_ptr(ssamp52),$0101
 
dc.w $8005,z80_ptr(+),$0002
 
+ dc.b $F0,$01,$01,$2A,$07,$EF,$00
 
- dc.b $A5,$03
 
dc.w $E7F7,$0013,z80_ptr(-)
 
- dc.b $A5,$03,$E7,$E6
 
dc.w $02F7,$0013,z80_ptr(-)
 
dc.b $F2
 
ssamp52: dc.b $28,$21,$21,$21,$30,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$29,$20,$29,$80
 
 
 
 
 
Sound53: dc.w z80_ptr(ssamp53),$0101
 
dc.w $8005,z80_ptr(+),$F503
 
+ dc.b $EF,$00,$F0,$01,$01,$46,$09,$A7,$14,$E7,$14,$E7,$E6,$04
 
dc.b $14,$E7,$E6,$04,$14,$E7,$E6,$04,$0A,$E7,$E6,$04,$0A,$F2
 
ssamp53: dc.b $07,$0A,$0C,$0C,$0C,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$2A,$0F,$0F,$80
 
 
 
; OOZ lid pop sound
 
Sound54: dc.w z80_ptr(ssamp54),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0006
 
+ dc.b $EF,$00,$B6,$15,$F2
 
+ dc.b $F3,$E7,$F5,$04,$C6,$03,$E7,$C5,$E7
 
dc.b $C4,$E7,$C3,$E7,$C2,$E7,$C1,$E7,$C0,$F2
 
ssamp54: dc.b $07,$03,$02,$03,$00,$FF,$6F,$6F,$3F,$12,$14,$11
 
dc.b $0E,$1A,$0A,$03,$0D,$FF,$FF,$FF,$FF,$03,$07,$07,$80
 
 
 
 
 
Sound55: dc.w z80_ptr(ssamp55),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$AA,$07,$B6,$15,$F2
 
ssamp55: dc.b $42,$20,$0E,$0F,$0F,$1F,$1F,$1F,$1F,$1F,$1F,$1F
 
dc.b $1F,$0F,$0E,$0F,$0E,$0F,$0F,$0F,$0F,$2E,$80,$20,$80
 
 
 
 
 
Sound56: dc.w z80_ptr(ssamp56),$0101
 
dc.w $8005,z80_ptr(+),$100E
 
+ dc.b $EF,$00,$F0,$01,$01,$1E,$FF,$8F,$1C,$F4
 
- dc.b $E7,$9A
 
dc.w $05F7,$0009,z80_ptr(-)
 
- dc.b $E7,$9A,$04,$E6,$02,$E7,$9A,$04,$E6
 
dc.w $02F7,$0008,z80_ptr(-)
 
dc.b $F2
 
ssamp56: dc.b $0D,$06,$00,$00,$E5,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$27,$80,$80,$80
 
 
 
 
 
Sound57: dc.w z80_ptr(ssamp57),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$CA,$15,$F2
 
ssamp57: dc.b $04,$09,$70,$00,$30,$1C,$1F,$DF,$1F,$15,$12,$0B
 
dc.b $0F,$0C,$0D,$00,$0D,$07,$2F,$FA,$FA,$00,$29,$00,$00
 
 
 
; CNZ bonusy bumper sound
 
Sound58: dc.w z80_ptr(ssamp58),$0101
 
dc.w $8005,z80_ptr(+),$0007
 
+ dc.b $EF,$00,$B3,$06,$B3,$15,$F2
 
ssamp58: dc.b $3C,$05,$0A,$01,$01,$56,$5C,$5C,$5C,$0E,$11,$11
 
dc.b $11,$09,$06,$0A,$0A,$4F,$3F,$3F,$3F,$17,$20,$80,$80
 
 
 
; CNZ baaang bumper sound
 
Sound59: dc.w z80_ptr(ssamp59),$0103
 
dc.w $8004,z80_ptr(+),$0000
 
dc.w $8002,z80_ptr(++),$0002
 
dc.w $8005,z80_ptr(+++),$0000
 
+ dc.b $EF,$00,$E1,$0C,$B5,$14,$F2
 
+ dc.b $EF,$01,$9A,$03,$F2
 
+ dc.b $EF,$00,$B6,$14,$F2
 
ssamp59: dc.b $32,$30,$30,$40,$70,$1F,$1F,$1F,$1F,$12,$0A,$01
 
dc.b $0D,$00,$01,$01,$0C,$00,$23,$C3,$F6,$08,$07,$1C,$03
 
dc.b $05,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$12,$0C,$0C
 
dc.b $0C,$12,$08,$08,$08,$1F,$5F,$5F,$5F,$07,$80,$80,$80
 
 
 
; CNZ gloop / water droplet sound
 
Sound5A: dc.w z80_ptr(ssamp5A),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$F0,$01,$01,$7F,$F1,$AA,$0A,$F2
 
ssamp5A: dc.b $47,$03,$02,$02,$04,$5F,$5F,$5F,$5F,$0E,$1A,$11
 
dc.b $0A,$09,$0A,$0A,$0A,$4F,$3F,$3F,$3F,$7F,$80,$80,$A3
 
 
 
 
 
Sound5B: dc.w z80_ptr(ssamp5B),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$80,$02,$A5,$01,$E7
 
- dc.b $01,$E7,$E6
 
dc.w $02F7,$0005,z80_ptr(-)
 
dc.b $F2
 
ssamp5B: dc.b $38,$0F,$0F,$0F,$0F,$1F,$1F,$1F,$0E,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$1F,$00,$00,$00,$80
 
 
 
 
 
Sound5C: dc.w z80_ptr(ssamp5C),$0102
 
dc.w $8004,z80_ptr(+),$000E
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$85,$40
 
- dc.b $E7,$04,$E6
 
dc.w $04F7,$000A,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $F5,$00,$F3,$E7,$A7,$40
 
- dc.b $E7,$08,$E6
 
dc.w $01F7,$0005,z80_ptr(-)
 
dc.b $F2
 
ssamp5C: dc.b $FA,$12,$01,$01,$01,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$81,$8E,$14,$80
 
 
 
; chain clink
 
Sound5D: dc.w z80_ptr(ssamp5D),$0101
 
dc.w $8005,z80_ptr(+),$0000
 
+ dc.b $EF,$00,$C0,$04,$F2
 
ssamp5D: dc.b $28,$2F,$37,$5F,$2B,$1F,$1F,$1F,$1F,$15,$15,$15
 
dc.b $13,$13,$0D,$0C,$10,$2F,$3F,$2F,$2F,$00,$1F,$10,$80
 
 
 
; helicopter
 
Sound5E: dc.w z80_ptr(ssamp5E),$0101
 
dc.w $8002,z80_ptr(+),$1405
 
+ dc.b $EF,$00
 
- dc.b $95,$02,$95
 
dc.w $01F7,$0013,z80_ptr(-)
 
- dc.b $95,$02,$95,$01,$E6
 
dc.w $01F7,$001B,z80_ptr(-)
 
dc.b $F2
 
ssamp5E: dc.b $35,$30,$44,$40,$51,$1F,$1F,$1F,$1F,$10,$00,$13
 
dc.b $15,$1F,$00,$1F,$1A,$7F,$0F,$7F,$5F,$02,$A8,$80,$80
 
 
 
 
 
Sound5F: dc.w z80_ptr(ssamp5F),$0103
 
dc.w $8005,z80_ptr(s5Fs1),$0000
 
dc.w $80C0,z80_ptr(s5Fs2),$0000
 
dc.w $80A0,z80_ptr(s5Fs3),$0000
 
s5Fs1 dc.b $EF,$00,$F0,$01,$01,$C5,$1A,$CD,$07,$E6,$0A,$80
 
dc.b $06,$EF,$01,$F0,$01,$01,$11,$FF,$A2,$28
 
- dc.b $E7,$03,$E6
 
dc.w $03F7,$0005,z80_ptr(-)
 
dc.b $F2
 
s5Fs2 dc.b $80,$07,$F0,$01,$02,$05,$FF,$F3,$E7,$BB,$1D
 
- dc.b $E7,$07,$EC
 
dc.w $01F7,$0010,z80_ptr(-)
 
dc.b $F2
 
s5Fs3 dc.b $80,$16,$F5,$03
 
- dc.b $BF,$04,$C1,$C3,$EC,$01,$E9
 
dc.w $FFF7,$0005,z80_ptr(-)
 
- dc.b $BF,$04,$C1,$C3,$EC,$01,$E9
 
dc.w $01F7,$0007,z80_ptr(-)
 
dc.b $F2
 
ssamp5F: dc.b $FD,$09,$00,$03,$00,$1F,$1F,$1F,$1F,$10,$0C,$0C
 
dc.b $0C,$0B,$10,$1F,$05,$1F,$4F,$2F,$2F,$09,$92,$84,$8E
 
dc.b $3A,$70,$30,$04,$01,$0F,$14,$19,$16,$08,$0A,$0B
 
dc.b $05,$03,$03,$03,$05,$1F,$6F,$8F,$5F,$1F,$22,$1F,$80
 
 
 
; spindash charge
 
Sound60: dc.w z80_ptr(ssamp60),$0101
 
dc.w $8005,z80_ptr(+),$FE00
 
+ dc.b $EF,$00,$F0,$00,$01,$20,$F6,$C4,$16,$E7,$F4,$D0,$18,$E7
 
- dc.b $04,$E7,$E6
 
dc.w $03F7,$0010,z80_ptr(-)
 
dc.b $F2
 
ssamp60: dc.b $34,$00,$03,$0C,$09,$9F,$8C,$8F,$95,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$00,$1D,$00,$00
 
 
 
; rumbling
 
Sound61: dc.w z80_ptr(ssamp61),$0101
 
dc.w $8004,z80_ptr(+),$0004
 
+ dc.b $80,$01,$EF,$00,$F0,$00,$01,$70,$06,$82,$06,$85,$08,$83
 
dc.b $01,$82,$05,$86,$06,$89,$03,$82,$08,$88,$04,$82,$06,$E6
 
dc.b $02,$85,$08,$E6,$02,$83,$01,$E6,$02,$82,$05,$E6,$02,$86
 
dc.b $06,$E6,$02,$89,$03,$E6,$02,$82,$08,$E6,$02,$88,$04,$E6,$02,$F2
 
ssamp61: dc.b $32,$30,$30,$50,$30,$1F,$0E,$19,$0E,$07,$12,$15
 
dc.b $09,$0A,$09,$1D,$06,$E8,$03,$0A,$17,$07,$00,$00,$00
 
 
 
 
 
Sound62: dc.w z80_ptr(ssamp62),$0101
 
dc.w $8005,z80_ptr(+),$FF00
 
+ dc.b $EF,$00,$A6,$05,$F0,$01,$01,$E7,$40
 
- dc.b $C4,$02,$E7,$E6
 
dc.w $01F7,$0012,z80_ptr(-)
 
dc.b $F2
 
ssamp62: dc.b $34,$0C,$10,$73,$0C,$AF,$AC,$FF,$D5,$06,$00,$02
 
dc.b $01,$02,$0A,$04,$08,$BF,$BF,$BF,$BF,$00,$08,$80,$80
 
 
 
; CNZ blooing bumper
 
Sound63: dc.w z80_ptr(ssamp63),$0101
 
dc.w $8005,z80_ptr(+),$0907
 
+ dc.b $EF,$00,$F0,$01,$01,$04,$56,$92,$03,$9A,$25,$F2
 
ssamp63: dc.b $3D,$12,$10,$77,$30,$5F,$5F,$5F,$5F,$0F,$0A,$00
 
dc.b $01,$0A,$0A,$0D,$0D,$4F,$0F,$0F,$0F,$13,$80,$80,$80
 
 
 
; HTZ track click sound
 
Sound64: dc.w z80_ptr(ssamp64),$0101
 
dc.w $8005,z80_ptr(+),$1100
 
+ dc.b $EF,$00,$C7,$02,$F2
 
ssamp64: dc.b $24,$2A,$02,$05,$01,$1A,$1F,$10,$1F,$0F,$1F,$1F
 
dc.b $1F,$0C,$0D,$11,$11,$0C,$09,$09,$0F,$0E,$04,$80,$80
 
 
 
; kicking up leaves sound
 
Sound65: dc.w z80_ptr(ssamp65),$0101
 
dc.w $80C0,z80_ptr(+),$F800
 
+ dc.b $F5,$03,$F3,$E7,$CE,$03,$F5,$06,$CE,$04,$EC
 
dc.b $02,$CE,$02,$F5,$03,$EC,$FE,$CE,$08,$CE,$18,$F2
 
ssamp65: ; uhm... apparently they forgot to null out the pointer to here.
 
; luckily, sound 65 doesn't really use its sample
 
 
 
; leaf splash?
 
Sound66: dc.w z80_ptr(ssamp66),$0102
 
dc.w $8005,z80_ptr(++),$EE08
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F3,$E7,$F5,$09,$C6,$36,$F2
 
+ dc.b $EF,$00,$80,$01,$92,$02,$02,$02,$30,$F2
 
ssamp66: dc.b $32,$33,$17,$34,$13,$0F,$0D,$1B,$17,$00,$04,$02
 
dc.b $0B,$08,$00,$08,$09,$6F,$5F,$4F,$6F,$05,$00,$00,$80
 
 
 
 
 
Sound67: dc.w z80_ptr(ssamp67),$0101
 
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F5,$06,$F3,$E7,$90,$0A,$94,$0A,$98,$0A,$9C
 
dc.b $0A,$A0,$0A,$A4,$08,$A8,$08,$AC,$08,$B0,$08,$F2
 
ssamp67: ; another not-really-used sample (like Sound65)
 
 
 
; door slamming quickly (seems unused)
 
Sound68: dc.w z80_ptr(ssamp68),$0101
 
dc.w $8005,z80_ptr(+),$F400
 
+ dc.b $EF,$00,$9B,$04,$A5,$06,$F2
 
ssamp68: dc.b $3C,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$00,$0F,$16
 
dc.b $0F,$00,$00,$00,$00,$0F,$FF,$AF,$FF,$00,$0A,$80,$80
 
 
 
 
 
Sound69: dc.w z80_ptr(ssamp69),$0102
 
dc.w $8005,z80_ptr(+),$F400
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$9B,$03,$A8,$06,$9E,$08,$F2
 
+ dc.b $F5,$04,$F3,$E7,$C6,$03,$C6,$06,$C6,$08,$F2
 
ssamp69: dc.b $3C,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$00,$0F,$16
 
dc.b $0F,$00,$00,$00,$00,$0F,$FF,$AF,$FF,$00,$0A,$80,$80
 
 
 
; robotic laser burst
 
Sound6A: dc.w z80_ptr(ssamp6A),$0101
 
dc.w $8005,z80_ptr(+),$0004
 
+ dc.b $EF,$00,$DF,$14,$E6,$18,$06,$F2
 
ssamp6A: dc.b $3D,$09,$34,$34,$28,$1F,$16,$16,$16,$00,$00,$00
 
dc.b $04,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$15,$02,$02,$00
 
 
 
; scatter
 
Sound6B: dc.w z80_ptr(ssamp6B),$0101
 
dc.w $8004,z80_ptr(+),$0002
 
+ dc.b $EF,$00,$81,$04,$80,$0C,$F2
 
ssamp6B: dc.b $3A,$30,$30,$40,$70,$1F,$1F,$1F,$1F,$12,$0A,$01
 
dc.b $07,$00,$01,$01,$03,$00,$23,$C3,$46,$08,$07,$1C,$03
 
 
 
 
 
Sound6C: dc.w z80_ptr(ssamp6C),$0104
 
dc.w $8005,z80_ptr(++),$0010
 
dc.w $8004,z80_ptr(+),$0010
 
dc.w $80C0,z80_ptr(s5Fs2),$0000
 
dc.w $80A0,z80_ptr(s5Fs3),$0000
 
+ dc.b $E1,$10
 
+ dc.b $EF,$01,$F0,$01,$01,$EC,$56,$C0,$24,$F4,$EF,$00,$E6,$F0
 
- dc.b $BB,$02,$E7,$E6,$02,$E9
 
dc.w $01F7,$0020,z80_ptr(-)
 
dc.b $F2
 
ssamp6C: dc.b $00,$53,$30,$03,$30,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0F,$06,$23,$80
 
dc.b $3C,$72,$32,$32,$72,$14,$14,$0F,$0F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$02,$02,$08,$08,$35,$14,$00,$00
 
 
 
; error sound
 
Sound6D: dc.w z80_ptr(ssamp6D),$0101
 
dc.w $8005,z80_ptr(+),$0004
 
+ dc.b $EF,$00,$B0,$06,$80,$06,$B0,$18,$F2
 
ssamp6D: dc.b $38,$00,$00,$00,$00,$1F,$1F,$1F,$1F,$00,$00,$00
 
dc.b $00,$00,$00,$00,$00,$0F,$0F,$0F,$0F,$1F,$0C,$17,$00
 
 
 
; silver sonic buzz saw
 
Sound6E: dc.w z80_ptr(ssamp6E),$0102
 
dc.w $8005,z80_ptr(+),$0000
 
dc.w $80C0,z80_ptr(++),$0000
 
+ dc.b $EF,$00,$C6,$24,$E7
 
- dc.b $C6,$04,$E7,$E6
 
dc.w $04F7,$0008,z80_ptr(-)
 
dc.b $F2
 
+ dc.b $F3,$E7,$C7,$44,$F2
 
ssamp6E: dc.b $33,$00,$10,$00,$31,$1F,$1D,$1E,$0E,$00,$0C,$1D
 
dc.b $00,$00,$00,$01,$00,$0F,$0F,$0F,$0F,$08,$06,$07,$80
 
 
 
 
 
Sound6F: dc.w z80_ptr(ssamp6A),$0103
 
dc.w $8005,z80_ptr(++),$000B
 
dc.w $8004,z80_ptr(+),$0012
 
dc.w $80C0,z80_ptr(+++),$0000
 
+ dc.b $E1,$02,$80,$02
 
+ dc.b $EF,$00,$E6,$0C,$DF,$06,$E7,$E6,$F4,$06,$E7
 
dc.b $E6,$F4,$12,$E7,$E6,$0C,$06,$E7,$E6,$0C,$06,$F2
 
+ dc.b $F3,$E7,$C6,$04,$C0,$BA,$B4,$AE,$E6
 
dc.b $01,$AE,$E6,$01,$AE,$E6,$01,$AE,$F2
 
  
 +
Delete everything from SoundDriverLoad until the line "; end of 'ROM'"
  
Sound70: dc.w $0000,$0101
+
In its place, paste this:
dc.w $80C0,z80_ptr(+),$0000
 
+ dc.b $F3,$E7,$C6,$18
 
- dc.b $E7,$03,$E6
 
dc.w $01F7,$0008,z80_ptr(-)
 
dc.b $F2
 
 
 
 
 
if * > soundBankStart + $8000
 
fatal "soundBank must fit in $8000 bytes but was $\{*-soundBankStart}. Try moving something to the other bank."
 
else
 
;message "soundBank has $\{$8000+soundBankStart-*} bytes free at end."
 
endif
 
 
 
; end of 'ROM'
 
if padToPowerOfTwo && (*)&(*-1)
 
cnop -1,2<<lastbit(*-1)
 
dc.b 0
 
paddingSoFar := paddingSoFar+1
 
else
 
even
 
endif
 
if MOMPASS=2
 
; "About" because it will be off by the same amount that Size_of_Snd_driver_guess is incorrect (if you changed it), and because I may have missed a small amount of internal padding somewhere
 
message "rom size is $\{*} bytes (\{*/1024.0} kb). About $\{paddingSoFar} bytes are padding. "
 
endif
 
; share these symbols externally (WARNING: don't rename, move or remove these labels!)
 
shared movewZ80CompSize
 
</asm>
 
 
 
We want to replace it with this optimized code:
 
 
<asm>
 
<asm>
 
; --------------------------------------------------------------------
 
; --------------------------------------------------------------------
Line 3,871: Line 1,552:
 
else
 
else
 
;message "soundBank has $\{$8000+soundBankStart-*} bytes free at end."
 
;message "soundBank has $\{$8000+soundBankStart-*} bytes free at end."
endif
 
 
; end of 'ROM'
 
if padToPowerOfTwo && (*)&(*-1)
 
cnop -1,2<<lastbit(*-1)
 
dc.b 0
 
paddingSoFar := paddingSoFar+1
 
else
 
even
 
endif
 
if MOMPASS=2
 
; "About" because it will be off by the same amount that Size_of_Snd_driver_guess is incorrect (if you changed it), and because I may have missed a small amount of internal padding somewhere
 
message "rom size is $\{*} bytes (\{*/1024.0} kb). About $\{paddingSoFar} bytes are padding. "
 
 
endif
 
endif
 
</asm>
 
</asm>
Line 3,933: Line 1,601:
 
</asm>
 
</asm>
  
===sound playback routines===
+
===Upgrade Sound Routines===
 
now find:
 
now find:
 
<asm>
 
<asm>
Line 4,018: Line 1,686:
  
 
</asm>
 
</asm>
==Upgrading Pause / Resume routines==
+
==Upgrading Pause / Resume Routines==
Now the playback routines are fixed and we have a routine to set the tempo the way the sneakers do, which we will elaberate later on, but we still have to update the pause / resume routines to the sonic 3 equivilents.
+
Now the playback routines are fixed and we have a routine to set the tempo the way the sneakers do, which we will elaberate later on, but we still have to update the pause / resume routines to the Sonic 3 equivilents.
  
 
Find:
 
Find:
Line 4,151: Line 1,819:
 
</asm>
 
</asm>
  
==Driver data files==
+
==Driver Data Files==
then unpack this into the sound folder and optionally remove the original files since we no longer need them anymore:
+
then unpack this into the 'sound' folder and, optionally, remove the original files since we no longer need them anymore:
 
{{Download|file=s3driverdata.7z|filesize=131kb|title=The Sonic 3 Driver data files|plural=1}}
 
{{Download|file=s3driverdata.7z|filesize=131kb|title=The Sonic 3 Driver data files|plural=1}}
  
==Fixing the music and sound effects==
+
==Fixing the Music and Sound Effects==
Now we will open s2.constants.asm.<br>
+
Now we will open s2.constants.asm.
===music===
+
===Music===
go to '''MusID__First''' and you will notice '''this''':
+
Go to '''MusID__First''' and you will notice '''this''':
 
<asm>
 
<asm>
 
MusID__First = idstart
 
MusID__First = idstart
Line 4,194: Line 1,862:
 
MusID__End = id(zMusIDPtr__End) ; A0
 
MusID__End = id(zMusIDPtr__End) ; A0
 
</asm>
 
</asm>
that may be good if you were using the sonic2 driver, but obviously you are not, we need to change it.
+
That may be good if you were using the Sonic 2 driver, but obviously you are not, so we need to change it.
 
<asm>
 
<asm>
 
MusID__First = 0
 
MusID__First = 0
Line 4,248: Line 1,916:
 
MusID_Ending = $32
 
MusID_Ending = $32
  
     ;for compatibility with sonic2
+
     ; for compatibility with Sonic 2
 
MusID_2PResult = MusID_Continue
 
MusID_2PResult = MusID_Continue
 
MusID_EHZ = MusID_AIZ1
 
MusID_EHZ = MusID_AIZ1
Line 4,268: Line 1,936:
 
MusID__End = $33
 
MusID__End = $33
 
</asm>
 
</asm>
the original music IDs in the compat section can be set to which ever ones you want in the above (I wouldn't recommend editing the 2PResult one though)
+
The original music IDs in the compatibility section can be set to whichever ones you want in the above (I wouldn't recommend editing the 2PResult one though)
===sound effects===
+
===Sound Effects===
okay, now we actually have the music working (well, sorta working, fades and music stops aren't working yet though and we will fix that very soon), so it is time to get those sound effects working as they should.<br>
+
Okay, now we actually have the music working (well, sorta working, fades and music stops aren't working yet though and we will fix that very soon), so it is time to get those sound effects working as they should.
we want to start with '''SndID__First'''.  you may notice that this area looks like this:
+
We want to start with '''SndID__First'''.  you may notice that this area looks like this:
 
<asm>
 
<asm>
 
SndID__First = idstart
 
SndID__First = idstart
Line 4,360: Line 2,028:
 
     endif
 
     endif
 
</asm>
 
</asm>
yikes!  that last section about ids really has to go! but on another note, this code seems best for the sonic 2 driver, it needs fixing.
+
Yikes!  that last section about IDs really has to go! But on another note, this code seems best for the Sonic 2 driver, it needs fixing.
 
{{S2Howtos}}
 
{{S2Howtos}}
 
[[Category:SCHG How-tos|{{PAGENAME}}]]
 
[[Category:SCHG How-tos|{{PAGENAME}}]]

Revision as of 09:52, 25 May 2014

(Original guide by Kram1024)

You probably saw my method of placing the Sonic 3 sound driver in Sonic 1. Well, we are going to put it in Sonic 2 Rev01 this time. The changes are very similar to that of the Sonic 1 port. Over the years, I found that the S3 driver actually works without a Sonic game with minimal hacking (it just needs a wait routine to time it). Thus it is actually possible to put it into Sonic 2 with relative ease as well and into a homebrew too, though in homebrew it might not be legal anyways due to IP laws but Sega no longer enforces them on Genesis games anyways, thus why nobody gets sued for Sonic hacks, but let's get back to the hack.

Overview

First off, Sonic 3's sound driver has the V_Int reloader built into it so it is not needed, some routines need replacement, sounds need fixing, and we need to replace the sounds and music. We will be using the latest Github version of Sonic 2, if you wish to do it via a different version, I am sure you can come up with a way that works by seeing what changes I made in the Github version.

Preparing to Use Sonic 3/K/3K Sound System

The Vertical Interrupt and Horizontal Interrupt need to be fixed, since the Sonic 1/2 system uses them but the Sonic 3/K/3K system doesn't.

Removal of all Callbacks to the S2 Driver in the Vertical Interrupt

Unlike the S1 driver, Sonic 2 actually calls the driver over and over again after stopping the Z80 then restarting the Z80. The PlaySound routine of our new driver will do that automatically, so we do not really need any of that kind of code. We will search for all instances of: <asm> stopZ80 ; stop the Z80 bsr.w sndDriverInput ; give input to the sound driver startZ80 ; start the Z80 </asm> and comment it out or just plain remove it. I prefer to replace it with a nop instruction, but even comments or removal work as well. In case you are a little lazy, here is a list of routines with this code:

  • VintSub0
  • Loc_54A
  • Vint0_noWater (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)
  • loc_748 (only touch the " bsr.w sndDriverInput ; give input to the sound driver" line)
  • Vint10_specialStage (only touch the " jsr (sndDriverInput).l)
  • loc_92A+++++ (only touch the " jsr (sndDriverInput).l)
  • loc_BD6 (only touch the " jsr (sndDriverInput).l)
  • VintSub18 (only touch the " bsr.w sndDriverInput)
  • VintSub16 (only touch the " bsr.w sndDriverInput)
  • Loc_EFE (only touch the " bsr.w sndDriverInput)

Removal of sndDriverInput

Okay, we disabled the Sonic 2 Z80 sound driver junk, but we still have a vestige of the old driver taking up valuable ROM space. Locate: <asm> sndDriverInput: lea (Music_to_play&$00FFFFFF).l,a0 lea (Z80_RAM+zComRange).l,a1 ; $A01B80 cmpi.b #$80,8(a1) ; If this (zReadyFlag) isn't $80, the driver is processing a previous sound request. bne.s loc_10C4 ; So we'll wait until at least the next frame before putting anything in there. _move.b 0(a0),d0 beq.s loc_10A4 _clr.b 0(a0) bra.s loc_10AE

---------------------------------------------------------------------------

loc_10A4: move.b 4(a0),d0 ; If there was something in Music_to_play_2, check what that was. Else, just go to the loop. beq.s loc_10C4 clr.b 4(a0)

loc_10AE: ; Check that the sound is not FE or FF move.b d0,d1 ; If it is, we need to put it in $A01B83 as $7F or $80 respectively subi.b #$FE,d1 bcs.s loc_10C0 addi.b #$7F,d1 move.b d1,3(a1) bra.s loc_10C4

---------------------------------------------------------------------------

loc_10C0: move.b d0,8(a1)

loc_10C4: moveq #4-1,d1 ; FFE4 (Music_to_play_2) goes to 1B8C (zMusicToPlay), - move.b 1(a0,d1.w),d0 ; FFE3 (unk_FFE3) goes to 1B8B, (unknown) beq.s + ; FFE2 (SFX_to_play_2) goes to 1B8A (zSFXToPlay2), tst.b 9(a1,d1.w) ; FFE1 (SFX_to_play) goes to 1B89 (zSFXToPlay). bne.s + clr.b 1(a0,d1.w) move.b d0,9(a1,d1.w) + dbf d1,- rts

End of function sndDriverInput

</asm> and remove it. We don't need it anymore because the Sonic 3 driver does this stuff on its own, in its own way.

Upgrading the SoundDriverLoad Routine

Okay, now we are finally ready to install the Sonic 3 sound driver itself. SoundDriverLoad is located at the end of the ROM in Sonic 2 instead of the beginning, but we have some artwork entangled with it as well. We will have to relocate it while we insert the new code.

Delete everything from SoundDriverLoad until the line "; end of 'ROM'"

In its place, paste this: <asm>

--------------------------------------------------------------------
Nemesis compressed art (20 blocks)
Buzzer's fireball

ArtNem_Buzzer_Fireball: BINCLUDE "art/nemesis/Fireball 1 (Buzzer).bin"

--------------------------------------------------------------------
Nemesis compressed art (24 blocks)
Waterfall tiles

ArtNem_Waterfall: BINCLUDE "art/nemesis/Waterfall tiles.bin"

--------------------------------------------------------------------
Nemesis compressed art (16 blocks)
Another fireball

ArtNem_HtzFireball: BINCLUDE "art/nemesis/Fireball 2.bin"

--------------------------------------------------------------------
Nemesis compressed art (8 blocks)
Bridge in EHZ

ArtNem_EHZ_Bridge: BINCLUDE "art/nemesis/EHZ bridge.bin"

--------------------------------------------------------------------
Nemesis compressed art (48 blocks)
Diagonally moving lift in HTZ

ArtNem_HtzZipline: BINCLUDE "art/nemesis/HTZ zip-line platform.bin"

--------------------------------------------------------------------
Nemesis compressed art (4 blocks)
One way barrier from HTZ

ArtNem_HtzValveBarrier: BINCLUDE "art/nemesis/One way barrier from HTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (24 blocks)
See-saw in HTZ

ArtNem_HtzSeeSaw: BINCLUDE "art/nemesis/See-saw in HTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (24 blocks)
Unused Fireball
ArtNem_F0B06

BINCLUDE "art/nemesis/Fireball 3.bin"

--------------------------------------------------------------------
Nemesis compressed art (20 blocks)
Rock from HTZ

ArtNem_HtzRock: BINCLUDE "art/nemesis/Rock from HTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (4 blocks)
Orbit badnik from HTZ ; ArtNem_HtzSol

ArtNem_Sol: BINCLUDE "art/nemesis/Sol badnik from HTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (120 blocks)
Large spinning wheel from MTZ

ArtNem_MtzWheel: BINCLUDE "art/nemesis/Large spinning wheel from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (9 blocks)
Indent in large spinning wheel from MTZ

ArtNem_MtzWheelIndent: BINCLUDE "art/nemesis/Large spinning wheel from MTZ - indent.bin"

--------------------------------------------------------------------
Nemesis compressed art (8 blocks)
Spike block from MTZ

ArtNem_MtzSpikeBlock: BINCLUDE "art/nemesis/MTZ spike block.bin"

--------------------------------------------------------------------
Nemesis compressed art (15 blocks)
Steam from MTZ

ArtNem_MtzSteam: BINCLUDE "art/nemesis/Steam from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (8 blocks)
Spike from MTZ

ArtNem_MtzSpike: BINCLUDE "art/nemesis/Spike from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (54 blocks)
Similarly shaded blocks from MTZ

ArtNem_MtzAsstBlocks: BINCLUDE "art/nemesis/Similarly shaded blocks from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (9 blocks)
Lava bubble from MTZ

ArtNem_MtzLavaBubble: BINCLUDE "art/nemesis/Lava bubble from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (4 blocks)
Lava cup

ArtNem_LavaCup: BINCLUDE "art/nemesis/Lava cup from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (8 blocks)
End of a bolt and rope from MTZ

ArtNem_BoltEnd_Rope: BINCLUDE "art/nemesis/Bolt end and rope from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (12 blocks)
Small cog from MTZ

ArtNem_MtzCog: BINCLUDE "art/nemesis/Small cog from MTZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (4 blocks)
Unknown. Four blocks that are all the same colour from MTZ.

ArtNem_MtzUnkBlocks: BINCLUDE "art/nemesis/Unknown MTZ sprite.bin"

--------------------------------------------------------------------
Nemesis compressed art (32 blocks)
Large wooden box from MCZ ; ArtNem_F187C

ArtNem_Crate: BINCLUDE "art/nemesis/Large wooden box from MCZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (26 blocks)
Collapsing platform from MCZ ; ArtNem_F1ABA

ArtNem_MCZCollapsePlat: BINCLUDE "art/nemesis/Collapsing platform from MCZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (16 blocks)
Switch that you pull on from MCZ ; ArtNem_F1C64

ArtNem_VineSwitch: BINCLUDE "art/nemesis/Pull switch from MCZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (10 blocks)
Vine that lowers in MCZ ; ArtNem_F1D5C

ArtNem_VinePulley: BINCLUDE "art/nemesis/Vine that lowers from MCZ.bin"

--------------------------------------------------------------------
Nemesis compressed art (20 blocks)
Log viewed from the end for folding gates in MCZ (start of MCZ2) ; ArtNem_F1E06

ArtNem_MCZGateLog: BINCLUDE "art/nemesis/Drawbridge logs from MCZ.bin"

---------------------------------------------------------------------------
Subroutine to load the sound driver
---------------------------------------------------------------------------
sub_EC000

SoundDriverLoad: nop move.w #$100,($A11100).l ; Z80 bus request - Start move.w #$100,($A11200).l ; Z80 stop reset lea (DriverData).l,a0 lea ($A00000).l,a1 move.w #DriverDataEnd-DriverData,d0

DriverLoadLoop: move.b (a0)+,(a1)+ dbf d0,DriverLoadLoop lea (DriverPointers).l,a0 lea ($A01300).l,a1 move.w #DriverPointersEnd-DriverPointers,d0

DriverPointersLoadLoop: move.b (a0)+,(a1)+ dbf d0, DriverPointersLoadLoop lea (UniversalVoiceBank).l,a0 lea ($A017D8).l,a1 move.w #UniversalVoiceBankEnd-UniversalVoiceBank,d0

UniversalVoiceBankLoadLoop: move.b (a0)+,(a1)+ dbf d0,UniversalVoiceBankLoadLoop lea (DriverResetData).l,a0 lea ($A01C00).l,a1 move.w #DriverResetDataEnd-DriverResetData,d0

DriverResetDataLoadLoop: move.b (a0)+,(a1)+ dbf d0,DriverResetDataLoadLoop btst #6,($FFFFFFF8).w beq.s DriverAlreadyInitialized move.b #1,($A01C02).l

DriverAlreadyInitialized: move.w #0,($A11200).l nop nop nop nop move.w #$100,($A11200).l ; Z80 start reset move.w #0,($A11100).l ; Z80 bus request - Stop rts

End of function SoundDriverLoad


DriverResetData: dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DriverResetDataEnd:

align $8000 DriverData: dc.b $F3,$F3,$ED,$56,$C3,$89,$00,$00 dc.b $2A,$15 dc.b $00,$06,$00,$09,$08,$7E dc.b $23,$66,$6F,$08,$C9 dc.w ((($1300&$1FFF)>>$08)|(($1300&$1FFF)<<$08))&$FFFF dc.b $00,$4F,$06,$00,$09,$09,$00,$00,$00 dc.b $7E,$23,$66,$6F,$C9,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 dc.b $00,$00,$00,$00,$00,$00,$00,$00,$F3,$F5,$FD,$E5,$D9,$ED,$5F,$32 dc.b $17,$1C,$CD,$21,$01,$3A,$02,$1C,$B7,$28,$12,$3A,$04,$1C,$B7,$20 dc.b $08,$3E,$06,$32,$04,$1C,$C3,$3D,$00,$3D,$32,$04,$1C,$AF,$32,$21 dc.b $1C,$3A,$30,$1C,$E6,$7F,$4F,$06,$00,$21,$DC,$00,$09,$7E Z80_0x006E: dc.b $C3,$4C,$11 dc.b $77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77 dc.b $AF,$77 Z80_0x0082: dc.b $D9,$FD,$E1,$F1,$06,$01,$C9,$31,$00,$20,$0E,$00,$06,$00 dc.b $10,$FE,$0D,$28,$F9,$CD,$29,$09,$3E,$80,$3E,$06,$32,$3E,$1C,$AF dc.b $32,$27,$1C,$32,$30,$1C,$32,$3F,$1C,$32,$28,$1C,$3E,$05,$32,$04 dc.b $1C,$FB,$C3,$62,$10,$DD,$CB,$01,$7E,$C0,$DD,$CB,$00,$56,$C0,$DD dc.b $86,$01,$DD,$CB,$01,$56,$20,$09,$32,$00,$40,$00,$79,$32,$01,$40 dc.b $C9,$D6,$04,$32,$02,$40,$00,$79,$32,$03,$40,$C9 Z80_0x00DC: Dac_Sample_Selector: dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)) dc.b ((DacBank0>>$F)),((DacBank0>>$F)),((DacBank0>>$F)),((DacBank1>>$F)) dc.b ((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)) dc.b ((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)) dc.b ((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)) dc.b ((DacBank1>>$F)),((DacBank1>>$F)),((DacBank1>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)),((DacBank2>>$F)) dc.b ((DacBank2>>$F)) dc.b $CD,$E8,$07,$CD,$A2,$01,$CD,$B1,$09,$CD,$62,$08,$CD,$C6,$08 dc.b $3A,$16,$1C,$FE,$29,$20,$18,$3A,$0A,$1C,$FE,$2A,$28,$04,$FE,$32 dc.b $38,$04,$AF,$32,$0A,$1C,$AF,$32,$0B,$1C,$32,$0C,$1C,$18,$1F,$3A dc.b $16,$1C,$FE,$FF,$28,$18,$21,$0A,$1C,$5E,$23,$56,$23,$7E,$B2,$B3 dc.b $28,$0C,$CD,$C7,$09,$CD,$DF,$04,$CD,$DF,$04,$CD,$DF,$04 Z80_0x016E: dc.b $3A,$3E,$1C dc.b $FE,$00 dc.b $C2 dc.w (((Z80DefaultBankSwitch&$1FFF)>>$08)|((Z80DefaultBankSwitch&$1FFF)<<$08))&$FFFF dc.b $CD dc.w (((Z80BankSwitch0&$1FFF)>>$08)|((Z80BankSwitch0&$1FFF)<<$08))&$FFFF dc.b $18,$03 Z80DefaultBankSwitch: dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00 Z80_0x0183: dc.b $AF,$32,$19,$1C,$3A,$16,$1C,$FE,$FF,$CC,$05,$0A,$DD dc.b $21,$40,$1C,$DD,$CB,$00,$7E,$C4,$7A,$0B,$06,$08,$DD,$21,$70,$1C dc.b $18,$1A,$3E,$01,$32,$19,$1C Z80_0x01A7: dc.b $3E, ((SndBank>>$0F)) dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 dc.b $DD,$21,$F0,$1D,$06,$07,$C5,$DD,$CB,$00 dc.b $7E,$C4,$E6,$01,$11,$30,$00,$DD,$19,$C1,$10,$F0,$3A,$08,$1C,$B7 dc.b $C8,$3A,$2F,$1C,$B7,$C2,$E1,$01,$3A,$08,$1C,$32,$2F,$1C,$C3,$27 dc.b $01,$3D,$32,$2F,$1C,$C9,$DD,$CB,$01,$7E,$C2,$9C,$0F,$CD,$37,$03 dc.b $20,$17,$CD,$74,$02,$DD,$CB,$00,$66,$C0,$CD,$9B,$03,$CD,$6C,$04 dc.b $CD,$C6,$03,$CD,$28,$02,$C3,$3F,$03,$DD,$CB,$00,$66,$C0,$CD,$6A dc.b $03,$DD,$7E,$1E,$B7,$28,$06,$DD,$35,$1E,$CA,$58,$03,$CD,$6C,$04 dc.b $DD,$CB,$00,$76,$C0,$CD,$C6,$03,$DD,$CB,$00,$56,$C0,$DD,$CB,$00 dc.b $46,$C2,$41,$02,$3E,$A4,$4C,$CD,$B5,$00,$3E,$A0,$4D,$CD,$B5,$00 dc.b $C9,$DD,$7E,$01,$FE,$02,$20,$EC,$06,$04,$21,$6F,$02,$C5,$7E,$23 dc.b $E5,$EB,$4E,$23,$46,$23,$EB,$DD,$6E,$0D,$DD,$66,$0E,$09,$F5,$4C dc.b $CD,$C8,$00,$F1,$D6,$04,$4D,$CD,$C8,$00,$E1,$C1,$10,$DF,$C9,$AD dc.b $AE,$AC,$A6,$C9,$DD,$5E,$03,$DD,$56,$04,$DD,$CB,$00,$8E,$DD,$CB dc.b $00,$A6,$1A,$13,$FE,$E0,$D2,$CF,$0B,$08,$CD,$58,$03,$08,$DD,$CB dc.b $00,$5E,$C2,$E5,$02,$B7,$F2,$05,$03,$D6,$81,$F2,$A3,$02,$CD,$44 dc.b $10,$18,$2E,$DD,$86,$05,$21,$88,$0A,$F5,$DF,$F1,$DD,$CB,$01,$7E dc.b $20,$19,$D5,$16,$08,$1E,$0C,$08,$AF,$08,$93,$38,$05,$08,$82,$18 dc.b $F8,$08,$83,$21,$30,$0B,$DF,$08,$B4,$67,$D1,$DD,$75,$0D,$DD,$74 dc.b $0E,$1A,$B7,$F2,$04,$03,$DD,$7E,$0C,$DD,$77,$0B,$18,$2D,$1A,$13 dc.b $DD,$77,$11,$18,$1E,$67,$1A,$13,$6F,$B4,$28,$0C,$DD,$7E,$05,$06 dc.b $00,$B7,$F2,$F6,$02,$05,$4F,$09,$DD,$75,$0D,$DD,$74,$0E,$1A,$13 dc.b $DD,$77,$11,$1A,$13,$CD,$2D,$03,$DD,$77,$0C,$DD,$73,$03,$DD,$72 dc.b $04,$DD,$7E,$0C,$DD,$77,$0B,$DD,$CB,$00,$4E,$C0,$AF,$DD,$77,$25 dc.b $DD,$77,$22,$DD,$77,$17,$DD,$7E,$1F,$DD,$77,$1E,$C9,$DD,$46,$02 dc.b $05,$C8,$4F,$81,$10,$FD,$C9,$DD,$7E,$0B,$3D,$DD,$77,$0B,$C9,$DD dc.b $7E,$0D,$DD,$B6,$0E,$C8,$DD,$7E,$00,$E6,$06,$C0,$DD,$7E,$01,$F6 dc.b $F0,$4F,$3E,$28,$CD,$C8,$00,$C9,$DD,$7E,$00,$E6,$06,$C0,$DD,$4E dc.b $01,$CB,$79,$C0,$3E,$28,$CD,$C8,$00,$C9,$DD,$7E,$18,$B7,$C8,$F8 dc.b $3D,$0E,$0A,$CF,$DF,$CD,$12,$10,$DD,$66,$1D,$DD,$6E,$1C,$11,$AE dc.b $04,$06,$04,$DD,$4E,$19,$F5,$CB,$29,$C5,$30,$08,$86,$E6,$7F,$4F dc.b $1A,$CD,$B5,$00,$C1,$13,$23,$F1,$10,$EC,$C9,$DD,$CB,$07,$7E,$C8 dc.b $DD,$CB,$00,$4E,$C0,$DD,$5E,$20,$DD,$56,$21,$DD,$E5,$E1,$06,$00 dc.b $0E,$24,$09,$EB,$ED,$A0,$ED,$A0,$ED,$A0,$7E,$CB,$3F,$12,$AF,$DD dc.b $77,$22,$DD,$77,$23,$C9,$DD,$7E,$07,$B7,$C8,$FE,$80,$20,$48,$DD dc.b $35,$24,$C0,$DD,$34,$24,$E5,$DD,$6E,$22,$DD,$66,$23,$DD,$5E,$20 dc.b $DD,$56,$21,$D5,$FD,$E1,$DD,$35,$25,$20,$17,$FD,$7E,$01,$DD,$77 dc.b $25,$DD,$7E,$26,$4F,$E6,$80,$07,$ED,$44,$47,$09,$DD,$75,$22,$DD dc.b $74,$23,$C1,$09,$DD,$35,$27,$C0,$FD,$7E,$03,$DD,$77,$27,$DD,$7E dc.b $26,$ED,$44,$DD,$77,$26,$C9,$3D,$EB,$0E,$08,$CF,$DF,$18,$03,$DD dc.b $77,$25,$E5,$DD,$4E,$25,$06,$00,$09,$7E,$E1,$CB,$7F,$CA,$5D,$04 dc.b $FE,$82,$28,$12,$FE,$80,$28,$12,$FE,$84,$28,$11,$26,$FF,$30,$1F dc.b $DD,$CB,$00,$F6,$E1,$C9,$03,$0A,$18,$D5,$AF,$18,$D2,$03,$0A,$DD dc.b $86,$22,$DD,$77,$22,$DD,$34,$25,$DD,$34,$25,$18,$C5,$26,$00,$6F dc.b $DD,$46,$22,$04,$EB,$19,$10,$FD,$DD,$34,$25,$C9,$DD,$66,$0E,$DD dc.b $6E,$0D,$06,$00,$DD,$7E,$10,$B7,$F2,$7D,$04,$06,$FF,$4F,$09,$C9 dc.b $2A,$37,$1C,$3A,$19,$1C,$B7,$28,$06,$DD,$6E,$2A,$DD,$66,$2B,$AF dc.b $B0,$C8,$11,$19,$00,$19,$10,$FD,$C9,$B0,$30,$38,$34,$3C,$50,$58 dc.b $54,$5C,$60,$68,$64,$6C,$70,$78,$74,$7C,$80,$88,$84,$8C,$40,$48 dc.b $44,$4C,$90,$98,$94,$9C,$11,$99,$04,$DD,$4E,$0A,$3E,$B4,$CD,$B5 dc.b $00,$CD,$D7,$04,$DD,$77,$1B,$06,$14,$CD,$D7,$04,$10,$FB,$DD,$75 dc.b $1C,$DD,$74,$1D,$C3,$9C,$0C,$1A,$13,$4E,$23,$CD,$B5,$00,$C9,$3A dc.b $05,$1C,$32,$09,$1C,$3A,$06,$1C,$32,$05,$1C,$3A,$07,$1C,$32,$06 dc.b $1C,$AF,$32,$07,$1C,$3A,$09,$1C,$FE,$FF,$CA,$FB,$09,$FE,$33,$DA dc.b $4A,$05,$FE,$E0,$DA,$99,$06,$FE,$E1,$DA,$29,$09,$FE,$E6,$D2,$29 dc.b $09,$D6,$E1,$21,$1C,$05,$DF,$AF,$32,$18,$1C,$E9,$45,$08,$29,$09 dc.b $A1,$09,$26,$05,$45,$08,$DD,$21,$F0,$1D,$06,$07,$3E,$01,$32,$19 dc.b $1C,$C5,$DD,$CB,$00,$7E,$C4,$45,$05,$11,$30,$00,$DD,$19,$C1,$10 dc.b $F0,$CD,$80,$06,$C9,$E5,$E5,$C3,$61,$0C,$D6,$01,$F8,$F5,$FE,$29 dc.b $C2,$CD,$05,$3A,$29,$1C,$B7,$CA,$72,$05,$AF,$32,$0A,$1C,$32,$0B dc.b $1C,$32,$0C,$1C,$32,$05,$1C,$32,$06,$1C,$32,$07,$1C,$32,$09,$1C dc.b $F1,$C9,$3A,$16,$1C,$FE,$29,$CA,$D0,$05,$AF,$32,$0A,$1C,$32,$0B dc.b $1C,$32,$0C,$1C,$32,$05,$1C,$32,$06,$1C,$32,$07,$1C,$3A,$3E,$1C dc.b $32,$2D,$1C,$3A,$08,$1C,$32,$2E,$1C,$AF,$32,$08,$1C,$21,$40,$1C dc.b $11,$F0,$1D,$01,$B0,$01,$ED,$B0,$21,$F0,$1D,$11,$30,$00,$06,$09 dc.b $7E,$E6,$7F,$CB,$D6,$77,$19,$10,$F7,$3E,$29,$32,$16,$1C,$3A,$24 dc.b $1C,$32,$2C,$1C,$2A,$37,$1C,$22,$2A,$1C,$C3,$D0,$05,$CD,$29,$09 dc.b $F1,$F5 Z80_0x05D2: dc.b $21,$48,$0B dc.b $85,$6F,$8C,$95,$67,$22,$DE,$05,$3A,$48,$0B dc.b $32,$3E,$1C Z80_0x05E3: dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 dc.b $3E,$B6,$32,$02,$40,$00,$3E,$C0,$32,$03,$40 dc.b $F1,$0E,$04,$CF,$DF,$E5,$E5,$E7,$22,$37,$1C,$E1,$FD,$E1,$FD,$7E dc.b $05,$32,$13,$1C,$32,$24,$1C,$11,$06,$00,$19,$22,$33,$1C,$21,$85 dc.b $06,$22,$35,$1C,$11,$40,$1C,$FD,$46,$02,$FD,$7E,$04,$C5,$2A,$35 dc.b $1C,$ED,$A0,$ED,$A0,$12,$13,$22,$35,$1C,$2A,$33,$1C,$ED,$A0,$ED dc.b $A0,$ED,$A0,$ED,$A0,$22,$33,$1C,$CD,$AE,$07,$C1,$10,$DF,$FD,$7E dc.b $03,$B7,$CA,$80,$06,$47,$21,$93,$06,$22,$35,$1C,$11,$60,$1D,$FD dc.b $7E,$04,$C5,$2A,$35,$1C,$ED,$A0,$ED,$A0,$12,$13,$22,$35,$1C,$2A dc.b $33,$1C,$01,$06,$00,$ED,$B0,$22,$33,$1C,$CD,$B5,$07,$C1,$10,$E2 dc.b $AF,$32,$09,$1C,$C9,$80,$06,$80,$00,$80,$01,$80,$02,$80,$04,$80 dc.b $05,$80,$06,$80,$80,$80,$A0,$80,$C0,$D6,$33,$B7,$C2,$A7,$06,$3A dc.b $28,$1C,$EE,$01,$32,$28,$1C,$08 Z80_0x06A8: dc.b $3E, ((SndBank>>$0F)) dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 Z80_0x06B7: dc.b $AF,$0E,$06,$32,$19,$1C,$08,$FE,$78 dc.b $CA,$F5,$06,$FE,$89,$DA,$EF,$06,$F5,$47,$3A,$25,$1C,$90,$C2,$E4 dc.b $06,$3E,$80,$32,$26,$1C,$CF,$F1,$4F,$DF,$23,$23,$23,$7E,$32,$31 dc.b $1C,$C3,$80,$06,$AF,$32,$26,$1C,$F1,$32,$25,$1C,$C3,$F5,$06,$F5 dc.b $AF,$32,$27,$1C,$F1,$CF,$DF,$E5,$E7,$22,$39,$1C,$AF,$32,$15,$1C dc.b $E1,$E5,$FD,$E1,$FD,$7E,$02,$32,$3B,$1C,$11,$04,$00,$19,$FD,$46 dc.b $03,$78,$32,$31,$1C,$C5,$E5,$23,$4E,$CD,$78,$07,$CB,$D6,$DD,$E5 dc.b $3A,$19,$1C,$B7,$28,$03,$E1,$FD,$E5,$D1,$E1,$ED,$A0,$1A,$FE,$02 dc.b $CC,$5E,$09,$ED,$A0,$3A,$3B,$1C,$12,$13,$ED,$A0,$ED,$A0,$ED,$A0 dc.b $ED,$A0,$CD,$AE,$07,$DD,$CB,$00,$7E,$28,$0C,$DD,$7E,$01,$FD,$BE dc.b $01,$20,$04,$FD,$CB,$00,$D6,$E5,$2A,$39,$1C,$3A,$19,$1C,$B7,$28 dc.b $04,$FD,$E5,$DD,$E1,$DD,$75,$2A,$DD,$74,$2B,$CD,$58,$03,$CD,$6B dc.b $09,$E1,$C1,$10,$A0,$C3,$80,$06,$CB,$79,$20,$08,$79,$CB,$57,$28 dc.b $1A,$3D,$18,$17,$3E,$1F,$CD,$4D,$10,$3E,$FF,$32,$11,$7F,$79,$CB dc.b $3F,$CB,$3F,$CB,$3F,$CB,$3F,$CB,$3F,$C6,$02,$D6,$02,$32,$32,$1C dc.b $F5,$21,$C8,$07,$DF,$E5,$DD,$E1,$F1,$21,$D8,$07,$DF,$C9,$08,$AF dc.b $12,$13,$12,$13,$08,$EB,$36,$30,$23,$36,$C0,$23,$36,$01,$06,$24 dc.b $23,$36,$00,$10,$FB,$23,$EB,$C9,$F0,$1D,$20,$1E,$50,$1E,$80,$1E dc.b $B0,$1E,$E0,$1E,$10,$1F,$10,$1F,$D0,$1C,$00,$1D,$30,$1D,$40,$1C dc.b $60,$1D,$90,$1D,$C0,$1D,$C0,$1D,$21,$10,$1C,$7E,$B7,$C8,$FA,$F9 dc.b $07,$D1,$3D,$C0,$36,$02,$C3,$72,$09,$AF,$77,$3A,$0D,$1C,$B7,$C2 dc.b $29,$09,$DD,$21,$70,$1C,$06,$06,$3A,$11,$1C,$B7,$20,$06,$DD,$CB dc.b $00,$7E,$28,$08,$DD,$4E,$0A,$3E,$B4,$CD,$B5,$00,$11,$30,$00,$DD dc.b $19,$10,$E5,$DD,$21,$40,$1F,$06,$07,$DD,$CB,$00,$7E,$28,$0E,$DD dc.b $CB,$01,$7E,$20,$08,$DD,$4E,$0A,$3E,$B4,$CD,$B5,$00,$11,$30,$00 dc.b $DD,$19,$10,$E5,$C9,$3E,$28,$32,$0D,$1C,$3E,$06,$32,$0F,$1C,$32 dc.b $0E,$1C,$AF,$32,$40,$1C,$32,$C0,$1D,$32,$60,$1D,$32,$90,$1D,$C3 dc.b $A1,$09,$21,$0D,$1C,$7E,$B7,$C8,$FC,$52,$08,$CB,$BE,$3A,$0F,$1C dc.b $3D,$28,$04,$32,$0F,$1C,$C9,$3A,$0E,$1C,$32,$0F,$1C,$3A,$0D,$1C dc.b $3D,$32,$0D,$1C,$CA,$29,$09,$3A,$3E,$1C Z80_0x088A: dc.b $21,$00,$60 dc.b $77,$1F,$77,$1F,$77,$1F,$77,$AF,$16,$01,$72,$77,$77,$77,$77 Z80_0x089C: dc.b $DD,$21,$40,$1C dc.b $06,$06,$DD,$34,$06,$F2,$AD,$08,$DD,$35,$06,$18,$11,$DD,$CB,$00 dc.b $7E,$28,$0B,$DD,$CB,$00,$56,$20,$05,$C5,$CD,$9C,$0C,$C1,$11,$30 dc.b $00,$DD,$19,$10,$DD,$C9,$3A,$29,$1C,$B7,$C8,$3A,$3E,$1C Z80_0x08CE: dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 Z80_0x08E0: dc.b $3A,$0E,$1C,$3D,$32,$0E,$1C,$C0,$3A,$0F,$1C,$32,$0E,$1C,$06,$05 dc.b $DD,$21,$70,$1C,$11,$30,$00,$DD,$7E,$06,$3D,$DD,$77,$06,$C5,$CD dc.b $9C,$0C,$C1,$DD,$19,$10,$F0,$3A,$29,$1C,$3D,$32,$29,$1C,$C0,$06 dc.b $03,$DD,$21,$60,$1D,$11,$30,$00,$DD,$CB,$00,$96,$DD,$19,$10,$F8 dc.b $DD,$21,$40,$1C,$DD,$CB,$00,$96,$C9,$21,$0D,$1C,$11,$0E,$1C,$01 dc.b $C6,$03,$36,$00,$ED,$B0,$AF,$32,$08,$1C,$DD,$21,$85,$06,$06,$06 dc.b $C5,$CD,$DB,$09,$CD,$6B,$09,$DD,$23,$DD,$23,$C1,$10,$F2,$06,$07 dc.b $AF,$32,$0D,$1C,$CD,$A1,$09,$0E,$00,$3E,$2B,$CD,$C8,$00,$AF,$32 dc.b $12,$1C,$4F,$3E,$27,$CD,$C8,$00,$C3,$80,$06,$3E,$90,$0E,$00,$C3 dc.b $EF,$09,$CD,$A1,$09,$C5,$F5,$06,$03,$3E,$B4,$0E,$00,$F5,$CD,$C8 dc.b $00,$F1,$3C,$10,$F8,$06,$02,$3E,$B4,$F5,$CD,$D3,$00,$F1,$3C,$10 dc.b $F8,$0E,$00,$06,$06,$3E,$28,$F5,$CD,$C8,$00,$0C,$F1,$10,$F8,$F1 dc.b $C1,$C5,$06,$04,$3E,$9F,$32,$11,$7F,$C6,$20,$10,$F9,$C1,$C3,$80 dc.b $06,$3A,$24,$1C,$21,$13,$1C,$86,$77,$D0,$21,$4B,$1C,$11,$30,$00 dc.b $06,$09,$34,$19,$10,$FC,$C9,$21,$0A,$1C,$11,$05,$1C,$ED,$A0,$ED dc.b $A0,$ED,$A0,$AF,$2B,$77,$2B,$77,$2B,$77,$C9,$CD,$EB,$09,$3E,$40 dc.b $0E,$7F,$CD,$EF,$09,$DD,$4E,$01,$C3,$64,$03,$3E,$80,$0E,$FF,$06 dc.b $04,$F5,$CD,$B5,$00,$F1,$C6,$04,$10,$F7,$C9,$CD,$29,$09,$3E,$01 dc.b $32,$3F,$1C,$E1,$C9,$AF,$32,$16,$1C,$3A,$2C,$1C,$32,$24,$1C,$3A dc.b $2E,$1C,$32,$08,$1C,$2A,$2A,$1C,$22,$37,$1C Z80_0x0A1B: dc.b $3A,$2D,$1C,$32,$3E,$1C dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 Z80_0x0A33: dc.b $21,$F0,$1D,$11,$40,$1C,$01,$B0,$01,$ED,$B0,$3A,$40 dc.b $1C,$F6,$84,$32,$40,$1C,$DD,$21,$70,$1C,$06,$08,$DD,$7E,$00,$F6 dc.b $84,$DD,$77,$00,$DD,$CB,$01,$7E,$C2,$73,$0A,$DD,$CB,$00,$96,$DD dc.b $7E,$06,$C6,$40,$DD,$77,$06,$DD,$7E,$08,$C5,$47,$CD,$80,$04,$CD dc.b $B6,$04,$C1,$11,$30,$00,$DD,$19,$10,$D2,$3E,$40,$32,$29,$1C,$3E dc.b $02,$32,$0F,$1C,$32,$0E,$1C,$C9,$FF,$03,$FF,$03,$FF,$03,$FF,$03 dc.b $FF,$03,$FF,$03,$FF,$03,$FF,$03,$FF,$03,$F7,$03,$BE,$03,$88,$03 dc.b $56,$03,$26,$03,$F9,$02,$CE,$02,$A5,$02,$80,$02,$5C,$02,$3A,$02 dc.b $1A,$02,$FB,$01,$DF,$01,$C4,$01,$AB,$01,$93,$01,$7D,$01,$67,$01 dc.b $53,$01,$40,$01,$2E,$01,$1D,$01,$0D,$01,$FE,$00,$EF,$00,$E2,$00 dc.b $D6,$00,$C9,$00,$BE,$00,$B4,$00,$A9,$00,$A0,$00,$97,$00,$8F,$00 dc.b $87,$00,$7F,$00,$78,$00,$71,$00,$6B,$00,$65,$00,$5F,$00,$5A,$00 dc.b $55,$00,$50,$00,$4B,$00,$47,$00,$43,$00,$40,$00,$3C,$00,$39,$00 dc.b $36,$00,$33,$00,$30,$00,$2D,$00,$2B,$00,$28,$00,$26,$00,$24,$00 dc.b $22,$00,$20,$00,$1F,$00,$1D,$00,$1B,$00,$1A,$00,$18,$00,$17,$00 dc.b $16,$00,$15,$00,$13,$00,$12,$00,$11,$00,$10,$00,$00,$00,$00,$00 dc.b $84,$02,$AB,$02,$D3,$02,$FE,$02,$2D,$03,$5C,$03,$8F,$03,$C5,$03 dc.b $FF,$03,$3C,$04,$7C,$04,$C0,$04 BankSelector: dc.b ((Bank1>>$0F)),((Bank1>>$0F)),((Bank1>>$0F)),((Bank1>>$0F)) dc.b ((Bank1>>$0F)),((Bank1>>$0F)),((Bank1>>$0F)),((Bank1>>$0F)) dc.b ((Bank1>>$0F)),((Bank1>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)) dc.b ((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)) dc.b ((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)) dc.b ((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)) dc.b ((Bank2>>$0F)),((Bank1>>$0F)),((Bank2>>$0F)),((Bank2>>$0F)) dc.b ((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)) dc.b ((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)) dc.b ((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)) dc.b ((Bank2>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)),((Bank3>>$0F)) dc.b ((Bank3>>$0F)),((Bank0>>$0F)),((Bank2>>$0F)),((Bank0>>$0F)) dc.b ((Bank3>>$0F)),((Bank3>>$0F)) dc.b $CD,$37,$03,$C0,$DD,$5E dc.b $03,$DD,$56,$04,$1A,$13,$FE,$E0,$D2,$C5,$0B,$B7,$FA,$93,$0B,$1B dc.b $DD,$7E,$0D,$DD,$77,$0D,$FE,$80,$CA,$B5,$0B,$CB,$BF,$D5,$08,$CD dc.b $58,$03,$CD,$5E,$09,$08,$DD,$21,$40,$1C,$DD,$CB,$00,$56,$C2,$B4 dc.b $0B,$32,$30,$1C,$D1,$1A,$13,$B7,$F2,$05,$03,$1B,$DD,$7E,$0C,$DD dc.b $77,$0B,$C3,$0B,$03,$21,$CB,$0B,$C3,$D2,$0B,$13,$C3,$84,$0B,$21 dc.b $DB,$0B,$E5,$D6,$E0,$21,$DF,$0B,$DF,$1A,$E9,$13,$C3,$82,$02,$33 dc.b $0C,$59,$0C,$5D,$0C,$61,$0C,$67,$0C,$83,$0C,$85,$0C,$BD,$0C,$C3 dc.b $0C,$47,$0C,$2F,$0C,$CD,$0C,$E3,$0C,$FD,$0C,$03,$0D,$10,$0D,$4F dc.b $0D,$5D,$0D,$69,$0D,$11,$0E,$65,$0D,$30,$0E,$39,$0E,$3F,$0E,$56 dc.b $0E,$70,$0E,$83,$0E,$89,$0E,$90,$0E,$B2,$0E,$C0,$0E,$07,$0F,$0E dc.b $0F,$12,$0F,$1A,$0F,$55,$0F,$63,$0F,$72,$0F,$8D,$0F,$96,$0F,$32 dc.b $30,$1C,$C9,$0E,$3F,$DD,$7E,$0A,$A1,$D5,$EB,$B6,$DD,$77,$0A,$4F dc.b $3E,$B4,$CD,$B5,$00,$D1,$C9,$21,$27,$1C,$7E,$DD,$86,$05,$DD,$77 dc.b $05,$FE,$10,$CA,$57,$0C,$34,$1B,$C9,$DD,$77,$10,$C9,$32,$16,$1C dc.b $C9,$CD,$DB,$09,$C3,$69,$0D,$DD,$CB,$01,$7E,$28,$0D,$CB,$3F,$CB dc.b $3F,$CB,$3F,$EE,$0F,$E6,$0F,$C3,$F9,$0C,$EE,$7F,$E6,$7F,$DD,$77 dc.b $06,$18,$19,$13,$1A,$DD,$CB,$01,$7E,$C0,$DD,$86,$06,$F2,$99,$0C dc.b $EA,$97,$0C,$AF,$C3,$99,$0C,$3E,$7F,$DD,$77,$06,$D5,$11,$AE,$04 dc.b $DD,$6E,$1C,$DD,$66,$1D,$06,$04,$7E,$B7,$F2,$B0,$0C,$DD,$86,$06 dc.b $E6,$7F,$4F,$1A,$CD,$B5,$00,$13,$23,$10,$ED,$D1,$C9,$DD,$CB,$00 dc.b $CE,$1B,$C9,$CD,$2D,$03,$DD,$77,$1E,$DD,$77,$1F,$C9,$13,$C6,$28 dc.b $4F,$06,$00,$DD,$E5,$E1,$09,$7E,$3D,$CA,$DE,$0C,$13,$C9,$AF,$77 dc.b $C3,$39,$0E,$DD,$CB,$01,$7E,$C8,$DD,$CB,$00,$A6,$DD,$35,$17,$DD dc.b $86,$06,$FE,$0F,$DA,$F9,$0C,$3E,$0F,$DD,$77,$06,$C9,$D6,$40,$DD dc.b $77,$05,$C9,$CD,$0A,$0D,$CD,$C8,$00,$C9,$EB,$7E,$23,$4E,$EB,$C9 dc.b $DD,$CB,$01,$7E,$20,$30,$CD,$EB,$09,$1A,$DD,$77,$08,$B7,$F2,$3C dc.b $0D,$13,$1A,$DD,$77,$0F,$D5,$DD,$7E,$0F,$D6,$81,$0E,$04,$CF,$DF dc.b $E7,$DD,$7E,$08,$E6,$7F,$47,$CD,$8F,$04,$18,$05,$D5,$47,$CD,$80 dc.b $04,$CD,$B6,$04,$D1,$C9,$B7,$F2,$35,$0E,$13,$C3,$35,$0E,$C9,$DD dc.b $73,$20,$DD,$72,$21,$DD,$36,$07,$80,$13,$13,$13,$C9,$13,$DD,$CB dc.b $01,$7E,$20,$01,$1A,$DD,$77,$07,$C9,$DD,$CB,$00,$BE,$3E,$1F,$32 dc.b $15,$1C,$CD,$58,$03,$DD,$4E,$01,$DD,$E5,$CD,$78,$07,$3A,$19,$1C dc.b $B7,$28,$77,$AF,$32,$18,$1C,$E5,$2A,$37,$1C,$DD,$E1,$DD,$CB,$00 dc.b $96,$DD,$CB,$01,$7E,$20,$68,$DD,$CB,$00,$7E,$28,$5D,$3E,$02,$DD dc.b $BE,$01,$20,$0D,$3E,$4F,$DD,$CB,$00,$46,$20,$02,$E6,$0F,$CD,$E9 dc.b $0E,$DD,$7E,$08,$B7,$F2,$BD,$0D,$CD,$26,$0D,$18,$3A,$47,$E5 Z80_0x0DBF: dc.b $3A,$3E,$1C dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 Z80_0x0DD4: dc.b $E1,$CD,$8F,$04,$CD,$B6,$04 Z80_0x0DDB: dc.b $3E,((SndBank>>$0F)) dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 dc.b $DD,$7E,$18,$B7,$F2,$FA dc.b $0D,$DD,$5E,$19,$DD,$56,$1A,$CD,$7C,$0F,$DD,$E1,$E1,$E1,$C9,$DD dc.b $CB,$00,$46,$28,$F5,$DD,$7E,$1A,$B7,$F2,$0F,$0E,$32,$11,$7F,$18 dc.b $E9,$DD,$CB,$01,$56,$C0,$3E,$DF,$32,$11,$7F,$1A,$DD,$77,$1A,$DD dc.b $CB,$00,$C6,$B7,$20,$06,$DD,$CB,$00,$86,$3E,$FF,$32,$11,$7F,$C9 dc.b $DD,$CB,$01,$7E,$C8,$DD,$77,$08,$C9,$EB,$5E,$23,$56,$1B,$C9,$13 dc.b $C6,$28,$4F,$06,$00,$DD,$E5,$E1,$09,$7E,$B7,$20,$02,$1A,$77,$13 dc.b $35,$C2,$39,$0E,$13,$C9,$4F,$13,$1A,$47,$C5,$DD,$E5,$E1,$DD,$35 dc.b $09,$DD,$4E,$09,$DD,$35,$09,$06,$00,$09,$72,$2B,$73,$D1,$1B,$C9 dc.b $DD,$E5,$E1,$DD,$4E,$09,$06,$00,$09,$5E,$23,$56,$DD,$34,$09,$DD dc.b $34,$09,$C9,$DD,$CB,$07,$BE,$1B,$C9,$DD,$86,$05,$DD,$77,$05,$C9 dc.b $3A,$26,$1C,$FE,$80,$CA,$A1,$0E,$AF,$32,$25,$1C,$32,$26,$1C,$13 dc.b $C9,$3A,$31,$1C,$3D,$32,$31,$1C,$C2,$39,$0E,$AF,$32,$26,$1C,$C3 dc.b $39,$0E,$FE,$01,$20,$05,$DD,$CB,$00,$DE,$C9,$DD,$CB,$00,$9E,$C9 dc.b $DD,$7E,$01,$FE,$02,$20,$2C,$DD,$CB,$00,$C6,$EB,$CD,$73,$02,$06 dc.b $04,$C5,$7E,$23,$E5,$21,$F7,$0E,$87,$4F,$06,$00,$09,$ED,$A0,$ED dc.b $A0,$E1,$C1,$10,$EC,$EB,$1B,$3E,$4F,$32,$12,$1C,$4F,$3E,$27,$CD dc.b $C8,$00,$C9,$13,$13,$13,$C9,$00,$00,$32,$01,$8E,$01,$E4,$01,$34 dc.b $02,$7E,$02,$C2,$02,$F0,$02,$21,$1F,$0C,$DF,$13,$1A,$E9,$32,$24 dc.b $1C,$C9,$DD,$E5,$CD,$F8,$04,$DD,$E1,$C9,$32,$11,$1C,$B7,$28,$1D dc.b $DD,$E5,$D5,$DD,$21,$40,$1C,$06,$09,$11,$30,$00,$DD,$CB,$00,$BE dc.b $CD,$5E,$03,$DD,$19,$10,$F5,$D1,$DD,$E1,$C3,$A1,$09,$DD,$E5,$D5 dc.b $DD,$21,$40,$1C,$06,$09,$11,$30,$00,$DD,$CB,$00,$FE,$DD,$19,$10 dc.b $F8,$D1,$DD,$E1,$C9,$EB,$5E,$23,$56,$23,$4E,$06,$00,$23,$EB,$ED dc.b $B0,$1B,$C9,$06,$09,$21,$42,$1C,$C5,$01,$30,$00,$77,$09,$C1,$10 dc.b $F7,$C9,$DD,$36,$18,$80,$DD,$73,$19,$DD,$72,$1A,$21,$B2,$04,$06 dc.b $04,$1A,$13,$4F,$7E,$23,$CD,$B5,$00,$10,$F6,$1B,$C9,$DD,$77,$18 dc.b $13,$1A,$DD,$77,$19,$C9,$AF,$32,$27,$1C,$1B,$C9,$CD,$37,$03,$20 dc.b $0D,$CD,$74,$02,$DD,$CB,$00,$66,$C0,$CD,$9B,$03,$18,$0C,$DD,$7E dc.b $1E,$B7,$28,$06,$DD,$35,$1E,$CA,$44,$10,$CD,$6C,$04,$CD,$C6,$03 dc.b $DD,$CB,$00,$56,$C0,$DD,$4E,$01,$7D,$E6,$0F,$B1,$32,$11,$7F,$7D dc.b $E6,$F0,$B4,$0F,$0F,$0F,$0F,$32,$11,$7F,$DD,$7E,$08,$B7,$0E,$00 dc.b $28,$09,$3D,$0E,$0A,$CF,$DF,$CD,$12,$10,$4F,$DD,$CB,$00,$66,$C0 dc.b $DD,$7E,$06,$81,$CB,$67,$28,$02,$3E,$0F,$DD,$B6,$01,$C6,$10,$DD dc.b $CB,$00,$46,$20,$04,$32,$11,$7F,$C9,$C6,$20,$32,$11,$7F,$C9,$DD dc.b $77,$17,$E5,$DD,$4E,$17,$06,$00,$09,$7E,$E1,$CB,$7F,$28,$21,$FE dc.b $83,$28,$0C,$FE,$81,$28,$13,$FE,$80,$28,$0C,$03,$0A,$18,$E0,$DD dc.b $CB,$00,$E6,$E1,$C3,$44,$10,$AF,$18,$D5,$E1,$DD,$CB,$00,$E6,$C9 dc.b $DD,$34,$17,$C9,$DD,$CB,$00,$E6,$DD,$CB,$00,$56,$C0,$3E,$1F,$DD dc.b $86,$01,$B7,$F0,$32,$11,$7F,$DD,$CB,$00,$46,$C8,$3E,$FF,$32,$11 dc.b $7F,$C9,$F3,$3E,$2B,$0E,$00,$CD,$C8,$00,$FB,$3A,$3F,$1C,$B7,$C2 dc.b $FE,$10,$3A,$30,$1C,$B7,$28,$F2,$3E,$2B,$0E,$80,$F3,$CD,$C8,$00 dc.b $FB,$FD,$21,$EE,$10,$21,$30,$1C,$7E,$3D,$CB,$FE,$21,$00,$80,$DF dc.b $0E,$80,$7E,$32,$A3,$10,$32,$C0,$10,$23,$5E,$23,$56,$23,$7E,$23 dc.b $66,$6F,$06,$0A,$FB,$10,$FE,$F3,$3E,$2A,$32,$00,$40,$7E,$07,$07 dc.b $07,$07,$E6,$0F,$32,$BA,$10,$79,$FD,$86,$00,$32,$01,$40,$4F,$06 dc.b $0A,$FB,$10,$FE,$F3,$3E,$2A,$32,$00,$40,$7E,$E6,$0F,$32,$D3,$10 dc.b $79,$FD,$86,$00,$32,$01,$40,$FB,$4F,$3A,$30,$1C,$B7,$F2,$6A,$10 dc.b $23,$1B,$7A,$B3,$C2,$A2,$10,$AF,$32,$30,$1C,$C3,$62,$10,$00,$01 dc.b $02,$04,$08,$10,$20,$40,$80,$FF,$FE,$FC,$F8,$F0,$E0,$C0,$F3,$CD dc.b $C7,$09,$3E,$2B,$32,$00,$40,$00,$3E,$80,$32,$01,$40 Z80_0x110D: dc.b $3E,((SegaPCMBank>>$0F)) dc.b $CD dc.w (((Z80BankSwitch&$1FFF)>>$08)|((Z80BankSwitch&$1FFF)<<$08))&$FFFF dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00 dc.b $21 dc.w (((SegaSnd&$FFFF)|$8000>>$08)|((SegaSnd&$FFFF)|$8000<<$08))&$FFFF dc.b $11,$2F,$5E dc.b $3E,$2A,$32,$00,$40,$00,$7E,$32,$01,$40,$3A,$0A,$1C,$FE,$FE dc.b $28,$0C,$00,$00,$06,$0C,$10,$FE,$23,$1B,$7A,$B3,$20,$E9,$AF,$32 dc.b $3F,$1C,$21,$0D,$1C,$CD,$D3,$09,$C3,$62,$10,$FF Z80_0x114C: dc.b $21,$00,$60 dc.b $77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77,$0F,$77 dc.b $AF,$77 dc.b $C3,$82,$00 Z80BankSwitch0: Z80_0x1170: dc.b $21,$00,$60 dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $AF dc.b $16,$01 dc.b $72 dc.b $77 dc.b $77 dc.b $77 dc.b $77 dc.b $C9 Z80BankSwitch: dc.b $21, $00, $60 dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $1F dc.b $77 dc.b $C9 DriverDataEnd:

-------------------------------------------------------------------------------
Filler to align pointers at 1300h in Z80 Ram

dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.b 0,0,0,0,0 DriverPointers: dc.w (((MusicPointers&$1FFF)>>$08)|((MusicPointers&$1FFF)<<$08))&$FFFF dc.w (((UniversalVoiceBank&$1FFF)>>$08)|((UniversalVoiceBank&$1FFF)<<$08))&$FFFF dc.w (((MusicPointers&$1FFF)>>$08)|((MusicPointers&$1FFF)<<$08))&$FFFF dc.w (((SndPointers&$1FFF)>>$08)|((SndPointers&$1FFF)<<$08))&$FFFF dc.w (((PSGNoisePointers&$1FFF)>>$08)|((PSGNoisePointers&$1FFF)<<$08))&$FFFF dc.w (((PSGTonePointers&$1FFF)>>$08)|((PSGTonePointers&$1FFF)<<$08))&$FFFF dc.w $3300

credit goes to Varion Icaria for finding this index

PSGNoisePointers: dc.w (((PSGN_0&$1FFF)>>$08)|((PSGN_0&$1FFF)<<$08))&$FFFF dc.w (((PSGN_1&$1FFF)>>$08)|((PSGN_1&$1FFF)<<$08))&$FFFF dc.w (((PSGN_2&$1FFF)>>$08)|((PSGN_2&$1FFF)<<$08))&$FFFF dc.w (((PSGN_3&$1FFF)>>$08)|((PSGN_3&$1FFF)<<$08))&$FFFF dc.w (((PSGN_4&$1FFF)>>$08)|((PSGN_4&$1FFF)<<$08))&$FFFF dc.w (((PSGN_5&$1FFF)>>$08)|((PSGN_5&$1FFF)<<$08))&$FFFF dc.w (((PSGN_6&$1FFF)>>$08)|((PSGN_6&$1FFF)<<$08))&$FFFF dc.w (((PSGN_7&$1FFF)>>$08)|((PSGN_7&$1FFF)<<$08))&$FFFF

PSGN_1: binclude sound/PSGN1.bin PSGN_0: binclude sound/PSGN0.bin PSGN_2: binclude sound/PSGN2.bin PSGN_3: binclude sound/PSGN3.bin PSGN_4: binclude sound/PSGN4.bin PSGN_5: binclude sound/PSGN5.bin PSGN_6: binclude sound/PSGN6.bin PSGN_7: binclude sound/PSGN7.bin

credit goes to Varion Icaria for finding this index

PSGTonePointers: dc.w (((PSGT_00&$1FFF)>>$08)|((PSGT_00&$1FFF)<<$08))&$FFFF dc.w (((PSGT_01&$1FFF)>>$08)|((PSGT_01&$1FFF)<<$08))&$FFFF dc.w (((PSGT_02&$1FFF)>>$08)|((PSGT_02&$1FFF)<<$08))&$FFFF dc.w (((PSGT_03&$1FFF)>>$08)|((PSGT_03&$1FFF)<<$08))&$FFFF dc.w (((PSGT_04&$1FFF)>>$08)|((PSGT_04&$1FFF)<<$08))&$FFFF dc.w (((PSGT_05&$1FFF)>>$08)|((PSGT_05&$1FFF)<<$08))&$FFFF dc.w (((PSGT_06&$1FFF)>>$08)|((PSGT_06&$1FFF)<<$08))&$FFFF dc.w (((PSGT_07&$1FFF)>>$08)|((PSGT_07&$1FFF)<<$08))&$FFFF dc.w (((PSGT_08&$1FFF)>>$08)|((PSGT_08&$1FFF)<<$08))&$FFFF dc.w (((PSGT_09&$1FFF)>>$08)|((PSGT_09&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0A&$1FFF)>>$08)|((PSGT_0A&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0B&$1FFF)>>$08)|((PSGT_0B&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0C&$1FFF)>>$08)|((PSGT_0C&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0D&$1FFF)>>$08)|((PSGT_0D&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0E&$1FFF)>>$08)|((PSGT_0E&$1FFF)<<$08))&$FFFF dc.w (((PSGT_0F&$1FFF)>>$08)|((PSGT_0F&$1FFF)<<$08))&$FFFF dc.w (((PSGT_10&$1FFF)>>$08)|((PSGT_10&$1FFF)<<$08))&$FFFF dc.w (((PSGT_11&$1FFF)>>$08)|((PSGT_11&$1FFF)<<$08))&$FFFF dc.w (((PSGT_12&$1FFF)>>$08)|((PSGT_12&$1FFF)<<$08))&$FFFF dc.w (((PSGT_13&$1FFF)>>$08)|((PSGT_13&$1FFF)<<$08))&$FFFF dc.w (((PSGT_14&$1FFF)>>$08)|((PSGT_14&$1FFF)<<$08))&$FFFF dc.w (((PSGT_15&$1FFF)>>$08)|((PSGT_15&$1FFF)<<$08))&$FFFF dc.w (((PSGT_16&$1FFF)>>$08)|((PSGT_16&$1FFF)<<$08))&$FFFF dc.w (((PSGT_17&$1FFF)>>$08)|((PSGT_17&$1FFF)<<$08))&$FFFF dc.w (((PSGT_18&$1FFF)>>$08)|((PSGT_18&$1FFF)<<$08))&$FFFF dc.w (((PSGT_19&$1FFF)>>$08)|((PSGT_19&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1A&$1FFF)>>$08)|((PSGT_1A&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1B&$1FFF)>>$08)|((PSGT_1B&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1C&$1FFF)>>$08)|((PSGT_1C&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1D&$1FFF)>>$08)|((PSGT_1D&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1E&$1FFF)>>$08)|((PSGT_1E&$1FFF)<<$08))&$FFFF dc.w (((PSGT_1F&$1FFF)>>$08)|((PSGT_1F&$1FFF)<<$08))&$FFFF dc.w (((PSGT_20&$1FFF)>>$08)|((PSGT_20&$1FFF)<<$08))&$FFFF dc.w (((PSGT_21&$1FFF)>>$08)|((PSGT_21&$1FFF)<<$08))&$FFFF dc.w (((PSGT_22&$1FFF)>>$08)|((PSGT_22&$1FFF)<<$08))&$FFFF dc.w (((PSGT_23&$1FFF)>>$08)|((PSGT_23&$1FFF)<<$08))&$FFFF dc.w (((PSGT_24&$1FFF)>>$08)|((PSGT_24&$1FFF)<<$08))&$FFFF dc.w (((PSGT_25&$1FFF)>>$08)|((PSGT_25&$1FFF)<<$08))&$FFFF dc.w (((PSGT_26&$1FFF)>>$08)|((PSGT_26&$1FFF)<<$08))&$FFFF

PSGT_00: binclude sound/PSGT00.bin PSGT_01: binclude sound/PSGT01.bin PSGT_02: binclude sound/PSGT02.bin PSGT_03: binclude sound/PSGT03.bin PSGT_04: binclude sound/PSGT04.bin PSGT_05: binclude sound/PSGT05.bin PSGT_06: binclude sound/PSGT06.bin PSGT_07: binclude sound/PSGT07.bin PSGT_08: binclude sound/PSGT08.bin PSGT_09: binclude sound/PSGT09.bin PSGT_0A: binclude sound/PSGT0A.bin PSGT_0B: binclude sound/PSGT0B.bin PSGT_0C: binclude sound/PSGT0C.bin PSGT_0D: binclude sound/PSGT0D.bin PSGT_0E: binclude sound/PSGT0E.bin PSGT_0F: binclude sound/PSGT0F.bin PSGT_10: binclude sound/PSGT10.bin PSGT_11: binclude sound/PSGT11.bin PSGT_12: binclude sound/PSGT12.bin PSGT_13: binclude sound/PSGT13.bin PSGT_14: binclude sound/PSGT14.bin PSGT_15: binclude sound/PSGT15.bin PSGT_16: binclude sound/PSGT16.bin PSGT_17: binclude sound/PSGT17.bin PSGT_18: binclude sound/PSGT18.bin PSGT_19: binclude sound/PSGT19.bin PSGT_1A: binclude sound/PSGT1A.bin PSGT_1B: binclude sound/PSGT1B.bin PSGT_1C: binclude sound/PSGT1C.bin PSGT_1D: binclude sound/PSGT1D.bin PSGT_1E: binclude sound/PSGT1E.bin PSGT_1F: binclude sound/PSGT1F.bin PSGT_20: binclude sound/PSGT20.bin PSGT_21: binclude sound/PSGT21.bin PSGT_22: binclude sound/PSGT22.bin PSGT_23: binclude sound/PSGT23.bin PSGT_24: binclude sound/PSGT24.bin PSGT_25: binclude sound/PSGT25.bin PSGT_26: binclude sound/PSGT26.bin

MusicPointers: rom_ptr_z80 Angel_Island_1_Snd rom_ptr_z80 Angel_Island_2_Snd rom_ptr_z80 Hidrocity_1_Snd rom_ptr_z80 Hidrocity_2_Snd rom_ptr_z80 Marble_Garden_1_Snd rom_ptr_z80 Marble_Garden_2_Snd rom_ptr_z80 Carnival_Night_1_Snd rom_ptr_z80 Carnival_Night_2_Snd rom_ptr_z80 Flying_Battery_1_Snd rom_ptr_z80 Flying_Battery_2_Snd rom_ptr_z80 Icecap_1_Snd rom_ptr_z80 Icecap_2_Snd rom_ptr_z80 Launch_Base_1_Snd rom_ptr_z80 Launch_Base_2_Snd rom_ptr_z80 Mushroom_Hill_1_Snd rom_ptr_z80 Mushroom_Hill_2_Snd rom_ptr_z80 Sandopolis_1_Snd rom_ptr_z80 Sandopolis_2_Snd rom_ptr_z80 Lava_Reef_1_Snd rom_ptr_z80 Lava_Reef_2_Snd rom_ptr_z80 Sky_Sanctuary_Snd rom_ptr_z80 Death_Egg_1_Snd rom_ptr_z80 Death_Egg_2_Snd rom_ptr_z80 Mini_Boss_SK_Snd rom_ptr_z80 Boss_Snd rom_ptr_z80 The_Doomsday_Snd rom_ptr_z80 Glowing_Spheres_Bonus_Stage_snd rom_ptr_z80 Special_Stage_Snd rom_ptr_z80 Slot_Machine_Bonus_Stage_snd rom_ptr_z80 Gum_Ball_Machine_Bonus_Stage_snd rom_ptr_z80 Knuckles_Theme_Snd rom_ptr_z80 Azure_Lake_Snd rom_ptr_z80 Balloon_Park_Snd rom_ptr_z80 Desert_Palace_Snd rom_ptr_z80 Chrome_Gadget_Snd rom_ptr_z80 Endless_Mine_Snd rom_ptr_z80 Title_Screen_Snd rom_ptr_z80 Credits_Snd rom_ptr_z80 Time_Game_Over_Snd rom_ptr_z80 Continue_Snd rom_ptr_z80 Level_Results_Snd rom_ptr_z80 Extra_Life_Snd rom_ptr_z80 Emerald_Snd rom_ptr_z80 Invencibility_Snd rom_ptr_z80 Competition_Menu_Snd rom_ptr_z80 Mini_Boss_Snd rom_ptr_z80 Menu_Snd rom_ptr_z80 Final_Boss_Snd rom_ptr_z80 Underwater_Timming_Snd rom_ptr_z80 Presented_by_SEGA_Snd

SndPointers: rom_ptr_z80 Sfx_33_Snd rom_ptr_z80 Sfx_34_Snd rom_ptr_z80 Sfx_35_Snd rom_ptr_z80 Sfx_36_Snd rom_ptr_z80 Sfx_37_Snd rom_ptr_z80 Sfx_38_Snd rom_ptr_z80 Sfx_39_Snd rom_ptr_z80 Sfx_3A_Snd rom_ptr_z80 Sfx_3B_Snd rom_ptr_z80 Sfx_3C_Snd rom_ptr_z80 Sfx_3D_Snd rom_ptr_z80 Sfx_3E_Snd rom_ptr_z80 Sfx_3F_Snd rom_ptr_z80 Sfx_40_Snd rom_ptr_z80 Sfx_41_Snd rom_ptr_z80 Sfx_42_Snd rom_ptr_z80 Sfx_43_Snd rom_ptr_z80 Sfx_44_Snd rom_ptr_z80 Sfx_45_Snd rom_ptr_z80 Sfx_46_Snd rom_ptr_z80 Sfx_47_Snd rom_ptr_z80 Sfx_48_Snd rom_ptr_z80 Sfx_49_Snd rom_ptr_z80 Sfx_4A_Snd rom_ptr_z80 Sfx_4B_Snd rom_ptr_z80 Sfx_4C_Snd rom_ptr_z80 Sfx_4D_Snd rom_ptr_z80 Sfx_4E_Snd rom_ptr_z80 Sfx_4F_Snd rom_ptr_z80 Sfx_50_Snd rom_ptr_z80 Sfx_51_Snd rom_ptr_z80 Sfx_52_Snd rom_ptr_z80 Sfx_53_Snd rom_ptr_z80 Sfx_54_Snd rom_ptr_z80 Sfx_55_Snd rom_ptr_z80 Sfx_56_Snd rom_ptr_z80 Sfx_57_Snd rom_ptr_z80 Sfx_58_Snd rom_ptr_z80 Sfx_59_Snd rom_ptr_z80 Sfx_5A_Snd rom_ptr_z80 Sfx_5B_Snd rom_ptr_z80 Sfx_5C_Snd rom_ptr_z80 Sfx_5D_Snd rom_ptr_z80 Sfx_5E_Snd rom_ptr_z80 Sfx_5F_Snd rom_ptr_z80 Sfx_60_Snd rom_ptr_z80 Sfx_61_Snd rom_ptr_z80 Sfx_62_Snd rom_ptr_z80 Sfx_63_Snd rom_ptr_z80 Sfx_64_Snd rom_ptr_z80 Sfx_65_Snd rom_ptr_z80 Sfx_66_Snd rom_ptr_z80 Sfx_67_Snd rom_ptr_z80 Sfx_68_Snd rom_ptr_z80 Sfx_69_Snd rom_ptr_z80 Sfx_6A_Snd rom_ptr_z80 Sfx_6B_Snd rom_ptr_z80 Sfx_6C_Snd rom_ptr_z80 Sfx_6D_Snd rom_ptr_z80 Sfx_6E_Snd rom_ptr_z80 Sfx_6F_Snd rom_ptr_z80 Sfx_70_Snd rom_ptr_z80 Sfx_71_Snd rom_ptr_z80 Sfx_72_Snd rom_ptr_z80 Sfx_73_Snd rom_ptr_z80 Sfx_74_Snd rom_ptr_z80 Sfx_75_Snd rom_ptr_z80 Sfx_76_Snd rom_ptr_z80 Sfx_77_Snd rom_ptr_z80 Sfx_78_Snd rom_ptr_z80 Sfx_79_Snd rom_ptr_z80 Sfx_7A_Snd rom_ptr_z80 Sfx_7B_Snd rom_ptr_z80 Sfx_7C_Snd rom_ptr_z80 Sfx_7D_Snd rom_ptr_z80 Sfx_7E_Snd rom_ptr_z80 Sfx_7F_Snd rom_ptr_z80 Sfx_80_Snd rom_ptr_z80 Sfx_81_Snd rom_ptr_z80 Sfx_82_Snd rom_ptr_z80 Sfx_83_Snd rom_ptr_z80 Sfx_84_Snd rom_ptr_z80 Sfx_85_Snd rom_ptr_z80 Sfx_86_Snd rom_ptr_z80 Sfx_87_Snd rom_ptr_z80 Sfx_88_Snd rom_ptr_z80 Sfx_89_Snd rom_ptr_z80 Sfx_8A_Snd rom_ptr_z80 Sfx_8B_Snd rom_ptr_z80 Sfx_8C_Snd rom_ptr_z80 Sfx_8D_Snd rom_ptr_z80 Sfx_8E_Snd rom_ptr_z80 Sfx_8F_Snd rom_ptr_z80 Sfx_90_Snd rom_ptr_z80 Sfx_91_Snd rom_ptr_z80 Sfx_92_Snd rom_ptr_z80 Sfx_93_Snd rom_ptr_z80 Sfx_94_Snd rom_ptr_z80 Sfx_95_Snd rom_ptr_z80 Sfx_96_Snd rom_ptr_z80 Sfx_97_Snd rom_ptr_z80 Sfx_98_Snd rom_ptr_z80 Sfx_99_Snd rom_ptr_z80 Sfx_9A_Snd rom_ptr_z80 Sfx_9B_Snd rom_ptr_z80 Sfx_9C_Snd rom_ptr_z80 Sfx_9D_Snd rom_ptr_z80 Sfx_9E_Snd rom_ptr_z80 Sfx_9F_Snd rom_ptr_z80 Sfx_A0_Snd rom_ptr_z80 Sfx_A1_Snd rom_ptr_z80 Sfx_A2_Snd rom_ptr_z80 Sfx_A3_Snd rom_ptr_z80 Sfx_A4_Snd rom_ptr_z80 Sfx_A5_Snd rom_ptr_z80 Sfx_A6_Snd rom_ptr_z80 Sfx_A7_Snd rom_ptr_z80 Sfx_A8_Snd rom_ptr_z80 Sfx_A9_Snd rom_ptr_z80 Sfx_AA_Snd rom_ptr_z80 Sfx_AB_Snd rom_ptr_z80 Sfx_AC_Snd rom_ptr_z80 Sfx_AD_Snd rom_ptr_z80 Sfx_AE_Snd rom_ptr_z80 Sfx_AF_Snd rom_ptr_z80 Sfx_B0_Snd rom_ptr_z80 Sfx_B1_Snd rom_ptr_z80 Sfx_B2_Snd rom_ptr_z80 Sfx_B3_Snd rom_ptr_z80 Sfx_B4_Snd rom_ptr_z80 Sfx_B5_Snd rom_ptr_z80 Sfx_B6_Snd rom_ptr_z80 Sfx_B7_Snd rom_ptr_z80 Sfx_B8_Snd rom_ptr_z80 Sfx_B9_Snd rom_ptr_z80 Sfx_BA_Snd rom_ptr_z80 Sfx_BB_Snd rom_ptr_z80 Sfx_BC_Snd rom_ptr_z80 Sfx_BD_Snd rom_ptr_z80 Sfx_BE_Snd rom_ptr_z80 Sfx_BF_Snd rom_ptr_z80 Sfx_C0_Snd rom_ptr_z80 Sfx_C1_Snd rom_ptr_z80 Sfx_C2_Snd rom_ptr_z80 Sfx_C3_Snd rom_ptr_z80 Sfx_C4_Snd rom_ptr_z80 Sfx_C5_Snd rom_ptr_z80 Sfx_C6_Snd rom_ptr_z80 Sfx_C7_Snd rom_ptr_z80 Sfx_C8_Snd rom_ptr_z80 Sfx_C9_Snd rom_ptr_z80 Sfx_CA_Snd rom_ptr_z80 Sfx_CB_Snd rom_ptr_z80 Sfx_CC_Snd rom_ptr_z80 Sfx_CD_Snd rom_ptr_z80 Sfx_CE_Snd rom_ptr_z80 Sfx_CF_Snd rom_ptr_z80 Sfx_D0_Snd rom_ptr_z80 Sfx_D1_Snd rom_ptr_z80 Sfx_D2_Snd rom_ptr_z80 Sfx_D3_Snd rom_ptr_z80 Sfx_D4_Snd rom_ptr_z80 Sfx_D5_Snd rom_ptr_z80 Sfx_D6_Snd rom_ptr_z80 Sfx_D7_Snd rom_ptr_z80 Sfx_D8_Snd rom_ptr_z80 Sfx_D9_Snd rom_ptr_z80 Sfx_DA_Snd rom_ptr_z80 Sfx_DB_Snd rom_ptr_z80 Sfx_DB_Snd rom_ptr_z80 Sfx_DB_Snd rom_ptr_z80 Sfx_DB_Snd rom_ptr_z80 Sfx_DB_Snd DriverPointersEnd:

UniversalVoiceBank: binclude "sound/uvb.bin" UniversalVoiceBankEnd:

align $8000 dacBank0Start := * DacBank0: binclude "sound/dac_0.bin" if * > dacBank0Start + $8000 fatal "dacBank0 must fit in $8000 bytes but was $\{*-dacBank0Start}. Try moving something to another bank." else ;message "dacBank0 has $\{$8000+dacBank0Start-*} bytes free at end." endif

align $8000 bank1Start := * DacBank1: binclude "sound/dac_1.bin" align $8000 if * > dacBank1Start + $8000 fatal "dacBank1 must fit in $8000 bytes but was $\{*-dacBank1Start}. Try moving something to another bank." else ;message "dacBank1 has $\{$8000+dacBank1Start-*} bytes free at end." endif

align $8000 bank2Start := * DacBank2: binclude "sound/dac_2.bin" if * > dacBank2Start + $8000 fatal "dacBank2 must fit in $8000 bytes but was $\{*-dacBank2Start}. Try moving something to another bank." else ;message "dacBank2 has $\{$8000+dacBank2Start-*} bytes free at end." endif

align $8000 bank0Start := * Bank0: binclude "sound/filler.bin" Mini_Boss_Snd: binclude "sound/miniboss.snd" Final_Boss_Snd: binclude "sound/f_boss.snd" if * > bank0Start + $8000 fatal "bank0 must fit in $8000 bytes but was $\{*-bank0Start}. Try moving something to another bank." else ;message "bank0 has $\{$8000+bank0Start-*} bytes free at end." endif

align $8000 bank1Start := * Bank1: Angel_Island_1_Snd: binclude "sound/aiz1.snd" Angel_Island_2_Snd: binclude "sound/aiz2.snd" Hidrocity_1_Snd: binclude "sound/hcz1.snd" Hidrocity_2_Snd: binclude "sound/hcz2.snd" Marble_Garden_1_Snd: binclude "sound/mgz1.snd" Marble_Garden_2_Snd: binclude "sound/mgz2.snd" Carnival_Night_2_Snd: binclude "sound/cnz2.snd" Carnival_Night_1_Snd: binclude "sound/cnz1.snd" Flying_Battery_1_Snd: binclude "sound/fbz1.snd" Flying_Battery_2_Snd: binclude "sound/fbz2.snd" The_Doomsday_Snd: binclude "sound/tdz.snd" if * > bank1Start + $8000 fatal "bank1 must fit in $8000 bytes but was $\{*-bank1Start}. Try moving something to another bank." else ;message "bank1 has $\{$8000+bank1Start-*} bytes free at end." endif

align $8000 bank2Start := * Bank2: Icecap_2_Snd: binclude "sound/iz2.snd" Icecap_1_Snd: binclude "sound/iz1.snd" Launch_Base_2_Snd: binclude "sound/lbz2.snd" Launch_Base_1_Snd: binclude "sound/lbz1.snd" Mushroom_Hill_1_Snd: binclude "sound/mhz1.snd" Mushroom_Hill_2_Snd: binclude "sound/mhz2.snd" Sandopolis_1_Snd: binclude "sound/sz1.snd" Sandopolis_2_Snd: binclude "sound/sz2.snd" Lava_Reef_1_Snd: binclude "sound/lrz1.snd" Lava_Reef_2_Snd: binclude "sound/lrz2.snd" Sky_Sanctuary_Snd: binclude "sound/scz.snd" Death_Egg_1_Snd: binclude "sound/dez1.snd" Death_Egg_2_Snd: binclude "sound/dez2.snd" Mini_Boss_SK_Snd: binclude "sound/mb_sk.snd" Boss_Snd: binclude "sound/boss.snd" Glowing_Spheres_Bonus_Stage_snd: binclude "sound/gs_bs.snd" Special_Stage_Snd: binclude "sound/ss.snd" Level_Results_Snd: binclude "sound/lr.snd" Menu_Snd: binclude "sound/menu.snd" if * > bank2Start + $8000 fatal "bank2 must fit in $8000 bytes but was $\{*-bank2Start}. Try moving something to another bank." else ;message "bank2 has $\{$8000+bank2Start-*} bytes free at end." endif

align $8000 bank3Start := * Bank3: Slot_Machine_Bonus_Stage_snd: binclude "sound/sm_bs.snd" Gum_Ball_Machine_Bonus_Stage_snd: binclude "sound/gbm_bs.snd" Knuckles_Theme_Snd: binclude "sound/kte.snd" Azure_Lake_Snd: binclude "sound/alz.snd" Balloon_Park_Snd: binclude "sound/bpz.snd" Desert_Palace_Snd: binclude "sound/dpz.snd" Chrome_Gadget_Snd: binclude "sound/cgz.snd" Endless_Mine_Snd: binclude "sound/emz.snd" Title_Screen_Snd: binclude "sound/ts.snd" Credits_Snd: binclude "sound/credits.snd" Time_Game_Over_Snd: binclude "sound/tgovr.snd" Continue_Snd: binclude "sound/continue.snd" Extra_Life_Snd: binclude "sound/1up.snd" Emerald_Snd: binclude "sound/emerald.snd" Invencibility_Snd: binclude "sound/invcblty.snd" Competition_Menu_Snd: binclude "sound/2p_menu.snd" Underwater_Timming_Snd: binclude "sound/panic.snd" Presented_by_SEGA_Snd: binclude "sound/p_sega.snd" if * > bank3Start + $8000 fatal "bank3 must fit in $8000 bytes but was $\{*-bank3Start}. Try moving something to another bank." else ;message "bank3 has $\{$8000+bank3Start-*} bytes free at end." endif

align $8000 soundBankStart := * SndBank: SegaPCMBank: SegaSnd: binclude "sound/sega.snd" Sfx_33_Snd: binclude "sound/sfx_34.snd" Sfx_34_Snd: binclude "sound/sfx_35.snd" Sfx_35_Snd: binclude "sound/sfx_36.snd" Sfx_36_Snd: binclude "sound/sfx_37.snd" Sfx_37_Snd: binclude "sound/sfx_38.snd" Sfx_38_Snd: binclude "sound/sfx_39.snd" Sfx_39_Snd: binclude "sound/sfx_3A.snd" Sfx_3A_Snd: binclude "sound/sfx_3B.snd" Sfx_3B_Snd: binclude "sound/sfx_3C.snd" Sfx_3C_Snd: binclude "sound/sfx_3D.snd" Sfx_3D_Snd: binclude "sound/sfx_3E.snd" Sfx_3E_Snd: binclude "sound/sfx_3F.snd" Sfx_3F_Snd: binclude "sound/sfx_40.snd" Sfx_40_Snd: binclude "sound/sfx_41.snd" Sfx_41_Snd: binclude "sound/sfx_42.snd" Sfx_42_Snd: binclude "sound/sfx_43.snd" Sfx_43_Snd: binclude "sound/sfx_44.snd" Sfx_44_Snd: binclude "sound/sfx_45.snd" Sfx_45_Snd: binclude "sound/sfx_46.snd" Sfx_46_Snd: binclude "sound/sfx_47.snd" Sfx_47_Snd: binclude "sound/sfx_48.snd" Sfx_48_Snd: binclude "sound/sfx_49.snd" Sfx_49_Snd: binclude "sound/sfx_4A.snd" Sfx_4A_Snd: binclude "sound/sfx_4B.snd" Sfx_4B_Snd: binclude "sound/sfx_4C.snd" Sfx_4C_Snd: binclude "sound/sfx_4D.snd" Sfx_4D_Snd: binclude "sound/sfx_4E.snd" Sfx_4E_Snd: binclude "sound/sfx_4F.snd" Sfx_4F_Snd: binclude "sound/sfx_50.snd" Sfx_50_Snd: binclude "sound/sfx_51.snd" Sfx_51_Snd: binclude "sound/sfx_52.snd" Sfx_52_Snd: binclude "sound/sfx_53.snd" Sfx_53_Snd: binclude "sound/sfx_54.snd" Sfx_54_Snd: binclude "sound/sfx_55.snd" Sfx_55_Snd: binclude "sound/sfx_56.snd" Sfx_56_Snd: binclude "sound/sfx_57.snd" Sfx_57_Snd: binclude "sound/sfx_58.snd" Sfx_58_Snd: binclude "sound/sfx_59.snd" Sfx_59_Snd: binclude "sound/sfx_5A.snd" Sfx_5A_Snd: binclude "sound/sfx_5B.snd" Sfx_5B_Snd: binclude "sound/sfx_5C.snd" Sfx_5C_Snd: binclude "sound/sfx_5D.snd" Sfx_5D_Snd: binclude "sound/sfx_5E.snd" Sfx_5E_Snd: binclude "sound/sfx_5F.snd" Sfx_5F_Snd: binclude "sound/sfx_60.snd" Sfx_60_Snd: binclude "sound/sfx_61.snd" Sfx_61_Snd: binclude "sound/sfx_62.snd" Sfx_62_Snd: binclude "sound/sfx_63.snd" Sfx_63_Snd: binclude "sound/sfx_64.snd" Sfx_64_Snd: binclude "sound/sfx_65.snd" Sfx_65_Snd: binclude "sound/sfx_66.snd" Sfx_66_Snd: binclude "sound/sfx_67.snd" Sfx_67_Snd: binclude "sound/sfx_68.snd" Sfx_68_Snd: binclude "sound/sfx_69.snd" Sfx_69_Snd: binclude "sound/sfx_6A.snd" Sfx_6A_Snd: binclude "sound/sfx_6B.snd" Sfx_6B_Snd: binclude "sound/sfx_6C.snd" Sfx_6C_Snd: binclude "sound/sfx_6D.snd" Sfx_6D_Snd: binclude "sound/sfx_6E.snd" Sfx_6E_Snd: binclude "sound/sfx_6F.snd" Sfx_6F_Snd: binclude "sound/sfx_70.snd" Sfx_70_Snd: binclude "sound/sfx_71.snd" Sfx_71_Snd: binclude "sound/sfx_72.snd" Sfx_72_Snd: binclude "sound/sfx_73.snd" Sfx_73_Snd: binclude "sound/sfx_74.snd" Sfx_74_Snd: binclude "sound/sfx_75.snd" Sfx_75_Snd: binclude "sound/sfx_76.snd" Sfx_76_Snd: binclude "sound/sfx_77.snd" Sfx_77_Snd: binclude "sound/sfx_78.snd" Sfx_78_Snd: binclude "sound/sfx_79.snd" Sfx_79_Snd: binclude "sound/sfx_7A.snd" Sfx_7A_Snd: binclude "sound/sfx_7B.snd" Sfx_7B_Snd: binclude "sound/sfx_7C.snd" Sfx_7C_Snd: binclude "sound/sfx_7D.snd" Sfx_7D_Snd: binclude "sound/sfx_7E.snd" Sfx_7E_Snd: binclude "sound/sfx_7F.snd" Sfx_7F_Snd: binclude "sound/sfx_80.snd" Sfx_80_Snd: binclude "sound/sfx_81.snd" Sfx_81_Snd: binclude "sound/sfx_82.snd" Sfx_82_Snd: binclude "sound/sfx_83.snd" Sfx_83_Snd: binclude "sound/sfx_84.snd" Sfx_84_Snd: binclude "sound/sfx_85.snd" Sfx_85_Snd: binclude "sound/sfx_86.snd" Sfx_86_Snd: binclude "sound/sfx_87.snd" Sfx_87_Snd: binclude "sound/sfx_88.snd" Sfx_88_Snd: binclude "sound/sfx_89.snd" Sfx_89_Snd: binclude "sound/sfx_8A.snd" Sfx_8A_Snd: binclude "sound/sfx_8B.snd" Sfx_8B_Snd: binclude "sound/sfx_8C.snd" Sfx_8C_Snd: binclude "sound/sfx_8D.snd" Sfx_8D_Snd: binclude "sound/sfx_8E.snd" Sfx_8E_Snd: binclude "sound/sfx_8F.snd" Sfx_8F_Snd: binclude "sound/sfx_90.snd" Sfx_90_Snd: binclude "sound/sfx_91.snd" Sfx_91_Snd: binclude "sound/sfx_92.snd" Sfx_92_Snd: binclude "sound/sfx_93.snd" Sfx_93_Snd: binclude "sound/sfx_94.snd" Sfx_94_Snd: binclude "sound/sfx_95.snd" Sfx_95_Snd: binclude "sound/sfx_96.snd" Sfx_96_Snd: binclude "sound/sfx_97.snd" Sfx_97_Snd: binclude "sound/sfx_98.snd" Sfx_98_Snd: binclude "sound/sfx_99.snd" Sfx_99_Snd: binclude "sound/sfx_9A.snd" Sfx_9A_Snd: binclude "sound/sfx_9B.snd" Sfx_9B_Snd: binclude "sound/sfx_9C.snd" Sfx_9C_Snd: binclude "sound/sfx_9D.snd" Sfx_9D_Snd: binclude "sound/sfx_9E.snd" Sfx_9E_Snd: binclude "sound/sfx_9F.snd" Sfx_9F_Snd: binclude "sound/sfx_A0.snd" Sfx_A0_Snd: binclude "sound/sfx_A1.snd" Sfx_A1_Snd: binclude "sound/sfx_A2.snd" Sfx_A2_Snd: binclude "sound/sfx_A3.snd" Sfx_A3_Snd: binclude "sound/sfx_A4.snd" Sfx_A4_Snd: binclude "sound/sfx_A5.snd" Sfx_A5_Snd: binclude "sound/sfx_A6.snd" Sfx_A6_Snd: binclude "sound/sfx_A7.snd" Sfx_A7_Snd: binclude "sound/sfx_A8.snd" Sfx_A8_Snd: binclude "sound/sfx_A9.snd" Sfx_A9_Snd: binclude "sound/sfx_AA.snd" Sfx_AA_Snd: binclude "sound/sfx_AB.snd" Sfx_AB_Snd: binclude "sound/sfx_AC.snd" Sfx_AC_Snd: binclude "sound/sfx_AD.snd" Sfx_AD_Snd: binclude "sound/sfx_AE.snd" Sfx_AE_Snd: binclude "sound/sfx_AF.snd" Sfx_AF_Snd: binclude "sound/sfx_B0.snd" Sfx_B0_Snd: binclude "sound/sfx_B1.snd" Sfx_B1_Snd: binclude "sound/sfx_B2.snd" Sfx_B2_Snd: binclude "sound/sfx_B3.snd" Sfx_B3_Snd: binclude "sound/sfx_B4.snd" Sfx_B4_Snd: binclude "sound/sfx_B5.snd" Sfx_B5_Snd: binclude "sound/sfx_B6.snd" Sfx_B6_Snd: binclude "sound/sfx_B7.snd" Sfx_B7_Snd: binclude "sound/sfx_B8.snd" Sfx_B8_Snd: binclude "sound/sfx_B9.snd" Sfx_B9_Snd: binclude "sound/sfx_BA.snd" Sfx_BA_Snd: binclude "sound/sfx_BB.snd" Sfx_BB_Snd: binclude "sound/sfx_BC.snd" Sfx_BC_Snd: binclude "sound/sfx_BD.snd" Sfx_BD_Snd: binclude "sound/sfx_BE.snd" Sfx_BE_Snd: binclude "sound/sfx_BF.snd" Sfx_BF_Snd: binclude "sound/sfx_C0.snd" Sfx_C0_Snd: binclude "sound/sfx_C1.snd" Sfx_C1_Snd: binclude "sound/sfx_C2.snd" Sfx_C2_Snd: binclude "sound/sfx_C3.snd" Sfx_C3_Snd: binclude "sound/sfx_C4.snd" Sfx_C4_Snd: binclude "sound/sfx_C5.snd" Sfx_C5_Snd: binclude "sound/sfx_C6.snd" Sfx_C6_Snd: binclude "sound/sfx_C7.snd" Sfx_C7_Snd: binclude "sound/sfx_C8.snd" Sfx_C8_Snd: binclude "sound/sfx_C9.snd" Sfx_C9_Snd: binclude "sound/sfx_CA.snd" Sfx_CB_Snd: binclude "sound/sfx_CB.snd" Sfx_CA_Snd: binclude "sound/sfx_CC.snd" Sfx_CB_Snd: binclude "sound/sfx_CD.snd" Sfx_CD_Snd: binclude "sound/sfx_CE.snd" Sfx_CE_Snd: binclude "sound/sfx_CF.snd" Sfx_CF_Snd: binclude "sound/sfx_D0.snd" Sfx_D0_Snd: binclude "sound/sfx_D1.snd" Sfx_D1_Snd: binclude "sound/sfx_D2.snd" Sfx_D2_Snd: binclude "sound/sfx_D3.snd" Sfx_D3_Snd: binclude "sound/sfx_D4.snd" Sfx_D4_Snd: binclude "sound/sfx_D5.snd" Sfx_D5_Snd: binclude "sound/sfx_D6.snd" Sfx_D6_Snd: binclude "sound/sfx_D7.snd" Sfx_D7_Snd: binclude "sound/sfx_D8.snd" Sfx_D8_Snd: binclude "sound/sfx_D9.snd" Sfx_D9_Snd: binclude "sound/sfx_DA.snd" Sfx_DA_Snd: binclude "sound/sfx_DB.snd" Sfx_DB_Snd: binclude "sound/sfx_DC.snd"

if * > soundBankStart + $8000 fatal "soundBank must fit in $8000 bytes but was $\{*-soundBankStart}. Try moving something to another bank." else ;message "soundBank has $\{$8000+soundBankStart-*} bytes free at end." endif </asm>

Upgrading the Playback Routines

Now we have the code to load the new driver, time to add the new playback routines.

Upgrade Music Routine

First the PlayMusic routine, locate: <asm>

||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
If Music_to_play is clear, move d0 into Music_to_play,
else move d0 into Music_to_play_2.
sub_135E

PlayMusic: tst.b (Music_to_play).w bne.s + move.b d0,(Music_to_play).w rts + move.b d0,(Music_to_play_2).w rts

End of function PlayMusic

</asm> and we will replace it with this code: <asm>

---------------------------------------------------------------------------
Subroutine to play a music track
---------------------------------------------------------------------------
||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||


PlayMusic: cmpi.w #$FB,d0 blt.s ++ bhi.s + move #8,d0 jmp SetTempo + cmpi.w #$FC,d0 bne.s + clr.w d0 jmp SetTempo

stopZ80 move.b d0,($A01C0A).l startZ80 rts

End of function PlaySound

</asm>

Upgrade Sound Routines

now find: <asm>

||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
play a sound if the source is onscreen
sub_137C

PlaySoundLocal: tst.b render_flags(a0) bpl.s + ; rts move.b d0,(SFX_to_play).w + rts

End of function PlaySoundLocal

</asm> and replace it with: <asm>

||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
play a sound if the source is onscreen
sub_137C

PlaySoundLocal: tst.b render_flags(A0) bpl.s SkipPlaySound bra.s PlaySound

End of function PlaySoundLocal

</asm> now we will find: <asm>

||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
sub_1370

PlaySound: move.b d0,(SFX_to_play).w rts

End of function PlaySound


||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
play a sound in alternating speakers (as in the ring collection sound)
sub_1376

PlaySoundStereo: move.b d0,(SFX_to_play_2).w rts

End of function PlaySoundStereo

</asm> and replace it with: <asm>

||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
sub_1370

PlaySound: stopZ80 cmp.b ($A01C0B).l,d0 beq.s ++ tst.b ($A01C0B).l bne.s + move.b d0,($A01C0B).l startZ80 rts

+ move.b d0,($A01C0C).l

+ move.w #0,($A11100).l

SkipPlaySound: rts

End of function PlaySound


||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
play a sound in alternating speakers (as in the ring collection sound)
sub_1376

PlaySoundStereo: bra.s PlaySound

End of function PlaySoundStereo
||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
change the music tempo

SetTempo: stopZ80 move.b D0,($A01C08).l startZ80 rts

</asm>

Upgrading Pause / Resume Routines

Now the playback routines are fixed and we have a routine to set the tempo the way the sneakers do, which we will elaberate later on, but we still have to update the pause / resume routines to the Sonic 3 equivilents.

Find: <asm>

---------------------------------------------------------------------------
Subroutine to pause the game
---------------------------------------------------------------------------
||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
sub_1388

PauseGame: nop tst.b (Life_count).w ; do you have any lives left? beq.w Unpause ; if not, branch tst.w (Game_paused).w ; is game already paused? bne.s + ; if yes, branch move.b (Ctrl_1_Press).w,d0 ; is Start button pressed? or.b (Ctrl_2_Press).w,d0 ; (either player) andi.b #button_start_mask,d0 beq.s Pause_DoNothing ; if not, branch + move.w #1,(Game_paused).w ; freeze time move.b #MusID_Pause,(Music_to_play).w ; pause music

loc_13B2

Pause_Loop: move.b #$10,(Vint_routine).w bsr.w WaitForVint tst.b (Slow_motion_flag).w ; is slow-motion cheat on? beq.s Pause_ChkStart ; if not, branch btst #button_A,(Ctrl_1_Press).w ; is button A pressed? beq.s Pause_ChkBC ; if not, branch move.b #GameModeID_TitleScreen,(Game_Mode).w ; => TitleScreen nop bra.s Pause_Resume

===========================================================================
loc_13D4

Pause_ChkBC: btst #button_B,(Ctrl_1_Held).w ; is button B pressed? bne.s Pause_SlowMo ; if yes, branch btst #button_C,(Ctrl_1_Press).w ; is button C pressed? bne.s Pause_SlowMo ; if yes, branch

loc_13E4

Pause_ChkStart: move.b (Ctrl_1_Press).w,d0 ; is Start button pressed? or.b (Ctrl_2_Press).w,d0 ; (either player) andi.b #button_start_mask,d0 beq.s Pause_Loop ; if not, branch

loc_13F2

Pause_Resume: move.b #MusID_Unpause,(Music_to_play).w

loc_13F8

Unpause: move.w #0,(Game_paused).w

return_13FE

Pause_DoNothing: rts

===========================================================================
loc_1400

Pause_SlowMo: move.w #1,(Game_paused).w move.b #MusID_Unpause,(Music_to_play).w rts

End of function PauseGame

</asm> and replace it with: <asm>

---------------------------------------------------------------------------
Subroutine to pause the game
---------------------------------------------------------------------------
||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
sub_1388

PauseGame: nop tst.b (Life_count).w beq Unpause tst.w (Game_paused).w bne.s + move.b (Ctrl_1_Press).w,d0 or.b (Ctrl_2_Press).w,d0 andi.b #$80,d0 beq Pause_DoNothing + move.w #1,(Game_paused).w stopZ80 move.b #1,($A01C10).l startZ80

Pause_Loop: move.b #$10,(Vint_routine).w jsr WaitForVint tst.b (Slow_motion_flag).w beq.s Pause_ChkStart btst #button_A,(Ctrl_1_Press).w beq.s Pause_ChkBC move.b #$GameModeID_TitleScreen,(Game_Mode).w ; Go To Title Screen nop bra.s Pause_Resume

Pause_ChkBC: btst #button_B,(Ctrl_1_Held).w bne.s Pause_SlowMo btst #button_C,(Ctrl_1_Press).w bne.s Pause_SlowMo

Pause_ChkStart: move.b (Ctrl_1_Press).w,d0 ; is Start button pressed? or.b (Ctrl_2_Press).w,d0 ; (either player) andi.b #button_start_mask,d0 beq.s Pause_Loop ; if not, branch

Pause_Resume: stopZ80 move.b #$80,($A01C10).l startZ80

Unpause: move.w #0,(Game_paused).w

Pause_DoNothing: rts

Pause_SlowMo: move.w #1,(Game_paused).w stopZ80 move.b #$80,($A01C10).l startZ80 rts

End of function PauseGame

</asm>

Driver Data Files

then unpack this into the 'sound' folder and, optionally, remove the original files since we no longer need them anymore:

Download.svg Download The Sonic 3 Driver data files
File: s3driverdata.7z (131 kB) (info)

Fixing the Music and Sound Effects

Now we will open s2.constants.asm.

Music

Go to MusID__First and you will notice this: <asm> MusID__First = idstart MusID_2PResult = id(zMusIDPtr_2PResult) ; 81 MusID_EHZ = id(zMusIDPtr_EHZ) ; 82 MusID_MCZ_2P = id(zMusIDPtr_MCZ_2P) ; 83 MusID_OOZ = id(zMusIDPtr_OOZ) ; 84 MusID_MTZ = id(zMusIDPtr_MTZ) ; 85 MusID_HTZ = id(zMusIDPtr_HTZ) ; 86 MusID_ARZ = id(zMusIDPtr_ARZ) ; 87 MusID_CNZ_2P = id(zMusIDPtr_CNZ_2P) ; 88 MusID_CNZ = id(zMusIDPtr_CNZ) ; 89 MusID_DEZ = id(zMusIDPtr_DEZ) ; 8A MusID_MCZ = id(zMusIDPtr_MCZ) ; 8B MusID_EHZ_2P = id(zMusIDPtr_EHZ_2P) ; 8C MusID_SCZ = id(zMusIDPtr_SCZ) ; 8D MusID_CPZ = id(zMusIDPtr_CPZ) ; 8E MusID_WFZ = id(zMusIDPtr_WFZ) ; 8F MusID_HPZ = id(zMusIDPtr_HPZ) ; 90 MusID_Options = id(zMusIDPtr_Options) ; 91 MusID_SpecStage = id(zMusIDPtr_SpecStage) ; 92 MusID_Boss = id(zMusIDPtr_Boss) ; 93 MusID_EndBoss = id(zMusIDPtr_EndBoss) ; 94 MusID_Ending = id(zMusIDPtr_Ending) ; 95 MusID_SuperSonic = id(zMusIDPtr_SuperSonic); 96 MusID_Invincible = id(zMusIDPtr_Invincible); 97 MusID_ExtraLife = id(zMusIDPtr_ExtraLife) ; 98 MusID_Title = id(zMusIDPtr_Title) ; 99 MusID_EndLevel = id(zMusIDPtr_EndLevel) ; 9A MusID_GameOver = id(zMusIDPtr_GameOver) ; 9B MusID_Continue = id(zMusIDPtr_Continue) ; 9C MusID_Emerald = id(zMusIDPtr_Emerald) ; 9D MusID_Credits = id(zMusIDPtr_Credits) ; 9E MusID_Countdown = id(zMusIDPtr_Countdown) ; 9F MusID__End = id(zMusIDPtr__End) ; A0 </asm> That may be good if you were using the Sonic 2 driver, but obviously you are not, so we need to change it. <asm> MusID__First = 0 MusID_AIZ1 = 1 MusID_AIZ2 = 2 MusID_HCZ1 = 3 MusID_HCZ2 = 4 MusID_MGZ1 = 5 MusID_MGZ2 = 6 MusID_CNZ1 = 7 MusID_CNZ2 = 8 MusID_FBZ1 = 9 MusID_FBZ2 = $A MusID_ICZ1 = $B MusID_ICZ2 = $C MusID_LBZ1 = $D MusID_LBZ2 = $E MusID_MHZ1 = $F MusID_MHZ2 = $10 MusID_SZ1 = $11 MusID_SZ2 = $12 MusID_LRZ1 = $13 MusID_LRZ2 = $14 MusID_SSZ = $15 MusID_DEZ1 = $16 MusID_DEZ2 = $17 MusID_MBSK = $18 MusID_Boss = $19 MusID_TDZ = $1A MusID_GSBonus = $1B MusID_SpecStage = $1C MusID_SMBonus = $1D MusID_GBMBonus = $1E MusID_KTE = $1F MusID_ALZ = $20 MusID_BPZ = $21 MusID_DPZ = $22 MusID_CGZ = $23 MusID_EMZ = $24 MusID_Title = $25 MusID_Credits = $26 MusID_GameOver = $27 MusID_Continue = $28 MusID_EndLevel = $29 MusID_ExtraLife = $2A MusID_Emerald = $2B MusID_Invincible = $2C MusID_2PVS = $2D MusID_MB = $2E MusID_Options = $2F MusID_EndBoss = $30 MusID_Countdown = $31 MusID_Ending = $32

   ; for compatibility with Sonic 2

MusID_2PResult = MusID_Continue MusID_EHZ = MusID_AIZ1 MusID_MCZ_2P = MusID_MHZ2 MusID_OOZ = MusID_DPZ MusID_MTZ = MusID_DEZ1 MusID_HTZ = MusID_LRZ1 MusID_ARZ = MusID_HCZ1 MusID_CNZ_2P = MusID_CNZ2 MusID_CNZ = MusID_CNZ1 MusID_DEZ = MusID_DEZ2 MusID_MCZ = MusID_EMZ MusID_EHZ_2P = MusID_AIZ2 MusID_SCZ = MusID_FBZ1 MusID_CPZ = MusID_HCZ2 MusID_WFZ = MusID_FBZ2 MusID_HPZ = MusID_LRZ1 MusID_SuperSonic = MusID_Invincible MusID__End = $33 </asm> The original music IDs in the compatibility section can be set to whichever ones you want in the above (I wouldn't recommend editing the 2PResult one though)

Sound Effects

Okay, now we actually have the music working (well, sorta working, fades and music stops aren't working yet though and we will fix that very soon), so it is time to get those sound effects working as they should. We want to start with SndID__First. you may notice that this area looks like this: <asm> SndID__First = idstart SndID_Jump = id(SndPtr_Jump) ; A0 SndID_Checkpoint = id(SndPtr_Checkpoint) ; A1 SndID_SpikeSwitch = id(SndPtr_SpikeSwitch) ; A2 SndID_Hurt = id(SndPtr_Hurt) ; A3 SndID_Skidding = id(SndPtr_Skidding) ; A4 SndID_BlockPush = id(SndPtr_BlockPush) ; A5 SndID_HurtBySpikes = id(SndPtr_HurtBySpikes) ; A6 SndID_Sparkle = id(SndPtr_Sparkle) ; A7 SndID_Beep = id(SndPtr_Beep) ; A8 SndID_Bwoop = id(SndPtr_Bwoop) ; A9 SndID_Splash = id(SndPtr_Splash) ; AA SndID_Swish = id(SndPtr_Swish) ; AB SndID_BossHit = id(SndPtr_BossHit) ; AC SndID_InhalingBubble = id(SndPtr_InhalingBubble) ; AD SndID_ArrowFiring = id(SndPtr_ArrowFiring) ; AE SndID_LavaBall = id(SndPtr_LavaBall) ; AE SndID_Shield = id(SndPtr_Shield) ; AF SndID_LaserBeam = id(SndPtr_LaserBeam) ; B0 SndID_Zap = id(SndPtr_Zap) ; B1 SndID_Drown = id(SndPtr_Drown) ; B2 SndID_FireBurn = id(SndPtr_FireBurn) ; B3 SndID_Bumper = id(SndPtr_Bumper) ; B4 SndID_Ring = id(SndPtr_Ring) ; B5 SndID_RingRight = id(SndPtr_RingRight) ; B5 SndID_SpikesMove = id(SndPtr_SpikesMove) ; B6 SndID_Rumbling = id(SndPtr_Rumbling) ; B7 SndID_Smash = id(SndPtr_Smash) ; B9 SndID_DoorSlam = id(SndPtr_DoorSlam) ; BB SndID_SpindashRelease = id(SndPtr_SpindashRelease) ; BC SndID_Hammer = id(SndPtr_Hammer) ; BD SndID_Roll = id(SndPtr_Roll) ; BE SndID_ContinueJingle = id(SndPtr_ContinueJingle) ; BF SndID_CasinoBonus = id(SndPtr_CasinoBonus) ; C0 SndID_Explosion = id(SndPtr_Explosion) ; C1 SndID_WaterWarning = id(SndPtr_WaterWarning) ; C2 SndID_EnterGiantRing = id(SndPtr_EnterGiantRing) ; C3 SndID_BossExplosion = id(SndPtr_BossExplosion) ; C4 SndID_TallyEnd = id(SndPtr_TallyEnd) ; C5 SndID_RingSpill = id(SndPtr_RingSpill) ; C6 SndID_Flamethrower = id(SndPtr_Flamethrower) ; C8 SndID_Bonus = id(SndPtr_Bonus) ; C9 SndID_SpecStageEntry = id(SndPtr_SpecStageEntry) ; CA SndID_SlowSmash = id(SndPtr_SlowSmash) ; CB SndID_Spring = id(SndPtr_Spring) ; CC SndID_Blip = id(SndPtr_Blip) ; CD SndID_RingLeft = id(SndPtr_RingLeft) ; CE SndID_Signpost = id(SndPtr_Signpost) ; CF SndID_CNZBossZap = id(SndPtr_CNZBossZap) ; D0 SndID_Signpost2P = id(SndPtr_Signpost2P) ; D3 SndID_OOZLidPop = id(SndPtr_OOZLidPop) ; D4 SndID_SlidingSpike = id(SndPtr_SlidingSpike) ; D5 SndID_CNZElevator = id(SndPtr_CNZElevator) ; D6 SndID_PlatformKnock = id(SndPtr_PlatformKnock) ; D7 SndID_BonusBumper = id(SndPtr_BonusBumper) ; D8 SndID_LargeBumper = id(SndPtr_LargeBumper) ; D9 SndID_Gloop = id(SndPtr_Gloop) ; DA SndID_PreArrowFiring = id(SndPtr_PreArrowFiring) ; DB SndID_Fire = id(SndPtr_Fire) ; DC SndID_ArrowStick = id(SndPtr_ArrowStick) ; DD SndID_Helicopter = id(SndPtr_Helicopter) ; DE SndID_SuperTransform = id(SndPtr_SuperTransform) ; DF SndID_SpindashRev = id(SndPtr_SpindashRev) ; E0 SndID_Rumbling2 = id(SndPtr_Rumbling2) ; E1 SndID_CNZLaunch = id(SndPtr_CNZLaunch) ; E2 SndID_Flipper = id(SndPtr_Flipper) ; E3 SndID_HTZLiftClick = id(SndPtr_HTZLiftClick) ; E4 SndID_Leaves = id(SndPtr_Leaves) ; E5 SndID_MegaMackDrop = id(SndPtr_MegaMackDrop) ; E6 SndID_DrawbridgeMove = id(SndPtr_DrawbridgeMove) ; E7 SndID_QuickDoorSlam = id(SndPtr_QuickDoorSlam) ; E8 SndID_DrawbridgeDown = id(SndPtr_DrawbridgeDown) ; E9 SndID_LaserBurst = id(SndPtr_LaserBurst) ; EA SndID_Scatter = id(SndPtr_Scatter) ; EB SndID_LaserFloor = id(SndPtr_LaserFloor) ; EB SndID_Teleport = id(SndPtr_Teleport) ; EC SndID_Error = id(SndPtr_Error) ; ED SndID_MechaSonicBuzz = id(SndPtr_MechaSonicBuzz) ; EE SndID_LargeLaser = id(SndPtr_LargeLaser) ; EF SndID_OilSlide = id(SndPtr_OilSlide) ; F0 SndID__End = id(SndPtr__End) ; F1

   if MOMPASS == 2

if SndID__End > MusID_StopSFX fatal "You have too many SndPtrs. SndID__End ($\{SndID__End}) can't exceed MusID_StopSFX ($\{MusID_StopSFX})." endif

   endif

</asm> Yikes! that last section about IDs really has to go! But on another note, this code seems best for the Sonic 2 driver, it needs fixing.

SCHG How-To Guide: Sonic the Hedgehog 2 (16-bit)
Fixing Bugs
Fix Demo Playback | Fix a Race Condition with Pattern Load Cues | Fix Super Sonic Bugs | Use Correct Height When Roll Jumping | Fix Jump Height Bug When Exiting Water | Fix Screen Boundary Spin Dash Bug | Correct Drowning Bugs | Fix Camera Y Position for Tails | Fix Tails Subanimation Error | Fix Tails' Respawn Speeds | Fix Accidental Deletion of Scattered Rings | Fix Ring Timers | Fix Rexon Crash | Fix Monitor Collision Bug | Fix EHZ Deformation Bug | Correct CPZ Boss Attack Behavior | Fix Bug in ARZ Boss Arrow's Platform Behavior | Fix ARZ Boss Walking on Air Glitch | Fix ARZ Boss Sprite Behavior | Fix Multiple CNZ Boss Bugs | Fix HTZ Background Scrolling Mountains | Fix OOZ Launcher Speed Up Glitch | Fix DEZ Giant Mech Collision Glitch | Fix Boss Deconstruction Behavior | Fix Speed Bugs | Fix 14 Continues Cheat | Fix Debug Mode Crash | Fix 99+ Lives | Fix Sonic 2's Sega Screen
Design Choices
Remove the Air Speed Cap | Disable Floor Collision While Dying | Modify Super Sonic Transformation Methods & Behavior | Enable/Disable Tails in Certain Levels | Collide with Water After Being Hurt | Retain Rings When Returning at a Star Post | Improve the Fade In\Fade Out Progression Routines | Fix Scattered Rings' Underwater Physics | Insert LZ Water Ripple Effect | Restore Lost CPZ Boss Feature | Prevent SCZ Tornado Spin Dash Death | Improve ObjectMove Subroutines | Port S3K Rings Manager | Port S3K Object Manager | Port S3K Priority Manager | Edit Level Order with ASM‎ | Alter Ring Requirements in Special Stages | Make Special Stage Characters Use Normal DPLCs | Speed Up Ring Loss Process | Change spike behaviour in Sonic 2
Adding Features
Create Insta-kill and High Jump Monitors | Create Clone and Special Stage Monitors | Port Knuckles
Sound Features
Expand Music Index to Start at $00 | Port Sonic 1 Sound Driver | Port Sonic 2 Clone Driver | Port Sonic 3 Sound Driver | Port Flamewing's Sonic 3 & Knuckles Sound Driver | Expand the Music Index to Start at $00 (Sonic 2 Clone Driver Version) | Play Different Songs Per Act
Extending the Game
Extend the Level Index Past $10 | Extend the Level Select | Extend Water Tables | Add Extra Characters | Free Up 2 Universal SSTs