summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIIMarckus <iimarckus@gmail.com>2018-02-22 00:00:14 -0700
committerIIMarckus <iimarckus@gmail.com>2018-02-22 00:00:14 -0700
commit5e2521633a6d461f8af69fd53d8fa5f8d5c878d8 (patch)
tree110814742f986743b492941c042979c4be08defc
parent18b78fa6c81cc778819c8a0a80dc69fe45fbd4af (diff)
Add the early "DMG0" boot ROM.
-rw-r--r--Makefile2
-rw-r--r--dmg0.s164
2 files changed, 165 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index baad5a0..52a237d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
.SUFFIXES: .s .o .bin
-all: dmg.bin mgb.bin
+all: dmg0.bin dmg.bin mgb.bin
.s.o:
rgbasm -o $@ $<
diff --git a/dmg0.s b/dmg0.s
new file mode 100644
index 0000000..47c8a2e
--- /dev/null
+++ b/dmg0.s
@@ -0,0 +1,164 @@
+SECTION "blah",rom0
+ ; set up stack
+ ld sp,$fffe
+
+ ; clear vram ($8000–9fff)
+ xor a
+ ld hl,$9fff
+vloop:
+ ld [hld],a
+ bit 7,h
+ jr nz,vloop
+
+ ; set up audio
+ ld hl,$ff26
+ ld c,$11
+ ld a,$80
+ ld [hld],a
+ ld [$ff00+c],a
+ inc c
+ ld a,$f3
+ ld [$ff00+c],a
+ ld [hld],a
+ ld a,$77
+ ld [hl],a
+
+ ; set background palette
+ ld a,$fc
+ ld [$ff47],a
+
+ ; convert and load logo data from cart into vram
+ ld hl,$0104 ; cart logo
+ push hl
+ ld de,logo
+
+lastbranch:
+ ld a,[de]
+ inc de
+ cp [hl] ; compare cart logo to bootrom logo
+ jr nz,loop98
+ inc hl
+ ld a,l
+ cp $34
+ jr nz,lastbranch
+
+ ld b,$19
+ ld a,b
+cloop:
+ add [hl]
+ inc hl
+ dec b
+ jr nz,cloop
+ add [hl]
+
+ jr nz,loop98
+ pop de
+ ld hl,$8010
+loopf3:
+ ld a,[de]
+ call funca9
+ call funcaa
+ inc de
+ ld a,e
+ cp $34
+ jr nz,loopf3
+ ld a,$18
+ ld hl,$992f
+loopf1:
+ ld c,$c
+loop56:
+ ld [hld],a
+ dec a
+ jr z,loop09
+ dec c
+ jr nz,loop56
+ ld de,$ffec
+ add hl,de
+ jr loopf1
+loop09:
+ ld h,a
+ ld a,$64
+ ld d,a
+ ld [$ff42],a
+ ld a,$91
+ ld [$ff40],a
+ inc b
+loop6e:
+ ld e,2
+ call funcbc
+ ld c,$13
+ inc h
+ ld a,h
+ ld e,$83
+ cp $62
+ jr z,loop83
+ ld e,$c1
+ cp $64
+ jr nz,loop89
+loop83:
+ ld a,e
+ ld [$ff00+c],a
+ inc c
+ ld a,$87
+ ld [$ff00+c],a
+loop89:
+ ld a,[$ff42]
+ sub b
+ ld [$ff42],a
+ dec d
+ jr nz,loop6e
+ dec b
+ jr nz,end
+ ld d,$20
+ jr loop6e
+loop98:
+ ld a,$91
+ ld [$ff40],a
+loop9c:
+ ld e,$14
+ call funcbc
+ ld a,[$ff47]
+ xor $ff
+ ld [$ff47],a
+ jr loop9c
+funca9:
+ ld c,a
+funcaa:
+ ld b,4
+
+dloop:
+ push bc
+ rl c
+ rla
+ pop bc
+ rl c
+ rla
+ dec b
+ jr nz,dloop
+ ld [hli],a
+ inc hl
+ ld [hli],a
+ inc hl
+ ret
+funcbc:
+ ld c,$c
+loopbe:
+ ld a,[$ff44]
+ cp $90
+ jr nz,loopbe
+ dec c
+ jr nz,loopbe
+ dec e
+ jr nz,funcbc
+ ret
+
+logo:
+ db $ce,$ed,$66,$66,$cc,$0d,$00,$0b,$03,$73,$00,$83,$00,$0c,$00,$0d
+ db $00,$08,$11,$1f,$88,$89,$00,$0e,$dc,$cc,$6e,$e6,$dd,$dd,$d9,$99
+ db $bb,$bb,$67,$63,$6e,$0e,$ec,$cc,$dd,$dc,$99,$9f,$bb,$b9,$33,$3e
+
+ db $ff,$ff
+
+end:
+ inc a
+ ld [$ff50],a ; turn off bootrom