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