Add staff roll music.

This commit is contained in:
Randy Thiemann 2023-11-20 07:43:38 +01:00
parent 778d1cfe21
commit 707274390d
19 changed files with 14663 additions and 4492 deletions

View File

@ -166,6 +166,12 @@ Thanks for playtesting and debugging go to:
- \_Zaphod77\_ - \_Zaphod77\_
- bbbbbr - bbbbbr
The amazing logo was created by Lindtobias.
The tracks in this game were created by Pandora Nova, but the title screen was inspired by TGM2's Mode Select music, and the final challenge roll is a demake of Kenet & Rez' Unreal Superhero 3.
Parts of the grading system were contributed by CreeperCraftYT™
## License ## License
Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com> Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -40,12 +40,6 @@ REPT 7
ENDR ENDR
db BANK_SFX db BANK_SFX
SECTION "Bank ID BANK_MUSIC", ROMX[$4000], BANK[BANK_MUSIC]
REPT 7
rst $00
ENDR
db BANK_MUSIC
SECTION "Bank ID BANK_TITLE", ROMX[$4000], BANK[BANK_TITLE] SECTION "Bank ID BANK_TITLE", ROMX[$4000], BANK[BANK_TITLE]
REPT 7 REPT 7
rst $00 rst $00
@ -64,5 +58,29 @@ REPT 7
ENDR ENDR
db BANK_GAMEPLAY_BIG db BANK_GAMEPLAY_BIG
SECTION "Bank ID BANK_MUSIC_0", ROMX[$4000], BANK[BANK_MUSIC_0]
REPT 7
rst $00
ENDR
db BANK_MUSIC_0
SECTION "Bank ID BANK_MUSIC_1", ROMX[$4000], BANK[BANK_MUSIC_1]
REPT 7
rst $00
ENDR
db BANK_MUSIC_1
SECTION "Bank ID BANK_MUSIC_2", ROMX[$4000], BANK[BANK_MUSIC_2]
REPT 7
rst $00
ENDR
db BANK_MUSIC_2
SECTION "Bank ID BANK_MUSIC_3", ROMX[$4000], BANK[BANK_MUSIC_3]
REPT 7
rst $00
ENDR
db BANK_MUSIC_3
ENDC ENDC

View File

@ -155,10 +155,13 @@ ENDM
DEF BANK_MAIN EQU 0 DEF BANK_MAIN EQU 0
DEF BANK_OTHER EQU 1 DEF BANK_OTHER EQU 1
DEF BANK_SFX EQU 2 DEF BANK_SFX EQU 2
DEF BANK_MUSIC EQU 3 DEF BANK_TITLE EQU 3
DEF BANK_TITLE EQU 4 DEF BANK_GAMEPLAY EQU 4
DEF BANK_GAMEPLAY EQU 5 DEF BANK_GAMEPLAY_BIG EQU 5
DEF BANK_GAMEPLAY_BIG EQU 6 DEF BANK_MUSIC_0 EQU 6
DEF BANK_MUSIC_1 EQU 7
DEF BANK_MUSIC_2 EQU 8
DEF BANK_MUSIC_3 EQU 9
; Some useful palettes. ; Some useful palettes.
DEF PALETTE_REGULAR EQU %11100100 DEF PALETTE_REGULAR EQU %11100100
@ -207,6 +210,48 @@ DEF PIECE_O EQU 5
DEF PIECE_T EQU 6 DEF PIECE_T EQU 6
; Sound effect names ; Sound effect names
DEF REG_NR10_CH1_SWEEP EQU $10
DEF REG_NR11_CH1_LENDT EQU $11
DEF REG_NR12_CH1_VOLEV EQU $12
DEF REG_NR13_CH1_FRQLO EQU $13
DEF REG_NR14_CH1_FRQHI EQU $14
DEF REG_NR21_CH2_LENDT EQU $16
DEF REG_NR22_CH2_VOLEV EQU $17
DEF REG_NR23_CH2_FRQLO EQU $18
DEF REG_NR24_CH2_FRQHI EQU $19
DEF REG_NR30_CH3_DACEN EQU $1A
DEF REG_NR31_CH3_LENGT EQU $1B
DEF REG_NR32_CH3_VOLUM EQU $1C
DEF REG_NR33_CH3_FRQLO EQU $1D
DEF REG_NR34_CH3_FRQHI EQU $1E
DEF REG_NR41_CH4_LENGT EQU $20
DEF REG_NR42_CH4_VOLEV EQU $21
DEF REG_NR43_CH4_FQRND EQU $22
DEF REG_NR44_CH4_CNTRL EQU $23
DEF REG_NR50_MVOLVINPN EQU $24
DEF REG_NR51_MASTERPAN EQU $25
DEF REG_NR52_MASTERCTL EQU $26
DEF REG_WAVE_PATTERN_0 EQU $30
DEF REG_WAVE_PATTERN_1 EQU $31
DEF REG_WAVE_PATTERN_2 EQU $32
DEF REG_WAVE_PATTERN_3 EQU $33
DEF REG_WAVE_PATTERN_4 EQU $34
DEF REG_WAVE_PATTERN_5 EQU $35
DEF REG_WAVE_PATTERN_6 EQU $36
DEF REG_WAVE_PATTERN_7 EQU $37
DEF REG_WAVE_PATTERN_8 EQU $38
DEF REG_WAVE_PATTERN_9 EQU $39
DEF REG_WAVE_PATTERN_A EQU $3A
DEF REG_WAVE_PATTERN_B EQU $3B
DEF REG_WAVE_PATTERN_C EQU $3C
DEF REG_WAVE_PATTERN_D EQU $3D
DEF REG_WAVE_PATTERN_E EQU $3E
DEF REG_WAVE_PATTERN_F EQU $3F
DEF END_OF_SAMPLE EQU $FF
DEF END_OF_SONG EQU $FE
DEF END_OF_SFX EQU $FE
DEF CHANGE_BANK EQU $FD
DEF CHANGE_PLAYHEAD EQU $FC
DEF SFX_IRS EQU $80 DEF SFX_IRS EQU $80
DEF SFX_IHS EQU 10 DEF SFX_IHS EQU 10
DEF SFX_LINE_CLEAR EQU 11 DEF SFX_LINE_CLEAR EQU 11
@ -218,6 +263,7 @@ DEF SFX_RANKUP EQU 16
DEF SFX_READYGO EQU 17 DEF SFX_READYGO EQU 17
DEF SFX_RANKGM EQU 18 DEF SFX_RANKGM EQU 18
DEF MUSIC_MENU EQU $EE DEF MUSIC_MENU EQU $EE
DEF MUSIC_ROLL EQU $EF
; Tile data offsets ; Tile data offsets
; Shared ; Shared

