summaryrefslogtreecommitdiff
path: root/src/audio/music2.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/music2.asm')
-rwxr-xr-xsrc/audio/music2.asm1885
1 files changed, 1885 insertions, 0 deletions
diff --git a/src/audio/music2.asm b/src/audio/music2.asm
new file mode 100755
index 0000000..6ed8e63
--- /dev/null
+++ b/src/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