summaryrefslogtreecommitdiff
path: root/home
diff options
context:
space:
mode:
Diffstat (limited to 'home')
-rw-r--r--home/clear_sprites.asm21
-rw-r--r--home/header.asm57
-rw-r--r--home/lcd.asm25
-rw-r--r--home/start.asm10
4 files changed, 113 insertions, 0 deletions
diff --git a/home/clear_sprites.asm b/home/clear_sprites.asm
new file mode 100644
index 00000000..34f4b4ec
--- /dev/null
+++ b/home/clear_sprites.asm
@@ -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
diff --git a/home/header.asm b/home/header.asm
new file mode 100644
index 00000000..047f97f4
--- /dev/null
+++ b/home/header.asm
@@ -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
diff --git a/home/lcd.asm b/home/lcd.asm
new file mode 100644
index 00000000..e88a42b3
--- /dev/null
+++ b/home/lcd.asm
@@ -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
diff --git a/home/start.asm b/home/start.asm
new file mode 100644
index 00000000..448b6362
--- /dev/null
+++ b/home/start.asm
@@ -0,0 +1,10 @@
+_Start::
+ cp GBC
+ jr z, .gbc
+ xor a
+ jr .ok
+.gbc
+ ld a, 0
+.ok
+ ld [wGBC], a
+ jp Init