diff options
author | IIMarckus <iimarckus@gmail.com> | 2018-02-22 00:00:14 -0700 |
---|---|---|
committer | IIMarckus <iimarckus@gmail.com> | 2018-02-22 00:00:14 -0700 |
commit | 5e2521633a6d461f8af69fd53d8fa5f8d5c878d8 (patch) | |
tree | 110814742f986743b492941c042979c4be08defc | |
parent | 18b78fa6c81cc778819c8a0a80dc69fe45fbd4af (diff) |
Add the early "DMG0" boot ROM.
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | dmg0.s | 164 |
2 files changed, 165 insertions, 1 deletions
@@ -1,6 +1,6 @@ .SUFFIXES: .s .o .bin -all: dmg.bin mgb.bin +all: dmg0.bin dmg.bin mgb.bin .s.o: rgbasm -o $@ $< @@ -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 |