diff options
author | IIMarckus <iimarckus@gmail.com> | 2018-03-15 03:19:32 -0600 |
---|---|---|
committer | IIMarckus <iimarckus@gmail.com> | 2018-03-15 03:19:32 -0600 |
commit | d305a0fb7ff6822233dca3b2d9e3790983e709a1 (patch) | |
tree | 87497146c185c5c1f41251d09f47a7323222f46c | |
parent | ee2f01f903038f01de2e7477af35993dcc2b142a (diff) |
Add the emulated boot ROMs from Pokémon Stadium 2.
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | README | 8 | ||||
-rw-r--r-- | stadium_cgb.s | 480 | ||||
-rw-r--r-- | stadium_mgb.s | 9 |
4 files changed, 504 insertions, 3 deletions
@@ -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 @@ -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 |