View File

@ -15,15 +15,14 @@
; along with this program. If not, see <https://www.gnu.org/licenses/>. ; along with this program. If not, see <https://www.gnu.org/licenses/>.
IF !DEF(MUSIC_DATA_INC) IF !DEF(MUSIC_DATA_0_INC)
DEF MUSIC_DATA_INC EQU 1 DEF MUSIC_DATA_0_INC EQU 1
INCLUDE "globals.asm" INCLUDE "globals.asm"
SECTION "Music Data", ROMX, BANK[BANK_MUSIC] SECTION "Music Data 0", ROMX, BANK[BANK_MUSIC_0]
sMusicMenu:: sMusicMenu::
db REG_NR12_CH1_VOLEV, $F2, REG_NR32_CH3_VOLUM, $40, REG_NR42_CH4_VOLEV, $F2, REG_NR11_CH1_LENDT, $BF db REG_NR12_CH1_VOLEV, $F2, REG_NR32_CH3_VOLUM, $40, REG_NR42_CH4_VOLEV, $F2, REG_NR11_CH1_LENDT, $BF
db REG_NR11_CH1_LENDT, $BF, REG_NR12_CH1_VOLEV, $F2, REG_NR13_CH1_FRQLO, $4F, REG_NR14_CH1_FRQHI, $87 db REG_NR11_CH1_LENDT, $BF, REG_NR12_CH1_VOLEV, $F2, REG_NR13_CH1_FRQLO, $4F, REG_NR14_CH1_FRQHI, $87
@ -2216,5 +2215,4 @@ sMusicMenu::
sMusicMenuEnd:: sMusicMenuEnd::
ENDC ENDC

4455
src/res/music_data_1.inc Normal file

File diff suppressed because it is too large Load Diff

4250
src/res/music_data_2.inc Normal file

File diff suppressed because it is too large Load Diff

975
src/res/music_data_3.inc Normal file
View File

