Reorganize home header

This commit is contained in:
Rangi 2020-07-03 13:03:21 -04:00
parent c9c59dc343
commit 6bd86e10c3
6 changed files with 143 additions and 192 deletions

118
home.asm
View file

@ -1,118 +1,22 @@
INCLUDE "constants.asm" INCLUDE "constants.asm"
; The rst vectors are unused. SECTION "NULL", ROM0
SECTION "rst 00", ROM0 NULL::
rst $38
SECTION "rst 08", ROM0
rst $38
SECTION "rst 10", ROM0
rst $38
SECTION "rst 18", ROM0
rst $38
SECTION "rst 20", ROM0
rst $38
SECTION "rst 28", ROM0
rst $38
SECTION "rst 30", ROM0
rst $38
SECTION "rst 38", ROM0
rst $38
; Hardware interrupts INCLUDE "home/header.asm"
SECTION "vblank", ROM0
jp VBlank
SECTION "hblank", ROM0 SECTION "High Home", ROM0
rst $38
SECTION "timer", ROM0 INCLUDE "home/lcd.asm"
jp Timer INCLUDE "home/clear_sprites.asm"
SECTION "serial", ROM0 INCLUDE "home/copy.asm"
jp Serial
SECTION "joypad", ROM0
reti
SECTION "Home", ROM0 SECTION "Home", ROM0
DisableLCD:: INCLUDE "home/start.asm"
xor a
ld [rIF], a
ld a, [rIE]
ld b, a
res 0, a
ld [rIE], a
.wait
ld a, [rLY]
cp LY_VBLANK
jr nz, .wait
ld a, [rLCDC]
and $ff ^ rLCDC_ENABLE_MASK
ld [rLCDC], a
ld a, b
ld [rIE], a
ret
EnableLCD::
ld a, [rLCDC]
set rLCDC_ENABLE, a
ld [rLCDC], a
ret
ClearSprites::
xor a
ld hl, wOAMBuffer
ld b, 40 * 4
.loop
ld [hli], a
dec b
jr nz, .loop
ret
HideSprites::
ld a, 160
ld hl, wOAMBuffer
ld de, 4
ld b, 40
.loop
ld [hl], a
add hl, de
dec b
jr nz, .loop
ret
INCLUDE "home/copy.asm"
SECTION "Entry", ROM0
nop
jp Start
SECTION "Header", ROM0
; The header is generated by rgbfix.
; The space here is allocated to prevent code from being overwritten.
ds $150 - $104
SECTION "Main", ROM0
Start::
cp GBC
jr z, .gbc
xor a
jr .ok
.gbc
ld a, 0
.ok
ld [wGBC], a
jp Init
INCLUDE "home/joypad.asm" INCLUDE "home/joypad.asm"
INCLUDE "data/maps/map_header_pointers.asm" INCLUDE "data/maps/map_header_pointers.asm"
INCLUDE "home/overworld.asm" INCLUDE "home/overworld.asm"

21
home/clear_sprites.asm Normal file
View file

@ -0,0 +1,21 @@
ClearSprites::
xor a
ld hl, wOAMBuffer
ld b, 40 * 4
.loop
ld [hli], a
dec b
jr nz, .loop
ret
HideSprites::
ld a, 160
ld hl, wOAMBuffer
ld de, 4
ld b, 40
.loop
ld [hl], a
add hl, de
dec b
jr nz, .loop
ret

57
home/header.asm Normal file
View file

@ -0,0 +1,57 @@
; rst vectors (unused)
SECTION "rst0", ROM0[$0000]
rst $38
SECTION "rst8", ROM0[$0008]
rst $38
SECTION "rst10", ROM0[$0010]
rst $38
SECTION "rst18", ROM0[$0018]
rst $38
SECTION "rst20", ROM0[$0020]
rst $38
SECTION "rst28", ROM0[$0028]
rst $38
SECTION "rst30", ROM0[$0030]
rst $38
SECTION "rst38", ROM0[$0038]
rst $38
; Game Boy hardware interrupts
SECTION "vblank", ROM0[$0040]
jp VBlank
SECTION "lcd", ROM0[$0048]
rst $38
SECTION "timer", ROM0[$0050]
jp Timer
SECTION "serial", ROM0[$0058]
jp Serial
SECTION "joypad", ROM0[$0060]
reti
SECTION "Header", ROM0[$0100]
Start::
; Nintendo requires all Game Boy ROMs to begin with a nop ($00) and a jp ($C3)
; to the starting address.
nop
jp _Start
; The Game Boy cartridge header data is patched over by rgbfix.
; This makes sure it doesn't get used for anything else.
ds $0150 - @, $00

