summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-06-19 13:26:28 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-06-19 13:26:28 -0700
commitf4920d6387bc331c88de6a5be3acfbfa25f6afeb (patch)
tree0e7bcafabe34430221eccf5de43f9fc9e155faff
parent9fefcec47605aa232f520a38b915f8c24e2d1499 (diff)
Label debug menu
-rwxr-xr-xconstants/screen_constants.asm3
-rwxr-xr-xengine/select_gameboy_target_menu.asm238
-rw-r--r--gfx/select_gb_target_text.png (renamed from gfx/unused_text.png)bin357 -> 357 bytes
-rwxr-xr-xhome.asm3
-rwxr-xr-xmain.asm239
5 files changed, 246 insertions, 237 deletions
diff --git a/constants/screen_constants.asm b/constants/screen_constants.asm
index 53f05e9..bec5a6e 100755
--- a/constants/screen_constants.asm
+++ b/constants/screen_constants.asm
@@ -1,5 +1,8 @@
; See wCurrentScreen in wram.asm
+; unreachable debug menu, which allows selecting DMG or Game Boy Color during boot
+SCREEN_SELECT_GAMEBOY_TARGET EQU $0
+
SCREEN_ERASE_ALL_DATA EQU $1
SCREEN_COPYRIGHT EQU $2
SCREEN_TITLESCREEN EQU $3
diff --git a/engine/select_gameboy_target_menu.asm b/engine/select_gameboy_target_menu.asm
new file mode 100755
index 0000000..9ee76bb
--- /dev/null
+++ b/engine/select_gameboy_target_menu.asm
@@ -0,0 +1,238 @@
+HandleSelectGameboyTargetMenu: ; 0x8000
+; This is an unreachable debug menu, which allowed developers to choose to run the game
+; in either DMG or Game Boy Color mode.
+; If you want to access this menu, you must set the initial screen to
+; SCREEN_SELECT_GAMEBOY_TARGET, instead of SCREEN_ERASE_ALL_DATA.
+; Additionally, you must hold UP when booting the game.
+ ld a, [wScreenState]
+ rst JumpTable ; calls JumpToFuncInTable
+SelectGameboyTargetMenuFunctions: ; 0x8004
+ dw InitSelectGameboyTargetMenu
+ dw SelectCGBOrDMG
+ dw EndSelectGameboyTargetMenu
+
+InitSelectGameboyTargetMenu: ; 0x800a
+ xor a
+ ld [hFFC4], a
+ ld a, [hJoypadState]
+ cp D_UP
+ jr nz, .skipDebugMenu
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr nz, .showMenu
+.skipDebugMenu
+ ld hl, wCurrentScreen
+ inc [hl] ; set to SCREEN_ERASE_ALL_DATA
+ xor a
+ ld [wScreenState], a
+ ret
+
+.showMenu
+ ld a, $45
+ ld [hLCDC], a
+ ld a, $e4
+ ld [wBGP], a
+ ld [wOBP0], a
+ ld [wOBP1], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ call LoadGameboyTargetMenuGfx
+ call ClearOAMBuffer
+ call Func_b66
+ call Func_588
+ call Func_bbe
+ ld hl, wScreenState
+ inc [hl]
+ ret
+
+LoadGameboyTargetMenuGfx: ; 0x8049
+ ld a, $1
+ ld [rVBK], a
+ ld c, $ff
+ call FillTilesVRAM
+ call FillBackgroundsVRAM
+ xor a
+ ld [rVBK], a
+ ld c, $0
+ call FillTilesVRAM
+ call FillBackgroundsVRAM
+ ; This code makes no sense.
+ ; It first fills 33 bytes at $ff68, then refills at rOBPI
+ ld a, $80
+ ld de, rBGPI
+ ld hl, Data_80e4
+ call Fill33Bytes
+ ld a, $80
+ ld de, rOBPI
+ ld hl, Data_80f4
+ call Fill33Bytes
+ ld hl, SelectGameboyTargetGfxPointers
+ xor a
+ call LoadVideoData
+ ld a, Bank(SelectGameboyTarget_TileData)
+ ld bc, SelectGameboyTarget_TileData
+ ld de, LoadTileLists
+ call Func_10c5
+ ret
+
+SelectGameboyTargetGfxPointers: ; 0x8089
+ dw SelectGameboyTarget_VideoData
+
+SelectGameboyTarget_VideoData: ; 0x808b
+ VIDEO_DATA_TILES SelectGameboyTargetTextGfx, vTilesSH + $200, $400
+ db $FF, $FF ; terminators
+
+SelectGameboyTarget_TileData: ; 0x8094
+ db $13
+ dbw $06, vBGMap + $a3
+ db $BC, $AF, $B6, $AF, $AD, $BD
+ dbw $06, $98AA
+ db $BD, $AB, $BB, $B1, $AF, $BD
+ dbw $04, $98E3
+ db $D0, $AD, $B1, $AC
+ dbw $03, $9924
+ db $AE, $B7, $B1
+ db $00 ; terminator
+
+FillBackgroundsVRAM: ; 0x80b5
+ ld hl, vBGMap
+.fillLoop
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld a, h
+ cp $a0 ; end of VRAM
+ jr nz, .fillLoop
+ ret
+
+FillTilesVRAM: ; 0x80c3
+ ld hl, vTilesOB
+.fillLoop
+ ld a, c
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld a, h
+ cp (vBGMap >> 8)
+ jr nz, .fillLoop
+ ret
+
+Fill33Bytes: ; 0x80d1
+; First places a in [de].
+; Then, reads 32 bytes from hl and places them in order at de + 1
+ ld [de], a
+ inc de
+ ld b, $4
+.outerLoop
+ ld c, $8
+ push hl
+.innerLoop
+ ld a, [hli]
+ ld [de], a
+ ld a, [hli]
+ ld [de], a
+ dec c
+ jr nz, .innerLoop
+ pop hl
+ dec b
+ jr nz, .outerLoop
+ ret
+
+Data_80e4: ; 0x80e4
+ db $FF
+ db $7F
+ db $B5
+ db $56
+ db $6B
+ db $2D
+ db $00
+ db $00
+ db $FF
+ db $7F
+ db $B5
+ db $56
+ db $6B
+ db $2D
+ db $00
+ db $00
+Data_80f4: ; 0x80f4
+ db $B5
+ db $56
+ db $FF
+ db $7F
+ db $6B
+ db $2D
+ db $00
+ db $00
+ db $FF
+ db $7F
+ db $B5
+ db $56
+ db $6B
+ db $2D
+ db $00
+ db $00
+
+SelectCGBOrDMG: ; 0x8104
+ ld a, [hNewlyPressedButtons]
+ ld b, a
+ and (D_DOWN | D_UP)
+ jr z, .directionNotPressed
+ ld a, [hGameBoyColorFlag]
+ ld [hFFC4], a
+ xor $1
+ ld [hGameBoyColorFlag], a
+ jr .moveCursor
+
+.directionNotPressed
+ bit BIT_A_BUTTON, b
+ ret z
+ ld hl, wScreenState
+ inc [hl]
+ ret
+
+.moveCursor
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr nz, .cgb
+ ld a, Bank(DMGSelected_TileData)
+ ld bc, DMGSelected_TileData
+ ld de, LoadTileLists
+ call Func_10c5
+ ret
+
+.cgb
+ ld a, Bank(CGBSelected_TileData)
+ ld bc, CGBSelected_TileData
+ ld de, LoadTileLists
+ call Func_10c5
+ ret
+
+DMGSelected_TileData: ; 0x813a
+ db $02
+ dbw $01, $98E3
+ db $D1
+ dbw $01, $9923
+ db $D0
+ db $00 ; terminator
+
+CGBSelected_TileData: ; 0x8144
+ db $02
+ dbw $01, $98E3
+ db $D0
+ dbw $01, $9923
+ db $D1
+ db $00 ; terminator
+
+EndSelectGameboyTargetMenu: ; 0x414e
+ call Func_cb5
+ call Func_576
+ ld hl, wCurrentScreen
+ inc [hl] ; set to SCREEN_ERASE_ALL_DATA
+ xor a
+ ld [wScreenState], a
+ ret
diff --git a/gfx/unused_text.png b/gfx/select_gb_target_text.png
index da416b7..da416b7 100644
--- a/gfx/unused_text.png
+++ b/gfx/select_gb_target_text.png
Binary files differ
diff --git a/home.asm b/home.asm
index 81bdcd9..eaadda9 100755
--- a/home.asm
+++ b/home.asm
@@ -3947,7 +3947,8 @@ CallTable_2049: ; 0x2049
; First two bytes is function pointer.
; Third byte is bank of function.
; Fourth byte seems to be unused.
- padded_dab Func_8000
+ ; SCREEN_SELECT_GAMEBOY_TARGET
+ padded_dab HandleSelectGameboyTargetMenu
; SCREEN_ERASE_ALL_DATA
padded_dab HandleEraseAllDataMenu
diff --git a/main.asm b/main.asm
index 1cb02e0..86a478c 100755
--- a/main.asm
+++ b/main.asm
@@ -9,240 +9,7 @@ INCLUDE "data/oam_frames.asm"
SECTION "bank2", ROMX, BANK[$2]
-Func_8000: ; 0x8000
- ld a, [wScreenState]
- rst JumpTable ; calls JumpToFuncInTable
-CallTable_8004: ; 0x8004
- dw Func_800a
- dw Func_8104
- dw Func_814e
-
-Func_800a: ; 0x800a
- xor a
- ld [hFFC4], a
- ld a, [hJoypadState]
- cp D_UP
- jr nz, .asm_8018
- ld a, [hGameBoyColorFlag]
- and a
- jr nz, .asm_8021
-.asm_8018
- ld hl, wCurrentScreen
- inc [hl]
- xor a
- ld [wScreenState], a
- ret
-
-.asm_8021
- ld a, $45
- ld [hLCDC], a
- ld a, $e4
- ld [wBGP], a
- ld [wOBP0], a
- ld [wOBP1], a
- xor a
- ld [hSCX], a
- ld [hSCY], a
- call Func_8049
- call ClearOAMBuffer
- call Func_b66
- call Func_588
- call Func_bbe
- ld hl, wScreenState
- inc [hl]
- ret
-
-Func_8049: ; 0x8049
-; This function is unused?
- ld a, $1
- ld [rVBK], a
- ld c, $ff
- call FillTilesVRAM
- call FillBackgroundsVRAM
- xor a
- ld [rVBK], a
- ld c, $0
- call FillTilesVRAM
- call FillBackgroundsVRAM
- ; This code makes no sense.
- ; It first fills 33 bytes at $ff68, then refills at rOBPI
- ld a, $80
- ld de, rBGPI
- ld hl, Data_80e4
- call Fill33Bytes
- ld a, $80
- ld de, rOBPI
- ld hl, Data_80f4
- call Fill33Bytes
- ld hl, PointerTable_8089
- xor a
- call LoadVideoData
- ld a, Bank(UnusedTileListData_8094)
- ld bc, UnusedTileListData_8094
- ld de, LoadTileLists
- call Func_10c5
- ret
-
-PointerTable_8089: ; 0x8089
- dw UnusedTextVideoData
-
-UnusedTextVideoData: ; 0x808b
- VIDEO_DATA_TILES UnusedTextGfx, vTilesSH + $200, $400
- db $FF, $FF ; terminators
-
-UnusedTileListData_8094: ; 0x8094
- db $13
- dbw $06, vBGMap + $a3
- db $BC, $AF, $B6, $AF, $AD, $BD
- dbw $06, $98AA
- db $BD, $AB, $BB, $B1, $AF, $BD
- dbw $04, $98E3
- db $D0, $AD, $B1, $AC
- dbw $03, $9924
- db $AE, $B7, $B1
- db $00 ; terminator
-
-FillBackgroundsVRAM: ; 0x80b5
- ld hl, vBGMap
-.fillLoop
- xor a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld a, h
- cp $a0 ; end of VRAM
- jr nz, .fillLoop
- ret
-
-FillTilesVRAM: ; 0x80c3
- ld hl, vTilesOB
-.fillLoop
- ld a, c
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld a, h
- cp (vBGMap >> 8)
- jr nz, .fillLoop
- ret
-
-Fill33Bytes: ; 0x80d1
-; First places a in [de].
-; Then, reads 32 bytes from hl and places them in order at de + 1
- ld [de], a
- inc de
- ld b, $4
-.outerLoop
- ld c, $8
- push hl
-.innerLoop
- ld a, [hli]
- ld [de], a
- ld a, [hli]
- ld [de], a
- dec c
- jr nz, .innerLoop
- pop hl
- dec b
- jr nz, .outerLoop
- ret
-
-Data_80e4: ; 0x80e4
- db $FF
- db $7F
- db $B5
- db $56
- db $6B
- db $2D
- db $00
- db $00
- db $FF
- db $7F
- db $B5
- db $56
- db $6B
- db $2D
- db $00
- db $00
-Data_80f4: ; 0x80f4
- db $B5
- db $56
- db $FF
- db $7F
- db $6B
- db $2D
- db $00
- db $00
- db $FF
- db $7F
- db $B5
- db $56
- db $6B
- db $2D
- db $00
- db $00
-
-Func_8104: ; 0x8104
- ld a, [hNewlyPressedButtons]
- ld b, a
- and (D_DOWN | D_UP)
- jr z, .asm_8115
- ld a, [hGameBoyColorFlag]
- ld [hFFC4], a
- xor $1
- ld [hGameBoyColorFlag], a
- jr .asm_811d
-
-.asm_8115
- bit BIT_A_BUTTON, b
- ret z
- ld hl, wScreenState
- inc [hl]
- ret
-
-.asm_811d
- ld a, [hGameBoyColorFlag]
- and a
- jr nz, .asm_812e
- ld a, Bank(Data_813a)
- ld bc, Data_813a
- ld de, LoadTileLists
- call Func_10c5
- ret
-
-.asm_812e
- ld a, Bank(Data_8144)
- ld bc, Data_8144
- ld de, LoadTileLists
- call Func_10c5
- ret
-
-Data_813a: ; 0x813a
- db $02
- dbw $01, $98E3
- db $D1
- dbw $01, $9923
- db $D0
- db $00 ; terminator
-
-Data_8144: ; 0x8144
- db $02
- dbw $01, $98E3
- db $D0
- dbw $01, $9923
- db $D1
- db $00 ; terminator
-
-Func_814e: ; 0x414e
- call Func_cb5
- call Func_576
- ld hl, wCurrentScreen
- inc [hl]
- xor a
- ld [wScreenState], a
- ret
+INCLUDE "engine/select_gameboy_target_menu.asm"
HandleEraseAllDataMenu: ; 0x815d
ld a, [wScreenState]
@@ -53729,8 +53496,8 @@ StageRedFieldBottomCollisionMasks: ; 0xd9000
INCLUDE "data/mon_gfx/mon_billboard_palette_maps_3.asm"
-UnusedTextGfx: ; 0xd9c00
- INCBIN "gfx/unused_text.2bpp"
+SelectGameboyTargetTextGfx: ; 0xd9c00
+ INCBIN "gfx/select_gb_target_text.2bpp"
CopyrightTextGfx: ; 0xda000
INCBIN "gfx/copyright_text.2bpp"