@ -0,0 +1,975 @@
; DMGTRIS
; Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <https://www.gnu.org/licenses/>.
IF !DEF(MUSIC_DATA_3_INC)
DEF MUSIC_DATA_3_INC EQU 1
INCLUDE "globals.asm"
SECTION "Music Data 3", ROMX, BANK[BANK_MUSIC_3]
sMusicRoll3::
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $55, REG_NR14_CH1_FRQHI, $07, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $89
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $63, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $71, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $7D, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $8E, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $86
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $A0, REG_NR14_CH1_FRQHI, $07, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $C4
db REG_NR34_CH3_FRQHI, $06, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $A8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $B0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $B1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $B2, REG_NR24_CH2_FRQHI, $07
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $62
db REG_NR34_CH3_FRQHI, $87, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $BE, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $B4, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $B5, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR23_CH2_FRQLO, $B6, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $B7, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $B8, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $BA, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $BB, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $BA, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $B5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $B1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $BA, REG_NR24_CH2_FRQHI, $07
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $C4
db REG_NR34_CH3_FRQHI, $86, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $A1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $8D, REG_NR14_CH1_FRQHI, $07, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $C4
db REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $C4, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $77, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $85
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $6A, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $62, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $70, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $7C, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $8E, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF
db REG_NR21_CH2_LENDT, $BF, REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $87
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $62
db REG_NR34_CH3_FRQHI, $87, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $74
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $A0, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $A8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $B0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $B1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF
db REG_NR21_CH2_LENDT, $BF, REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $B1, REG_NR24_CH2_FRQHI, $87
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $89
db REG_NR34_CH3_FRQHI, $85, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $BE, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $BB, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $97, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $B5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $B1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $BA, REG_NR24_CH2_FRQHI, $87, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $87
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $A1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $8D, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $07, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $62, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $77, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF
db REG_NR21_CH2_LENDT, $BF, REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $CE
db REG_NR34_CH3_FRQHI, $85, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $74
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $73, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $80, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CC, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $8B, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CC, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CD, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR23_CH2_FRQLO, $CD, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR23_CH2_FRQLO, $CE, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR23_CH2_FRQLO, $CE, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR23_CH2_FRQLO, $CF, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $9A, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CF
db REG_NR24_CH2_FRQHI, $07, REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $86, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CF, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR23_CH2_FRQLO, $D0, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR23_CH2_FRQLO, $D0, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, REG_NR41_CH4_LENGT, $3F
db REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $B2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $BA, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $C0, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $73
db REG_NR34_CH3_FRQHI, $87, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $C5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $C8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $C3, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $BD, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $BA, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $B3, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $D1
db REG_NR24_CH2_FRQHI, $07, REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $86, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $74, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $AC, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $A4, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $E7, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $86, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $85
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $7A, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $73, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $80, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $D1, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $8B, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $9A, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $87
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $74, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR13_CH1_FRQLO, $B2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $BA, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $C0, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF
db REG_NR21_CH2_LENDT, $BF, REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $87
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $CE
db REG_NR34_CH3_FRQHI, $85, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $C5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $C3, REG_NR14_CH1_FRQHI, $07, REG_NR21_CH2_LENDT, $BF, REG_NR21_CH2_LENDT, $BF
db REG_NR22_CH2_VOLEV, $F0, REG_NR23_CH2_FRQLO, $CB, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $BD, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $BA, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $CE, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $B3, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $87
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $74, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $AC, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $A4, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CA
db REG_NR24_CH2_FRQHI, $07, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $CA, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07, REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR23_CH2_FRQLO, $C9, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $C8, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $C7, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $C6, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR23_CH2_FRQLO, $C5, REG_NR24_CH2_FRQHI, $07, REG_NR33_CH3_FRQLO, $73, REG_NR34_CH3_FRQHI, $07
db $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $86, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C4
db REG_NR24_CH2_FRQHI, $07, REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $85, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $74, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $7A, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C3, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $6E, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C2, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $60, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $07
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $51, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $44, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $55, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $63, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $71, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $7D, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR42_CH4_VOLEV, $F1, REG_NR13_CH1_FRQLO, $8E, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1
db REG_NR24_CH2_FRQHI, $07, REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $86, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1
db REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $A0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, REG_NR41_CH4_LENGT, $3F
db REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $B2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $03, REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $BF, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $C7, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $07
db REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $85, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $CC, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $D0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $D1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $CD, REG_NR14_CH1_FRQHI, $07, REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $07
db REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $C8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $BB, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00, REG_NR30_CH3_DACEN, $80
db REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $86, $FF
db REG_NR13_CH1_FRQLO, $B5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $AE, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $A6, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $89
db REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $85, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06
db $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR33_CH3_FRQLO, $89, REG_NR34_CH3_FRQHI, $06, $FF
db REG_NR32_CH3_VOLUM, $20, REG_NR13_CH1_FRQLO, $77, REG_NR14_CH1_FRQHI, $07, REG_NR30_CH3_DACEN, $00
db REG_NR30_CH3_DACEN, $80, REG_NR32_CH3_VOLUM, $20, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $85
db REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR13_CH1_FRQLO, $6A, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $5C, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $4C, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $44, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $20, REG_NR13_CH1_FRQLO, $55, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $63, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $71, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $7D, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $40, REG_NR13_CH1_FRQLO, $8E, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $97, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $A0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $40, REG_NR13_CH1_FRQLO, $AA, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $B2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $B8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $BF, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $60, REG_NR13_CH1_FRQLO, $C7, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, REG_NR41_CH4_LENGT, $3F, REG_NR42_CH4_VOLEV, $F1, REG_NR43_CH4_FQRND, $07
db REG_NR44_CH4_CNTRL, $80, $FF
db REG_NR13_CH1_FRQLO, $CC, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $D0, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $D1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $60, REG_NR13_CH1_FRQLO, $CD, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $C8, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $C1, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $00, REG_NR13_CH1_FRQLO, $BB, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $B5, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $AE, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $A6, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $A2, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR32_CH3_VOLUM, $00, REG_NR13_CH1_FRQLO, $99, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR13_CH1_FRQLO, $90, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $85, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $07, REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR12_CH1_VOLEV, $08, REG_NR13_CH1_FRQLO, $83, REG_NR14_CH1_FRQHI, $87, REG_NR22_CH2_VOLEV, $08
db REG_NR23_CH2_FRQLO, $C1, REG_NR24_CH2_FRQHI, $87, REG_NR32_CH3_VOLUM, $00, REG_NR33_CH3_FRQLO, $11
db REG_NR34_CH3_FRQHI, $05, REG_NR42_CH4_VOLEV, $08, REG_NR43_CH4_FQRND, $07, REG_NR44_CH4_CNTRL, $80
db $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FF
db REG_NR33_CH3_FRQLO, $11, REG_NR34_CH3_FRQHI, $05, $FE
sMusicRoll3End::
ENDC