25
home/lcd.asm Normal file
View file

@ -0,0 +1,25 @@
DisableLCD::
xor a
ld [rIF], a
ld a, [rIE]
ld b, a
res 0, a
ld [rIE], a
.wait
ld a, [rLY]
cp LY_VBLANK
jr nz, .wait
ld a, [rLCDC]
and $ff ^ rLCDC_ENABLE_MASK
ld [rLCDC], a
ld a, b
ld [rIE], a
ret
EnableLCD::
ld a, [rLCDC]
set rLCDC_ENABLE, a
ld [rLCDC], a
ret

10
home/start.asm Normal file
View file

@ -0,0 +1,10 @@
_Start::
cp GBC
jr z, .gbc
xor a
jr .ok
.gbc
ld a, 0
.ok
ld [wGBC], a
jp Init

View file

@ -1,59 +1,43 @@
ROM0 ROM0
org $0000 org $0000
"rst 00" "NULL"
org $0000
"rst0"
org $0008 org $0008
"rst 08" "rst8"
org $0010 org $0010
"rst 10" "rst10"
org $0018 org $0018
"rst 18" "rst18"
org $0020 org $0020
"rst 20" "rst20"
org $0028 org $0028
"rst 28" "rst28"
org $0030 org $0030
"rst 30" "rst30"
org $0038 org $0038
"rst 38" "rst38"
org $0040 org $0040
"vblank" "vblank"
org $0048 org $0048
"hblank" "lcd"
org $0050 org $0050
"timer" "timer"
org $0058 org $0058
"serial" "serial"
org $0060 org $0060
"joypad" "joypad"
; $0061 ; $0061
"High Home"
org $100
"Header"
org $150
"Home" "Home"
org $100
"Entry"
; $0104
"Header"
org $150
"Main"
ROMX $1 ROMX $1
org $4000
"bank1" "bank1"
ROMX $2 ROMX $2
org $4000
"Sound Effect Headers 1" "Sound Effect Headers 1"
"Music Headers 1" "Music Headers 1"
"Sound Effects 1" "Sound Effects 1"
@ -61,36 +45,30 @@ ROMX $2
"Music 1" "Music 1"
ROMX $3 ROMX $3
org $4000
"bank3" "bank3"
ROMX $4 ROMX $4
org $4000
"NPC Sprites 1" "NPC Sprites 1"
"Graphics (BANK 4)" "Graphics (BANK 4)"
"Battle (BANK 4)" "Battle (BANK 4)"
ROMX $5 ROMX $5
org $4000
"NPC Sprites 2" "NPC Sprites 2"
"Battle (BANK 5)" "Battle (BANK 5)"
ROMX $6 ROMX $6
org $4000
"Maps 1" "Maps 1"
"bank6_1" "bank6_1"
"Maps 2" "Maps 2"
"bank6_2" "bank6_2"
ROMX $7 ROMX $7
org $4000
"Maps 3" "Maps 3"
"bank7_1" "bank7_1"
"Maps 4" "Maps 4"
"bank7_2" "bank7_2"
ROMX $8 ROMX $8
org $4000
"Sound Effect Headers 2" "Sound Effect Headers 2"
"Music Headers 2" "Music Headers 2"
"Sound Effects 2" "Sound Effects 2"
@ -100,113 +78,92 @@ ROMX $8
"Music 2" "Music 2"
ROMX $9 ROMX $9
org $4000
"Pics 1" "Pics 1"
"Battle (BANK 9)" "Battle (BANK 9)"
ROMX $A ROMX $A
org $4000
"Pics 2" "Pics 2"
"Battle (BANK A)" "Battle (BANK A)"
ROMX $B ROMX $B
org $4000
"Pics 3" "Pics 3"
"Battle (BANK B)" "Battle (BANK B)"
ROMX $C ROMX $C
org $4000
"Pics 4" "Pics 4"
"Battle (BANK C)" "Battle (BANK C)"
ROMX $D ROMX $D
org $4000
"Pics 5" "Pics 5"
"Battle (BANK D)" "Battle (BANK D)"
ROMX $E ROMX $E
org $4000
"bankE" "bankE"
ROMX $F ROMX $F
org $4000
"bankF" "bankF"
ROMX $10 ROMX $10
org $4000
"bank10" "bank10"
ROMX $11 ROMX $11
org $4000
"Maps 5" "Maps 5"
"bank11_1" "bank11_1"
"Maps 6" "Maps 6"
"bank11_2" "bank11_2"
ROMX $12 ROMX $12
org $4000
"Maps 7" "Maps 7"
"bank12" "bank12"
"Maps 8" "Maps 8"
ROMX $13 ROMX $13
org $4000
"Pics 6" "Pics 6"
"Maps 9" "Maps 9"
"bank13" "bank13"
ROMX $14 ROMX $14
org $4000
"Maps 10" "Maps 10"
"bank14" "bank14"
ROMX $15 ROMX $15
org $4000
"Maps 11" "Maps 11"
"bank15_1" "bank15_1"
"Maps 12" "Maps 12"
"bank15_2" "bank15_2"
ROMX $16 ROMX $16
org $4000
"Maps 13" "Maps 13"
"bank16_1" "bank16_1"
"Maps 14" "Maps 14"
"bank16_2" "bank16_2"
ROMX $17 ROMX $17
org $4000
"Maps 15" "Maps 15"
"bank17_1" "bank17_1"
"Maps 16" "Maps 16"
"bank17_2" "bank17_2"
ROMX $18 ROMX $18
org $4000
"Maps 17" "Maps 17"
"bank18_1" "bank18_1"
"Maps 18" "Maps 18"
"bank18_2" "bank18_2"
ROMX $19 ROMX $19
org $4000
"Tilesets 1" "Tilesets 1"
ROMX $1A ROMX $1A
org $4000
"bank1A" "bank1A"
"Tilesets 2" "Tilesets 2"
ROMX $1B ROMX $1B
org $4000
"Tilesets 3" "Tilesets 3"
ROMX $1C ROMX $1C
org $4000
"bank1C" "bank1C"
ROMX $1D ROMX $1D
org $4000
"Maps 19" "Maps 19"
"bank1D_1" "bank1D_1"
"Maps 20" "Maps 20"
@ -215,11 +172,9 @@ ROMX $1D
"bank1D_3" "bank1D_3"
ROMX $1E ROMX $1E
org $4000
"bank1E" "bank1E"
ROMX $1F ROMX $1F
org $4000
"Sound Effect Headers 3" "Sound Effect Headers 3"
"Music Headers 3" "Music Headers 3"
"Sound Effects 3" "Sound Effects 3"
@ -227,81 +182,60 @@ ROMX $1F
"Music 3" "Music 3"
ROMX $20 ROMX $20
org $4000
"Text 1" "Text 1"
ROMX $21 ROMX $21
org $4000
"Text 2" "Text 2"
ROMX $22 ROMX $22
org $4000
"Text 3" "Text 3"
ROMX $23 ROMX $23
org $4000
"Text 4" "Text 4"
ROMX $24 ROMX $24
org $4000
"Text 5" "Text 5"
ROMX $25 ROMX $25
org $4000
"Text 6" "Text 6"
ROMX $26 ROMX $26
org $4000
"Text 7" "Text 7"
ROMX $27 ROMX $27
org $4000
"Text 8" "Text 8"
ROMX $28 ROMX $28
org $4000
"Text 9" "Text 9"
ROMX $29 ROMX $29
org $4000
"Text 10" "Text 10"
ROMX $2A ROMX $2A
org $4000
"Text 11" "Text 11"
ROMX $2B ROMX $2B
org $4000
"Pokedex Text" "Pokedex Text"
ROMX $2C ROMX $2C
org $4000
"Move Names" "Move Names"
WRAM0 WRAM0
org $c000
"WRAM Bank 0" "WRAM Bank 0"
org $c100 org $c100
"Sprite State Data" "Sprite State Data"
"OAM Buffer" "OAM Buffer"
org $dfff org $dfff
"Stack" "Stack"
SRAM 0 SRAM $0
org $a000
"Sprite Buffers" "Sprite Buffers"
SRAM 1 SRAM $1
org $a000
"Save Data" "Save Data"
SRAM 2 SRAM $2
org $a000
"Saved Boxes 1" "Saved Boxes 1"
SRAM 3 SRAM $3
org $a000
"Saved Boxes 2" "Saved Boxes 2"