summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIIMarckus <iimarckus@gmail.com>2018-03-15 03:19:32 -0600
committerIIMarckus <iimarckus@gmail.com>2018-03-15 03:19:32 -0600
commitd305a0fb7ff6822233dca3b2d9e3790983e709a1 (patch)
tree87497146c185c5c1f41251d09f47a7323222f46c
parentee2f01f903038f01de2e7477af35993dcc2b142a (diff)
Add the emulated boot ROMs from Pokémon Stadium 2.
-rw-r--r--Makefile10
-rw-r--r--README8
-rw-r--r--stadium_cgb.s480
-rw-r--r--stadium_mgb.s9
4 files changed, 504 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index d6e3725..ae7118c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
.SUFFIXES: .s .o .bin
-all: dmg0.bin dmg.bin mgb.bin sgb.bin sgb2.bin
+all: dmg0.bin dmg.bin mgb.bin sgb.bin sgb2.bin stadium_mgb.bin stadium_cgb.bin
.s.o:
rgbasm -o $@ $<
@@ -8,5 +8,13 @@ all: dmg0.bin dmg.bin mgb.bin sgb.bin sgb2.bin
.o.bin:
rgblink -o $@ $<
+stadium_mgb.bin: stadium_mgb.o
+ rgblink -o $@ $<
+ rgbfix -f hl $@
+
+stadium_cgb.bin: stadium_cgb.o
+ rgblink -o $@ $<
+ rgbfix -f hl $@
+
clean:
rm -f *.o *.bin
diff --git a/README b/README
index 15f433c..fbf428d 100644
--- a/README
+++ b/README
@@ -2,5 +2,9 @@ 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, mgb.bin, sgb.bin, and
-sgb2.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. stadium_mgb.bin and stadium_cgb.bin do not
+require trimming.
+
+stadium_mgb: 0x15994A0
+stadium_cgb: 0x15995F0
diff --git a/stadium_cgb.s b/stadium_cgb.s
new file mode 100644
index 0000000..b0b202a
--- /dev/null
+++ b/stadium_cgb.s
@@ -0,0 +1,480 @@
+SECTION "main",rom0
+ ; set up stack
+ ld sp,$fffe
+
+ ld a,$80
+ ld [$ff68],a
+ ld c,$69
+ xor a
+ ld b,$40
+loop:
+ ld [$ff00+c],a
+ dec b
+ jr nz,loop
+ jp part2
+
+data13:
+ db $d3,$00,$98,$a0,$12,$d3,$00,$80,$00,$40,$3c,$42,$b9,$a5,$b9,$a5,$42,$3c
+
+part2:
+ ld [$ff40],a
+
+ ; set background palette
+ ld a,$fc
+ ld [$ff47],a
+
+ call $0097
+ call $0086
+ ld h,$d0
+ call $0089
+ ld hl,$fe00
+ ld c,$a0
+ xor a
+loop2:
+ ld [hli],a
+ dec c
+ jr nz,loop2
+
+ ld de,$0104
+ ld hl,$8010
+ ld c,h
+loop3:
+ ld a,[de]
+ ld [$ff00+c],a
+ inc c
+ call $0270
+ call $0271
+ inc de
+ ld a,e
+ cp $34
+ jr nz,loop3
+
+ ld de,$001d
+ ld b,$08
+loop4:
+ ld a,[de]
+ inc de
+ ld [hli],a
+ inc hl
+ dec b
+ jr nz,loop4
+
+ call $029a
+ ld a,$01
+ ld [$ff4f],a
+ ld a,$91
+ ld [$ff40],a
+ ld hl,$98b2
+ ld b,$4e
+ ld c,$96
+ call $017b
+ xor a
+ ld [$ff4f],a
+ call $01fa
+ jr next
+next:
+ call $00ea
+ ld [$ff50],a
+lockup:
+ jr lockup
+
+func86:
+ ld hl,$8000
+ xor a
+loop86:
+ ld [hli],a
+ bit 5,h
+ jr z,loop86
+ ret
+
+func90:
+ ld a,[hli]
+ ld [de],a
+ inc de
+ dec c
+ jr nz,func90
+ ret
+
+func97:
+ ld a,$80
+ ld [$ff26],a
+ ld [$ff11],a
+ ld a,$f3
+ ld [$ff12],a
+ ld [$ff25],a
+ ld a,$77
+ ld [$ff24],a
+ ld hl,$ff30
+ xor a
+ ld c,$10
+loop97:
+ ld [hli],a
+ cpl
+ dec c
+ jr nz,loop97
+ ret
+
+funcb3:
+ ld c,$00
+funcb5:
+ ld a,[de]
+ and $f0
+ bit 1,c
+ jr z,funcbe
+ swap a
+funcbe:
+ ld b,a
+ inc hl
+ ld a,[hl]
+ or b
+ ld [hli],a
+ ld a,[de]
+ and $0f
+ bit 1,c
+ jr nz,funccc
+ swap a
+funccc:
+ ld b,a
+ inc hl
+ ld a,[hl]
+ or b
+ ld [hli],a
+ inc de
+ bit 0,c
+ jr z,funce3
+ push de
+ ld de,$fff8
+ bit 1,c
+ jr z,funce1
+ ld de,$0008
+funce1:
+ add hl,de
+ pop de
+funce3:
+ inc c
+ ld a,c
+ cp $18
+ jr nz,funcb5
+ ret
+ push hl
+ ld hl,$ff0f
+ res 0,[hl]
+prejump:
+ bit 0,[hl]
+ jr z,prejump
+ pop hl
+ ret
+
+SECTION "header",rom0[$100]
+ nop
+ jp 0
+
+ ds $3c
+
+SECTION "body",rom0[$150]
+start:
+ ld a,$80
+ ld [$ff68],a
+ ld [$ff6a],a
+ ld c,$6b
+loop158:
+ ld a,[hli]
+ ld [$ff00+c],a
+ dec b
+ jr nz,loop158
+ ld c,d
+ add hl,bc
+ ld b,e
+ ld c,$69
+loop162:
+ ld a,[hli]
+ ld [$ff00+c],a
+ dec b
+ jr nz,loop162
+ ret
+start2:
+ push bc
+ push de
+ push hl
+ ld hl,$d800
+ ld b,$01
+ ld d,$3f
+ ld e,$40
+ call start
+ pop hl
+ pop de
+ pop bc
+ ret
+ call $00ea
+ call start2
+ ld a,c
+ cp $77
+ jr nz,jump19a
+ push hl
+ xor a
+ ld [$ff4f],a
+ ld hl,$99a7
+ ld a,$38
+loop18f:
+ ld [hli],a
+ inc a
+ cp $3f
+ jr nz,loop18f
+ ld a,$01
+ ld [$ff4f],a
+ pop hl
+jump19a:
+ call $00ea
+ ld a,c
+ sub $3a
+ jp nc,$01e4
+ ld a,c
+ cp $01
+ jp z,$01e4
+ ld a,l
+ cp $d1
+ jr z,jump1cf
+ push bc
+ ld b,$03
+loop1b3:
+ ld c,$01
+loop1b4:
+ ld d,$03
+loop1b5:
+ ld a,[hl]
+ and $f8
+ or c
+ ld [hli],a
+ dec d
+ jr nz,loop1b5
+ inc c
+ ld a,c
+ cp $06
+ jr nz,loop1b4
+ ld de,$0011
+ add hl,de
+ dec b
+ jr nz,loop1b3
+ ld de,$ffa1
+ add hl,de
+ pop bc
+jump1cf:
+ inc b
+ ld a,b
+ ld e,$83
+ cp $62
+ jr z,jump1dd
+ ld e,$c1
+ cp $64
+ jr nz,jump1e4
+jump1dd:
+ ld a,e
+ ld [$ff13],a
+ ld a,$87
+ ld [$ff14],a
+jump1e4:
+ ld a,[$d002]
+ cp $00
+ jr z,jump1f5
+ dec a
+ ld [$d002],a
+ ld a,c
+ cp $01
+ jp z,$017b
+jump1f5:
+ dec c
+ jp nz,$017b
+ ret
+ ld c,$26
+loop1fc:
+ call $022b
+ call $00ea
+ call $00ea
+ call start2
+ dec c
+ jr nz,loop1fc
+ call $00ea
+ ld a,$01
+ ld [$ff4f],a
+ call $021f
+ call $0222
+ xor a
+ ld [$ff4f],a
+ call $021f
+ ret
+ ld hl,data13
+ ld de,$ff51
+ ld c,$05
+ call $0090
+ ret
+ push bc
+ push de
+ push hl
+ ld hl,$d840
+ ld c,$20
+func233:
+ ld a,[hl]
+ and $1f
+ cp $1f
+ jr z,skip1
+ inc a
+skip1:
+ ld d,a
+ ld a,[hli]
+ rlca
+ rlca
+ rlca
+ and $07
+ ld b,a
+ ld a,[hld]
+ rlca
+ rlca
+ rlca
+ and $18
+ or b
+ cp $1f
+ jr z,skip2
+ inc a
+skip2:
+ rrca
+ rrca
+ rrca
+ ld b,a
+ and $e0
+ or d
+ ld [hli],a
+ ld a,b
+ and $03
+ ld e,a
+ ld a,[hl]
+ rrca
+ rrca
+ and $1f
+ cp $1f
+ jr z,skip3
+ inc a
+skip3:
+ rlca
+ rlca
+ or e
+ ld [hli],a
+ dec c
+ jr nz,func233
+ pop hl
+ pop de
+ pop bc
+ ret
+ ld b,a
+ push de
+ ld d,$04
+loop274:
+ ld e,b
+ rl b
+ rla
+ rl e
+ rla
+ dec d
+ jr nz,loop274
+ pop de
+ ld [hli],a
+ inc hl
+ ld [hli],a
+ inc hl
+ ret
+ ld a,$19
+ ld [$9910],a
+ ld hl,$992f
+ ld c,$0c
+loop28e:
+ dec a
+ jr z,skip299
+ ld [hld],a
+ dec c
+ jr nz,loop28e
+ ld l,$0f
+ jr $f3
+skip299:
+ ret
+ ld a,$01
+ ld [$ff4f],a
+ call $0086
+ ld de,$0320
+ ld hl,$8080
+ ld c,$c0
+loop2a9:
+ ld a,[de]
+ ld [hli],a
+ inc hl
+ ld [hli],a
+ inc hl
+ inc de
+ dec c
+ jr nz,loop2a9
+ ld de,$0104
+ call $00b3
+ ld bc,$ffa8
+ add hl,bc
+ call $00b3
+ ld bc,$fff8
+ add hl,bc
+ ld de,$001d
+ ld c,$08
+loop2c8:
+ inc hl
+ ld a,[de]
+ ld [hli],a
+ inc de
+ dec c
+ jr nz,loop2c8
+ ld hl,$98c2
+ ld b,$08
+ ld a,$08
+loop2d6:
+ ld c,$10
+loop2d8:
+ ld [hli],a
+ dec c
+ jr nz,loop2d8
+ ld de,$0010
+ add hl,de
+ dec b
+ jr nz,loop2d6
+ xor a
+ ld [$ff4f],a
+ ld hl,$98c2
+ ld a,$08
+loop2eb
+ ld [hli],a
+ inc a
+ cp $18
+ jr nz,skip2f3
+ ld l,$e2
+skip2f3:
+ cp $28
+ jr nz,skip30a
+ ld hl,$9902
+skip30a:
+ cp $38
+ jr nz,loop2eb
+ ld hl,$03e0
+ ld de,$d840
+ ld b,$08
+loop306:
+ ld a,$ff
+ ld [de],a
+ inc de
+ ld [de],a
+ inc de
+ ld c,$02
+ call $0090
+ ld a,$00
+ ld [de],a
+ inc de
+ ld [de],a
+ inc de
+ inc de
+ inc de
+ dec b
+ jr nz,loop306
+ call start2
+ ret
diff --git a/stadium_mgb.s b/stadium_mgb.s
new file mode 100644
index 0000000..c515387
--- /dev/null
+++ b/stadium_mgb.s
@@ -0,0 +1,9 @@
+include "mgb.s"
+
+SECTION "header",rom0[$100]
+start:
+ jr start
+ nop
+ nop
+
+ ds $3c