View File

@ -338,6 +338,10 @@ sTGM1SpeedCurve::
db 20, $00 db 20, $00
db 30, 30, 16, 30, 41 db 30, 30, 16, 30, 41
dw $0990, 990, $0999
db 20, $00
db 30, 30, 16, 30, 41
sTGM1SpeedCurveEnd:: sTGM1SpeedCurveEnd::
dw $FFFF dw $FFFF
@ -1006,12 +1010,12 @@ sTitleTiles::
DB $00,$00,$00,$00,$00,$00,$00,$00 DB $00,$00,$00,$00,$00,$00,$00,$00
DB $19,$19,$3F,$3F,$66,$66,$66,$66 DB $19,$19,$3F,$3F,$66,$66,$66,$66
DB $FF,$FF,$FF,$FF,$79,$79,$30,$30 DB $FF,$FF,$FF,$FF,$79,$79,$30,$30
DB $00,$00,$00,$00,$01,$00,$00,$00
DB $00,$00,$01,$00,$00,$00,$00,$00 DB $00,$00,$01,$00,$00,$00,$00,$00
DB $01,$00,$00,$00,$00,$00,$00,$00
DB $80,$80,$C0,$C0,$60,$60,$60,$60 DB $80,$80,$C0,$C0,$60,$60,$60,$60
DB $F0,$F0,$F0,$F0,$E0,$E0,$C0,$C0 DB $F0,$F0,$F0,$F0,$E0,$E0,$C0,$C0
DB $86,$00,$81,$00,$82,$00,$81,$00 DB $00,$00,$85,$00,$85,$00,$87,$00
DB $D6,$00,$00,$00,$00,$00,$00,$00 DB $81,$00,$D1,$00,$00,$00,$00,$00
DB $C0,$C0,$F0,$F0,$FC,$FC,$FF,$FF DB $C0,$C0,$F0,$F0,$FC,$FC,$FF,$FF
DB $FC,$FC,$F0,$F0,$C0,$C0,$00,$00 DB $FC,$FC,$F0,$F0,$C0,$C0,$00,$00
DB $C0,$00,$F0,$00,$FC,$00,$FF,$00 DB $C0,$00,$F0,$00,$FC,$00,$FF,$00

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
src/res/sources/final.vgm Normal file

Binary file not shown.

View File

