pokepinball/engine/erase_all_data_menu.asm
Raymond Dodge d1f4c7fab7 Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
2024-03-17 09:27:05 -05:00

116 lines
2.1 KiB
NASM

HandleEraseAllDataMenu: ; 0x815d
ld a, [wScreenState]
rst JumpTable ; calls JumpToFuncInTable
EraseAllDataMenuFunctions: ; 0x8161
dw CheckForResetButtonCombo
dw HandleEraseAllDataInput
dw ExitEraseAllDataMenu
CheckForResetButtonCombo: ; 0x8167
ldh a, [hJoypadState]
cp (D_UP | D_RIGHT | START | SELECT)
jr z, .heldCorrectButtons
ld hl, wCurrentScreen
inc [hl]
ret
.heldCorrectButtons
ld a, $41
ldh [hLCDC], a
ld a, $e4
ld [wBGP], a
xor a
ld [wOBP0], a
ld [wOBP1], a
ldh [hSCX], a
ldh [hSCY], a
ldh a, [hGameBoyColorFlag]
ld hl, EraseAllDataGfxPointers
call LoadVideoData
call ClearSpriteBuffer
call SetAllPalettesWhite
call EnableLCD
call SGBNormal
call FadeIn
ld hl, wScreenState
inc [hl]
ret
EraseAllDataGfxPointers: ; 0x81a2
dw EraseAllDataGfx_GameBoy
dw EraseAllDataGfx_GameBoyColor
EraseAllDataGfx_GameBoy: ; 0x81a6
VIDEO_DATA_TILES EraseAllDataGfx, vTilesBG, $300
VIDEO_DATA_TILEMAP EraseAllDataTilemap, vBGMap, $400
db $FF, $FF ; terminators
EraseAllDataGfx_GameBoyColor: ; 0x81b6
VIDEO_DATA_TILES EraseAllDataGfx, vTilesBG, $300
VIDEO_DATA_TILEMAP EraseAllDataTilemap, vBGMap, $400
VIDEO_DATA_BGATTR EraseAllDataBGAttributes, vBGMap, $400
VIDEO_DATA_PALETTES HighScoresRedStagePalettes, $80
db $FF, $FF ; terminators
HandleEraseAllDataInput: ; 0x81d4
ldh a, [hNewlyPressedButtons]
bit BIT_A_BUTTON, a
jr z, .checkForBButton
ld hl, $a000
xor a
ld b, a
.eraseSavedDataLoop
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
dec b
jr nz, .eraseSavedDataLoop
ld hl, wScreenState
inc [hl]
ret
.checkForBButton
bit BIT_B_BUTTON, a
ret z
ld hl, wScreenState
inc [hl]
ret
ExitEraseAllDataMenu: ; 0x820f
call FadeOut
call DisableLCD
ld hl, wCurrentScreen
inc [hl]
xor a
ld [wScreenState], a
ret