summaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
Diffstat (limited to 'audio')
-rwxr-xr-xaudio/music1.asm1891
-rwxr-xr-xaudio/music1_headers.asm281
-rwxr-xr-xaudio/music2.asm1885
-rwxr-xr-xaudio/music2_headers.asm281
-rwxr-xr-xaudio/noise_instruments.asm37
-rwxr-xr-xaudio/sfx.asm599
-rwxr-xr-xaudio/sfx_headers.asm494
-rwxr-xr-xaudio/vibrato_types.asm44
-rwxr-xr-xaudio/wave_instruments.asm20
9 files changed, 5532 insertions, 0 deletions
diff --git a/audio/music1.asm b/audio/music1.asm
new file mode 100755
index 0000000..0e1767b
--- /dev/null
+++ b/audio/music1.asm
@@ -0,0 +1,1891 @@
+SetupSound_Ext:: ; f4000 (3d:4000)
+ jp Func_f407d
+
+SoundTimerHandler_Ext:: ; f4003 (3d:4003)
+ jp Func_f40e9
+
+Func_f4006:: ; f4006 (3d:4006)
+ jp Func_f4021
+
+Func_f4009:: ; f4009 (3d:4009)
+ jp Func_f402d
+
+Func_f400c:: ; f400c (3d:400c)
+ jp Func_f404e
+
+Func_f400f:: ; f400f (3d:400f)
+ jp Func_f4052
+
+Func_f4012:: ; f4012 (3d:4012)
+ jp Func_f405c
+
+Func_f4015:: ; f4015 (3d:4015)
+ jp Func_f4066
+
+Func_f4018:: ; f4018 (3d:4018)
+ jp Func_f406f
+
+Func_f401b:: ; f401b (3d:401b)
+ jp Func_f49c4
+
+Func_f401e:: ; f401e (3d:401e)
+ jp Func_f49d0
+
+Func_f4021: ; f4021 (3d:4021)
+ push hl
+ ld hl, NumberOfSongs1
+ cp [hl]
+ jr nc, .asm_f402b
+ ld [$dd80], a
+.asm_f402b
+ pop hl
+ ret
+
+Func_f402d: ; f402d (3d:402d)
+ push bc
+ push hl
+ ld b, $0
+ ld c, a
+ or a
+ jr z, .asm_f4043
+ ld hl, Unknown_f4e85
+ add hl, bc
+ ld b, [hl]
+ ld a, [$dd83]
+ or a
+ jr z, .asm_f4043
+ cp b
+ jr c, .asm_f404b
+.asm_f4043
+ ld a, b
+ ld [$dd83], a
+ ld a, c
+ ld [$dd82], a
+.asm_f404b
+ pop hl
+ pop bc
+ ret
+
+Func_f404e: ; f404e (3d:404e)
+ ld [$ddf0], a
+ ret
+
+Func_f4052: ; f4052 (3d:4052)
+ ld a, [$dd80]
+ cp $80
+ ld a, $1
+ ret nz
+ xor a
+ ret
+
+Func_f405c: ; f405c (3d:405c)
+ ld a, [$dd82]
+ cp $80
+ ld a, $1
+ ret nz
+ xor a
+ ret
+
+Func_f4066: ; f4066 (3d:4066)
+ ld a, [$ddf2]
+ xor $1
+ ld [$ddf2], a
+ ret
+
+Func_f406f: ; f406f (3d:406f)
+ push bc
+ push af
+ and $7
+ ld b, a
+ swap b
+ or b
+ ld [$ddf1], a
+ pop af
+ pop bc
+ ret
+
+Func_f407d: ; f407d (3d:407d)
+ xor a
+ ld [rNR52], a
+ ld a, $80
+ ld [rNR52], a
+ ld a, $77
+ ld [rNR50], a
+ ld a, $ff
+ ld [rNR51], a
+ ld a, $3d
+ ld [$dd81], a
+ ld a, $80
+ ld [$dd80], a
+ ld [$dd82], a
+ ld a, $77
+ ld [$ddf1], a
+ xor a
+ ld [$dd8c], a
+ ld [$de53], a
+ ld [wMusicWaveChange], a
+ ld [$ddef], a
+ ld [$ddf0], a
+ ld [$ddf2], a
+ dec a
+ ld [wMusicDC], a
+ ld de, $0001
+ ld bc, $0000
+.asm_f40bb
+ ld hl, wMusicIsPlaying
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicTie
+ add hl, bc
+ ld [hl], d
+ ld hl, $ddb3
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicEC
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicE8
+ add hl, bc
+ ld [hl], d
+ inc c
+ ld a, c
+ cp $4
+ jr nz, .asm_f40bb
+ ld hl, Unknown_f4c20
+ ld bc, wMusicReturnAddress
+ ld d, $8
+.asm_f40e2
+ ld a, [hli]
+ ld [bc], a
+ inc bc
+ dec d
+ jr nz, .asm_f40e2
+ ret
+
+Func_f40e9: ; f40e9 (3d:40e9)
+ call Func_f42a4
+ call Func_f411c
+ ld hl, Func_fc003
+ call Bankswitch3dTo3f
+ ld a, [$dd81]
+ ld [hBankROM], a
+ ld [MBC3RomBank], a
+ ld a, [$ddf2]
+ cp $0
+ jr z, .asm_f4109
+ call Func_f4980
+ jr .asm_f4115
+.asm_f4109
+ call Func_f42a5
+ call Func_f430a
+ call Func_f436f
+ call Func_f43ce
+.asm_f4115
+ call Func_f4866
+ call Func_f49b1
+ ret
+
+Func_f411c: ; f411c (3d:411c)
+ ld a, [$dd80]
+ rla
+ jr c, .asm_f4133
+ call Func_f414b
+ ld a, [$dd80]
+ call Music1_PlaySong
+ ld a, [$dd80]
+ or $80
+ ld [$dd80], a
+.asm_f4133
+ ld a, [$dd82]
+ rla
+ jr c, .asm_f414a
+ ld a, [$dd82]
+ ld hl, Func_fc000
+ call Bankswitch3dTo3f
+ ld a, [$dd82]
+ or $80
+ ld [$dd82], a
+.asm_f414a
+ ret
+
+Func_f414b: ; f414b (3d:414b)
+ ld a, [$dd8c]
+ ld d, a
+ xor a
+ ld [wMusicIsPlaying], a
+ bit 0, d
+ jr nz, .asm_f415f
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f415f
+ xor a
+ ld [$dd8e], a
+ bit 1, d
+ jr nz, .asm_f416f
+ ld a, $8
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f416f
+ xor a
+ ld [$dd90], a
+ bit 3, d
+ jr nz, .asm_f417f
+ ld a, $8
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f417f
+ xor a
+ ld [$dd8f], a
+ bit 2, d
+ jr nz, .asm_f418b
+ ld a, $0
+ ld [rNR32], a
+.asm_f418b
+ ret
+
+; plays the song given by the id in a
+Music1_PlaySong: ; f418c (3d:418c)
+ push af
+ ld c, a
+ ld b, $0
+ ld hl, SongBanks1
+ add hl, bc
+ ld a, [hl]
+ ld [$dd81], a
+ ld [hBankROM], a
+ ld [MBC3RomBank], a
+ pop af
+ add a
+ ld c, a
+ ld b, $0
+ ld hl, SongHeaderPointers1
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld h, [hl]
+ ld l, e
+ ld e, [hl]
+ inc hl
+ ld b, h
+ ld c, l
+ rr e
+ jr nc, .asm_f41eb
+ ld a, [bc]
+ inc bc
+ ld [$dd95], a
+ ld [wMusicMainLoop], a
+ ld a, [bc]
+ inc bc
+ ld [$dd96], a
+ ld [$dd9e], a
+ ld a, $1
+ ld [$ddbb], a
+ ld [wMusicIsPlaying], a
+ xor a
+ ld [wMusicTie], a
+ ld [wMusicE4], a
+ ld [wMusicE8], a
+ ld [wMusicVibratoDelay], a
+ ld [wMusicEC], a
+ ld a, [Unknown_f4c20]
+ ld [wMusicReturnAddress], a
+ ld a, [Unknown_f4c20 + 1]
+ ld [$ddf4], a
+ ld a, $8
+ ld [wMusicE9], a
+.asm_f41eb
+ rr e
+ jr nc, .asm_f4228
+ ld a, [bc]
+ inc bc
+ ld [$dd97], a
+ ld [$dd9f], a
+ ld a, [bc]
+ inc bc
+ ld [$dd98], a
+ ld [$dda0], a
+ ld a, $1
+ ld [$ddbc], a
+ ld [$dd8e], a
+ xor a
+ ld [$dd92], a
+ ld [$ddeb], a
+ ld [$ddc0], a
+ ld [$dde0], a
+ ld [$ddcc], a
+ ld a, [Unknown_f4c20 + 2]
+ ld [$ddf5], a
+ ld a, [Unknown_f4c20 + 3]
+ ld [$ddf6], a
+ ld a, $8
+ ld [$ddc8], a
+.asm_f4228
+ rr e
+ jr nc, .asm_f4265
+ ld a, [bc]
+ inc bc
+ ld [$dd99], a
+ ld [$dda1], a
+ ld a, [bc]
+ inc bc
+ ld [$dd9a], a
+ ld [$dda2], a
+ ld a, $1
+ ld [$ddbd], a
+ ld [$dd8f], a
+ xor a
+ ld [$dd93], a
+ ld [$ddec], a
+ ld [$ddc1], a
+ ld [$dde1], a
+ ld [$ddcd], a
+ ld a, [Unknown_f4c20 + 4]
+ ld [$ddf7], a
+ ld a, [Unknown_f4c20 + 5]
+ ld [$ddf8], a
+ ld a, $40
+ ld [$ddc9], a
+.asm_f4265
+ rr e
+ jr nc, .asm_f429f
+ ld a, [bc]
+ inc bc
+ ld [$dd9b], a
+ ld [$dda3], a
+ ld a, [bc]
+ inc bc
+ ld [$dd9c], a
+ ld [$dda4], a
+ ld a, $1
+ ld [$ddbe], a
+ ld [$dd90], a
+ xor a
+ ld [$dd94], a
+ ld [$ddc2], a
+ ld [$dde2], a
+ ld [$ddce], a
+ ld a, [Unknown_f4c20 + 6]
+ ld [$ddf9], a
+ ld a, [Unknown_f4c20 + 7]
+ ld [$ddfa], a
+ ld a, $40
+ ld [$ddca], a
+.asm_f429f
+ xor a
+ ld [$ddf2], a
+ ret
+
+Func_f42a4: ; f42a4 (3d:42a4)
+ ret
+
+Func_f42a5: ; f42a5 (3d:42a5)
+ ld a, [wMusicIsPlaying]
+ or a
+ jr z, .asm_f42fa
+ ld a, [$ddb7]
+ cp $0
+ jr z, .asm_f42d4
+ ld a, [$ddc3]
+ dec a
+ ld [$ddc3], a
+ jr nz, .asm_f42d4
+ ld a, [$ddbb]
+ cp $1
+ jr z, .asm_f42d4
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f42d4
+ ld hl, rNR12
+ ld a, [wMusicE9]
+ ld [hli], a
+ inc hl
+ ld a, $80
+ ld [hl], a
+.asm_f42d4
+ ld a, [$ddbb]
+ dec a
+ ld [$ddbb], a
+ jr nz, .asm_f42f4
+ ld a, [$dd96]
+ ld h, a
+ ld a, [$dd95]
+ ld l, a
+ ld bc, $0000
+ call Music1_PlayNextNote
+ ld a, [wMusicIsPlaying]
+ or a
+ jr z, .asm_f42fa
+ call Func_f4714
+.asm_f42f4
+ ld a, $0
+ call Func_f485a
+ ret
+.asm_f42fa
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f4309
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f4309
+ ret
+
+Func_f430a: ; f430a (3d:430a)
+ ld a, [$dd8e]
+ or a
+ jr z, .asm_f435f
+ ld a, [$ddb8]
+ cp $0
+ jr z, .asm_f4339
+ ld a, [$ddc4]
+ dec a
+ ld [$ddc4], a
+ jr nz, .asm_f4339
+ ld a, [$ddbc]
+ cp $1
+ jr z, .asm_f4339
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f4339
+ ld hl, rNR22
+ ld a, [$ddc8]
+ ld [hli], a
+ inc hl
+ ld a, $80
+ ld [hl], a
+.asm_f4339
+ ld a, [$ddbc]
+ dec a
+ ld [$ddbc], a
+ jr nz, .asm_f4359
+ ld a, [$dd98]
+ ld h, a
+ ld a, [$dd97]
+ ld l, a
+ ld bc, $0001
+ call Music1_PlayNextNote
+ ld a, [$dd8e]
+ or a
+ jr z, .asm_f435f
+ call Func_f475a
+.asm_f4359
+ ld a, $1
+ call Func_f485a
+ ret
+.asm_f435f
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f436e
+ ld a, $8
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f436e
+ ret
+
+Func_f436f: ; f436f (3d:436f)
+ ld a, [$dd8f]
+ or a
+ jr z, .asm_f43be
+ ld a, [$ddb9]
+ cp $0
+ jr z, .asm_f4398
+ ld a, [$ddc5]
+ dec a
+ ld [$ddc5], a
+ jr nz, .asm_f4398
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f4398
+ ld a, [$ddbd]
+ cp $1
+ jr z, .asm_f4398
+ ld a, [$ddc9]
+ ld [rNR32], a
+.asm_f4398
+ ld a, [$ddbd]
+ dec a
+ ld [$ddbd], a
+ jr nz, .asm_f43b8
+ ld a, [$dd9a]
+ ld h, a
+ ld a, [$dd99]
+ ld l, a
+ ld bc, $0002
+ call Music1_PlayNextNote
+ ld a, [$dd8f]
+ or a
+ jr z, .asm_f43be
+ call Func_f479c
+.asm_f43b8
+ ld a, $2
+ call Func_f485a
+ ret
+.asm_f43be
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f43cd
+ ld a, $0
+ ld [rNR32], a
+ ld a, $80
+ ld [rNR34], a
+.asm_f43cd
+ ret
+
+Func_f43ce: ; f43ce (3d:43ce)
+ ld a, [$dd90]
+ or a
+ jr z, .asm_f4400
+ ld a, [$ddbe]
+ dec a
+ ld [$ddbe], a
+ jr nz, .asm_f43f6
+ ld a, [$dd9c]
+ ld h, a
+ ld a, [$dd9b]
+ ld l, a
+ ld bc, $0003
+ call Music1_PlayNextNote
+ ld a, [$dd90]
+ or a
+ jr z, .asm_f4400
+ call Func_f480a
+ jr .asm_f4413
+.asm_f43f6
+ ld a, [$ddef]
+ or a
+ jr z, .asm_f4413
+ call Func_f4839
+ ret
+.asm_f4400
+ ld a, [$dd8c]
+ bit 3, a
+ jr nz, .asm_f4413
+ xor a
+ ld [$ddef], a
+ ld a, $8
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f4413
+ ret
+
+Music1_PlayNextNote: ; f4414 (3d:4414)
+ ld a, [hli]
+ push hl
+ push af
+ cp $d0
+ jr c, Music1_note
+ sub $d0
+ add a
+ ld e, a
+ ld d, $0
+ ld hl, Music1_CommandTable
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld h, d
+ ld l, e
+ pop af
+ jp [hl]
+
+Music1_CommandTable: ; f442c (3d:442c)
+ dw Music1_speed
+ dw Music1_octave
+ dw Music1_octave
+ dw Music1_octave
+ dw Music1_octave
+ dw Music1_octave
+ dw Music1_octave
+ dw Music1_inc_octave
+ dw Music1_dec_octave
+ dw Music1_tie
+ dw Music1_end
+ dw Music1_end
+ dw Music1_musicdc
+ dw Music1_MainLoop
+ dw Music1_EndMainLoop
+ dw Music1_Loop
+ dw Music1_EndLoop
+ dw Music1_jp
+ dw Music1_call
+ dw Music1_ret
+ dw Music1_musice4
+ dw Music1_duty
+ dw Music1_volume
+ dw Music1_wave
+ dw Music1_musice8
+ dw Music1_musice9
+ dw Music1_vibrato_type
+ dw Music1_vibrato_delay
+ dw Music1_musicec
+ dw Music1_musiced
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+ dw Music1_end
+
+Music1_note: ; f448c (3d:448c)
+ push af
+ ld a, [hl]
+ ld e, a
+ ld hl, wMusicTie
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f44b0
+ ld [hl], $1
+ xor a
+ ld hl, $dddb
+ add hl, bc
+ ld [hl], a
+ ld hl, $dde3
+ add hl, bc
+ ld [hl], a
+ inc [hl]
+ ld hl, wMusicVibratoType2
+ add hl, bc
+ ld a, [hl]
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+.asm_f44b0
+ pop af
+ push de
+ ld hl, wMusicSpeed
+ add hl, bc
+ ld d, [hl]
+ and $f
+ inc a
+ cp d
+ jr nc, .asm_f44c0
+ ld e, a
+ ld a, d
+ ld d, e
+.asm_f44c0
+ ld e, a
+.asm_f44c1
+ dec d
+ jr z, .asm_f44c7
+ add e
+ jr .asm_f44c1
+.asm_f44c7
+ ld hl, $ddbb
+ add hl, bc
+ ld [hl], a
+ pop de
+ ld d, a
+ ld a, e
+ cp $d9
+ ld a, d
+ jr z, .asm_f44fb
+ ld e, a
+ ld hl, wMusicE8
+ add hl, bc
+ ld a, [hl]
+ cp $8
+ ld d, a
+ ld a, e
+ jr z, .asm_f44fb
+ push hl
+ push bc
+ ld b, $0
+ ld c, a
+ ld hl, $0000
+.asm_f44e8
+ add hl, bc
+ dec d
+ jr nz, .asm_f44e8
+ srl h
+ rr l
+ srl h
+ rr l
+ srl h
+ rr l
+ ld a, l
+ pop bc
+ pop hl
+.asm_f44fb
+ ld hl, $ddc3
+ add hl, bc
+ ld [hl], a
+ pop af
+ and $f0
+ ld hl, $ddb7
+ add hl, bc
+ ld [hl], a
+ or a
+ jr nz, .asm_f450e
+ jp .asm_f458e
+.asm_f450e
+ swap a
+ dec a
+ ld h, a
+ ld a, $3
+ cp c
+ ld a, h
+ jr z, .asm_f451a
+ jr .asm_f4564
+.asm_f451a
+ push af
+ ld hl, wMusicOctave
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ sla a
+ add d
+ sla a
+ sla a
+ sla a
+ ld e, a
+ pop af
+ ld hl, Music1_NoiseInstruments
+ add a
+ ld d, c
+ ld c, a
+ add hl, bc
+ ld c, e
+ add hl, bc
+ ld c, d
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hli]
+ ld d, a
+ ld a, [wMusicDC]
+ and $77
+ or d
+ ld [wMusicDC], a
+ ld de, $ddab
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, b
+ ld [de], a
+ ld b, $0
+ ld a, l
+ ld d, h
+ ld hl, $dded
+ ld [hli], a
+ ld [hl], d
+ ld a, $1
+ ld [$ddef], a
+ jr .asm_f458e
+.asm_f4564
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ push hl
+ ld hl, wMusicOctave
+ add hl, bc
+ ld e, [hl]
+ ld d, $0
+ ld hl, Unknown_f4c28
+ add hl, de
+ add a
+ ld e, [hl]
+ add e
+ ld hl, wMusicEC
+ add hl, bc
+ ld e, [hl]
+ add e
+ add e
+ ld e, a
+ ld hl, Unknown_f4c30
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ call Func_f4967
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+.asm_f458e
+ pop de
+ ld hl, $dd95
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+Music1_speed: ; f4598 (3d:4598)
+ pop hl
+ ld a, [hli]
+ push hl
+ ld hl, wMusicSpeed
+ add hl, bc
+ ld [hl], a
+ jp Music1_PlayNextNote_pop
+
+Music1_octave: ; f45a3 (3d:45a3)
+ and $7
+ dec a
+ ld hl, wMusicOctave
+ add hl, bc
+ push af
+ ld a, c
+ cp $2
+ jr nz, .asm_f45b6
+ pop af
+ inc a
+ ld [hl], a
+ jp Music1_PlayNextNote_pop
+.asm_f45b6
+ pop af
+ ld [hl], a
+ jp Music1_PlayNextNote_pop
+
+Music1_inc_octave: ; f45bb (3d:45bb)
+ ld hl, wMusicOctave
+ add hl, bc
+ inc [hl]
+ jp Music1_PlayNextNote_pop
+
+Music1_dec_octave: ; f45c3 (3d:45c3)
+ ld hl, wMusicOctave
+ add hl, bc
+ dec [hl]
+ jp Music1_PlayNextNote_pop
+
+Music1_tie: ; f45cb (3d:45cb)
+ ld hl, wMusicTie
+ add hl, bc
+ ld [hl], $80
+ jp Music1_PlayNextNote_pop
+
+Music1_musicdc: ; f45d4 (3d:45d4)
+ pop hl
+ ld a, [hli]
+ push hl
+ push bc
+ inc c
+ ld e, $ee
+.asm_f45db
+ dec c
+ jr z, .asm_f45e3
+ rlca
+ rlc e
+ jr .asm_f45db
+.asm_f45e3
+ ld d, a
+ ld hl, wMusicDC
+ ld a, [hl]
+ and e
+ or d
+ ld [hl], a
+ pop bc
+ jp Music1_PlayNextNote_pop
+
+Music1_MainLoop: ; f45ef (3d:45ef)
+ pop de
+ push de
+ dec de
+ ld hl, wMusicMainLoop
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ jp Music1_PlayNextNote_pop
+
+Music1_EndMainLoop: ; f45fd (3d:45fd)
+ pop hl
+ ld hl, wMusicMainLoop
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp Music1_PlayNextNote
+
+Music1_Loop: ; f4609 (3d:4609)
+ pop de
+ ld a, [de]
+ inc de
+ push af
+ call Music1_GetReturnAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+ pop af
+ ld [hl], a
+ inc hl
+ push de
+ call Music1_SetReturnAddress
+ jp Music1_PlayNextNote_pop
+
+Music1_EndLoop: ; f461e (3d:461e)
+ call Music1_GetReturnAddress
+ dec hl
+ ld a, [hl]
+ dec a
+ jr z, .asm_f4630
+ ld [hld], a
+ ld d, [hl]
+ dec hl
+ ld e, [hl]
+ pop hl
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+.asm_f4630
+ dec hl
+ dec hl
+ call Music1_SetReturnAddress
+ jp Music1_PlayNextNote_pop
+
+Music1_jp: ; f4638 (3d:4638)
+ pop hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp Music1_PlayNextNote
+
+Music1_call: ; f463f (3d:463f)
+ call Music1_GetReturnAddress
+ pop de
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ ld a, [de]
+ ld b, a
+ inc de
+ ld a, [de]
+ ld d, a
+ ld e, b
+ ld b, $0
+ push de
+ call Music1_SetReturnAddress
+ jp Music1_PlayNextNote_pop
+
+Music1_ret: ; f4656 (3d:4656)
+ pop de
+ call Music1_GetReturnAddress
+ dec hl
+ ld a, [hld]
+ ld e, [hl]
+ ld d, a
+ inc de
+ inc de
+ push de
+ call Music1_SetReturnAddress
+ jp Music1_PlayNextNote_pop
+
+Music1_musice4: ; f4667 (3d:4667)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE4
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_duty: ; f4674 (3d:4674)
+ pop de
+ ld a, [de]
+ and $c0
+ inc de
+ ld hl, wMusicDuty
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_volume: ; f4683 (3d:4683)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVolume
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_wave: ; f4690 (3d:4690)
+ pop de
+ ld a, [de]
+ inc de
+ ld [wMusicWave], a
+ ld a, $1
+ ld [wMusicWaveChange], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_musice8: ; f46a0 (3d:46a0)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE8
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_musice9: ; f46ad (3d:46ad)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE9
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_vibrato_type: ; f46ba (3d:46ba)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+ ld hl, wMusicVibratoType2
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_vibrato_delay: ; f46cc (3d:46cc)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVibratoDelay
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_musicec: ; f46d9 (3d:46d9)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicEC
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_musiced: ; f46e6 (3d:46e6)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicEC
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music1_PlayNextNote
+
+Music1_end: ; f46f4 (3d:46f4)
+ ld hl, wMusicIsPlaying
+ add hl, bc
+ ld [hl], $0
+ pop hl
+ ret
+
+; returns the address where the address to
+; return to is stored for the current channel
+Music1_GetReturnAddress: ; f46fc (3d:46fc)
+ ld hl, wMusicReturnAddress
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+; puts the address in hl where the address to
+; return to is stored for the currentchannel
+Music1_SetReturnAddress: ; f4705 (3d:4705)
+ ld d, h
+ ld e, l
+ ld hl, wMusicReturnAddress
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+Music1_PlayNextNote_pop ; f4710 (3d:4710)
+ pop hl
+ jp Music1_PlayNextNote
+
+Func_f4714: ; f4714 (3d:4714)
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f4749
+ ld a, [$ddb7]
+ cp $0
+ jr z, .asm_f474a
+ ld d, $0
+ ld hl, wMusicTie
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f4733
+ ld a, [wMusicVolume]
+ ld [rNR12], a
+ ld d, $80
+.asm_f4733
+ ld [hl], $2
+ ld a, $8
+ ld [rNR10], a
+ ld a, [wMusicDuty]
+ ld [rNR11], a
+ ld a, [$dda5]
+ ld [rNR13], a
+ ld a, [$dda6]
+ or d
+ ld [rNR14], a
+.asm_f4749
+ ret
+.asm_f474a
+ ld hl, wMusicTie
+ ld [hl], $0
+ ld hl, rNR12
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f475a: ; f475a (3d:475a)
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f478b
+ ld a, [$ddb8]
+ cp $0
+ jr z, .asm_f478c
+ ld d, $0
+ ld hl, $dd92
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f4779
+ ld a, [$dde8]
+ ld [rNR22], a
+ ld d, $80
+.asm_f4779
+ ld [hl], $2
+ ld a, [$dd87]
+ ld [rNR21], a
+ ld a, [$dda7]
+ ld [rNR23], a
+ ld a, [$dda8]
+ or d
+ ld [rNR24], a
+.asm_f478b
+ ret
+.asm_f478c
+ ld hl, $dd92
+ ld [hl], $0
+ ld hl, rNR22
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f479c: ; f479c (3d:479c)
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f47e0
+ ld d, $0
+ ld a, [wMusicWaveChange]
+ or a
+ jr z, .asm_f47b3
+ xor a
+ ld [rNR30], a
+ call Func_f47ea
+ ld d, $80
+.asm_f47b3
+ ld a, [$ddb9]
+ cp $0
+ jr z, .asm_f47e1
+ ld hl, $dd93
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f47cc
+ ld a, [$dde9]
+ ld [rNR32], a
+ xor a
+ ld [rNR30], a
+ ld d, $80
+.asm_f47cc
+ ld [hl], $2
+ xor a
+ ld [rNR31], a
+ ld a, [$dda9]
+ ld [rNR33], a
+ ld a, $80
+ ld [rNR30], a
+ ld a, [$ddaa]
+ or d
+ ld [rNR34], a
+.asm_f47e0
+ ret
+.asm_f47e1
+ ld hl, wMusicTie
+ ld [hl], $0
+ xor a
+ ld [rNR30], a
+ ret
+
+Func_f47ea: ; f479c (3d:47ea)
+ ld a, [wMusicWave]
+ add a
+ ld d, $0
+ ld e, a
+ ld hl, Music1_WaveInstruments
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld b, d
+ ld de, $ff30
+.asm_f47fc
+ ld a, [hli]
+ ld [de], a
+ inc de
+ inc b
+ ld a, b
+ cp $10
+ jr nz, .asm_f47fc
+ xor a
+ ld [wMusicWaveChange], a
+ ret
+
+Func_f480a: ; f480a (3d:480a)
+ ld a, [$dd8c]
+ bit 3, a
+ jr nz, .asm_f4829
+ ld a, [$ddba]
+ cp $0
+ jr z, asm_f482a
+ ld de, rNR41
+ ld hl, $ddab
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+.asm_f4829
+ ret
+asm_f482a
+ xor a
+ ld [$ddef], a
+ ld hl, rNR42
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f4839: ; f4839 (3d:4839)
+ ld a, [$dd8c]
+ bit 3, a
+ jr z, .asm_f4846
+ xor a
+ ld [$ddef], a
+ jr .asm_f4859
+.asm_f4846
+ ld hl, $dded
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ld a, [de]
+ cp $ff
+ jr nz, .asm_f4853
+ jr asm_f482a
+.asm_f4853
+ ld [rNR43], a
+ inc de
+ ld a, d
+ ld [hld], a
+ ld [hl], e
+.asm_f4859
+ ret
+
+Func_f485a: ; f485a (3d:485a)
+ push af
+ ld b, $0
+ ld c, a
+ call Func_f4898
+ pop af
+ call Func_f490b
+ ret
+
+Func_f4866: ; f4866 (3d:4866)
+ ld a, [$ddf1]
+ ld [rNR50], a
+ ld a, [$dd8c]
+ or a
+ ld hl, wMusicDC
+ ld a, [hli]
+ jr z, .asm_f4888
+ ld a, [$dd8c]
+ and $f
+ ld d, a
+ swap d
+ or d
+ ld d, a
+ xor $ff
+ ld e, a
+ ld a, [hld]
+ and d
+ ld d, a
+ ld a, [hl]
+ and e
+ or d
+.asm_f4888
+ ld d, a
+ ld a, [$ddf0]
+ xor $ff
+ and $f
+ ld e, a
+ swap e
+ or e
+ and d
+ ld [rNR51], a
+ ret
+
+Func_f4898: ; f4898 (3d:4898)
+ ld hl, wMusicVibratoDelay
+ add hl, bc
+ ld a, [hl]
+ cp $0
+ jr z, .asm_f4902
+ ld hl, $dde3
+ add hl, bc
+ cp [hl]
+ jr z, .asm_f48ab
+ inc [hl]
+ jr .asm_f4902
+.asm_f48ab
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld e, [hl]
+ ld d, $0
+ ld hl, Music1_VibratoTypes
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ push hl
+ ld hl, $dddb
+ add hl, bc
+ ld d, $0
+ ld e, [hl]
+ inc [hl]
+ pop hl
+ add hl, de
+ ld a, [hli]
+ cp $80
+ jr z, .asm_f48ee
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ bit 7, a
+ jr nz, .asm_f48df
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ and $7
+ ld d, a
+ ret
+.asm_f48df
+ xor $ff
+ inc a
+ push bc
+ ld c, a
+ ld a, e
+ sub c
+ ld e, a
+ ld a, d
+ sbc b
+ and $7
+ ld d, a
+ pop bc
+ ret
+.asm_f48ee
+ push hl
+ ld hl, $dddb
+ add hl, bc
+ ld [hl], $0
+ pop hl
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f48ab
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+ jr .asm_f48ab
+.asm_f4902
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ret
+
+Func_f490b: ; f490b (3d:490b)
+ cp $0
+ jr nz, .asm_f492c
+ ld a, [wMusicVibratoDelay]
+ cp $0
+ jr z, .asm_f4966
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f4966
+ ld a, e
+ ld [rNR13], a
+ ld a, [rNR11]
+ and $c0
+ ld [rNR11], a
+ ld a, d
+ and $3f
+ ld [rNR14], a
+ ret
+.asm_f492c
+ cp $1
+ jr nz, .asm_f494b
+ ld a, [$dde0]
+ cp $0
+ jr z, .asm_f4966
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f4966
+ ld a, e
+ ld [rNR23], a
+ ld a, [rNR21]
+ and $c0
+ ld [rNR21], a
+ ld a, d
+ ld [rNR24], a
+ ret
+.asm_f494b
+ cp $2
+ jr nz, .asm_f4966
+ ld a, [$dde1]
+ cp $0
+ jr z, .asm_f4966
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f4966
+ ld a, e
+ ld [rNR33], a
+ xor a
+ ld [rNR31], a
+ ld a, d
+ ld [rNR34], a
+.asm_f4966
+ ret
+
+Func_f4967: ; f4967 (3d:4967)
+ ld hl, wMusicE4
+ add hl, bc
+ ld a, [hl]
+ bit 7, a
+ jr nz, .asm_f4976
+ add e
+ ld e, a
+ ld a, d
+ adc b
+ ld d, a
+ ret
+.asm_f4976
+ xor $ff
+ ld h, a
+ ld a, e
+ sub h
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ret
+
+Func_f4980: ; f4980 (3d:4980)
+ ld a, [$dd8c]
+ ld d, a
+ bit 0, d
+ jr nz, .asm_f4990
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f4990
+ bit 1, d
+ jr nz, .asm_f499c
+ swap a
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f499c
+ bit 3, d
+ jr nz, .asm_f49a8
+ swap a
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f49a8
+ bit 2, d
+ jr nz, .asm_f49b0
+ ld a, $0
+ ld [rNR32], a
+.asm_f49b0
+ ret
+
+Func_f49b1: ; f49b1 (3d:49b1)
+ ld hl, wMusicIsPlaying
+ xor a
+ add [hl]
+ inc hl
+ add [hl]
+ inc hl
+ add [hl]
+ inc hl
+ add [hl]
+ or a
+ ret nz
+ ld a, $80
+ ld [$dd80], a
+ ret
+
+Func_f49c4: ; f49c4 (3d:49c4)
+ di
+ call Func_f4980
+ call Func_f49dc
+ call Func_f414b
+ ei
+ ret
+
+Func_f49d0: ; f49d0 (3d:49d0)
+ di
+ call Func_f4980
+ call Func_f414b
+ call Func_f4b01
+ ei
+ ret
+
+Func_f49dc: ; f49dc (3d:49dc)
+ ld a, [$dd80]
+ ld [$de55], a
+ ld a, [$dd81]
+ ld [$de56], a
+ ld a, [wMusicDC]
+ ld [$de57], a
+ ld hl, wMusicDuty
+ ld de, $de58
+ ld a, $4
+ call Music1_CopyData
+ ld a, [wMusicWave]
+ ld [$de5c], a
+ ld a, [wMusicWaveChange]
+ ld [$de5d], a
+ ld hl, wMusicIsPlaying
+ ld de, $de5e
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicTie
+ ld de, $de62
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $dd95
+ ld de, $de66
+ ld a, $8
+ call Music1_CopyData
+ ld hl, wMusicMainLoop
+ ld de, $de6e
+ ld a, $8
+ call Music1_CopyData
+ ld a, [$ddab]
+ ld [$de76], a
+ ld a, [$ddac]
+ ld [$de77], a
+ ld hl, wMusicOctave
+ ld de, $de78
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $ddb3
+ ld de, $de7c
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $ddb7
+ ld de, $de80
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $ddbb
+ ld de, $de84
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicE8
+ ld de, $de88
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $ddc3
+ ld de, $de8c
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicE9
+ ld de, $de90
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicEC
+ ld de, $de94
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicSpeed
+ ld de, $de98
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicVibratoType2
+ ld de, $de9c
+ ld a, $4
+ call Music1_CopyData
+ ld hl, wMusicVibratoDelay
+ ld de, $dea0
+ ld a, $4
+ call Music1_CopyData
+ ld a, $0
+ ld [$dddb], a
+ ld [$dddc], a
+ ld [$dddd], a
+ ld [$ddde], a
+ ld hl, wMusicVolume
+ ld de, $dea4
+ ld a, $3
+ call Music1_CopyData
+ ld hl, wMusicE4
+ ld de, $dea7
+ ld a, $3
+ call Music1_CopyData
+ ld hl, $dded
+ ld de, $deaa
+ ld a, $2
+ call Music1_CopyData
+ ld a, $0
+ ld [$deac], a
+ ld hl, wMusicReturnAddress
+ ld de, $dead
+ ld a, $8
+ call Music1_CopyData
+ ld hl, $ddfb
+ ld de, $deb5
+ ld a, $30
+ call Music1_CopyData
+ ret
+
+Func_f4b01: ; f4b01 (3d:4b01)
+ ld a, [$de55]
+ ld [$dd80], a
+ ld a, [$de56]
+ ld [$dd81], a
+ ld a, [$de57]
+ ld [wMusicDC], a
+ ld hl, $de58
+ ld de, wMusicDuty
+ ld a, $4
+ call Music1_CopyData
+ ld a, [$de5c]
+ ld [wMusicWave], a
+ ld a, $1
+ ld [wMusicWaveChange], a
+ ld hl, $de5e
+ ld de, wMusicIsPlaying
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de62
+ ld de, wMusicTie
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de66
+ ld de, $dd95
+ ld a, $8
+ call Music1_CopyData
+ ld hl, $de6e
+ ld de, wMusicMainLoop
+ ld a, $8
+ call Music1_CopyData
+ ld a, [$de76]
+ ld [$ddab], a
+ ld a, [$de77]
+ ld [$ddac], a
+ ld hl, $de78
+ ld de, wMusicOctave
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de7c
+ ld de, $ddb3
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de80
+ ld de, $ddb7
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de84
+ ld de, $ddbb
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de88
+ ld de, wMusicE8
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de8c
+ ld de, $ddc3
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de90
+ ld de, wMusicE9
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de94
+ ld de, wMusicEC
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de98
+ ld de, wMusicSpeed
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $de9c
+ ld de, wMusicVibratoType2
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $dea0
+ ld de, wMusicVibratoDelay
+ ld a, $4
+ call Music1_CopyData
+ ld hl, $dea4
+ ld de, wMusicVolume
+ ld a, $3
+ call Music1_CopyData
+ ld hl, $dea7
+ ld de, wMusicE4
+ ld a, $3
+ call Music1_CopyData
+ ld hl, $deaa
+ ld de, $dded
+ ld a, $2
+ call Music1_CopyData
+ ld a, [$deac]
+ ld [$ddef], a
+ ld hl, $dead
+ ld de, wMusicReturnAddress
+ ld a, $8
+ call Music1_CopyData
+ ld hl, $deb5
+ ld de, $ddfb
+ ld a, $30
+ call Music1_CopyData
+ ret
+
+; copies a bytes from hl to de
+Music1_CopyData: ; f4c18 (3d:4c18)
+ ld c, a
+.asm_f4c19
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_f4c19
+ ret
+
+Unknown_f4c20: ; f4c20 (3d:4c20)
+INCBIN "baserom.gbc",$f4c20,$f4c28 - $f4c20
+
+Unknown_f4c28: ; f4c28 (3d:4c28)
+INCBIN "baserom.gbc",$f4c28,$f4c30 - $f4c28
+
+Unknown_f4c30: ; f4c30 (3d:4c30)
+INCBIN "baserom.gbc",$f4c30,$f4cda - $f4c30
+
+Music1_WaveInstruments: ; f4cda (3d:4cda)
+INCLUDE "audio/wave_instruments.asm"
+
+Music1_NoiseInstruments: ; f4d34 (3d:4d34)
+INCLUDE "audio/noise_instruments.asm"
+
+Music1_VibratoTypes: ; f4dde (3d:4dde)
+INCLUDE "audio/vibrato_types.asm"
+
+Unknown_f4e85: ; f4e85 (3d:4e85)
+INCBIN "baserom.gbc",$f4e85,$f4ee5 - $f4e85
+
+INCLUDE "audio/music1_headers.asm"
+
+INCLUDE "audio/music/titlescreen.asm"
+INCLUDE "audio/music/dueltheme1.asm"
+INCLUDE "audio/music/dueltheme2.asm"
+INCLUDE "audio/music/dueltheme3.asm"
+INCLUDE "audio/music/pausemenu.asm"
+INCLUDE "audio/music/deckmachine.asm"
+INCLUDE "audio/music/cardpop.asm"
+INCLUDE "audio/music/overworld.asm"
+INCLUDE "audio/music/matchstart1.asm"
+INCLUDE "audio/music/matchstart2.asm"
+INCLUDE "audio/music/matchstart3.asm"
+INCLUDE "audio/music/matchvictory.asm"
+INCLUDE "audio/music/matchloss.asm"
+INCLUDE "audio/music/darkdiddly.asm"
+INCLUDE "audio/music/boosterpack.asm"
+INCLUDE "audio/music/medal.asm"
+
+rept $138
+db $ff
+endr
diff --git a/audio/music1_headers.asm b/audio/music1_headers.asm
new file mode 100755
index 0000000..3344365
--- /dev/null
+++ b/audio/music1_headers.asm
@@ -0,0 +1,281 @@
+NumberOfSongs1: ; 4fee5 (3d:4ee5)
+ db $1f
+
+SongBanks1: ; f4ee6 (3d:4ee6)
+ db BANK(Music_Stop)
+ db BANK(Music_TitleScreen)
+ db BANK(Music_DuelTheme1)
+ db BANK(Music_DuelTheme2)
+ db BANK(Music_DuelTheme3)
+ db BANK(Music_PauseMenu)
+ db BANK(Music_PCMainMenu)
+ db BANK(Music_DeckMachine)
+ db BANK(Music_CardPop)
+ db BANK(Music_Overworld)
+ db BANK(Music_PokemonDome)
+ db BANK(Music_ChallengeHall)
+ db BANK(Music_Club1)
+ db BANK(Music_Club2)
+ db BANK(Music_Club3)
+ db BANK(Music_Ronald)
+ db BANK(Music_Imakuni)
+ db BANK(Music_HallOfHonor)
+ db BANK(Music_Credits)
+ db BANK(Music_Unused13)
+ db BANK(Music_Unused14)
+ db BANK(Music_MatchStart1)
+ db BANK(Music_MatchStart2)
+ db BANK(Music_MatchStart3)
+ db BANK(Music_MatchVictory)
+ db BANK(Music_MatchLoss)
+ db BANK(Music_DarkDiddly)
+ db BANK(Music_Unused1b)
+ db BANK(Music_BoosterPack)
+ db BANK(Music_Medal)
+ db BANK(Music_Unused1e)
+
+SongHeaderPointers1: ; f4f05 (3d:4f05)
+ dw Music_Stop
+ dw Music_TitleScreen
+ dw Music_DuelTheme1
+ dw Music_DuelTheme2
+ dw Music_DuelTheme3
+ dw Music_PauseMenu
+ dw $0000
+ dw Music_DeckMachine
+ dw Music_CardPop
+ dw Music_Overworld
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw Music_Unused13
+ dw Music_Unused14
+ dw Music_MatchStart1
+ dw Music_MatchStart2
+ dw Music_MatchStart3
+ dw Music_MatchVictory
+ dw Music_MatchLoss
+ dw Music_DarkDiddly
+ dw Music_Unused1b
+ dw Music_BoosterPack
+ dw Music_Medal
+ dw Music_Unused1e
+
+Music_Stop: ; f4f43 (3d:4f43)
+ db %0000
+
+Music_TitleScreen: ; f4f44 (3d:4f44)
+ db %1111
+ dw Music_TitleScreen_Ch1
+ dw Music_TitleScreen_Ch2
+ dw Music_TitleScreen_Ch3
+ dw Music_TitleScreen_Ch4
+
+Music_DuelTheme1: ; f4f4d (3d:4f4d)
+ db %1111
+ dw Music_DuelTheme1_Ch1
+ dw Music_DuelTheme1_Ch2
+ dw Music_DuelTheme1_Ch3
+ dw Music_DuelTheme1_Ch4
+
+Music_DuelTheme2: ; f4f56 (3d:4f56)
+ db %1111
+ dw Music_DuelTheme2_Ch1
+ dw Music_DuelTheme2_Ch2
+ dw Music_DuelTheme2_Ch3
+ dw Music_DuelTheme2_Ch4
+
+Music_DuelTheme3: ; f4f5f (3d:4f5f)
+ db %1111
+ dw Music_DuelTheme3_Ch1
+ dw Music_DuelTheme3_Ch2
+ dw Music_DuelTheme3_Ch3
+ dw Music_DuelTheme3_Ch4
+
+Music_PauseMenu: ; f4f68 (3d:4f68)
+ db %1111
+ dw Music_PauseMenu_Ch1
+ dw Music_PauseMenu_Ch2
+ dw Music_PauseMenu_Ch3
+ dw Music_PauseMenu_Ch4
+
+;Music_PCMainMenu
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_DeckMachine: ; f4f7a (3d:4f7a)
+ db %1111
+ dw Music_DeckMachine_Ch1
+ dw Music_DeckMachine_Ch2
+ dw Music_DeckMachine_Ch3
+ dw Music_DeckMachine_Ch4
+
+Music_CardPop: ; f4f83 (3d:4f83)
+ db %1111
+ dw Music_CardPop_Ch1
+ dw Music_CardPop_Ch2
+ dw Music_CardPop_Ch3
+ dw Music_CardPop_Ch4
+
+Music_Overworld: ; f4f8c (3d:4f8c)
+ db %1111
+ dw Music_Overworld_Ch1
+ dw Music_Overworld_Ch2
+ dw Music_Overworld_Ch3
+ dw Music_Overworld_Ch4
+
+;Music_PokemonDome
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_ChallengeHall
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Club1
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Club2
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Club3
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Ronald
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Imakuni
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_HallOfHonor
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Credits
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_Unused13: ; f4fe6 (3d:4fe6)
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_Unused14: ; f4fef (3d:4fef)
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_MatchStart1: ; f4ff8 (3d:4ff8)
+ db %0001
+ dw Music_MatchStart1_Ch1
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_MatchStart2: ; f5001 (3d:5001)
+ db %0011
+ dw Music_MatchStart2_Ch1
+ dw Music_MatchStart2_Ch2
+ dw $0000
+ dw $0000
+
+Music_MatchStart3: ; f500a (3d:500a)
+ db %0011
+ dw Music_MatchStart3_Ch1
+ dw Music_MatchStart3_Ch2
+ dw $0000
+ dw $0000
+
+Music_MatchVictory: ; f5013 (3d:5013)
+ db %0111
+ dw Music_MatchVictory_Ch1
+ dw Music_MatchVictory_Ch2
+ dw Music_MatchVictory_Ch3
+ dw $0000
+
+Music_MatchLoss: ; f501c (3d:501c)
+ db %0111
+ dw Music_MatchLoss_Ch1
+ dw Music_MatchLoss_Ch2
+ dw Music_MatchLoss_Ch3
+ dw $0000
+
+Music_DarkDiddly: ; f5025 (3d:5025)
+ db %0111
+ dw Music_DarkDiddly_Ch1
+ dw Music_DarkDiddly_Ch2
+ dw Music_DarkDiddly_Ch3
+ dw $0000
+
+Music_Unused1b: ; f502e (3d:502e)
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_BoosterPack: ; f5037 (3d:5037)
+ db %0111
+ dw Music_BoosterPack_Ch1
+ dw Music_BoosterPack_Ch2
+ dw Music_BoosterPack_Ch3
+ dw $0000
+
+Music_Medal: ; f5040 (3d:5040)
+ db %0111
+ dw Music_Medal_Ch1
+ dw Music_Medal_Ch2
+ dw Music_Medal_Ch3
+ dw $0000
+
+Music_Unused1e: ; f5049 (3d:5049)
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
diff --git a/audio/music2.asm b/audio/music2.asm
new file mode 100755
index 0000000..6ed8e63
--- /dev/null
+++ b/audio/music2.asm
@@ -0,0 +1,1885 @@
+Func_f8000: ; f8000 (3e:4000)
+ jp Func_f807d
+
+Func_f8003: ; f8003 (3e:4003)
+ jp Func_f80e9
+
+Func_f8006: ; f8006 (3e:4006)
+ jp Func_f8021
+
+Func_f8009: ; f8009 (3e:4009)
+ jp Func_f802d
+
+Func_f800c: ; f800c (3e:400c)
+ jp Func_f804e
+
+Func_f800f: ; f800f (3e:400f)
+ jp Func_f8052
+
+Func_f8012: ; f8012 (3e:4012)
+ jp Func_f805c
+
+Func_f8015: ; f8015 (3e:4015)
+ jp Func_f8066
+
+Func_f8018: ; f8018 (3e:4018)
+ jp Func_f806f
+
+Func_f801b: ; f801b (3e:401b)
+ jp Func_f89c4
+
+Func_f801e: ; f801e (3e:401e)
+ jp Func_f89d0
+
+Func_f8021: ; f8021 (3e:4021)
+ push hl
+ ld hl, NumberOfSongs2
+ cp [hl]
+ jr nc, .asm_f802b
+ ld [$dd80], a
+.asm_f802b
+ pop hl
+ ret
+
+Func_f802d: ; f802d (3e:402d)
+ push bc
+ push hl
+ ld b, $0
+ ld c, a
+ or a
+ jr z, .asm_f8043
+ ld hl, Unknown_f8e85
+ add hl, bc
+ ld b, [hl]
+ ld a, [$dd83]
+ or a
+ jr z, .asm_f8043
+ cp b
+ jr c, .asm_f804b
+.asm_f8043
+ ld a, b
+ ld [$dd83], a
+ ld a, c
+ ld [$dd82], a
+.asm_f804b
+ pop hl
+ pop bc
+ ret
+
+Func_f804e: ; f804e (3e:404e)
+ ld [$ddf0], a
+ ret
+
+Func_f8052: ; f8052 (3e:4052)
+ ld a, [$dd80]
+ cp $80
+ ld a, $1
+ ret nz
+ xor a
+ ret
+
+Func_f805c: ; f805c (3e:405c)
+ ld a, [$dd82]
+ cp $80
+ ld a, $1
+ ret nz
+ xor a
+ ret
+
+Func_f8066: ; f8066 (3e:4066)
+ ld a, [$ddf2]
+ xor $1
+ ld [$ddf2], a
+ ret
+
+Func_f806f: ; f806f (3e:406f)
+ push bc
+ push af
+ and $7
+ ld b, a
+ swap b
+ or b
+ ld [$ddf1], a
+ pop af
+ pop bc
+ ret
+
+Func_f807d: ; f807d (3e:407d)
+ xor a
+ ld [rNR52], a
+ ld a, $80
+ ld [rNR52], a
+ ld a, $77
+ ld [rNR50], a
+ ld a, $ff
+ ld [rNR51], a
+ ld a, $3d
+ ld [$dd81], a
+ ld a, $80
+ ld [$dd80], a
+ ld [$dd82], a
+ ld a, $77
+ ld [$ddf1], a
+ xor a
+ ld [$dd8c], a
+ ld [$de53], a
+ ld [wMusicWaveChange], a
+ ld [$ddef], a
+ ld [$ddf0], a
+ ld [$ddf2], a
+ dec a
+ ld [wMusicDC], a
+ ld de, $0001
+ ld bc, $0000
+.asm_f80bb
+ ld hl, wMusicIsPlaying
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicTie
+ add hl, bc
+ ld [hl], d
+ ld hl, $ddb3
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicEC
+ add hl, bc
+ ld [hl], d
+ ld hl, wMusicE8
+ add hl, bc
+ ld [hl], d
+ inc c
+ ld a, c
+ cp $4
+ jr nz, .asm_f80bb
+ ld hl, Unknown_f8c20
+ ld bc, wMusicReturnAddress
+ ld d, $8
+.asm_f80e2
+ ld a, [hli]
+ ld [bc], a
+ inc bc
+ dec d
+ jr nz, .asm_f80e2
+ ret
+
+Func_f80e9: ; f80e9 (3e:40e9)
+ call Func_f82a4
+ call Func_f811c
+ ld hl, Func_fc003
+ call Bankswitch3dTo3f
+ ld a, [$dd81]
+ ld [hBankROM], a
+ ld [MBC3RomBank], a
+ ld a, [$ddf2]
+ cp $0
+ jr z, .asm_f8109
+ call Func_f8980
+ jr .asm_f8115
+.asm_f8109
+ call Func_f82a5
+ call Func_f830a
+ call Func_f836f
+ call Func_f83ce
+.asm_f8115
+ call Func_f8866
+ call Func_f89b1
+ ret
+
+Func_f811c: ; f811c (3e:411c)
+ ld a, [$dd80]
+ rla
+ jr c, .asm_f8133
+ call Func_f814b
+ ld a, [$dd80]
+ call Music2_PlaySong
+ ld a, [$dd80]
+ or $80
+ ld [$dd80], a
+.asm_f8133
+ ld a, [$dd82]
+ rla
+ jr c, .asm_f814a
+ ld a, [$dd82]
+ ld hl, Func_fc000
+ call Bankswitch3dTo3f
+ ld a, [$dd82]
+ or $80
+ ld [$dd82], a
+.asm_f814a
+ ret
+
+Func_f814b: ; f814b (3e:414b)
+ ld a, [$dd8c]
+ ld d, a
+ xor a
+ ld [wMusicIsPlaying], a
+ bit 0, d
+ jr nz, .asm_f815f
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f815f
+ xor a
+ ld [$dd8e], a
+ bit 1, d
+ jr nz, .asm_f816f
+ ld a, $8
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f816f
+ xor a
+ ld [$dd90], a
+ bit 3, d
+ jr nz, .asm_f817f
+ ld a, $8
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f817f
+ xor a
+ ld [$dd8f], a
+ bit 2, d
+ jr nz, .asm_f818b
+ ld a, $0
+ ld [rNR32], a
+.asm_f818b
+ ret
+
+; plays the song given by the id in a
+Music2_PlaySong: ; f818c (3e:418c)
+ push af
+ ld c, a
+ ld b, $0
+ ld hl, SongBanks2
+ add hl, bc
+ ld a, [hl]
+ ld [$dd81], a
+ ld [hBankROM], a
+ ld [MBC3RomBank], a
+ pop af
+ add a
+ ld c, a
+ ld b, $0
+ ld hl, SongHeaderPointers2
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld h, [hl]
+ ld l, e
+ ld e, [hl]
+ inc hl
+ ld b, h
+ ld c, l
+ rr e
+ jr nc, .asm_f81eb
+ ld a, [bc]
+ inc bc
+ ld [$dd95], a
+ ld [wMusicMainLoop], a
+ ld a, [bc]
+ inc bc
+ ld [$dd96], a
+ ld [$dd9e], a
+ ld a, $1
+ ld [$ddbb], a
+ ld [wMusicIsPlaying], a
+ xor a
+ ld [wMusicTie], a
+ ld [wMusicE4], a
+ ld [wMusicE8], a
+ ld [wMusicVibratoDelay], a
+ ld [wMusicEC], a
+ ld a, [Unknown_f8c20]
+ ld [wMusicReturnAddress], a
+ ld a, [Unknown_f8c20 + 1]
+ ld [$ddf4], a
+ ld a, $8
+ ld [wMusicE9], a
+.asm_f81eb
+ rr e
+ jr nc, .asm_f8228
+ ld a, [bc]
+ inc bc
+ ld [$dd97], a
+ ld [$dd9f], a
+ ld a, [bc]
+ inc bc
+ ld [$dd98], a
+ ld [$dda0], a
+ ld a, $1
+ ld [$ddbc], a
+ ld [$dd8e], a
+ xor a
+ ld [$dd92], a
+ ld [$ddeb], a
+ ld [$ddc0], a
+ ld [$dde0], a
+ ld [$ddcc], a
+ ld a, [Unknown_f8c20 + 2]
+ ld [$ddf5], a
+ ld a, [Unknown_f8c20 + 3]
+ ld [$ddf6], a
+ ld a, $8
+ ld [$ddc8], a
+.asm_f8228
+ rr e
+ jr nc, .asm_f8265
+ ld a, [bc]
+ inc bc
+ ld [$dd99], a
+ ld [$dda1], a
+ ld a, [bc]
+ inc bc
+ ld [$dd9a], a
+ ld [$dda2], a
+ ld a, $1
+ ld [$ddbd], a
+ ld [$dd8f], a
+ xor a
+ ld [$dd93], a
+ ld [$ddec], a
+ ld [$ddc1], a
+ ld [$dde1], a
+ ld [$ddcd], a
+ ld a, [Unknown_f8c20 + 4]
+ ld [$ddf7], a
+ ld a, [Unknown_f8c20 + 5]
+ ld [$ddf8], a
+ ld a, $40
+ ld [$ddc9], a
+.asm_f8265
+ rr e
+ jr nc, .asm_f829f
+ ld a, [bc]
+ inc bc
+ ld [$dd9b], a
+ ld [$dda3], a
+ ld a, [bc]
+ inc bc
+ ld [$dd9c], a
+ ld [$dda4], a
+ ld a, $1
+ ld [$ddbe], a
+ ld [$dd90], a
+ xor a
+ ld [$dd94], a
+ ld [$ddc2], a
+ ld [$dde2], a
+ ld [$ddce], a
+ ld a, [Unknown_f8c20 + 6]
+ ld [$ddf9], a
+ ld a, [Unknown_f8c20 + 7]
+ ld [$ddfa], a
+ ld a, $40
+ ld [$ddca], a
+.asm_f829f
+ xor a
+ ld [$ddf2], a
+ ret
+
+Func_f82a4: ; f82a4 (3e:42a4)
+ ret
+
+Func_f82a5: ; f82a5 (3e:42a5)
+ ld a, [wMusicIsPlaying]
+ or a
+ jr z, .asm_f82fa
+ ld a, [$ddb7]
+ cp $0
+ jr z, .asm_f82d4
+ ld a, [$ddc3]
+ dec a
+ ld [$ddc3], a
+ jr nz, .asm_f82d4
+ ld a, [$ddbb]
+ cp $1
+ jr z, .asm_f82d4
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f82d4
+ ld hl, rNR12
+ ld a, [wMusicE9]
+ ld [hli], a
+ inc hl
+ ld a, $80
+ ld [hl], a
+.asm_f82d4
+ ld a, [$ddbb]
+ dec a
+ ld [$ddbb], a
+ jr nz, .asm_f82f4
+ ld a, [$dd96]
+ ld h, a
+ ld a, [$dd95]
+ ld l, a
+ ld bc, $0000
+ call Music2_PlayNextNote
+ ld a, [wMusicIsPlaying]
+ or a
+ jr z, .asm_f82fa
+ call Func_f8714
+.asm_f82f4
+ ld a, $0
+ call Func_f885a
+ ret
+.asm_f82fa
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f8309
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f8309
+ ret
+
+Func_f830a: ; f830a (3e:430a)
+ ld a, [$dd8e]
+ or a
+ jr z, .asm_f835f
+ ld a, [$ddb8]
+ cp $0
+ jr z, .asm_f8339
+ ld a, [$ddc4]
+ dec a
+ ld [$ddc4], a
+ jr nz, .asm_f8339
+ ld a, [$ddbc]
+ cp $1
+ jr z, .asm_f8339
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f8339
+ ld hl, rNR22
+ ld a, [$ddc8]
+ ld [hli], a
+ inc hl
+ ld a, $80
+ ld [hl], a
+.asm_f8339
+ ld a, [$ddbc]
+ dec a
+ ld [$ddbc], a
+ jr nz, .asm_f8359
+ ld a, [$dd98]
+ ld h, a
+ ld a, [$dd97]
+ ld l, a
+ ld bc, $0001
+ call Music2_PlayNextNote
+ ld a, [$dd8e]
+ or a
+ jr z, .asm_f835f
+ call Func_f875a
+.asm_f8359
+ ld a, $1
+ call Func_f885a
+ ret
+.asm_f835f
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f836e
+ ld a, $8
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f836e
+ ret
+
+Func_f836f: ; f836f (3e:436f)
+ ld a, [$dd8f]
+ or a
+ jr z, .asm_f83be
+ ld a, [$ddb9]
+ cp $0
+ jr z, .asm_f8398
+ ld a, [$ddc5]
+ dec a
+ ld [$ddc5], a
+ jr nz, .asm_f8398
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f8398
+ ld a, [$ddbd]
+ cp $1
+ jr z, .asm_f8398
+ ld a, [$ddc9]
+ ld [rNR32], a
+.asm_f8398
+ ld a, [$ddbd]
+ dec a
+ ld [$ddbd], a
+ jr nz, .asm_f83b8
+ ld a, [$dd9a]
+ ld h, a
+ ld a, [$dd99]
+ ld l, a
+ ld bc, $0002
+ call Music2_PlayNextNote
+ ld a, [$dd8f]
+ or a
+ jr z, .asm_f83be
+ call Func_f879c
+.asm_f83b8
+ ld a, $2
+ call Func_f885a
+ ret
+.asm_f83be
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f83cd
+ ld a, $0
+ ld [rNR32], a
+ ld a, $80
+ ld [rNR34], a
+.asm_f83cd
+ ret
+
+Func_f83ce: ; f83ce (3e:43ce)
+ ld a, [$dd90]
+ or a
+ jr z, .asm_f8400
+ ld a, [$ddbe]
+ dec a
+ ld [$ddbe], a
+ jr nz, .asm_f83f6
+ ld a, [$dd9c]
+ ld h, a
+ ld a, [$dd9b]
+ ld l, a
+ ld bc, $0003
+ call Music2_PlayNextNote
+ ld a, [$dd90]
+ or a
+ jr z, .asm_f8400
+ call Func_f880a
+ jr .asm_f8413
+.asm_f83f6
+ ld a, [$ddef]
+ or a
+ jr z, .asm_f8413
+ call Func_f8839
+ ret
+.asm_f8400
+ ld a, [$dd8c]
+ bit 3, a
+ jr nz, .asm_f8413
+ xor a
+ ld [$ddef], a
+ ld a, $8
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f8413
+ ret
+
+Music2_PlayNextNote: ; f8414 (3e:4414)
+ ld a, [hli]
+ push hl
+ push af
+ cp $d0
+ jr c, Music2_note
+ sub $d0
+ add a
+ ld e, a
+ ld d, $0
+ ld hl, Music2_CommandTable
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld h, d
+ ld l, e
+ pop af
+ jp [hl]
+
+Music2_CommandTable: ; f842c (3e:442c)
+ dw Music2_speed
+ dw Music2_octave
+ dw Music2_octave
+ dw Music2_octave
+ dw Music2_octave
+ dw Music2_octave
+ dw Music2_octave
+ dw Music2_inc_octave
+ dw Music2_dec_octave
+ dw Music2_tie
+ dw Music2_end
+ dw Music2_end
+ dw Music2_musicdc
+ dw Music2_MainLoop
+ dw Music2_EndMainLoop
+ dw Music2_Loop
+ dw Music2_EndLoop
+ dw Music2_jp
+ dw Music2_call
+ dw Music2_ret
+ dw Music2_musice4
+ dw Music2_duty
+ dw Music2_volume
+ dw Music2_wave
+ dw Music2_musice8
+ dw Music2_musice9
+ dw Music2_vibrato_type
+ dw Music2_vibrato_delay
+ dw Music2_musicec
+ dw Music2_musiced
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+ dw Music2_end
+
+Music2_note: ; f448c (3d:448c)
+ push af
+ ld a, [hl]
+ ld e, a
+ ld hl, wMusicTie
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f84b0
+ ld [hl], $1
+ xor a
+ ld hl, $dddb
+ add hl, bc
+ ld [hl], a
+ ld hl, $dde3
+ add hl, bc
+ ld [hl], a
+ inc [hl]
+ ld hl, wMusicVibratoType2
+ add hl, bc
+ ld a, [hl]
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+.asm_f84b0
+ pop af
+ push de
+ ld hl, wMusicSpeed
+ add hl, bc
+ ld d, [hl]
+ and $f
+ inc a
+ cp d
+ jr nc, .asm_f84c0
+ ld e, a
+ ld a, d
+ ld d, e
+.asm_f84c0
+ ld e, a
+.asm_f84c1
+ dec d
+ jr z, .asm_f84c7
+ add e
+ jr .asm_f84c1
+.asm_f84c7
+ ld hl, $ddbb
+ add hl, bc
+ ld [hl], a
+ pop de
+ ld d, a
+ ld a, e
+ cp $d9
+ ld a, d
+ jr z, .asm_f84fb
+ ld e, a
+ ld hl, wMusicE8
+ add hl, bc
+ ld a, [hl]
+ cp $8
+ ld d, a
+ ld a, e
+ jr z, .asm_f84fb
+ push hl
+ push bc
+ ld b, $0
+ ld c, a
+ ld hl, $0000
+.asm_f84e8
+ add hl, bc
+ dec d
+ jr nz, .asm_f84e8
+ srl h
+ rr l
+ srl h
+ rr l
+ srl h
+ rr l
+ ld a, l
+ pop bc
+ pop hl
+.asm_f84fb
+ ld hl, $ddc3
+ add hl, bc
+ ld [hl], a
+ pop af
+ and $f0
+ ld hl, $ddb7
+ add hl, bc
+ ld [hl], a
+ or a
+ jr nz, .asm_f850e
+ jp .asm_f858e
+.asm_f850e
+ swap a
+ dec a
+ ld h, a
+ ld a, $3
+ cp c
+ ld a, h
+ jr z, .asm_f851a
+ jr .asm_f8564
+.asm_f851a
+ push af
+ ld hl, wMusicOctave
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ sla a
+ add d
+ sla a
+ sla a
+ sla a
+ ld e, a
+ pop af
+ ld hl, Music2_NoiseInstruments
+ add a
+ ld d, c
+ ld c, a
+ add hl, bc
+ ld c, e
+ add hl, bc
+ ld c, d
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hli]
+ ld d, a
+ ld a, [wMusicDC]
+ and $77
+ or d
+ ld [wMusicDC], a
+ ld de, $ddab
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, b
+ ld [de], a
+ ld b, $0
+ ld a, l
+ ld d, h
+ ld hl, $dded
+ ld [hli], a
+ ld [hl], d
+ ld a, $1
+ ld [$ddef], a
+ jr .asm_f858e
+.asm_f8564
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ push hl
+ ld hl, wMusicOctave
+ add hl, bc
+ ld e, [hl]
+ ld d, $0
+ ld hl, Unknown_f8c28
+ add hl, de
+ add a
+ ld e, [hl]
+ add e
+ ld hl, wMusicEC
+ add hl, bc
+ ld e, [hl]
+ add e
+ add e
+ ld e, a
+ ld hl, Unknown_f8c30
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ call Func_f8967
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+.asm_f858e
+ pop de
+ ld hl, $dd95
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+Music2_speed: ; f8598 (3e:4598)
+ pop hl
+ ld a, [hli]
+ push hl
+ ld hl, wMusicSpeed
+ add hl, bc
+ ld [hl], a
+ jp Music2_PlayNextNote_pop
+
+Music2_octave: ; f85a3 (3e:45a3)
+ and $7
+ dec a
+ ld hl, wMusicOctave
+ add hl, bc
+ push af
+ ld a, c
+ cp $2
+ jr nz, .asm_f85b6
+ pop af
+ inc a
+ ld [hl], a
+ jp Music2_PlayNextNote_pop
+.asm_f85b6
+ pop af
+ ld [hl], a
+ jp Music2_PlayNextNote_pop
+
+Music2_inc_octave: ; f85bb (3e:45bb)
+ ld hl, wMusicOctave
+ add hl, bc
+ inc [hl]
+ jp Music2_PlayNextNote_pop
+
+Music2_dec_octave: ; f85c3 (3e:45c3)
+ ld hl, wMusicOctave
+ add hl, bc
+ dec [hl]
+ jp Music2_PlayNextNote_pop
+
+Music2_tie: ; f85cb (3e:45cb)
+ ld hl, wMusicTie
+ add hl, bc
+ ld [hl], $80
+ jp Music2_PlayNextNote_pop
+
+Music2_musicdc: ; f85d4 (3e:45d4)
+ pop hl
+ ld a, [hli]
+ push hl
+ push bc
+ inc c
+ ld e, $ee
+.asm_f85db
+ dec c
+ jr z, .asm_f85e3
+ rlca
+ rlc e
+ jr .asm_f85db
+.asm_f85e3
+ ld d, a
+ ld hl, wMusicDC
+ ld a, [hl]
+ and e
+ or d
+ ld [hl], a
+ pop bc
+ jp Music2_PlayNextNote_pop
+
+Music2_MainLoop: ; f85ef (3e:45ef)
+ pop de
+ push de
+ dec de
+ ld hl, wMusicMainLoop
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ jp Music2_PlayNextNote_pop
+
+Music2_EndMainLoop: ; f85fd (3e:45fd)
+ pop hl
+ ld hl, wMusicMainLoop
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp Music2_PlayNextNote
+
+Music2_Loop: ; f8609 (3e:4609)
+ pop de
+ ld a, [de]
+ inc de
+ push af
+ call Music2_GetReturnAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+ pop af
+ ld [hl], a
+ inc hl
+ push de
+ call Music2_SetReturnAddress
+ jp Music2_PlayNextNote_pop
+
+Music2_EndLoop: ; f861e (3e:461e)
+ call Music2_GetReturnAddress
+ dec hl
+ ld a, [hl]
+ dec a
+ jr z, .asm_f8630
+ ld [hld], a
+ ld d, [hl]
+ dec hl
+ ld e, [hl]
+ pop hl
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+.asm_f8630
+ dec hl
+ dec hl
+ call Music2_SetReturnAddress
+ jp Music2_PlayNextNote_pop
+
+Music2_jp: ; f8638 (3e:4638)
+ pop hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp Music2_PlayNextNote
+
+Music2_call: ; f863f (3e:463f)
+ call Music2_GetReturnAddress
+ pop de
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ ld a, [de]
+ ld b, a
+ inc de
+ ld a, [de]
+ ld d, a
+ ld e, b
+ ld b, $0
+ push de
+ call Music2_SetReturnAddress
+ jp Music2_PlayNextNote_pop
+
+Music2_ret: ; f8656 (3e:4656)
+ pop de
+ call Music2_GetReturnAddress
+ dec hl
+ ld a, [hld]
+ ld e, [hl]
+ ld d, a
+ inc de
+ inc de
+ push de
+ call Music2_SetReturnAddress
+ jp Music2_PlayNextNote_pop
+
+Music2_musice4: ; f8667 (3e:4667)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE4
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_duty: ; f8674 (3e:4674)
+ pop de
+ ld a, [de]
+ and $c0
+ inc de
+ ld hl, wMusicDuty
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_volume: ; f8683 (3e:4683)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVolume
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_wave: ; f8690 (3e:4690)
+ pop de
+ ld a, [de]
+ inc de
+ ld [wMusicWave], a
+ ld a, $1
+ ld [wMusicWaveChange], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_musice8: ; f86a0 (3e:46a0)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE8
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_musice9: ; f86ad (3e:46ad)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicE9
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_vibrato_type: ; f86ba (3e:46ba)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+ ld hl, wMusicVibratoType2
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_vibrato_delay: ; f86cc (3e:46cc)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicVibratoDelay
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_musicec: ; f86d9 (3e:46d9)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicEC
+ add hl, bc
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_musiced: ; f86e6 (3e:46e6)
+ pop de
+ ld a, [de]
+ inc de
+ ld hl, wMusicEC
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ld h, d
+ ld l, e
+ jp Music2_PlayNextNote
+
+Music2_end: ; f86f4 (3e:46f4)
+ ld hl, wMusicIsPlaying
+ add hl, bc
+ ld [hl], $0
+ pop hl
+ ret
+
+; returns the address where the address to
+; return to is stored for the current channel
+Music2_GetReturnAddress: ; f86fc (3e:46fc)
+ ld hl, wMusicReturnAddress
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+; puts the address in hl where the address to
+; return to is stored for the currentchannel
+Music2_SetReturnAddress: ; f8705 (3e:4705)
+ ld d, h
+ ld e, l
+ ld hl, wMusicReturnAddress
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+Music2_PlayNextNote_pop: ; f8710 (3e:4710)
+ pop hl
+ jp Music2_PlayNextNote
+
+Func_f8714: ; f8714 (3e:4714)
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f8749
+ ld a, [$ddb7]
+ cp $0
+ jr z, .asm_f874a
+ ld d, $0
+ ld hl, wMusicTie
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f8733
+ ld a, [wMusicVolume]
+ ld [rNR12], a
+ ld d, $80
+.asm_f8733
+ ld [hl], $2
+ ld a, $8
+ ld [rNR10], a
+ ld a, [wMusicDuty]
+ ld [rNR11], a
+ ld a, [$dda5]
+ ld [rNR13], a
+ ld a, [$dda6]
+ or d
+ ld [rNR14], a
+.asm_f8749
+ ret
+.asm_f874a
+ ld hl, wMusicTie
+ ld [hl], $0
+ ld hl, rNR12
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f875a: ; f875a (3e:475a)
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f878b
+ ld a, [$ddb8]
+ cp $0
+ jr z, .asm_f878c
+ ld d, $0
+ ld hl, $dd92
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f8779
+ ld a, [$dde8]
+ ld [rNR22], a
+ ld d, $80
+.asm_f8779
+ ld [hl], $2
+ ld a, [$dd87]
+ ld [rNR21], a
+ ld a, [$dda7]
+ ld [rNR23], a
+ ld a, [$dda8]
+ or d
+ ld [rNR24], a
+.asm_f878b
+ ret
+.asm_f878c
+ ld hl, $dd92
+ ld [hl], $0
+ ld hl, rNR22
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f879c: ; f879c (3e:479c)
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f87e0
+ ld d, $0
+ ld a, [wMusicWaveChange]
+ or a
+ jr z, .asm_f87b3
+ xor a
+ ld [rNR30], a
+ call Func_f87ea
+ ld d, $80
+.asm_f87b3
+ ld a, [$ddb9]
+ cp $0
+ jr z, .asm_f87e1
+ ld hl, $dd93
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f87cc
+ ld a, [$dde9]
+ ld [rNR32], a
+ xor a
+ ld [rNR30], a
+ ld d, $80
+.asm_f87cc
+ ld [hl], $2
+ xor a
+ ld [rNR31], a
+ ld a, [$dda9]
+ ld [rNR33], a
+ ld a, $80
+ ld [rNR30], a
+ ld a, [$ddaa]
+ or d
+ ld [rNR34], a
+.asm_f87e0
+ ret
+.asm_f87e1
+ ld hl, wMusicTie
+ ld [hl], $0
+ xor a
+ ld [rNR30], a
+ ret
+
+Func_f87ea: ; f879c (3e:47ea)
+ ld a, [wMusicWave]
+ add a
+ ld d, $0
+ ld e, a
+ ld hl, Music2_WaveInstruments
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld b, d
+ ld de, $ff30
+.asm_f87fc
+ ld a, [hli]
+ ld [de], a
+ inc de
+ inc b
+ ld a, b
+ cp $10
+ jr nz, .asm_f87fc
+ xor a
+ ld [wMusicWaveChange], a
+ ret
+
+Func_f880a: ; f880a (3e:480a)
+ ld a, [$dd8c]
+ bit 3, a
+ jr nz, .asm_f8829
+ ld a, [$ddba]
+ cp $0
+ jr z, asm_f882a
+ ld de, rNR41
+ ld hl, $ddab
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+ inc e
+ ld a, [hli]
+ ld [de], a
+.asm_f8829
+ ret
+asm_f882a
+ xor a
+ ld [$ddef], a
+ ld hl, rNR42
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ ret
+
+Func_f8839: ; f8839 (3e:4839)
+ ld a, [$dd8c]
+ bit 3, a
+ jr z, .asm_f8846
+ xor a
+ ld [$ddef], a
+ jr .asm_f8859
+.asm_f8846
+ ld hl, $dded
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ld a, [de]
+ cp $ff
+ jr nz, .asm_f8853
+ jr asm_f882a
+.asm_f8853
+ ld [rNR43], a
+ inc de
+ ld a, d
+ ld [hld], a
+ ld [hl], e
+.asm_f8859
+ ret
+
+Func_f885a: ; f885a (3e:485a)
+ push af
+ ld b, $0
+ ld c, a
+ call Func_f8898
+ pop af
+ call Func_f890b
+ ret
+
+Func_f8866: ; f8866 (3e:4866)
+ ld a, [$ddf1]
+ ld [rNR50], a
+ ld a, [$dd8c]
+ or a
+ ld hl, wMusicDC
+ ld a, [hli]
+ jr z, .asm_f8888
+ ld a, [$dd8c]
+ and $f
+ ld d, a
+ swap d
+ or d
+ ld d, a
+ xor $ff
+ ld e, a
+ ld a, [hld]
+ and d
+ ld d, a
+ ld a, [hl]
+ and e
+ or d
+.asm_f8888
+ ld d, a
+ ld a, [$ddf0]
+ xor $ff
+ and $f
+ ld e, a
+ swap e
+ or e
+ and d
+ ld [rNR51], a
+ ret
+
+Func_f8898: ; f8898 (3e:4898)
+ ld hl, wMusicVibratoDelay
+ add hl, bc
+ ld a, [hl]
+ cp $0
+ jr z, .asm_f8902
+ ld hl, $dde3
+ add hl, bc
+ cp [hl]
+ jr z, .asm_f88ab
+ inc [hl]
+ jr .asm_f8902
+.asm_f88ab
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld e, [hl]
+ ld d, $0
+ ld hl, Music2_VibratoTypes
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ push hl
+ ld hl, $dddb
+ add hl, bc
+ ld d, $0
+ ld e, [hl]
+ inc [hl]
+ pop hl
+ add hl, de
+ ld a, [hli]
+ cp $80
+ jr z, .asm_f88ee
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ bit 7, a
+ jr nz, .asm_f88df
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ and $7
+ ld d, a
+ ret
+.asm_f88df
+ xor $ff
+ inc a
+ push bc
+ ld c, a
+ ld a, e
+ sub c
+ ld e, a
+ ld a, d
+ sbc b
+ and $7
+ ld d, a
+ pop bc
+ ret
+.asm_f88ee
+ push hl
+ ld hl, $dddb
+ add hl, bc
+ ld [hl], $0
+ pop hl
+ ld a, [hl]
+ cp $80
+ jr z, .asm_f88ab
+ ld hl, wMusicVibratoType
+ add hl, bc
+ ld [hl], a
+ jr .asm_f88ab
+.asm_f8902
+ ld hl, $dda5
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ret
+
+Func_f890b: ; f890b (3e:490b)
+ cp $0
+ jr nz, .asm_f892c
+ ld a, [wMusicVibratoDelay]
+ cp $0
+ jr z, .asm_f8966
+ ld a, [$dd8c]
+ bit 0, a
+ jr nz, .asm_f8966
+ ld a, e
+ ld [rNR13], a
+ ld a, [rNR11]
+ and $c0
+ ld [rNR11], a
+ ld a, d
+ and $3f
+ ld [rNR14], a
+ ret
+.asm_f892c
+ cp $1
+ jr nz, .asm_f894b
+ ld a, [$dde0]
+ cp $0
+ jr z, .asm_f8966
+ ld a, [$dd8c]
+ bit 1, a
+ jr nz, .asm_f8966
+ ld a, e
+ ld [rNR23], a
+ ld a, [rNR21]
+ and $c0
+ ld [rNR21], a
+ ld a, d
+ ld [rNR24], a
+ ret
+.asm_f894b
+ cp $2
+ jr nz, .asm_f8966
+ ld a, [$dde1]
+ cp $0
+ jr z, .asm_f8966
+ ld a, [$dd8c]
+ bit 2, a
+ jr nz, .asm_f8966
+ ld a, e
+ ld [rNR33], a
+ xor a
+ ld [rNR31], a
+ ld a, d
+ ld [rNR34], a
+.asm_f8966
+ ret
+
+Func_f8967: ; f8967 (3e:4967)
+ ld hl, wMusicE4
+ add hl, bc
+ ld a, [hl]
+ bit 7, a
+ jr nz, .asm_f8976
+ add e
+ ld e, a
+ ld a, d
+ adc b
+ ld d, a
+ ret
+.asm_f8976
+ xor $ff
+ ld h, a
+ ld a, e
+ sub h
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ret
+
+Func_f8980: ; f8980 (3e:4980)
+ ld a, [$dd8c]
+ ld d, a
+ bit 0, d
+ jr nz, .asm_f8990
+ ld a, $8
+ ld [rNR12], a
+ swap a
+ ld [rNR14], a
+.asm_f8990
+ bit 1, d
+ jr nz, .asm_f899c
+ swap a
+ ld [rNR22], a
+ swap a
+ ld [rNR24], a
+.asm_f899c
+ bit 3, d
+ jr nz, .asm_f89a8
+ swap a
+ ld [rNR42], a
+ swap a
+ ld [rNR44], a
+.asm_f89a8
+ bit 2, d
+ jr nz, .asm_f89b0
+ ld a, $0
+ ld [rNR32], a
+.asm_f89b0
+ ret
+
+Func_f89b1: ; f89b1 (3e:49b1)
+ ld hl, wMusicIsPlaying
+ xor a
+ add [hl]
+ inc hl
+ add [hl]
+ inc hl
+ add [hl]
+ inc hl
+ add [hl]
+ or a
+ ret nz
+ ld a, $80
+ ld [$dd80], a
+ ret
+
+Func_f89c4: ; f89c4 (3e:49c4)
+ di
+ call Func_f8980
+ call Func_f89dc
+ call Func_f814b
+ ei
+ ret
+
+Func_f89d0: ; f89d0 (3e:49d0)
+ di
+ call Func_f8980
+ call Func_f814b
+ call Func_f8b01
+ ei
+ ret
+
+Func_f89dc: ; f89dc (3e:49dc)
+ ld a, [$dd80]
+ ld [$de55], a
+ ld a, [$dd81]
+ ld [$de56], a
+ ld a, [wMusicDC]
+ ld [$de57], a
+ ld hl, wMusicDuty
+ ld de, $de58
+ ld a, $4
+ call Music2_CopyData
+ ld a, [wMusicWave]
+ ld [$de5c], a
+ ld a, [wMusicWaveChange]
+ ld [$de5d], a
+ ld hl, wMusicIsPlaying
+ ld de, $de5e
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicTie
+ ld de, $de62
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $dd95
+ ld de, $de66
+ ld a, $8
+ call Music2_CopyData
+ ld hl, wMusicMainLoop
+ ld de, $de6e
+ ld a, $8
+ call Music2_CopyData
+ ld a, [$ddab]
+ ld [$de76], a
+ ld a, [$ddac]
+ ld [$de77], a
+ ld hl, wMusicOctave
+ ld de, $de78
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $ddb3
+ ld de, $de7c
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $ddb7
+ ld de, $de80
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $ddbb
+ ld de, $de84
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicE8
+ ld de, $de88
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $ddc3
+ ld de, $de8c
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicE9
+ ld de, $de90
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicEC
+ ld de, $de94
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicSpeed
+ ld de, $de98
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicVibratoType2
+ ld de, $de9c
+ ld a, $4
+ call Music2_CopyData
+ ld hl, wMusicVibratoDelay
+ ld de, $dea0
+ ld a, $4
+ call Music2_CopyData
+ ld a, $0
+ ld [$dddb], a
+ ld [$dddc], a
+ ld [$dddd], a
+ ld [$ddde], a
+ ld hl, wMusicVolume
+ ld de, $dea4
+ ld a, $3
+ call Music2_CopyData
+ ld hl, wMusicE4
+ ld de, $dea7
+ ld a, $3
+ call Music2_CopyData
+ ld hl, $dded
+ ld de, $deaa
+ ld a, $2
+ call Music2_CopyData
+ ld a, $0
+ ld [$deac], a
+ ld hl, wMusicReturnAddress
+ ld de, $dead
+ ld a, $8
+ call Music2_CopyData
+ ld hl, $ddfb
+ ld de, $deb5
+ ld a, $30
+ call Music2_CopyData
+ ret
+
+Func_f8b01: ; f8b01 (3e:4b01)
+ ld a, [$de55]
+ ld [$dd80], a
+ ld a, [$de56]
+ ld [$dd81], a
+ ld a, [$de57]
+ ld [wMusicDC], a
+ ld hl, $de58
+ ld de, wMusicDuty
+ ld a, $4
+ call Music2_CopyData
+ ld a, [$de5c]
+ ld [wMusicWave], a
+ ld a, $1
+ ld [wMusicWaveChange], a
+ ld hl, $de5e
+ ld de, wMusicIsPlaying
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de62
+ ld de, wMusicTie
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de66
+ ld de, $dd95
+ ld a, $8
+ call Music2_CopyData
+ ld hl, $de6e
+ ld de, wMusicMainLoop
+ ld a, $8
+ call Music2_CopyData
+ ld a, [$de76]
+ ld [$ddab], a
+ ld a, [$de77]
+ ld [$ddac], a
+ ld hl, $de78
+ ld de, wMusicOctave
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de7c
+ ld de, $ddb3
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de80
+ ld de, $ddb7
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de84
+ ld de, $ddbb
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de88
+ ld de, wMusicE8
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de8c
+ ld de, $ddc3
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de90
+ ld de, wMusicE9
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de94
+ ld de, wMusicEC
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de98
+ ld de, wMusicSpeed
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $de9c
+ ld de, wMusicVibratoType2
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $dea0
+ ld de, wMusicVibratoDelay
+ ld a, $4
+ call Music2_CopyData
+ ld hl, $dea4
+ ld de, wMusicVolume
+ ld a, $3
+ call Music2_CopyData
+ ld hl, $dea7
+ ld de, wMusicE4
+ ld a, $3
+ call Music2_CopyData
+ ld hl, $deaa
+ ld de, $dded
+ ld a, $2
+ call Music2_CopyData
+ ld a, [$deac]
+ ld [$ddef], a
+ ld hl, $dead
+ ld de, wMusicReturnAddress
+ ld a, $8
+ call Music2_CopyData
+ ld hl, $deb5
+ ld de, $ddfb
+ ld a, $30
+ call Music2_CopyData
+ ret
+
+; copies a bytes from hl to de
+Music2_CopyData: ; f8c18 (3e:4c18)
+ ld c, a
+.asm_f8c19
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_f8c19
+ ret
+
+Unknown_f8c20: ; f8c20 (3e:4c20)
+INCBIN "baserom.gbc",$f8c20,$f8c28 - $f8c20
+
+Unknown_f8c28: ; f8c28 (3e:4c28)
+INCBIN "baserom.gbc",$f8c28,$f8c30 - $f8c28
+
+Unknown_f8c30: ; f8c30 (3e:4c30)
+INCBIN "baserom.gbc",$f8c30,$f8cda - $f8c30
+
+Music2_WaveInstruments: ; f8cda (3e:4cda)
+INCLUDE "audio/wave_instruments.asm"
+
+Music2_NoiseInstruments: ; f8d34 (3e:4d34)
+INCLUDE "audio/noise_instruments.asm"
+
+Music2_VibratoTypes: ; f8dde (3e:4dde)
+INCLUDE "audio/vibrato_types.asm"
+
+Unknown_f8e85: ; f8e85 (3e:4e85)
+INCBIN "baserom.gbc",$f8e85,$f8ee5 - $f8e85
+
+INCLUDE "audio/music2_headers.asm"
+
+INCLUDE "audio/music/pcmainmenu.asm"
+INCLUDE "audio/music/pokemondome.asm"
+INCLUDE "audio/music/challengehall.asm"
+INCLUDE "audio/music/club1.asm"
+INCLUDE "audio/music/club2.asm"
+INCLUDE "audio/music/club3.asm"
+INCLUDE "audio/music/ronald.asm"
+INCLUDE "audio/music/imakuni.asm"
+INCLUDE "audio/music/hallofhonor.asm"
+INCLUDE "audio/music/credits.asm"
+
+rept $109
+db $ff
+endr
diff --git a/audio/music2_headers.asm b/audio/music2_headers.asm
new file mode 100755
index 0000000..cafaa4f
--- /dev/null
+++ b/audio/music2_headers.asm
@@ -0,0 +1,281 @@
+NumberOfSongs2: ; f8ee5 (3e:4ee5)
+ db $1f
+
+SongBanks2: ; f8ee6 (3e:4ee6)
+ db BANK(Music_Stop)
+ db BANK(Music_TitleScreen)
+ db BANK(Music_DuelTheme1)
+ db BANK(Music_DuelTheme2)
+ db BANK(Music_DuelTheme3)
+ db BANK(Music_PauseMenu)
+ db BANK(Music_PCMainMenu)
+ db BANK(Music_DeckMachine)
+ db BANK(Music_CardPop)
+ db BANK(Music_Overworld)
+ db BANK(Music_PokemonDome)
+ db BANK(Music_ChallengeHall)
+ db BANK(Music_Club1)
+ db BANK(Music_Club2)
+ db BANK(Music_Club3)
+ db BANK(Music_Ronald)
+ db BANK(Music_Imakuni)
+ db BANK(Music_HallOfHonor)
+ db BANK(Music_Credits)
+ db BANK(Music_Unused13)
+ db BANK(Music_Unused14)
+ db BANK(Music_MatchStart1)
+ db BANK(Music_MatchStart2)
+ db BANK(Music_MatchStart3)
+ db BANK(Music_MatchVictory)
+ db BANK(Music_MatchLoss)
+ db BANK(Music_DarkDiddly)
+ db BANK(Music_Unused1b)
+ db BANK(Music_BoosterPack)
+ db BANK(Music_Medal)
+ db BANK(Music_Unused1e)
+
+SongHeaderPointers2: ; f8f05 (3e:4f05)
+ dw Music_Stop
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw Music_PCMainMenu
+ dw $0000
+ dw $0000
+ dw $0000
+ dw Music_PokemonDome
+ dw Music_ChallengeHall
+ dw Music_Club1
+ dw Music_Club2
+ dw Music_Club3
+ dw Music_Ronald
+ dw Music_Imakuni
+ dw Music_HallOfHonor
+ dw Music_Credits
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Stop
+ db %0000
+
+;Music_TitleScreen
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_DuelTheme1
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_DuelTheme2
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_DuelTheme3
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_PauseMenu
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_PCMainMenu: ; f8f71 (3e:4f71)
+ db %1111
+ dw Music_PCMainMenu_Ch1
+ dw Music_PCMainMenu_Ch2
+ dw Music_PCMainMenu_Ch3
+ dw Music_PCMainMenu_Ch4
+
+;Music_DeckMachine
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_CardPop
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Overworld
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+Music_PokemonDome: ; f8f95 (3e:4f95)
+ db %1111
+ dw Music_PokemonDome_Ch1
+ dw Music_PokemonDome_Ch2
+ dw Music_PokemonDome_Ch3
+ dw Music_PokemonDome_Ch4
+
+Music_ChallengeHall: ; f8f9e (3e:4f9e)
+ db %1111
+ dw Music_ChallengeHall_Ch1
+ dw Music_ChallengeHall_Ch2
+ dw Music_ChallengeHall_Ch3
+ dw Music_ChallengeHall_Ch4
+
+Music_Club1: ; f8fa7 (3e:4fa7)
+ db %1111
+ dw Music_Club1_Ch1
+ dw Music_Club1_Ch2
+ dw Music_Club1_Ch3
+ dw Music_Club1_Ch4
+
+Music_Club2: ; f8fb0 (3e:4fb0)
+ db %0111
+ dw Music_Club2_Ch1
+ dw Music_Club2_Ch2
+ dw Music_Club2_Ch3
+ dw $0000
+
+Music_Club3: ; f8fb9 (3e:4fb9)
+ db %1111
+ dw Music_Club3_Ch1
+ dw Music_Club3_Ch2
+ dw Music_Club3_Ch3
+ dw Music_Club3_Ch4
+
+Music_Ronald: ; f8fc2 (3e:4fc2)
+ db %1111
+ dw Music_Ronald_Ch1
+ dw Music_Ronald_Ch2
+ dw Music_Ronald_Ch3
+ dw Music_Ronald_Ch4
+
+Music_Imakuni: ; f8fcb (3e:4fcb)
+ db %1111
+ dw Music_Imakuni_Ch1
+ dw Music_Imakuni_Ch2
+ dw Music_Imakuni_Ch3
+ dw Music_Imakuni_Ch4
+
+Music_HallOfHonor: ; f8fd4 (3e:4fd4)
+ db %0111
+ dw Music_HallOfHonor_Ch1
+ dw Music_HallOfHonor_Ch2
+ dw Music_HallOfHonor_Ch3
+ dw $0000
+
+Music_Credits: ; f8fdd (3e:4fdd)
+ db %1111
+ dw Music_Credits_Ch1
+ dw Music_Credits_Ch2
+ dw Music_Credits_Ch3
+ dw Music_Credits_Ch4
+
+;Music_Unused13
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Unused14
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_MatchStart1
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_MatchStart2
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_MatchStart3
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_MatchVictory
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_MatchLoss
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_DarkDiddly
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Unused1b
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_BoosterPack
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Medal
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
+
+;Music_Unused1e
+ db %0000
+ dw $0000
+ dw $0000
+ dw $0000
+ dw $0000
diff --git a/audio/noise_instruments.asm b/audio/noise_instruments.asm
new file mode 100755
index 0000000..96433ab
--- /dev/null
+++ b/audio/noise_instruments.asm
@@ -0,0 +1,37 @@
+ dw .bass
+ dw .unused
+ dw .snare1
+ dw .unused
+ dw .snare2
+ dw .unused
+ dw .snare3
+ dw .unused
+ dw .snare4
+ dw .unused
+ dw .unused
+ dw .snare5
+
+.unused
+ db $00,$ed,$02,$c0,$46,$63,$ff
+
+.bass
+ db $88,$32,$d2,$c0,$46,$61,$ff
+
+.snare1
+ db $88,$24,$a1,$80,$16,$16,$16,$15,$17,$ff
+
+.snare2
+ db $88,$00,$95,$80,$05,$04,$02,$01,$ff
+
+.snare3
+ db $88,$32,$b1,$c0,$02,$01,$01,$01,$ff
+
+.snare4
+ db $88,$00,$84,$80,$04,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
+ db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
+ db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$ff
+
+.snare5
+ db $88,$00,$c4,$80,$05,$03,$03,$03,$03,$03,$03,$03,$03,$02,$02,$02,$02,$02
+ db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02
+ db $02,$02,$02,$02,$02,$02,$02,$02,$02,$01,$01,$01,$01,$01,$01,$ff
diff --git a/audio/sfx.asm b/audio/sfx.asm
new file mode 100755
index 0000000..cb3e2a8
--- /dev/null
+++ b/audio/sfx.asm
@@ -0,0 +1,599 @@
+Func_fc000: ; fc000 (3f:4000)
+ jp Func_fc006
+
+Func_fc003: ; fc003 (3f:4003)
+ jp Func_fc059
+
+Func_fc006: ; fc006 (3f:4006)
+ ld hl, NumberOfSFX
+ cp [hl]
+ jr nc, .asm_fc058
+ add a
+ ld c, a
+ ld b, $0
+ ld a, [$de53]
+ or a
+ jr z, .asm_fc019
+ call Func_fc279
+.asm_fc019
+ ld a, $1
+ ld [$de53], a
+ ld hl, SFXHeaderPointers
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hli]
+ ld [$dd8c], a
+ ld [$de54], a
+ ld de, $de4b
+ ld c, $0
+.asm_fc031
+ ld a, [$de54]
+ rrca
+ ld [$de54], a
+ jr nc, .asm_fc050
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ push hl
+ ld hl, $de2f
+ add hl, bc
+ ld [hl], $0
+ ld hl, $de33
+ add hl, bc
+ ld [hl], $1
+ pop hl
+ jr .asm_fc052
+.asm_fc050
+ inc de
+ inc de
+.asm_fc052
+ inc c
+ ld a, $4
+ cp c
+ jr nz, .asm_fc031
+.asm_fc058
+ ret
+
+Func_fc059: ; fc059 (3f:4059)
+ ld a, [$dd8c]
+ or a
+ jr nz, .asm_fc063
+ call Func_fc26c
+ ret
+.asm_fc063
+ xor a
+ ld b, a
+ ld c, a
+ ld a, [$dd8c]
+ ld [$de54], a
+.asm_fc06c
+ ld hl, $de54
+ ld a, [hl]
+ rrca
+ ld [hl], a
+ jr nc, .asm_fc08d
+ ld hl, $de33
+ add hl, bc
+ ld a, [hl]
+ dec a
+ jr z, .asm_fc082
+ ld [hl], a
+ call Func_fc18d
+ jr .asm_fc08d
+.asm_fc082
+ ld hl, $de4b
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call Func_fc094
+.asm_fc08d
+ inc c
+ ld a, c
+ cp $4
+ jr nz, .asm_fc06c
+ ret
+
+Func_fc094: ; fc094 (3f:4094)
+ ld a, [hl]
+ and $f0
+ swap a
+ add a
+ ld e, a
+ ld d, $0
+ ld a, [hli]
+ push hl
+ and $f
+ ld hl, SFX_CommandTable
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld h, d
+ ld l, e
+ jp [hl]
+
+SFX_CommandTable: ; fc0ab (3f:40ab)
+ dw SFX_0
+ dw SFX_1
+ dw SFX_2
+ dw SFX_loop
+ dw SFX_endloop
+ dw SFX_5
+ dw SFX_6
+ dw SFX_7
+ dw SFX_8
+ dw SFX_unused
+ dw SFX_unused
+ dw SFX_unused
+ dw SFX_unused
+ dw SFX_unused
+ dw SFX_unused
+ dw SFX_end
+
+SFX_unused: ; fc0cb (3f:40cb)
+ jp Func_fc094
+
+SFX_0: ; fc0ce (3f:40ce)
+ ld d, a
+ pop hl
+ ld a, [hli]
+ ld e, a
+ push hl
+ ld hl, $de37
+ add hl, bc
+ add hl, bc
+ push bc
+ ld b, [hl]
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld a, c
+ cp $3
+ jr nz, .asm_fc0e9
+ ld a, b
+ xor e
+ and $8
+ swap a
+ ld d, a
+.asm_fc0e9
+ pop bc
+ ld hl, $de2b
+ add hl, bc
+ ld a, [hl]
+ ld [hl], $0
+ or d
+ ld d, a
+ ld hl, rNR11
+ ld a, c
+ add a
+ add a
+ add c
+ add l
+ ld l, a
+ ld a, [hl]
+ and $c0
+ ld [hli], a
+ inc hl
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+ pop de
+Func_fc105: ; fc105 (3f:4105)
+ ld hl, $de4b
+ add hl, bc
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+SFX_1: ; fc10e (3f:410e)
+ ld hl, $de2b
+ add hl, bc
+ ld a, $80
+ ld [hl], a
+ pop hl
+ ld a, [hli]
+ ld e, a
+ push hl
+ ld hl, rNR12
+ ld a, c
+ add a
+ add a
+ add c
+ add l
+ ld l, a
+ ld [hl], e
+ pop hl
+ jp Func_fc094
+
+SFX_2: ; fc127 (3f:4127)
+ swap a
+ ld e, a
+ ld hl, rNR11
+ ld a, c
+ add a
+ add a
+ add c
+ add l
+ ld l, a
+ ld [hl], e
+ pop hl
+ jp Func_fc094
+
+SFX_loop: ; fc138 (3f:4138)
+ ld hl, $de43
+ add hl, bc
+ add hl, bc
+ pop de
+ ld a, [de]
+ inc de
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, $de3f
+ add hl, bc
+ ld [hl], a
+ ld l, e
+ ld h, d
+ jp Func_fc094
+
+SFX_endloop: ; fc14d (3f:414d)
+ ld hl, $de3f
+ add hl, bc
+ ld a, [hl]
+ dec a
+ jr z, .asm_fc162
+ ld [hl], a
+ ld hl, $de43
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop de
+ jp Func_fc094
+.asm_fc162
+ pop hl
+ jp Func_fc094
+
+SFX_5: ; fc166 (3f:4166)
+ ld hl, $de2f
+ add hl, bc
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [hli]
+ ld [de], a
+ jp Func_fc094
+
+SFX_6: ; fc172 (3f:4172)
+ ld a, c
+ cp $3
+ jr nz, .asm_fc17c
+ call Func_fc1cd
+ jr .asm_fc17f
+.asm_fc17c
+ call Func_fc18d
+.asm_fc17f
+ ld hl, $de33
+ add hl, bc
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [hli]
+ ld [de], a
+ ld e, l
+ ld d, h
+ jp Func_fc105
+
+Func_fc18d: ; fc18d (3f:418d)
+ ld hl, $de2f
+ add hl, bc
+ ld a, [hl]
+ or a
+ jr z, .asm_fc1cc
+ ld hl, $de37
+ add hl, bc
+ add hl, bc
+ bit 7, a
+ jr z, .asm_fc1aa
+ xor $ff
+ inc a
+ ld d, a
+ ld a, [hl]
+ sub d
+ ld [hli], a
+ ld e, a
+ ld a, [hl]
+ sbc b
+ jr .asm_fc1b1
+.asm_fc1aa
+ ld d, a
+ ld a, [hl]
+ add d
+ ld [hli], a
+ ld e, a
+ ld a, [hl]
+ adc b
+.asm_fc1b1
+ ld [hl], a
+ ld hl, $de2b
+ add hl, bc
+ ld d, [hl]
+ ld [hl], $0
+ or d
+ ld d, a
+ ld hl, rNR11
+ ld a, c
+ add a
+ add a
+ add c
+ add l
+ ld l, a
+ ld a, [hl]
+ and $c0
+ ld [hli], a
+ inc hl
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+.asm_fc1cc
+ ret
+
+Func_fc1cd: ; fc1cd (3f:41cd)
+ ld hl, $de32
+ ld a, [hl]
+ or a
+ jr z, .asm_fc201
+ ld hl, $de3d
+ bit 7, a
+ jr z, .asm_fc1e5
+ xor $ff
+ inc a
+ ld d, a
+ ld e, [hl]
+ ld a, e
+ sub d
+ ld [hl], a
+ jr .asm_fc1ea
+.asm_fc1e5
+ ld d, a
+ ld e, [hl]
+ ld a, e
+ add d
+ ld [hl], a
+.asm_fc1ea
+ ld d, a
+ xor e
+ and $8
+ swap a
+ ld hl, $de2e
+ ld e, [hl]
+ ld [hl], $0
+ or e
+ ld e, a
+ ld hl, rNR41
+ xor a
+ ld [hli], a
+ inc hl
+ ld a, d
+ ld [hli], a
+ ld [hl], e
+.asm_fc201
+ ret
+
+SFX_7: ; fc202 (3f:4202)
+ add a
+ ld d, $0
+ ld e, a
+ ld hl, SFX_WaveInstruments
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, $0
+ ld [rNR30], a
+ ld b, d
+ ld de, $ff30
+.asm_fc215
+ ld a, [hli]
+ ld [de], a
+ inc de
+ inc b
+ ld a, b
+ cp $10
+ jr nz, .asm_fc215
+ ld a, $1
+ ld [$dd8b], a
+ ld a, $80
+ ld [rNR30], a
+ ld b, $0
+ pop hl
+ jp Func_fc094
+
+SFX_8: ; fc22d (3f:422d)
+ pop hl
+ ld a, [hli]
+ push hl
+ push bc
+ inc c
+ ld e, $ee
+.asm_fc234
+ dec c
+ jr z, .asm_fc23c
+ rlca
+ rlc e
+ jr .asm_fc234
+.asm_fc23c
+ ld d, a
+ ld hl, $dd85
+ ld a, [hl]
+ and e
+ or d
+ ld [hl], a
+ pop bc
+ pop hl
+ jp Func_fc094
+
+SFX_end: ; fc249 (3f:4249)
+ ld e, c
+ inc e
+ ld a, $7f
+.asm_fc24d
+ rlca
+ dec e
+ jr nz, .asm_fc24d
+ ld e, a
+ ld a, [$dd8c]
+ and e
+ ld [$dd8c], a
+ ld a, c
+ rlca
+ rlca
+ add c
+ ld e, a
+ ld d, b
+ ld hl, rNR12
+ add hl, de
+ ld a, $8
+ ld [hli], a
+ inc hl
+ swap a
+ ld [hl], a
+ pop hl
+ ret
+
+Func_fc26c: ; fc26c (3f:426c)
+ xor a
+ ld [$de53], a
+ ld [$dd83], a
+ ld a, $80
+ ld [$dd82], a
+ ret
+
+Func_fc279: ; fc279 (3f:4279)
+ ld a, $8
+ ld a, [rNR12]
+ ld a, [rNR22]
+ ld a, [rNR32]
+ ld a, [rNR42]
+ ld a, $80
+ ld a, [rNR14]
+ ld a, [rNR24]
+ ld a, [rNR44]
+ xor a
+ ld [$dd8c], a
+ ret
+
+INCLUDE "audio/sfx_headers.asm"
+
+SFX_WaveInstruments: ; fc485 (3f:4485)
+INCLUDE "audio/wave_instruments.asm"
+
+INCLUDE "audio/sfx/sfx_01.asm"
+INCLUDE "audio/sfx/sfx_02.asm"
+INCLUDE "audio/sfx/sfx_03.asm"
+INCLUDE "audio/sfx/sfx_04.asm"
+INCLUDE "audio/sfx/sfx_05.asm"
+INCLUDE "audio/sfx/sfx_06.asm"
+INCLUDE "audio/sfx/sfx_07.asm"
+INCLUDE "audio/sfx/sfx_08.asm"
+INCLUDE "audio/sfx/sfx_09.asm"
+INCLUDE "audio/sfx/sfx_0a.asm"
+INCLUDE "audio/sfx/sfx_0b.asm"
+INCLUDE "audio/sfx/sfx_0c.asm"
+INCLUDE "audio/sfx/sfx_0d.asm"
+INCLUDE "audio/sfx/sfx_0e.asm"
+INCLUDE "audio/sfx/sfx_0f.asm"
+INCLUDE "audio/sfx/sfx_10.asm"
+INCLUDE "audio/sfx/sfx_11.asm"
+INCLUDE "audio/sfx/sfx_12.asm"
+INCLUDE "audio/sfx/sfx_13.asm"
+INCLUDE "audio/sfx/sfx_14.asm"
+INCLUDE "audio/sfx/sfx_15.asm"
+INCLUDE "audio/sfx/sfx_16.asm"
+INCLUDE "audio/sfx/sfx_17.asm"
+INCLUDE "audio/sfx/sfx_18.asm"
+INCLUDE "audio/sfx/sfx_19.asm"
+INCLUDE "audio/sfx/sfx_1a.asm"
+INCLUDE "audio/sfx/sfx_1b.asm"
+INCLUDE "audio/sfx/sfx_1c.asm"
+INCLUDE "audio/sfx/sfx_1d.asm"
+INCLUDE "audio/sfx/sfx_1e.asm"
+INCLUDE "audio/sfx/sfx_1f.asm"
+INCLUDE "audio/sfx/sfx_20.asm"
+INCLUDE "audio/sfx/sfx_21.asm"
+INCLUDE "audio/sfx/sfx_22.asm"
+INCLUDE "audio/sfx/sfx_23.asm"
+INCLUDE "audio/sfx/sfx_24.asm"
+INCLUDE "audio/sfx/sfx_25.asm"
+INCLUDE "audio/sfx/sfx_26.asm"
+INCLUDE "audio/sfx/sfx_27.asm"
+INCLUDE "audio/sfx/sfx_28.asm"
+INCLUDE "audio/sfx/sfx_29.asm"
+INCLUDE "audio/sfx/sfx_2a.asm"
+INCLUDE "audio/sfx/sfx_2b.asm"
+INCLUDE "audio/sfx/sfx_2c.asm"
+INCLUDE "audio/sfx/sfx_2d.asm"
+INCLUDE "audio/sfx/sfx_2e.asm"
+INCLUDE "audio/sfx/sfx_2f.asm"
+INCLUDE "audio/sfx/sfx_30.asm"
+INCLUDE "audio/sfx/sfx_31.asm"
+INCLUDE "audio/sfx/sfx_32.asm"
+INCLUDE "audio/sfx/sfx_33.asm"
+INCLUDE "audio/sfx/sfx_34.asm"
+INCLUDE "audio/sfx/sfx_35.asm"
+INCLUDE "audio/sfx/sfx_36.asm"
+INCLUDE "audio/sfx/sfx_37.asm"
+INCLUDE "audio/sfx/sfx_38.asm"
+INCLUDE "audio/sfx/sfx_39.asm"
+INCLUDE "audio/sfx/sfx_3a.asm"
+INCLUDE "audio/sfx/sfx_3b.asm"
+INCLUDE "audio/sfx/sfx_3c.asm"
+INCLUDE "audio/sfx/sfx_3d.asm"
+INCLUDE "audio/sfx/sfx_3e.asm"
+INCLUDE "audio/sfx/sfx_3f.asm"
+INCLUDE "audio/sfx/sfx_40.asm"
+INCLUDE "audio/sfx/sfx_41.asm"
+INCLUDE "audio/sfx/sfx_42.asm"
+INCLUDE "audio/sfx/sfx_43.asm"
+INCLUDE "audio/sfx/sfx_44.asm"
+INCLUDE "audio/sfx/sfx_45.asm"
+INCLUDE "audio/sfx/sfx_46.asm"
+INCLUDE "audio/sfx/sfx_47.asm"
+INCLUDE "audio/sfx/sfx_48.asm"
+INCLUDE "audio/sfx/sfx_49.asm"
+INCLUDE "audio/sfx/sfx_4a.asm"
+INCLUDE "audio/sfx/sfx_4b.asm"
+INCLUDE "audio/sfx/sfx_4c.asm"
+INCLUDE "audio/sfx/sfx_4d.asm"
+INCLUDE "audio/sfx/sfx_4e.asm"
+INCLUDE "audio/sfx/sfx_4f.asm"
+INCLUDE "audio/sfx/sfx_50.asm"
+INCLUDE "audio/sfx/sfx_51.asm"
+INCLUDE "audio/sfx/sfx_52.asm"
+INCLUDE "audio/sfx/sfx_53.asm"
+INCLUDE "audio/sfx/sfx_54.asm"
+INCLUDE "audio/sfx/sfx_55.asm"
+INCLUDE "audio/sfx/sfx_56.asm"
+INCLUDE "audio/sfx/sfx_57.asm"
+INCLUDE "audio/sfx/sfx_58.asm"
+INCLUDE "audio/sfx/sfx_59.asm"
+INCLUDE "audio/sfx/sfx_5a.asm"
+INCLUDE "audio/sfx/sfx_5b.asm"
+INCLUDE "audio/sfx/sfx_5c.asm"
+INCLUDE "audio/sfx/sfx_5d.asm"
+INCLUDE "audio/sfx/sfx_5e.asm"
+INCLUDE "audio/sfx/sfx_5f.asm"
+
+rept $c1
+db $ff
+endr
diff --git a/audio/sfx_headers.asm b/audio/sfx_headers.asm
new file mode 100755
index 0000000..6485425
--- /dev/null
+++ b/audio/sfx_headers.asm
@@ -0,0 +1,494 @@
+NumberOfSFX: ; fc290 (3f:4290)
+ db $60
+
+SFXHeaderPointers: ; fc291 (3f:4291)
+ dw SFX_Stop
+ dw SFX_01
+ dw SFX_02
+ dw SFX_03
+ dw SFX_04
+ dw SFX_05
+ dw SFX_06
+ dw SFX_07
+ dw SFX_08
+ dw SFX_09
+ dw SFX_0a
+ dw SFX_0b
+ dw SFX_0c
+ dw SFX_0d
+ dw SFX_0e
+ dw SFX_0f
+ dw SFX_10
+ dw SFX_11
+ dw SFX_12
+ dw SFX_13
+ dw SFX_14
+ dw SFX_15
+ dw SFX_16
+ dw SFX_17
+ dw SFX_18
+ dw SFX_19
+ dw SFX_1a
+ dw SFX_1b
+ dw SFX_1c
+ dw SFX_1d
+ dw SFX_1e
+ dw SFX_1f
+ dw SFX_20
+ dw SFX_21
+ dw SFX_22
+ dw SFX_23
+ dw SFX_24
+ dw SFX_25
+ dw SFX_26
+ dw SFX_27
+ dw SFX_28
+ dw SFX_29
+ dw SFX_2a
+ dw SFX_2b
+ dw SFX_2c
+ dw SFX_2d
+ dw SFX_2e
+ dw SFX_2f
+ dw SFX_30
+ dw SFX_31
+ dw SFX_32
+ dw SFX_33
+ dw SFX_34
+ dw SFX_35
+ dw SFX_36
+ dw SFX_37
+ dw SFX_38
+ dw SFX_39
+ dw SFX_3a
+ dw SFX_3b
+ dw SFX_3c
+ dw SFX_3d
+ dw SFX_3e
+ dw SFX_3f
+ dw SFX_40
+ dw SFX_41
+ dw SFX_42
+ dw SFX_43
+ dw SFX_44
+ dw SFX_45
+ dw SFX_46
+ dw SFX_47
+ dw SFX_48
+ dw SFX_49
+ dw SFX_4a
+ dw SFX_4b
+ dw SFX_4c
+ dw SFX_4d
+ dw SFX_4e
+ dw SFX_4f
+ dw SFX_50
+ dw SFX_51
+ dw SFX_52
+ dw SFX_53
+ dw SFX_54
+ dw SFX_55
+ dw SFX_56
+ dw SFX_57
+ dw SFX_58
+ dw SFX_59
+ dw SFX_5a
+ dw SFX_5b
+ dw SFX_5c
+ dw SFX_5d
+ dw SFX_5e
+ dw SFX_5f
+
+SFX_Stop: ; fc351 (3f:4351)
+ db %0000
+
+SFX_01: ; fc352 (3f:4352)
+ db %0010
+ dw SFX_01_Ch1
+
+SFX_02: ; fc355 (3f:4355)
+ db %0010
+ dw SFX_02_Ch1
+
+SFX_03: ; fc358 (3f:4358)
+ db %0010
+ dw SFX_03_Ch1
+
+SFX_04: ; fc35b (3f:435b)
+ db %0010
+ dw SFX_04_Ch1
+
+SFX_05: ; fc35e (3f:435e)
+ db %0010
+ dw SFX_05_Ch1
+
+SFX_06: ; fc361 (3f:4361)
+ db %0010
+ dw SFX_06_Ch1
+
+SFX_07: ; fc364 (3f:4364)
+ db %1000
+ dw SFX_07_Ch1
+
+SFX_08: ; fc367 (3f:4367)
+ db %1000
+ dw SFX_08_Ch1
+
+SFX_09: ; fc36a (3f:436a)
+ db %1000
+ dw SFX_09_Ch1
+
+SFX_0a: ; fc36d (3f:436d)
+ db %0010
+ dw SFX_0a_Ch1
+
+SFX_0b: ; fc370 (3f:4370)
+ db %0010
+ dw SFX_0b_Ch1
+
+SFX_0c: ; fc373 (3f:4373)
+ db %1000
+ dw SFX_0c_Ch1
+
+SFX_0d: ; fc376 (3f:4376)
+ db %0010
+ dw SFX_0d_Ch1
+
+SFX_0e: ; fc379 (3f:4379)
+ db %0010
+ dw SFX_0e_Ch1
+
+SFX_0f: ; fc37c (3f:437c)
+ db %1000
+ dw SFX_0f_Ch1
+
+SFX_10: ; fc37f (3f:437f)
+ db %0010
+ dw SFX_10_Ch1
+
+SFX_11: ; fc382 (3f:4382)
+ db %0010
+ dw SFX_11_Ch1
+
+SFX_12: ; fc385 (3f:4385)
+ db %0010
+ dw SFX_12_Ch1
+
+SFX_13: ; fc388 (3f:4388)
+ db %0010
+ dw SFX_13_Ch1
+
+SFX_14: ; fc38b (3f:438b)
+ db %0010
+ dw SFX_14_Ch1
+
+SFX_15: ; fc38e (3f:438e)
+ db %0010
+ dw SFX_15_Ch1
+
+SFX_16: ; fc391 (3f:4391)
+ db %1000
+ dw SFX_16_Ch1
+
+SFX_17: ; fc394 (3f:4394)
+ db %1000
+ dw SFX_17_Ch1
+
+SFX_18: ; fc397 (3f:4397)
+ db %1000
+ dw SFX_18_Ch1
+
+SFX_19: ; fc39a (3f:439a)
+ db %1000
+ dw SFX_19_Ch1
+
+SFX_1a: ; fc39d (3f:439d)
+ db %1000
+ dw SFX_1a_Ch1
+
+SFX_1b: ; fc3a0 (3f:43a0)
+ db %1000
+ dw SFX_1b_Ch1
+
+SFX_1c: ; fc3a3 (3f:43a3)
+ db %1000
+ dw SFX_1c_Ch1
+
+SFX_1d: ; fc3a6 (3f:43a6)
+ db %1000
+ dw SFX_1d_Ch1
+
+SFX_1e: ; fc3a9 (3f:43a9)
+ db %1000
+ dw SFX_1e_Ch1
+
+SFX_1f: ; fc3ac (3f:43ac)
+ db %1000
+ dw SFX_1f_Ch1
+
+SFX_20: ; fc3af (3f:43af)
+ db %1000
+ dw SFX_20_Ch1
+
+SFX_21: ; fc3b2 (3f:43b2)
+ db %1000
+ dw SFX_21_Ch1
+
+SFX_22: ; fc3b5 (3f:43b5)
+ db %1000
+ dw SFX_22_Ch1
+
+SFX_23: ; fc3b8 (3f:43b8)
+ db %1000
+ dw SFX_23_Ch1
+
+SFX_24: ; fc3bb (3f:43bb)
+ db %1000
+ dw SFX_24_Ch1
+
+SFX_25: ; fc3be (3f:43be)
+ db %0010
+ dw SFX_25_Ch1
+
+SFX_26: ; fc3c1 (3f:43c1)
+ db %0010
+ dw SFX_26_Ch1
+
+SFX_27: ; fc3c4 (3f:43c4)
+ db %0010
+ dw SFX_27_Ch1
+
+SFX_28: ; fc3c7 (3f:43c7)
+ db %1010
+ dw SFX_28_Ch1
+ dw SFX_28_Ch2
+
+SFX_29: ; fc3cc (3f:43cc)
+ db %1000
+ dw SFX_29_Ch1
+
+SFX_2a: ; fc3cf (3f:43cf)
+ db %1000
+ dw SFX_2a_Ch1
+
+SFX_2b: ; fc3d2 (3f:43d2)
+ db %0010
+ dw SFX_2b_Ch1
+
+SFX_2c: ; fc3d5 (3f:43d5)
+ db %0010
+ dw SFX_2c_Ch1
+
+SFX_2d: ; fc3d8 (3f:43d8)
+ db %1000
+ dw SFX_2d_Ch1
+
+SFX_2e: ; fc3db (3f:43db)
+ db %1000
+ dw SFX_2e_Ch1
+
+SFX_2f: ; fc3de (3f:43de)
+ db %1000
+ dw SFX_2f_Ch1
+
+SFX_30: ; fc3e1 (3f:43e1)
+ db %1000
+ dw SFX_30_Ch1
+
+SFX_31: ; fc3e4 (3f:43e4)
+ db %0010
+ dw SFX_31_Ch1
+
+SFX_32: ; fc3e7 (3f:43e7)
+ db %1010
+ dw SFX_32_Ch1
+ dw SFX_32_Ch2
+
+SFX_33: ; fc3ec (3f:43ec)
+ db %1010
+ dw SFX_33_Ch1
+ dw SFX_33_Ch2
+
+SFX_34: ; fc3f1 (3f:43f1)
+ db %0010
+ dw SFX_34_Ch1
+
+SFX_35: ; fc3f4 (3f:43f4)
+ db %1000
+ dw SFX_35_Ch1
+
+SFX_36: ; fc3f7 (3f:43f7)
+ db %0010
+ dw SFX_36_Ch1
+
+SFX_37: ; fc3fa (3f:43fa)
+ db %1010
+ dw SFX_37_Ch1
+ dw SFX_37_Ch2
+
+SFX_38: ; fc3ff (3f:43ff)
+ db %0010
+ dw SFX_38_Ch1
+
+SFX_39: ; fc402 (3f:4402)
+ db %1010
+ dw SFX_39_Ch1
+ dw SFX_39_Ch2
+
+SFX_3a: ; fc407 (3f:4407)
+ db %0010
+ dw SFX_3a_Ch1
+
+SFX_3b: ; fc40a (3f:440a)
+ db %0010
+ dw SFX_3b_Ch1
+
+SFX_3c: ; fc40d (3f:440d)
+ db %0010
+ dw SFX_3c_Ch1
+
+SFX_3d: ; fc410 (3f:4410)
+ db %0010
+ dw SFX_3d_Ch1
+
+SFX_3e: ; fc413 (3f:4413)
+ db %0010
+ dw SFX_3e_Ch1
+
+SFX_3f: ; fc416 (3f:4416)
+ db %1000
+ dw SFX_3f_Ch1
+
+SFX_40: ; fc419 (3f:4419)
+ db %0010
+ dw SFX_40_Ch1
+
+SFX_41: ; fc41c (3f:441c)
+ db %0010
+ dw SFX_41_Ch1
+
+SFX_42: ; fc41f (3f:441f)
+ db %0010
+ dw SFX_42_Ch1
+
+SFX_43: ; fc422 (3f:4422)
+ db %1000
+ dw SFX_43_Ch1
+
+SFX_44: ; fc425 (3f:4425)
+ db %1000
+ dw SFX_44_Ch1
+
+SFX_45: ; fc428 (3f:4428)
+ db %0010
+ dw SFX_45_Ch1
+
+SFX_46: ; fc42b (3f:442b)
+ db %0010
+ dw SFX_46_Ch1
+
+SFX_47: ; fc42e (3f:442e)
+ db %1000
+ dw SFX_47_Ch1
+
+SFX_48: ; fc431 (3f:4431)
+ db %1000
+ dw SFX_48_Ch1
+
+SFX_49: ; fc434 (3f:4434)
+ db %0010
+ dw SFX_49_Ch1
+
+SFX_4a: ; fc437 (3f:4437)
+ db %0010
+ dw SFX_4a_Ch1
+
+SFX_4b: ; fc43a (3f:443a)
+ db %1000
+ dw SFX_4b_Ch1
+
+SFX_4c: ; fc43d (3f:443d)
+ db %0010
+ dw SFX_4c_Ch1
+
+SFX_4d: ; fc440 (3f:4440)
+ db %0010
+ dw SFX_4d_Ch1
+
+SFX_4e: ; fc443 (3f:4443)
+ db %0010
+ dw SFX_4e_Ch1
+
+SFX_4f: ; fc446 (3f:4446)
+ db %0010
+ dw SFX_4f_Ch1
+
+SFX_50: ; fc449 (3f:4449)
+ db %1010
+ dw SFX_50_Ch1
+ dw SFX_50_Ch2
+
+SFX_51: ; fc44e (3f:444e)
+ db %1010
+ dw SFX_51_Ch1
+ dw SFX_51_Ch2
+
+SFX_52: ; fc453 (3f:4453)
+ db %1010
+ dw SFX_52_Ch1
+ dw SFX_52_Ch2
+
+SFX_53: ; fc458 (3f:4458)
+ db %1010
+ dw SFX_53_Ch1
+ dw SFX_53_Ch2
+
+SFX_54: ; fc45d (3f:445d)
+ db %0010
+ dw SFX_54_Ch1
+
+SFX_55: ; fc460 (3f:4460)
+ db %0010
+ dw SFX_55_Ch1
+
+SFX_56: ; fc463 (3f:4463)
+ db %0010
+ dw SFX_56_Ch1
+
+SFX_57: ; fc466 (3f:4466)
+ db %0010
+ dw SFX_57_Ch1
+
+SFX_58: ; fc469 (3f:4469)
+ db %0010
+ dw SFX_58_Ch1
+
+SFX_59: ; fc46c (3f:446c)
+ db %0010
+ dw SFX_59_Ch1
+
+SFX_5a: ; fc46f (3f:446f)
+ db %0010
+ dw SFX_5a_Ch1
+
+SFX_5b: ; fc472 (3f:4472)
+ db %0010
+ dw SFX_5b_Ch1
+
+SFX_5c: ; fc475 (3f:4475)
+ db %1000
+ dw SFX_5c_Ch1
+
+SFX_5d: ; fc478 (3f:4478)
+ db %1011
+ dw SFX_5d_Ch1
+ dw SFX_5d_Ch2
+ dw SFX_5d_Ch3
+
+SFX_5e: ; fc47f (3f:447f)
+ db %0010
+ dw SFX_5e_Ch1
+
+SFX_5f: ; fc482 (3f:4482)
+ db %1000
+ dw SFX_5f_Ch1
diff --git a/audio/vibrato_types.asm b/audio/vibrato_types.asm
new file mode 100755
index 0000000..d51546e
--- /dev/null
+++ b/audio/vibrato_types.asm
@@ -0,0 +1,44 @@
+ dw .vibratoType0
+ dw .vibratoType1
+ dw .vibratoType2
+ dw .vibratoType3
+ dw .vibratoType4
+ dw .vibratoType5
+ dw .vibratoType6
+ dw .vibratoType7
+ dw .vibratoType8
+ dw .vibratoType9
+ dw .vibratoTypeA
+
+.vibratoType0
+ db $00,$80,$80
+
+.vibratoType1
+ db $01,$02,$01,$00,$ff,$fe,$ff,$00,$80,$80
+
+.vibratoType2
+ db $03,$fd,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$01
+
+.vibratoType3
+ db $01,$01,$00,$00,$ff,$ff,$00,$00,$80,$80
+
+.vibratoType4
+ db $01,$01,$01,$00,$00,$00,$ff,$ff,$ff,$00,$00,$00,$80,$80
+
+.vibratoType5
+ db $02,$04,$06,$04,$02,$00,$fe,$fc,$fa,$fc,$fe,$00,$80,$80
+
+.vibratoType6
+ db $04,$04,$08,$08,$04,$04,$00,$00,$fc,$fc,$f8,$f8,$fc,$fc,$00,$00,$80,$80
+
+.vibratoType7
+ db $f8,$f8,$f9,$f9,$fa,$fa,$fb,$fb,$fc,$fc,$fd,$fd,$fe,$fe,$ff,$ff,$00,$00,$80,$05
+
+.vibratoType8
+ db $02,$04,$02,$00,$fe,$fc,$fe,$00,$80,$80
+
+.vibratoType9
+ db $01,$02,$04,$02,$01,$00,$ff,$fe,$fc,$fe,$ff,$00,$80,$08
+
+.vibratoTypeA
+ db $01,$01,$01,$01,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$80,$80
diff --git a/audio/wave_instruments.asm b/audio/wave_instruments.asm
new file mode 100755
index 0000000..98197dc
--- /dev/null
+++ b/audio/wave_instruments.asm
@@ -0,0 +1,20 @@
+ dw .wave0
+ dw .wave1
+ dw .wave2
+ dw .wave3
+ dw .wave4
+
+.wave0
+ db $79,$bd,$ff,$ff,$ff,$ff,$fd,$b9,$75,$31,$00,$00,$00,$00,$01,$35
+
+.wave1
+ db $01,$12,$23,$34,$45,$56,$67,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
+
+.wave2
+ db $46,$8a,$cc,$cc,$cc,$cc,$ca,$86,$42,$11,$00,$00,$00,$00,$01,$12
+
+.wave3
+ db $7a,$df,$ff,$da,$74,$10,$00,$14,$7a,$df,$ff,$da,$74,$10,$00,$14
+
+.wave4
+ db $ee,$ee,$ee,$ee,$ee,$ee,$ee,$ee,$00,$00,$00,$00,$00,$00,$00,$00