@ -0,0 +1,241 @@
# DMGTRIS
# Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from construct import Struct, Const, Int32ul, Int16ul, Int8ul, Bytes
vgm_header = Struct(
"magic" / Const(b"Vgm "),
"eof_offset" / Int32ul,
"version" / Int32ul,
"sn76489_clock" / Int32ul,
"ym2413_clock" / Int32ul,
"gd3_offset" / Int32ul,
"total_samples" / Int32ul,
"loop_offset" / Int32ul,
"loop_samples" / Int32ul,
"rate" / Int32ul,
"sn_fb" / Int16ul,
"sn_w" / Int8ul,
"sn_c" / Int8ul,
"ym2612_clock" / Int32ul,
"ym2151_clock" / Int32ul,
"vgm_data_offset" / Int32ul,
"seg_pcm_clock" / Int32ul,
"seg_pcm_intf_reg" / Int32ul,
"rf5c68_clock" / Int32ul,
"ym2203_clock" / Int32ul,
"ym2608_clock" / Int32ul,
"ym2610_clock" / Int32ul,
"ym3812_clock" / Int32ul,
"ym3526_clock" / Int32ul,
"y8950_clock" / Int32ul,
"ymf262_clock" / Int32ul,
"ymf278b_clock" / Int32ul,
"ymf271_clock" / Int32ul,
"ymz280b_clock" / Int32ul,
"rf5c164_clock" / Int32ul,
"pwm_clock" / Int32ul,
"ay8910_clock" / Int32ul,
"ay8910_type" / Int8ul,
"ay8910_flags" / Int8ul,
"ym2203_ay8910_flags" / Int8ul,
"ym2608_ay8910_flags" / Int8ul,
"volume_mod" / Int8ul,
"reserved_0" / Bytes(1),
"loop_base" / Int8ul,
"loop_modifier" / Int8ul,
"dmg_clock" / Int32ul,
"nes_apu_clock" / Int32ul,
"multi_pcm_clock" / Int32ul,
"upd7759_clock" / Int32ul,
"okim6258_clock" / Int32ul,
"okim6258_flags" / Int8ul,
"k054539_flags" / Int8ul,
"c140_chip_type" / Int8ul,
"reserved_1" / Bytes(1),
"okim6295_clock" / Int32ul,
"k051649_k052539_clock" / Int32ul,
"k054539_clock" / Int32ul,
"huc6280_clock" / Int32ul,
"c140_clock" / Int32ul,
"k053260_clock" / Int32ul,
"pokey_clock" / Int32ul,
"qsound_clock" / Int32ul,
"scsp_clock" / Int32ul,
"extra_hdr_offset" / Int32ul,
"wonder_swan_clock" / Int32ul,
"vsu_clock" / Int32ul,
"saa1099_clock" / Int32ul,
"es5503_clock" / Int32ul,
"es5505_es5506_clock" / Int32ul,
"es5503_num_channels" / Int8ul,
"es5505_es5506_num_channels" / Int8ul,
"c352_clock_div" / Int8ul,
"reserved_2" / Bytes(1),
"x1_010_clock" / Int32ul,
"c352_clock" / Int32ul,
"ga20_clock" / Int32ul,
"reserved_3" / Bytes(28)
)
b3_command = Struct(
"command" / Const(b'\xB3'),
"reg" / Int8ul,
"data" / Int8ul
)
register_names = [
"REG_UNK", # 0x00
"REG_UNK", # 0x01
"REG_UNK", # 0x02
"REG_UNK", # 0x03
"REG_UNK", # 0x04
"REG_UNK", # 0x05
"REG_UNK", # 0x06
"REG_UNK", # 0x07
"REG_UNK", # 0x08
"REG_UNK", # 0x09
"REG_UNK", # 0x0A
"REG_UNK", # 0x0B
"REG_UNK", # 0x0C
"REG_UNK", # 0x0D
"REG_UNK", # 0x0E
"REG_UNK", # 0x0F
"REG_NR10_CH1_SWEEP", # 0x10
"REG_NR11_CH1_LENDT", # 0x11
"REG_NR12_CH1_VOLEV", # 0x12
"REG_NR13_CH1_FRQLO", # 0x13
"REG_NR14_CH1_FRQHI", # 0x14
"REG_UNK", # 0x15
"REG_NR21_CH2_LENDT", # 0x16
"REG_NR22_CH2_VOLEV", # 0x17
"REG_NR23_CH2_FRQLO", # 0x18
"REG_NR24_CH2_FRQHI", # 0x19
"REG_NR30_CH3_DACEN", # 0x1A
"REG_NR31_CH3_LENGT", # 0x1B
"REG_NR32_CH3_VOLUM", # 0x1C
"REG_NR33_CH3_FRQLO", # 0x1D
"REG_NR34_CH3_FRQHI", # 0x1E
"REG_UNK", # 0x1F
"REG_NR41_CH4_LENGT", # 0x20
"REG_NR42_CH4_VOLEV", # 0x21
"REG_NR43_CH4_FQRND", # 0x22
"REG_NR44_CH4_CNTRL", # 0x23
"REG_NR50_MVOLVINPN", # 0x24
"REG_NR51_MASTERPAN", # 0x25
"REG_NR52_MASTERCTL", # 0x26
"REG_UNK", # 0x27
"REG_UNK", # 0x28
"REG_UNK", # 0x29
"REG_UNK", # 0x2A
"REG_UNK", # 0x2B
"REG_UNK", # 0x2C
"REG_UNK", # 0x2D
"REG_UNK", # 0x2E
"REG_UNK", # 0x2F
"REG_WAVE_PATTERN_0", # 0x30
"REG_WAVE_PATTERN_1", # 0x31
"REG_WAVE_PATTERN_2", # 0x32
"REG_WAVE_PATTERN_3", # 0x33
"REG_WAVE_PATTERN_4", # 0x34
"REG_WAVE_PATTERN_5", # 0x35
"REG_WAVE_PATTERN_6", # 0x36
"REG_WAVE_PATTERN_7", # 0x37
"REG_WAVE_PATTERN_8", # 0x38
"REG_WAVE_PATTERN_9", # 0x39
"REG_WAVE_PATTERN_A", # 0x3A
"REG_WAVE_PATTERN_B", # 0x3B
"REG_WAVE_PATTERN_C", # 0x3C
"REG_WAVE_PATTERN_D", # 0x3D
"REG_WAVE_PATTERN_E", # 0x3E
"REG_WAVE_PATTERN_F", # 0x3F
]
def chunks(lst, n):
for i in range(0, len(lst), n):
yield lst[i:i + n]
class DB:
l = []
def __init__(self):
self.l = []
def __str__(self):
out = []
for chunk in chunks(self.l, 8):
out.append(f" db {', '.join(chunk)}")
return "\n".join(out) + "\n"
def __repr__(self):
return str(self)
def __len__(self):
return len(self.l)
def add(self, *args):
if len(args) == 1:
self.l.append(f"${args[0]:02X}")
else:
self.l.append(register_names[args[0]])
self.l.append(f"${args[1]:02X}")
def trim(self):
while self.l[-1] == "$FF":
self.l.pop()
for c, v in enumerate(register_names):
if v != "REG_UNK":
print(f"DEF {v} EQU ${c:02X}")
print()
print("sMusicRoll::")
with open("final.vgm", "rb") as f:
data = f.read()
header = vgm_header.parse(data)
data_offset = 0x34 + header.vgm_data_offset
data = data[data_offset:]
db = DB()
ctr = 0
last = None
while len(data) > 0:
if data.startswith(b'\x67\x66'):
data = data[3:]
data = data[Int32ul.parse(data) + 4:]
elif data.startswith(b'\xB3'):
b3 = b3_command.parse(data)
if last == 0x62:
print(db)
db = DB()
db.add(b3.reg + 0x10, b3.data)
last = 0xB3
data = data[3:]
elif data.startswith(b'\x62'):
db.add(0xFF)
last = 0x62
data = data[1:]
elif data.startswith(b'\x66'):
if len(db) > 0:
db.trim()
db.add(0xFE)
print(db, end="")
break
else:
print(f"Unknown command: ${data[0]:02X}")
data = data[1:]
print("sMusicRollEnd::")

