From ee2f01f903038f01de2e7477af35993dcc2b142a Mon Sep 17 00:00:00 2001 From: IIMarckus Date: Thu, 22 Feb 2018 00:39:52 -0700 Subject: Add the Super Game Boy boot ROMs. --- Makefile | 2 +- README | 4 +- dmg.s | 3 +- mgb.s | 3 +- sgb.s | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sgb2.s | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 399 insertions(+), 5 deletions(-) create mode 100644 sgb.s create mode 100644 sgb2.s diff --git a/Makefile b/Makefile index 52a237d..d6e3725 100644 --- a/Makefile +++ b/Makefile @@ -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 $@ $< diff --git a/README b/README index 2f378f5..15f433c 100644 --- a/README +++ b/README @@ -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. diff --git a/dmg.s b/dmg.s index 720ad46..5cc88b3 100644 --- a/dmg.s +++ b/dmg.s @@ -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 diff --git a/mgb.s b/mgb.s index 62fbe84..d47c9cc 100644 --- a/mgb.s +++ b/mgb.s @@ -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 diff --git a/sgb.s b/sgb.s new file mode 100644 index 0000000..7cdda0d --- /dev/null +++ b/sgb.s @@ -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 diff --git a/sgb2.s b/sgb2.s new file mode 100644 index 0000000..a8b5f22 --- /dev/null +++ b/sgb2.s @@ -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 -- cgit v1.2.3