summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--README4
-rw-r--r--dmg.s3
-rw-r--r--mgb.s3
-rw-r--r--sgb.s196
-rw-r--r--sgb2.s196
6 files changed, 399 insertions, 5 deletions
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