Binary file not shown.

View File

@ -21,7 +21,10 @@ DEF SFX_ASM EQU 1
INCLUDE "globals.asm" INCLUDE "globals.asm"
INCLUDE "res/sfx_data.inc" INCLUDE "res/sfx_data.inc"
INCLUDE "res/music_data.inc" INCLUDE "res/music_data_0.inc"
INCLUDE "res/music_data_1.inc"
INCLUDE "res/music_data_2.inc"
INCLUDE "res/music_data_3.inc"
SECTION "High SFX Variables", HRAM SECTION "High SFX Variables", HRAM
@ -31,6 +34,12 @@ hPlayQueue:: ds 4
hNoisePlayhead:: ds 2 hNoisePlayhead:: ds 2
SECTION "SFX Variables", WRAM0
wCurrentBank:: ds 1
wBankSwitchTarget:: ds 1
wPlayHeadTarget:: ds 2
SECTION "SFX Functions", ROM0 SECTION "SFX Functions", ROM0
; Audio on, volume on, and enable all channels. ; Audio on, volume on, and enable all channels.
; Zeroes out all playheads and the queue. ; Zeroes out all playheads and the queue.
@ -53,6 +62,10 @@ SFXInit::
ldh [hPlayhead+1], a ldh [hPlayhead+1], a
ldh [hNoisePlayhead], a ldh [hNoisePlayhead], a
ldh [hNoisePlayhead+1], a ldh [hNoisePlayhead+1], a
ld [wCurrentBank], a
ld [wBankSwitchTarget], a
ld [wPlayHeadTarget], a
ld [wPlayHeadTarget+1], a
ret ret
@ -121,6 +134,21 @@ SFXProcessQueue:
; Noise effects use their own playhead that can play at the same time as the normal queue. ; Noise effects use their own playhead that can play at the same time as the normal queue.
SFXTriggerNoise:: SFXTriggerNoise::
cp a, SFX_LOCK
jr nz, :+
ld a, LOW(sSFXLock)
ldh [hNoisePlayhead], a
ld a, HIGH(sSFXLock)
ldh [hNoisePlayhead+1], a
ret
; Other noise stops when the staff roll is going.
: ld b, a
ldh a, [hCurrentlyPlaying]
cp a, MUSIC_ROLL
ret z
ld a, b
cp a, SFX_LINE_CLEAR cp a, SFX_LINE_CLEAR
jr nz, :+ jr nz, :+
ld a, LOW(sSFXLineClear) ld a, LOW(sSFXLineClear)
@ -130,31 +158,25 @@ SFXTriggerNoise::
ret ret
: cp a, SFX_LAND : cp a, SFX_LAND
jr nz, :+ ret nz
ld a, LOW(sSFXLand) ld a, LOW(sSFXLand)
ldh [hNoisePlayhead], a ldh [hNoisePlayhead], a
ld a, HIGH(sSFXLand) ld a, HIGH(sSFXLand)
ldh [hNoisePlayhead+1], a ldh [hNoisePlayhead+1], a
ret ret
: cp a, SFX_LOCK
ret nz
ld a, LOW(sSFXLock)
ldh [hNoisePlayhead], a
ld a, HIGH(sSFXLock)
ldh [hNoisePlayhead+1], a
ret
; Attempt to play the sound effect in A. Will enqueue the sound effect if the play routine is currently busy. ; Attempt to play the sound effect in A. Will enqueue the sound effect if the play routine is currently busy.
SFXEnqueue:: SFXEnqueue::
; If we're playing the grade up sound, it has absolute prio. ; If we're playing the grade up sound, or the ROLL music, it has absolute prio.
ld b, a ld b, a
ldh a, [hCurrentlyPlaying] ldh a, [hCurrentlyPlaying]
cp a, SFX_RANKUP cp a, SFX_RANKUP
ret z ret z
cp a, SFX_RANKGM cp a, SFX_RANKGM
ret z ret z
cp a, MUSIC_ROLL
ret z
; If the playhead isn't null, then we're already playing something. ; If the playhead isn't null, then we're already playing something.
ldh a, [hPlayhead] ldh a, [hPlayhead]
@ -164,11 +186,13 @@ SFXEnqueue::
or a, l or a, l
jr z, .findsfx jr z, .findsfx
ld a, b ld a, b
jr SFXPushQueue jp SFXPushQueue
.findsfx .findsfx
ld a, b ld a, b
ldh [hCurrentlyPlaying], a ldh [hCurrentlyPlaying], a
ld a, BANK_SFX
ld [wCurrentBank], a
; Menu music ; Menu music
ld a, b ld a, b
@ -179,6 +203,8 @@ SFXEnqueue::
ldh [hPlayhead], a ldh [hPlayhead], a
ld a, HIGH(sMusicMenu) ld a, HIGH(sMusicMenu)
ldh [hPlayhead+1], a ldh [hPlayhead+1], a
ld a, BANK_MUSIC_0
ld [wCurrentBank], a
jp SFXPlay jp SFXPlay
; Piece jingles. ; Piece jingles.
@ -349,7 +375,7 @@ SFXEnqueue::
ldh [hPlayhead], a ldh [hPlayhead], a
ld a, HIGH(sSFXRankUp) ld a, HIGH(sSFXRankUp)
ldh [hPlayhead+1], a ldh [hPlayhead+1], a
jr SFXPlay jp SFXPlay
: cp a, SFX_RANKGM : cp a, SFX_RANKGM
jr nz, :+ jr nz, :+
@ -357,7 +383,7 @@ SFXEnqueue::
ldh [hPlayhead], a ldh [hPlayhead], a
ld a, HIGH(sSFXRankGM) ld a, HIGH(sSFXRankGM)
ldh [hPlayhead+1], a ldh [hPlayhead+1], a
jr SFXPlay jp SFXPlay
: cp a, SFX_READYGO : cp a, SFX_READYGO
ret nz ret nz
@ -380,6 +406,8 @@ SFXKill::
ret z ret z
cp a, SFX_LEVELUP cp a, SFX_LEVELUP
ret z ret z
cp a, MUSIC_ROLL
ret z
; Kill all sound without pops. ; Kill all sound without pops.
ld a, %00111111 ld a, %00111111
@ -464,13 +492,8 @@ SFXPlayNoise::
; Must be called every frame. ; Must be called every frame.
SFXPlay:: SFXPlay::
; Bank to correct bank. ; Bank to correct bank.
ldh a, [hPlayQueue] ld a, [wCurrentBank]
cp a, MUSIC_MENU ld b, a
jr nz, :+
ld b, BANK_MUSIC
rst RSTSwitchBank
jr .play
: ld b, BANK_SFX
rst RSTSwitchBank rst RSTSwitchBank
; Load the playhead position into HL. ; Load the playhead position into HL.
@ -482,30 +505,67 @@ SFXPlay::
; Nothing to do if it's a null ptr. ; Nothing to do if it's a null ptr.
or a, l or a, l
jr nz, .getRegister jp z, RSTRestoreBank
jp RSTRestoreBank
; Otherwise, get the register to write to. ; Otherwise, get the register to write to.
.getRegister .getRegister
ld a, [hl] ld a, [hl+]
inc hl
; If it's $FE, then we're done. Check if there's more for us in the queue. ; If it's END_OF_SONG (or END_OF_SFX), then we're done. Check if there's more for us in the queue.
cp a, $FE .checkEndOfSong
jr nz, :+ cp a, END_OF_SONG
jr nz, .checkEndOfSample
rst RSTRestoreBank rst RSTRestoreBank
jp SFXProcessQueue ldh a, [hCurrentlyPlaying]
cp a, MUSIC_ROLL
jp nz, SFXProcessQueue
xor a, a
ldh [hPlayhead], a
ldh [hPlayhead+1], a
ret
; If it's $FF, then we're done for this frame. ; If it's END_OF_SAMPLE, then we're done for this frame.
: cp a, $FF .checkEndOfSample
cp a, END_OF_SAMPLE
jr z, .savePlayhead jr z, .savePlayhead
; If it's CHANGE_BANK, ready a bank switch.
.checkChangeBank
cp a, CHANGE_BANK
jr nz, .checkChangePlayHead
; What bank?
ld a, [hl+]
ld [wBankSwitchTarget], a
; Loop
jr .getRegister
; If it's CHANGE_PLAYHEAD, change the playhead and apply the bank switch.
.checkChangePlayHead
cp a, CHANGE_PLAYHEAD
jr nz, .applyRegister
; Get the new playhead position.
ld a, [hl+]
ldh [hPlayhead], a
ld a, [hl]
ldh [hPlayhead+1], a
; Apply the bank switch.
ld a, [wBankSwitchTarget]
ld [wCurrentBank], a
; Make sure we don't overflow the bank stack, and loop.
rst RSTRestoreBank
jr SFXPlay
; Otherwise, put the register in C. ; Otherwise, put the register in C.
.applyRegister
ld c, a ld c, a
; Get the value to write. ; Get the value to write.
ld a, [hl] ld a, [hl+]
inc hl
; Write it and loop. ; Write it and loop.
ldh [$ff00+c], a ldh [$ff00+c], a
@ -520,4 +580,98 @@ SFXPlay::
jp RSTRestoreBank jp RSTRestoreBank
; The final challenge song overrides everything and it also causes the sound engine to ignore everything else.
SFXGoRoll::
; It kills all sound.
ld a, %00111111
ldh [rNR11], a
ldh [rNR21], a
ld a, $FF
ldh [rNR31], a
ldh [rNR41], a
ld a, %01000000
ldh [rNR14], a
ldh [rNR24], a
ldh [rNR34], a
ldh [rNR44], a
; Clears the queue.
ld a, $FF
ldh [hPlayQueue], a
ldh [hPlayQueue+1], a
ldh [hPlayQueue+2], a
ldh [hPlayQueue+3], a
; And all playheads.
xor a, a
ldh [hPlayhead], a
ldh [hPlayhead+1], a
ldh [hNoisePlayhead], a
ldh [hNoisePlayhead+1], a
; Sets the playhead to the start of the music.
ld a, MUSIC_ROLL
ldh [hCurrentlyPlaying], a
ld a, LOW(sMusicRoll1)
ldh [hPlayhead], a
ld a, HIGH(sMusicRoll1)
ldh [hPlayhead+1], a
; Makes sure to start in the correct bank.
ld a, BANK_MUSIC_1
ld [wCurrentBank], a
; And begins playing.
jp SFXPlay
; When the game ends, we kill all the sound unconditionaly.
; If we're GM, also play the GM jingle.
SFXEndOfGame::
; Reset everything.
ld a, $FF
ldh [hPlayQueue], a
ldh [hPlayQueue+1], a
ldh [hPlayQueue+2], a
ldh [hPlayQueue+3], a
ldh [hCurrentlyPlaying], a
xor a, a
ldh [hPlayhead], a
ldh [hPlayhead+1], a
ldh [hNoisePlayhead], a
ldh [hNoisePlayhead+1], a
ld [wCurrentBank], a
ld [wBankSwitchTarget], a
ld [wPlayHeadTarget], a
ld [wPlayHeadTarget+1], a
; Kill remaining sound.
ld a, %00111111
ldh [rNR11], a
ldh [rNR21], a
ld a, $FF
ldh [rNR31], a
ldh [rNR41], a
ld a, %01000000
ldh [rNR14], a
ldh [rNR24], a
ldh [rNR34], a
ldh [rNR44], a
; If we're GM, play the GM jingle.
ld a, [wDisplayedGrade]
cp a, GRADE_GM
ret nz
ld a, BANK_SFX
ld [wCurrentBank], a
ld a, SFX_RANKGM
ldh [hCurrentlyPlaying], a
ld a, LOW(sSFXRankGM)
ldh [hPlayhead], a
ld a, HIGH(sSFXRankGM)
ldh [hPlayhead+1], a
jp SFXPlay
ENDC ENDC

