diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | dmg.s | 3 | ||||
-rw-r--r-- | mgb.s | 3 | ||||
-rw-r--r-- | sgb.s | 196 | ||||
-rw-r--r-- | sgb2.s | 196 |
6 files changed, 399 insertions, 5 deletions
@@ -1,6 +1,6 @@ .SUFFIXES: .s .o .bin -all: dmg0.bin dmg.bin mgb.bin +all: dmg0.bin dmg.bin mgb.bin sgb.bin sgb2.bin .s.o: rgbasm -o $@ $< @@ -2,5 +2,5 @@ These are disassembled Game Boy boot ROMs. Compile them with rgbds: https://rednex.github.io/rgbds/ -Once they’ve been compiled, dmg0.bin, dmg.bin, and mgb.bin must be trimmed -to 256 bytes each. +Once they’ve been compiled, dmg0.bin, dmg.bin, mgb.bin, sgb.bin, and +sgb2.bin must be trimmed to 256 bytes each. @@ -41,7 +41,7 @@ lloop: ; load 8 additional bytes into vram ld de,moredata - ld b,8 + ld b,moredata_ - moredata eloop: ld a,[de] inc de @@ -146,6 +146,7 @@ logo: moredata: db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c +moredata_: logocheck: ld hl,$0104 ; cart logo @@ -41,7 +41,7 @@ lloop: ; load 8 additional bytes into vram ld de,moredata - ld b,8 + ld b,moredata_ - moredata eloop: ld a,[de] inc de @@ -146,6 +146,7 @@ logo: moredata: db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c +moredata_: logocheck: ld hl,$0104 ; cart logo @@ -0,0 +1,196 @@ +SECTION "main",rom0 + ; set up stack + ld sp,$fffe + + ld a,$30 + ld [$ff00],a + + ; 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 + ld hl,$c05f + ld c,8 + xor a +loop2b: + ld [hld],a + dec c + jr nz,loop2b + + ld de,$014f + ld a,$fb + ld c,6 +loop36: + push af + ld b,0 +loop39: + ld a,[de] + dec de + ld [hld],a + add b + ld b,a + dec c + jr nz,loop39 + + ld [hld],a + pop af + ld [hld],a + ld c,$e + sub 2 + cp $ef + jr nz,loop36 + + ; convert and load logo data from cart into vram + ld de,$0104 + ld hl,$8010 +lloop: + ld a,[de] + call Graphics + call Graphics2 + inc de + ld a,e + cp $34 + jr nz,lloop + + ; load 8 additional bytes into vram + ld de,moredata + ld b,moredata_ - moredata +eloop: + ld a,[de] + inc de + ld [hli],a + inc hl + dec b + jr nz,eloop + + ; set background tilemap + ld a,$19 + ld [$9910],a + ld hl,$992f +oloop: + ld c,$0c +iloop: + dec a + jr z,scroll + ld [hld],a + dec c + jr nz,iloop + ld l,$f + jr oloop +scroll: + ; turn on lcd (showing background) + ld a,$91 + ld [$ff40],a + ld hl,$c000 + ld c,0 +loop89: + ld a,0 + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + ld b,$10 +loop91: + ld e,8 + ld a,[hli] + ld d,a +loop95: + bit 0,d + ld a,$10 + jr nz,loop9d + ld a,$20 +loop9d: + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + rr d + dec e + jr nz,loop95 + dec b + jr nz,loop91 + ld a,$20 + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + call funcc2 + ld a,l + cp $60 + jr nz,loop89 + ld c,$13 + ld a,$c1 + ld [$ff00+c],a + inc c + ld a,7 + ld [$ff00+c],a + jr end +funcc2: + ld d,4 +loopc4: + ld a,[$ff44] + cp $90 + jr nz,loopc4 + ld e,0 +loopcc: + dec e + jr nz,loopcc + dec d + jr nz,loopc4 + ret +Graphics: + ld c,a +Graphics2: + ld b,4 +loopd6: + push bc + rl c + rla + pop bc + rl c + rla + dec b + jr nz,loopd6 + ld [hli],a + inc hl + ld [hli],a + inc hl + ret + +moredata: + db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c +moredata_: + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +end: + ld a,1 + ld [$ff50],a ; turn off bootrom @@ -0,0 +1,196 @@ +SECTION "main",rom0 + ; set up stack + ld sp,$fffe + + ld a,$30 + ld [$ff00],a + + ; 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 + ld hl,$c05f + ld c,8 + xor a +loop2b: + ld [hld],a + dec c + jr nz,loop2b + + ld de,$014f + ld a,$fb + ld c,6 +loop36: + push af + ld b,0 +loop39: + ld a,[de] + dec de + ld [hld],a + add b + ld b,a + dec c + jr nz,loop39 + + ld [hld],a + pop af + ld [hld],a + ld c,$e + sub 2 + cp $ef + jr nz,loop36 + + ; convert and load logo data from cart into vram + ld de,$0104 + ld hl,$8010 +lloop: + ld a,[de] + call Graphics + call Graphics2 + inc de + ld a,e + cp $34 + jr nz,lloop + + ; load 8 additional bytes into vram + ld de,moredata + ld b,moredata_ - moredata +eloop: + ld a,[de] + inc de + ld [hli],a + inc hl + dec b + jr nz,eloop + + ; set background tilemap + ld a,$19 + ld [$9910],a + ld hl,$992f +oloop: + ld c,$0c +iloop: + dec a + jr z,scroll + ld [hld],a + dec c + jr nz,iloop + ld l,$f + jr oloop +scroll: + ; turn on lcd (showing background) + ld a,$91 + ld [$ff40],a + ld hl,$c000 + ld c,0 +loop89: + ld a,0 + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + ld b,$10 +loop91: + ld e,8 + ld a,[hli] + ld d,a +loop95: + bit 0,d + ld a,$10 + jr nz,loop9d + ld a,$20 +loop9d: + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + rr d + dec e + jr nz,loop95 + dec b + jr nz,loop91 + ld a,$20 + ld [$ff00+c],a + ld a,$30 + ld [$ff00+c],a + call funcc2 + ld a,l + cp $60 + jr nz,loop89 + ld c,$13 + ld a,$c1 + ld [$ff00+c],a + inc c + ld a,7 + ld [$ff00+c],a + jr end +funcc2: + ld d,4 +loopc4: + ld a,[$ff44] + cp $90 + jr nz,loopc4 + ld e,0 +loopcc: + dec e + jr nz,loopcc + dec d + jr nz,loopc4 + ret +Graphics: + ld c,a +Graphics2: + ld b,4 +loopd6: + push bc + rl c + rla + pop bc + rl c + rla + dec b + jr nz,loopd6 + ld [hli],a + inc hl + ld [hli],a + inc hl + ret + +moredata: + db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c +moredata_: + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +end: + ld a,-1 + ld [$ff50],a ; turn off bootrom |