View File

@ -178,6 +178,10 @@ GamePlayEventLoopHandlerB::
cp a, $FF cp a, $FF
jr nz, .normalevent jr nz, .normalevent
; No pausing in staff roll.
xor a, a
ldh [hStartState], a
; Are we in a non-game over mode? ; Are we in a non-game over mode?
ldh a, [hMode] ldh a, [hMode]
cp a, MODE_GAME_OVER cp a, MODE_GAME_OVER
@ -466,6 +470,8 @@ GamePlayEventLoopHandlerB::
.preGameOverMode .preGameOverMode
call SFXEndOfGame
ld a, $FF ld a, $FF
ld [wGameOverIgnoreInput], a ld [wGameOverIgnoreInput], a
@ -765,7 +771,8 @@ GamePlayEventLoopHandlerB::
ld a, [hl+] ld a, [hl+]
ld c, a ld c, a
ld b, [hl] ld b, [hl]
jp StartCountdown call StartCountdown
jp SFXGoRoll
; Always draw the score, level, next piece, and held piece. ; Always draw the score, level, next piece, and held piece.
@ -977,6 +984,10 @@ GamePlayBigEventLoopHandlerB:
cp a, $FF cp a, $FF
jr nz, .normalevent jr nz, .normalevent
; No pausing in staff roll.
xor a, a
ldh [hStartState], a
; Are we in a non-game over mode? ; Are we in a non-game over mode?
ldh a, [hMode] ldh a, [hMode]
cp a, MODE_GAME_OVER cp a, MODE_GAME_OVER
@ -1263,6 +1274,8 @@ GamePlayBigEventLoopHandlerB:
.preGameOverMode .preGameOverMode
call SFXEndOfGame
ld a, $FF ld a, $FF
ld [wGameOverIgnoreInput], a ld [wGameOverIgnoreInput], a
@ -1579,6 +1592,7 @@ GamePlayBigEventLoopHandlerB:
ld c, a ld c, a
ld b, [hl] ld b, [hl]
call StartCountdown call StartCountdown
jp SFXGoRoll
; Always draw the score, level, next piece, and held piece. ; Always draw the score, level, next piece, and held piece.