summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-10-24 18:16:51 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-10-24 18:16:51 -0500
commit41baa271c3fff795ee7ffa16d756ae427e5b792c (patch)
treee7b11179dc21ea9246ca9bffdf07589a156e86f9
parentbd344c1390ee9e0bbcfdb4aac5250a37e574a05f (diff)
More decompiling + gbplayer lib code
-rwxr-xr-xMakefile1
-rwxr-xr-xasm/bonus_field_select.s (renamed from asm/rom_25A4.s)4
-rwxr-xr-xasm/ereader.s (renamed from asm/rom_2C58.s)0
-rwxr-xr-xasm/high_scores.s5
-rwxr-xr-xasm/options.s22
-rwxr-xr-xasm/rom_11B9C.s4
-rwxr-xr-xasm/rom_9BC.s638
-rwxr-xr-xdata/rom.s82
-rwxr-xr-xinclude/gba/io_reg.h1
-rwxr-xr-xinclude/gbplayer.h8
-rwxr-xr-xinclude/main.h34
-rwxr-xr-xld_script.txt5
-rwxr-xr-xsrc/gbplayer.c433
-rwxr-xr-xsrc/main.c46
-rwxr-xr-xsym_ewram.txt66
15 files changed, 647 insertions, 702 deletions
diff --git a/Makefile b/Makefile
index a871d2f..8e1cabe 100755
--- a/Makefile
+++ b/Makefile
@@ -103,6 +103,7 @@ include graphics_rules.mk
$(C_BUILDDIR)/rom_850.o: CC1 := tools/agbcc/bin/old_agbcc
+$(C_BUILDDIR)/gbplayer.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/libc.o: CFLAGS := -O2
diff --git a/asm/rom_25A4.s b/asm/bonus_field_select.s
index 3c41293..e181588 100755
--- a/asm/rom_25A4.s
+++ b/asm/bonus_field_select.s
@@ -4,8 +4,8 @@
.text
- thumb_func_start sub_25A4_Main
-sub_25A4_Main: @ 0x080025A4
+ thumb_func_start BonusFieldSelectMain
+BonusFieldSelectMain: @ 0x080025A4
push {lr}
ldr r1, _080025BC @ =0x0805C750
ldr r0, _080025C0 @ =gMain
diff --git a/asm/rom_2C58.s b/asm/ereader.s
index da52ca9..da52ca9 100755
--- a/asm/rom_2C58.s
+++ b/asm/ereader.s
diff --git a/asm/high_scores.s b/asm/high_scores.s
index 95fc366..baa9b12 100755
--- a/asm/high_scores.s
+++ b/asm/high_scores.s
@@ -20,8 +20,9 @@ HighScoresMain: @ 0x0800CE48
_0800CE60: .4byte 0x080793E8
_0800CE64: .4byte gMain
- thumb_func_start sub_CE68_Main
-sub_CE68_Main: @ 0x0800CE68
+@ This is triggered after the idle pinball game catches its first pokemon
+ thumb_func_start IdleHighScoresMain
+IdleHighScoresMain: @ 0x0800CE68
push {lr}
ldr r1, _0800CE80 @ =0x08079424
ldr r0, _0800CE84 @ =gMain
diff --git a/asm/options.s b/asm/options.s
index 09f8a5b..f5b3129 100755
--- a/asm/options.s
+++ b/asm/options.s
@@ -94,7 +94,7 @@ sub_51240: @ 0x08051240
str r3, [r5, #4]
str r6, [r5, #8]
ldr r0, [r5, #8]
- ldr r0, _08051394 @ =0x02019C0C
+ ldr r0, _08051394 @ =gGameBoyPlayerEnabled
ldr r0, [r0]
cmp r0, #1
beq _080512F8
@@ -170,7 +170,7 @@ _08051384: .4byte 0x80000600
_08051388: .4byte 0x08528028
_0805138C: .4byte 0x03005C00
_08051390: .4byte 0x80000400
-_08051394: .4byte 0x02019C0C
+_08051394: .4byte gGameBoyPlayerEnabled
_08051398: .4byte 0x0852A048
_0805139C: .4byte 0x06000800
_080513A0: .4byte gGBAButtonIcons_Pals
@@ -258,7 +258,7 @@ _08051432:
cmp r1, #3
ble _08051424
bl sub_52528
- ldr r0, _08051478 @ =0x02019C0C
+ ldr r0, _08051478 @ =gGameBoyPlayerEnabled
ldr r4, [r0]
cmp r4, #1
bne _0805147C
@@ -277,7 +277,7 @@ _08051468: .4byte 0x02002920
_0805146C: .4byte 0x0200B134
_08051470: .4byte 0x02031AF0
_08051474: .4byte 0x08527ED6
-_08051478: .4byte 0x02019C0C
+_08051478: .4byte gGameBoyPlayerEnabled
_0805147C:
ldr r2, _080514B0 @ =0x02002920
adds r0, r2, #0
@@ -402,7 +402,7 @@ _0805156C:
ands r0, r1
cmp r0, #0
beq _08051594
- ldr r0, _080515EC @ =0x02019C0C
+ ldr r0, _080515EC @ =gGameBoyPlayerEnabled
ldr r0, [r0]
cmp r0, #1
bne _08051594
@@ -422,7 +422,7 @@ _08051594:
ands r0, r1
cmp r0, #0
beq _080515C2
- ldr r0, _080515EC @ =0x02019C0C
+ ldr r0, _080515EC @ =gGameBoyPlayerEnabled
ldr r0, [r0]
cmp r0, #1
bne _080515C2
@@ -461,7 +461,7 @@ _080515DC:
mov pc, r0
.align 2, 0
_080515E8: .4byte gMain
-_080515EC: .4byte 0x02019C0C
+_080515EC: .4byte gGameBoyPlayerEnabled
_080515F0: .4byte 0x02002920
_080515F4: .4byte _080515F8
_080515F8: @ jump table
@@ -576,7 +576,7 @@ _080516D0:
_080516F0: .4byte 0x02002920
_080516F4: .4byte 0x0200B134
_080516F8:
- ldr r0, _08051730 @ =0x02019C0C
+ ldr r0, _08051730 @ =gGameBoyPlayerEnabled
ldr r0, [r0]
cmp r0, #1
beq _08051702
@@ -606,10 +606,10 @@ _08051720:
strb r2, [r0]
b _08051A96
.align 2, 0
-_08051730: .4byte 0x02019C0C
+_08051730: .4byte gGameBoyPlayerEnabled
_08051734: .4byte 0x02002920
_08051738:
- ldr r0, _08051774 @ =0x02019C0C
+ ldr r0, _08051774 @ =gGameBoyPlayerEnabled
ldr r4, [r0]
cmp r4, #1
beq _08051742
@@ -639,7 +639,7 @@ _0805175E:
strb r4, [r0]
b _08051A96
.align 2, 0
-_08051774: .4byte 0x02019C0C
+_08051774: .4byte gGameBoyPlayerEnabled
_08051778: .4byte 0x02002920
_0805177C:
movs r0, #2
diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s
index ab35f66..e0f9bd9 100755
--- a/asm/rom_11B9C.s
+++ b/asm/rom_11B9C.s
@@ -14547,8 +14547,8 @@ _0801901C:
_08019020: .4byte 0x020314E0
_08019024: .4byte 0x00000532
- thumb_func_start sub_19028_Main
-sub_19028_Main: @ 0x08019028
+ thumb_func_start IdlePinballGameMain
+IdlePinballGameMain: @ 0x08019028
push {lr}
ldr r1, _08019040 @ =0x08137918
ldr r0, _08019044 @ =gMain
diff --git a/asm/rom_9BC.s b/asm/rom_9BC.s
index fde21ba..9f97371 100755
--- a/asm/rom_9BC.s
+++ b/asm/rom_9BC.s
@@ -4,642 +4,6 @@
.text
- thumb_func_start sub_EB8
-sub_EB8: @ 0x08000EB8
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- movs r7, #0
- movs r0, #0
- mov sl, r0
- mov sb, r0
- mov r8, r0
- bl VBlankIntrWait
- ldr r0, _08000F30 @ =0x040000D4
- ldr r1, _08000F34 @ =0x08058248
- str r1, [r0]
- ldr r1, _08000F38 @ =0x06008000
- str r1, [r0, #4]
- ldr r1, _08000F3C @ =0x80002000
- str r1, [r0, #8]
- ldr r1, [r0, #8]
- ldr r1, _08000F40 @ =0x08058048
- str r1, [r0]
- movs r1, #0xa0
- lsls r1, r1, #0x13
- str r1, [r0, #4]
- ldr r1, _08000F44 @ =0x80000100
- str r1, [r0, #8]
- ldr r1, [r0, #8]
- ldr r1, _08000F48 @ =0x0805C248
- str r1, [r0]
- ldr r2, _08000F4C @ =0x02002008
- str r2, [r0, #4]
- ldr r1, _08000F50 @ =0x80000280
- str r1, [r0, #8]
- ldr r1, [r0, #8]
- str r2, [r0]
- movs r1, #0xc0
- lsls r1, r1, #0x13
- str r1, [r0, #4]
- ldr r1, _08000F54 @ =0x80000400
- str r1, [r0, #8]
- ldr r0, [r0, #8]
- ldr r1, _08000F58 @ =0x04000008
- movs r0, #0x88
- strh r0, [r1]
- movs r4, #0
- ldr r6, _08000F5C @ =0x04000054
- movs r5, #0x10
-_08000F18:
- bl VBlankIntrWait
- subs r0, r5, r4
- strh r0, [r6]
- adds r4, #1
- cmp r4, #0x10
- bls _08000F18
- ldr r6, _08000F60 @ =0x02002002
- ldr r5, _08000F64 @ =0x02002000
- ldr r4, _08000F30 @ =0x040000D4
- b _08000FA4
- .align 2, 0
-_08000F30: .4byte 0x040000D4
-_08000F34: .4byte 0x08058248
-_08000F38: .4byte 0x06008000
-_08000F3C: .4byte 0x80002000
-_08000F40: .4byte 0x08058048
-_08000F44: .4byte 0x80000100
-_08000F48: .4byte 0x0805C248
-_08000F4C: .4byte 0x02002008
-_08000F50: .4byte 0x80000280
-_08000F54: .4byte 0x80000400
-_08000F58: .4byte 0x04000008
-_08000F5C: .4byte 0x04000054
-_08000F60: .4byte 0x02002002
-_08000F64: .4byte 0x02002000
-_08000F68:
- ldrh r0, [r6]
- ldrh r1, [r5]
- eors r0, r1
- ands r0, r1
- movs r1, #0xf0
- ands r0, r1
- cmp r0, #0xf0
- bne _08000F7C
- mov r8, sb
- mov sb, r7
-_08000F7C:
- mov r1, r8
- cmp r1, #0
- beq _08000F8E
- mov r2, sb
- subs r0, r2, r1
- cmp r0, #3
- bgt _08000F8E
- movs r0, #1
- mov sl, r0
-_08000F8E:
- adds r7, #1
- bl VBlankIntrWait
- ldr r0, _08000FB0 @ =0x02002008
- str r0, [r4]
- movs r0, #0xc0
- lsls r0, r0, #0x13
- str r0, [r4, #4]
- ldr r0, _08000FB4 @ =0x84000200
- str r0, [r4, #8]
- ldr r0, [r4, #8]
-_08000FA4:
- cmp r7, #0x1d
- bgt _08000FB8
- bl sub_E90
- b _08000F68
- .align 2, 0
-_08000FB0: .4byte 0x02002008
-_08000FB4: .4byte 0x84000200
-_08000FB8:
- movs r4, #0
- ldr r5, _08000FD4 @ =0x04000054
-_08000FBC:
- bl VBlankIntrWait
- strh r4, [r5]
- adds r4, #1
- cmp r4, #0x10
- bls _08000FBC
- mov r1, sl
- cmp r1, #0
- bne _08000FD8
- movs r0, #0
- b _08000FDA
- .align 2, 0
-_08000FD4: .4byte 0x04000054
-_08000FD8:
- movs r0, #1
-_08000FDA:
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r1}
- bx r1
-
- thumb_func_start sub_FE8
-sub_FE8: @ 0x08000FE8
- push {r4, r5, r6, lr}
- mov r6, r8
- push {r6}
- sub sp, #4
- ldr r2, _08001080 @ =0x04000200
- ldrh r0, [r2]
- movs r1, #1
- orrs r0, r1
- strh r0, [r2]
- ldr r6, _08001084 @ =0x04000004
- ldrh r0, [r6]
- movs r1, #8
- orrs r0, r1
- strh r0, [r6]
- ldr r1, _08001088 @ =0x04000050
- ldr r3, _0800108C @ =0x00003FBF
- adds r0, r3, #0
- strh r0, [r1]
- adds r1, #4
- movs r0, #0x10
- strh r0, [r1]
- movs r0, #0x80
- lsls r0, r0, #0x13
- mov r8, r0
- movs r1, #0x88
- lsls r1, r1, #5
- adds r0, r1, #0
- mov r3, r8
- strh r0, [r3]
- ldr r0, _08001090 @ =0x02019C00
- movs r4, #0
- str r4, [r0]
- ldr r0, _08001094 @ =0x02019BEC
- str r4, [r0]
- ldr r0, _08001098 @ =0x02019BF4
- str r4, [r0]
- ldr r0, _0800109C @ =0x02019BF0
- str r4, [r0]
- ldr r5, _080010A0 @ =0x02019C0C
- str r2, [sp]
- bl sub_EB8
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- str r0, [r5]
- ldr r2, [sp]
- ldrh r1, [r2]
- ldr r0, _080010A4 @ =0x0000FFFE
- ands r0, r1
- strh r0, [r2]
- ldrh r1, [r6]
- ldr r0, _080010A8 @ =0x0000FFF7
- ands r0, r1
- strh r0, [r6]
- mov r0, r8
- strh r4, [r0]
- ldr r1, _080010AC @ =0x02019BFC
- movs r0, #1
- rsbs r0, r0, #0
- str r0, [r1]
- ldr r0, _080010B0 @ =0x02019BE4
- str r4, [r0]
- ldr r0, _080010B4 @ =0x02019BE8
- str r4, [r0]
- ldr r0, _080010B8 @ =0x02019BF8
- str r4, [r0]
- ldr r1, _080010BC @ =0x02019C08
- movs r0, #2
- str r0, [r1]
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08001080: .4byte 0x04000200
-_08001084: .4byte 0x04000004
-_08001088: .4byte 0x04000050
-_0800108C: .4byte 0x00003FBF
-_08001090: .4byte 0x02019C00
-_08001094: .4byte 0x02019BEC
-_08001098: .4byte 0x02019BF4
-_0800109C: .4byte 0x02019BF0
-_080010A0: .4byte 0x02019C0C
-_080010A4: .4byte 0x0000FFFE
-_080010A8: .4byte 0x0000FFF7
-_080010AC: .4byte 0x02019BFC
-_080010B0: .4byte 0x02019BE4
-_080010B4: .4byte 0x02019BE8
-_080010B8: .4byte 0x02019BF8
-_080010BC: .4byte 0x02019C08
-
- thumb_func_start sub_10C0
-sub_10C0: @ 0x080010C0
- push {lr}
- ldr r0, _080010F8 @ =0x02019C0C
- ldr r2, [r0]
- cmp r2, #1
- bne _080010DC
- ldr r1, _080010FC @ =0x02003060
- ldr r0, _08001100 @ =sub_13FC + 1
- str r0, [r1]
- ldr r0, _08001104 @ =sub_1828 + 1
- str r0, [r1, #4]
- ldr r0, _08001108 @ =0x02019BF4
- str r2, [r0]
- bl sub_1340
-_080010DC:
- ldr r1, _0800110C @ =0x02019BFC
- movs r0, #1
- rsbs r0, r0, #0
- str r0, [r1]
- ldr r0, _08001110 @ =0x02019BE4
- movs r2, #0
- str r2, [r0]
- ldr r1, _08001114 @ =0x02019C08
- movs r0, #2
- str r0, [r1]
- ldr r0, _08001118 @ =0x02019C04
- str r2, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_080010F8: .4byte 0x02019C0C
-_080010FC: .4byte 0x02003060
-_08001100: .4byte sub_13FC + 1
-_08001104: .4byte sub_1828 + 1
-_08001108: .4byte 0x02019BF4
-_0800110C: .4byte 0x02019BFC
-_08001110: .4byte 0x02019BE4
-_08001114: .4byte 0x02019C08
-_08001118: .4byte 0x02019C04
-
- thumb_func_start sub_111C
-sub_111C: @ 0x0800111C
- ldr r2, _0800114C @ =0x02019BF4
- movs r1, #0
- ldr r0, _08001150 @ =0x02019C00
- str r1, [r0]
- ldr r0, _08001154 @ =0x02019BEC
- str r1, [r0]
- str r1, [r2]
- ldr r0, _08001158 @ =0x02019BF0
- str r1, [r0]
- ldr r2, _0800115C @ =0x02019BFC
- movs r0, #1
- rsbs r0, r0, #0
- str r0, [r2]
- ldr r0, _08001160 @ =0x02019BE4
- str r1, [r0]
- ldr r0, _08001164 @ =0x02019BE8
- str r1, [r0]
- ldr r0, _08001168 @ =0x02019BF8
- str r1, [r0]
- ldr r1, _0800116C @ =0x02019C08
- movs r0, #2
- str r0, [r1]
- bx lr
- .align 2, 0
-_0800114C: .4byte 0x02019BF4
-_08001150: .4byte 0x02019C00
-_08001154: .4byte 0x02019BEC
-_08001158: .4byte 0x02019BF0
-_0800115C: .4byte 0x02019BFC
-_08001160: .4byte 0x02019BE4
-_08001164: .4byte 0x02019BE8
-_08001168: .4byte 0x02019BF8
-_0800116C: .4byte 0x02019C08
-
- thumb_func_start sub_1170
-sub_1170: @ 0x08001170
- ldr r0, _0800118C @ =0x02019C0C
- ldr r0, [r0]
- cmp r0, #1
- bne _08001194
- ldr r0, _08001190 @ =0x02019C10
- ldrb r0, [r0]
- subs r0, #4
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #1
- bls _08001194
- movs r0, #0
- b _08001196
- .align 2, 0
-_0800118C: .4byte 0x02019C0C
-_08001190: .4byte 0x02019C10
-_08001194:
- movs r0, #1
-_08001196:
- bx lr
-
- thumb_func_start sub_1198
-sub_1198: @ 0x08001198
- ldr r0, _080011A4 @ =0x02003060
- ldr r1, _080011A8 @ =SerialIntr + 1
- str r1, [r0]
- ldr r1, _080011AC @ =Timer3Intr + 1
- str r1, [r0, #4]
- bx lr
- .align 2, 0
-_080011A4: .4byte 0x02003060
-_080011A8: .4byte SerialIntr + 1
-_080011AC: .4byte Timer3Intr + 1
-
- thumb_func_start sub_11B0
-sub_11B0: @ 0x080011B0
- adds r1, r0, #0
- ldr r0, _080011D0 @ =0x0200B134
- adds r0, #0xcd
- ldrb r0, [r0]
- cmp r0, #0
- beq _080011CE
- ldr r0, _080011D4 @ =0x02019BF8
- str r1, [r0]
- ldr r0, _080011D8 @ =0x02019BFC
- movs r1, #0
- str r1, [r0]
- ldr r0, _080011DC @ =0x02019BE4
- str r1, [r0]
- ldr r0, _080011E0 @ =0x02019BE8
- str r1, [r0]
-_080011CE:
- bx lr
- .align 2, 0
-_080011D0: .4byte 0x0200B134
-_080011D4: .4byte 0x02019BF8
-_080011D8: .4byte 0x02019BFC
-_080011DC: .4byte 0x02019BE4
-_080011E0: .4byte 0x02019BE8
-
- thumb_func_start sub_11E4
-sub_11E4: @ 0x080011E4
- ldr r1, _080011EC @ =0x02019C08
- str r0, [r1]
- bx lr
- .align 2, 0
-_080011EC: .4byte 0x02019C08
-
- thumb_func_start sub_11F0
-sub_11F0: @ 0x080011F0
- ldr r1, _080011F8 @ =0x02019C04
- str r0, [r1]
- bx lr
- .align 2, 0
-_080011F8: .4byte 0x02019C04
-
- thumb_func_start sub_11FC
-sub_11FC: @ 0x080011FC
- push {r4, r5, r6, r7, lr}
- ldr r0, _0800121C @ =0x02019C0C
- ldr r0, [r0]
- cmp r0, #1
- beq _08001208
- b _08001324
-_08001208:
- ldr r0, _08001220 @ =0x02019C10
- ldrb r0, [r0]
- cmp r0, #5
- bls _08001212
- b _08001324
-_08001212:
- lsls r0, r0, #2
- ldr r1, _08001224 @ =_08001228
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800121C: .4byte 0x02019C0C
-_08001220: .4byte 0x02019C10
-_08001224: .4byte _08001228
-_08001228: @ jump table
- .4byte _08001324 @ case 0
- .4byte _08001324 @ case 1
- .4byte _08001324 @ case 2
- .4byte _08001240 @ case 3
- .4byte _08001240 @ case 4
- .4byte _08001308 @ case 5
-_08001240:
- ldr r0, _080012A8 @ =0x02019BFC
- ldr r1, [r0]
- mov ip, r0
- cmp r1, #0
- blt _080012FC
- ldr r0, _080012AC @ =0x02019C08
- ldr r3, [r0]
- cmp r3, #0
- beq _080012FC
- ldr r0, _080012B0 @ =0x02019C04
- ldr r2, [r0]
- cmp r2, #0
- bne _080012FC
- ldr r0, _080012B4 @ =0x02019BE8
- ldr r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _080012DC
- ldr r1, _080012B8 @ =0x086A4C44
- ldr r0, _080012BC @ =0x02019BF8
- ldr r0, [r0]
- lsls r0, r0, #2
- adds r7, r0, r1
- mov r5, ip
- movs r6, #1
- rsbs r6, r6, #0
-_08001276:
- ldr r2, [r5]
- ldr r0, [r7]
- lsls r1, r2, #2
- adds r1, r1, r0
- ldr r3, [r1]
- adds r2, #1
- str r2, [r5]
- lsls r1, r2, #2
- adds r1, r1, r0
- ldr r4, [r1]
- cmp r3, r6
- beq _080012F8
- cmp r3, r6
- bge _080012D0
- ldr r1, _080012C0 @ =0x02019BE4
- ldr r0, [r1]
- cmp r0, #0
- beq _080012C4
- subs r0, #1
- str r0, [r1]
- cmp r0, #0
- bne _080012C8
- adds r0, r2, #1
- str r0, [r5]
- b _08001276
- .align 2, 0
-_080012A8: .4byte 0x02019BFC
-_080012AC: .4byte 0x02019C08
-_080012B0: .4byte 0x02019C04
-_080012B4: .4byte 0x02019BE8
-_080012B8: .4byte 0x086A4C44
-_080012BC: .4byte 0x02019BF8
-_080012C0: .4byte 0x02019BE4
-_080012C4:
- mvns r0, r3
- str r0, [r1]
-_080012C8:
- subs r0, r2, #1
- subs r0, r0, r4
- str r0, [r5]
- b _08001276
-_080012D0:
- ldr r0, _080012D8 @ =0x02019C00
- str r3, [r0]
- b _08001324
- .align 2, 0
-_080012D8: .4byte 0x02019C00
-_080012DC:
- lsrs r0, r1, #0x1f
- adds r0, r1, r0
- asrs r0, r0, #1
- lsls r0, r0, #1
- subs r0, r1, r0
- cmp r0, #1
- bne _08001324
- cmp r3, #1
- bne _08001324
- ldr r0, _080012F4 @ =0x02019C00
- str r2, [r0]
- b _08001324
- .align 2, 0
-_080012F4: .4byte 0x02019C00
-_080012F8:
- mov r0, ip
- str r3, [r0]
-_080012FC:
- ldr r1, _08001304 @ =0x02019C00
- movs r0, #0
- str r0, [r1]
- b _08001324
- .align 2, 0
-_08001304: .4byte 0x02019C00
-_08001308:
- ldr r4, _08001334 @ =0x02019BF0
- ldr r0, [r4]
- adds r0, #1
- str r0, [r4]
- cmp r0, #0x3c
- bls _08001324
- ldr r0, _08001338 @ =0x02019BF4
- ldr r0, [r0]
- cmp r0, #0
- beq _08001320
- bl sub_1340
-_08001320:
- movs r0, #0
- str r0, [r4]
-_08001324:
- ldr r1, _0800133C @ =0x02019BE8
- ldr r0, [r1]
- adds r0, #1
- str r0, [r1]
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08001334: .4byte 0x02019BF0
-_08001338: .4byte 0x02019BF4
-_0800133C: .4byte 0x02019BE8
-
- thumb_func_start sub_1340
-sub_1340: @ 0x08001340
- push {r4, r5, r6, lr}
- mov r6, r8
- push {r6}
- sub sp, #4
- ldr r6, _080013D0 @ =0x04000208
- movs r3, #0
- strh r3, [r6]
- ldr r2, _080013D4 @ =0x04000200
- ldrh r1, [r2]
- ldr r0, _080013D8 @ =0x0000FF3F
- ands r0, r1
- strh r0, [r2]
- movs r0, #1
- mov r8, r0
- strh r0, [r6]
- ldr r0, _080013DC @ =0x04000134
- strh r3, [r0]
- ldr r4, _080013E0 @ =0x04000128
- ldr r1, _080013E4 @ =0x00001008
- adds r0, r1, #0
- strh r0, [r4]
- ldrh r0, [r4]
- movs r5, #0x80
- lsls r5, r5, #7
- adds r1, r5, #0
- orrs r0, r1
- strh r0, [r4]
- ldr r0, _080013E8 @ =0x04000202
- movs r1, #0xc0
- strh r1, [r0]
- strh r3, [r6]
- ldrh r0, [r2]
- orrs r0, r1
- strh r0, [r2]
- mov r0, r8
- strh r0, [r6]
- ldrb r1, [r4]
- movs r0, #2
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4]
- ldr r0, _080013EC @ =0x02019C10
- strb r3, [r0]
- movs r5, #0
- str r5, [sp]
- ldr r1, _080013F0 @ =0x02002808
- ldr r2, _080013F4 @ =0x05000003
- mov r0, sp
- bl CpuSet
- strh r5, [r6]
- ldrh r0, [r4]
- movs r1, #0x80
- orrs r0, r1
- strh r0, [r4]
- mov r1, r8
- strh r1, [r6]
- ldr r1, _080013F8 @ =0x0400010C
- movs r2, #0x80
- lsls r2, r2, #8
- adds r0, r2, #0
- strh r0, [r1]
- adds r1, #2
- movs r0, #0xc1
- strh r0, [r1]
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080013D0: .4byte 0x04000208
-_080013D4: .4byte 0x04000200
-_080013D8: .4byte 0x0000FF3F
-_080013DC: .4byte 0x04000134
-_080013E0: .4byte 0x04000128
-_080013E4: .4byte 0x00001008
-_080013E8: .4byte 0x04000202
-_080013EC: .4byte 0x02019C10
-_080013F0: .4byte 0x02002808
-_080013F4: .4byte 0x05000003
-_080013F8: .4byte 0x0400010C
-
thumb_func_start sub_13FC
sub_13FC: @ 0x080013FC
push {r4, r5, r6, r7, lr}
@@ -1220,6 +584,8 @@ _08001878: .4byte 0x0400010E
_0800187C: .4byte 0x0400010C
_08001880: .4byte 0x02019C10
+@ file boundary?
+
thumb_func_start sub_1884
sub_1884: @ 0x08001884
push {r4, r5, r6, lr}
diff --git a/data/rom.s b/data/rom.s
index a2bf679..f745968 100755
--- a/data/rom.s
+++ b/data/rom.s
@@ -652,7 +652,17 @@ gEmptyOamData:: @ 0x08057C46
.4byte 0x00F000F4, 0x00000000
.4byte 0x00F000F4, 0x00000000
-.incbin "baserom.gba", 0x58046, 0x79890 - 0x58046
+ .align 2, 0
+gUnknown_08058048:: @ 0x08058058
+ .incbin "baserom.gba", 0x58048, 0x200
+
+gUnknown_08058248:: @ 0x08058248
+ .incbin "baserom.gba", 0x58248, 0x4000
+
+gUnknown_0805C248:: @ 0x0805C248
+ .incbin "baserom.gba", 0x5C248, 0x500
+
+.incbin "baserom.gba", 0x5C748, 0x79890 - 0x5C748
gTitlescreenStateFuncs:: @ 0x08079890
.4byte LoadTitlescreenGraphics
@@ -742,17 +752,79 @@ gMainFuncs:: @ 0x086A4AD8
.4byte IntroMain
.4byte TitlescreenMain
.4byte PinballGameMain
- .4byte sub_19028_Main
+ .4byte IdlePinballGameMain
.4byte OptionsMain
.4byte PokedexMain
.4byte sub_9BC_Main
.4byte EReaderMain
.4byte HighScoresMain
- .4byte sub_CE68_Main
+ .4byte IdleHighScoresMain
.4byte FieldSelectMain
- .4byte sub_25A4_Main
+ .4byte BonusFieldSelectMain
+
+gUnknown_086A4B08:: @ 0x086A4B08
+ .4byte 2, 1, -1
+
+gUnknown_086A4B14:: @ 0x086A4B14
+ .4byte 2, 0, -1
+
+gUnknown_086A4B20:: @ 0x086A4B20
+ .4byte 2, 2, 1, -1
+
+gUnknown_086A4B30:: @ 0x086A4B30
+ .4byte 2, 2, 0, -1
+
+gUnknown_086A4B40:: @ 0x086A4B40
+ .4byte 2, 1, -21, 2, -1
+
+gUnknown_086A4B54:: @ 0x086A4B54
+ .4byte 2, 2, 1, 0, -11, 4, -1
+
+gUnknown_086A4B70:: @ 0x086A4B70
+ .4byte 2, 2, 1, -1
+
+gUnknown_086A4B80:: @ 0x086A4B80
+ .4byte 2, 2, 2, 1, -1
+
+gUnknown_086A4B94:: @ 0x086A4B94
+ .4byte 2, 2, 2, 2, 1, -1
+
+gUnknown_086A4BAC:: @ 0x086A4BAC
+ .4byte 2, 2, 2, 2, 2, 1, -1
+
+gUnknown_086A4BC8:: @ 0x086A4BC8
+ .4byte 1, 1, 2, 2, 2, 2, 1, -1
+
+gUnknown_086A4BE8:: @ 0x086A4BE8
+ .4byte 2, 2, -10, 2, -1
+
+gUnknown_086A4BFC:: @ 0x086A4BFC
+ .4byte 2, 2, 1, 1, -3, 4, -1
+
+gUnknown_086A4C18:: @ 0x086A4C18
+ .4byte 2, 2, -5, 2, -1
+
+gUnknown_086A4C2C:: @ 0x086A4C2C
+ .4byte 2, 2, 1, -11, 3, -1
+
+gUnknown_086A4C44:: @ 0x086A4C44
+ .4byte gUnknown_086A4B08
+ .4byte gUnknown_086A4B14
+ .4byte gUnknown_086A4B20
+ .4byte gUnknown_086A4B30
+ .4byte gUnknown_086A4B40
+ .4byte gUnknown_086A4B54
+ .4byte gUnknown_086A4B70
+ .4byte gUnknown_086A4B80
+ .4byte gUnknown_086A4B94
+ .4byte gUnknown_086A4BAC
+ .4byte gUnknown_086A4BC8
+ .4byte gUnknown_086A4BE8
+ .4byte gUnknown_086A4BFC
+ .4byte gUnknown_086A4C18
+ .4byte gUnknown_086A4C2C
-.incbin "baserom.gba", 0x6A4B08, 0x6A964C - 0x6A4B08
+.incbin "baserom.gba", 0x6A4C80, 0x6A964C - 0x6A4C80
gUnknown_086A964C:: @ 0x086A964C
.2byte 0x0002
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 03faa1a..b5aac20 100755
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -477,6 +477,7 @@
#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L)
#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H)
+#define REG_SIOCNT_L (*(vs8 *)REG_ADDR_SIOCNT)
#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT)
#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8)
#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32)
diff --git a/include/gbplayer.h b/include/gbplayer.h
new file mode 100755
index 0000000..94555bd
--- /dev/null
+++ b/include/gbplayer.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_GBPLAYER_H
+#define GUARD_GBPLAYER_H
+
+#include "global.h"
+
+void InitGameBoyPlayer(void);
+
+#endif // GUARD_GBPLAYER_H
diff --git a/include/main.h b/include/main.h
index a0162b7..e27249d 100755
--- a/include/main.h
+++ b/include/main.h
@@ -78,8 +78,38 @@ struct Main
/*0x2F8*/ struct SpriteGroup spriteGroups[NUM_SPRITE_GROUPS];
};
+struct Unk0200B134
+{
+ /*0x00*/ u8 filler0[0xCD];
+ /*0xCD*/ u8 unkCD;
+};
+
extern struct Main gMain;
+extern struct Unk0200B134 gUnknown_0200B134;
extern struct SpriteGroup gUnknown_0200B3B8[];
+extern u32 IntrMain_Buffer[0x200];
+extern u32 IntrMain[];
+extern IntrFunc *gUnknown_0200FB98;
+extern IntrFunc *gUnknown_02019BE0;
+extern int gUnknown_02019BE4;
+extern int gUnknown_02019BE8;
+extern int gUnknown_02019BEC;
+extern u32 gUnknown_02019BF0;
+extern int gUnknown_02019BF4;
+extern int gUnknown_02019BF8;
+extern int gUnknown_02019BFC;
+extern int gUnknown_02019C00;
+extern int gUnknown_02019C04;
+extern int gUnknown_02019C08;
+extern int gGameBoyPlayerEnabled;
+extern u8 gUnknown_02019C10;
+extern u8 gUnknown_02002008[];
+#define INTR_COUNT 14
+extern IntrFunc gIntrTable[14];
+extern void (*gUnknown_0200FB9C)(void);
+extern void (*gUnknown_0200FBA0)(void);
+extern void (*gUnknown_02017BD0)(void);
+extern void (*gUnknown_02017BD4)(void);
extern StateFunc gMainFuncs[];
extern struct OamData gOamBuffer[128];
extern u16 gUnknown_03005C00[0x600];
@@ -90,7 +120,11 @@ void sub_2B4(void);
void sub_490(void);
void sub_518(void);
void sub_578(void);
+void sub_CBC(void);
+void sub_D10(void);
void sub_D74(void);
+void SerialIntr(void);
+void Timer3Intr(void);
s16 LoadSpriteSets(const struct SpriteSet* const*, u16, struct SpriteGroup*);
#endif // GUARD_MAIN_H
diff --git a/ld_script.txt b/ld_script.txt
index 1f1d401..04c2f6a 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -30,9 +30,10 @@ SECTIONS
src/util.o(.text);
src/rom_850.o(.text);
src/main.o(.text);
+ src/gbplayer.o(.text);
asm/rom_9BC.o(.text);
- asm/rom_25A4.o(.text);
- asm/rom_2C58.o(.text);
+ asm/bonus_field_select.o(.text);
+ asm/ereader.o(.text);
asm/pokedex.o(.text);
asm/field_select.o(.text);
asm/intro.o(.text);
diff --git a/src/gbplayer.c b/src/gbplayer.c
new file mode 100755
index 0000000..3b74f5b
--- /dev/null
+++ b/src/gbplayer.c
@@ -0,0 +1,433 @@
+#include "global.h"
+#include "gbplayer.h"
+#include "main.h"
+
+extern void sub_1340(void);
+extern void sub_13FC(void);
+extern void sub_1828(void);
+extern u8 gUnknown_02002808[];
+extern u16 sGbPlayerCurKeys;
+extern u16 sGbPlayerPrevKeys;
+extern const u8 gUnknown_08058048[];
+extern const u8 gUnknown_08058248[];
+extern const u8 gUnknown_0805C248[];
+
+extern const int *gUnknown_086A4C44[];
+
+/*static*/ void ReadGbPlayerKeys(void)
+{
+ u16 keyInput = REG_KEYINPUT ^ KEYS_MASK;
+ sGbPlayerPrevKeys = sGbPlayerCurKeys;
+ sGbPlayerCurKeys = keyInput;
+}
+
+#ifdef NONMATCHING
+static u8 CheckGameBoyPlayer(void)
+{
+ u32 i;
+ u16 *curKeys;
+ u16 *prevKeys;
+ u16 newKeys;
+ int gbPlayerDetected;
+ int curFrame, lastDetectedFrame, prevDetectedFrame;
+
+ curFrame = 0;
+ gbPlayerDetected = 0;
+ lastDetectedFrame = 0;
+ prevDetectedFrame = 0;
+ VBlankIntrWait();
+ DmaCopy16(3, gUnknown_08058248, (void *)BG_CHAR_ADDR(2), BG_CHAR_SIZE);
+ DmaCopy16(3, gUnknown_08058048, (void *)BG_PLTT, BG_PLTT_SIZE);
+ DmaCopy16(3, gUnknown_0805C248, gUnknown_02002008, 0x500);
+ DmaCopy16(3, gUnknown_02002008, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
+ REG_BG0CNT = BGCNT_256COLOR | BGCNT_CHARBASE(2);
+ for (i = 0; i <= 16; i++)
+ {
+ VBlankIntrWait();
+ REG_BLDY = 16 - i;
+ }
+
+ prevKeys = &sGbPlayerPrevKeys;
+ curKeys = &sGbPlayerCurKeys;
+ while (1)
+ {
+ if (curFrame < 30)
+ ReadGbPlayerKeys();
+ else
+ break;
+
+ newKeys = (*prevKeys ^ *curKeys) & *curKeys;
+ if ((newKeys & DPAD_ANY) == DPAD_ANY)
+ {
+ prevDetectedFrame = lastDetectedFrame;
+ lastDetectedFrame = curFrame;
+ }
+
+ if (prevDetectedFrame && lastDetectedFrame - prevDetectedFrame < 4)
+ gbPlayerDetected = 1;
+
+ curFrame++;
+ VBlankIntrWait();
+ DmaCopy32(3, gUnknown_02002008, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
+ }
+
+ for (i = 0; i <= 16; i++)
+ {
+ VBlankIntrWait();
+ REG_BLDY = i;
+ }
+
+ if (gbPlayerDetected)
+ return 1;
+ else
+ return 0;
+}
+#else
+NAKED
+static u8 CheckGameBoyPlayer(void)
+{
+ asm_unified("\n\
+ push {r4, r5, r6, r7, lr}\n\
+ mov r7, sl\n\
+ mov r6, sb\n\
+ mov r5, r8\n\
+ push {r5, r6, r7}\n\
+ movs r7, #0\n\
+ movs r0, #0\n\
+ mov sl, r0\n\
+ mov sb, r0\n\
+ mov r8, r0\n\
+ bl VBlankIntrWait\n\
+ ldr r0, _08000F30 @ =0x040000D4\n\
+ ldr r1, _08000F34 @ =0x08058248\n\
+ str r1, [r0]\n\
+ ldr r1, _08000F38 @ =0x06008000\n\
+ str r1, [r0, #4]\n\
+ ldr r1, _08000F3C @ =0x80002000\n\
+ str r1, [r0, #8]\n\
+ ldr r1, [r0, #8]\n\
+ ldr r1, _08000F40 @ =0x08058048\n\
+ str r1, [r0]\n\
+ movs r1, #0xa0\n\
+ lsls r1, r1, #0x13\n\
+ str r1, [r0, #4]\n\
+ ldr r1, _08000F44 @ =0x80000100\n\
+ str r1, [r0, #8]\n\
+ ldr r1, [r0, #8]\n\
+ ldr r1, _08000F48 @ =0x0805C248\n\
+ str r1, [r0]\n\
+ ldr r2, _08000F4C @ =0x02002008\n\
+ str r2, [r0, #4]\n\
+ ldr r1, _08000F50 @ =0x80000280\n\
+ str r1, [r0, #8]\n\
+ ldr r1, [r0, #8]\n\
+ str r2, [r0]\n\
+ movs r1, #0xc0\n\
+ lsls r1, r1, #0x13\n\
+ str r1, [r0, #4]\n\
+ ldr r1, _08000F54 @ =0x80000400\n\
+ str r1, [r0, #8]\n\
+ ldr r0, [r0, #8]\n\
+ ldr r1, _08000F58 @ =0x04000008\n\
+ movs r0, #0x88\n\
+ strh r0, [r1]\n\
+ movs r4, #0\n\
+ ldr r6, _08000F5C @ =0x04000054\n\
+ movs r5, #0x10\n\
+_08000F18:\n\
+ bl VBlankIntrWait\n\
+ subs r0, r5, r4\n\
+ strh r0, [r6]\n\
+ adds r4, #1\n\
+ cmp r4, #0x10\n\
+ bls _08000F18\n\
+ ldr r6, _08000F60 @ =0x02002002\n\
+ ldr r5, _08000F64 @ =0x02002000\n\
+ ldr r4, _08000F30 @ =0x040000D4\n\
+ b _08000FA4\n\
+ .align 2, 0\n\
+_08000F30: .4byte 0x040000D4\n\
+_08000F34: .4byte 0x08058248\n\
+_08000F38: .4byte 0x06008000\n\
+_08000F3C: .4byte 0x80002000\n\
+_08000F40: .4byte 0x08058048\n\
+_08000F44: .4byte 0x80000100\n\
+_08000F48: .4byte 0x0805C248\n\
+_08000F4C: .4byte 0x02002008\n\
+_08000F50: .4byte 0x80000280\n\
+_08000F54: .4byte 0x80000400\n\
+_08000F58: .4byte 0x04000008\n\
+_08000F5C: .4byte 0x04000054\n\
+_08000F60: .4byte 0x02002002\n\
+_08000F64: .4byte 0x02002000\n\
+_08000F68:\n\
+ ldrh r0, [r6]\n\
+ ldrh r1, [r5]\n\
+ eors r0, r1\n\
+ ands r0, r1\n\
+ movs r1, #0xf0\n\
+ ands r0, r1\n\
+ cmp r0, #0xf0\n\
+ bne _08000F7C\n\
+ mov r8, sb\n\
+ mov sb, r7\n\
+_08000F7C:\n\
+ mov r1, r8\n\
+ cmp r1, #0\n\
+ beq _08000F8E\n\
+ mov r2, sb\n\
+ subs r0, r2, r1\n\
+ cmp r0, #3\n\
+ bgt _08000F8E\n\
+ movs r0, #1\n\
+ mov sl, r0\n\
+_08000F8E:\n\
+ adds r7, #1\n\
+ bl VBlankIntrWait\n\
+ ldr r0, _08000FB0 @ =0x02002008\n\
+ str r0, [r4]\n\
+ movs r0, #0xc0\n\
+ lsls r0, r0, #0x13\n\
+ str r0, [r4, #4]\n\
+ ldr r0, _08000FB4 @ =0x84000200\n\
+ str r0, [r4, #8]\n\
+ ldr r0, [r4, #8]\n\
+_08000FA4:\n\
+ cmp r7, #0x1d\n\
+ bgt _08000FB8\n\
+ bl ReadGbPlayerKeys\n\
+ b _08000F68\n\
+ .align 2, 0\n\
+_08000FB0: .4byte 0x02002008\n\
+_08000FB4: .4byte 0x84000200\n\
+_08000FB8:\n\
+ movs r4, #0\n\
+ ldr r5, _08000FD4 @ =0x04000054\n\
+_08000FBC:\n\
+ bl VBlankIntrWait\n\
+ strh r4, [r5]\n\
+ adds r4, #1\n\
+ cmp r4, #0x10\n\
+ bls _08000FBC\n\
+ mov r1, sl\n\
+ cmp r1, #0\n\
+ bne _08000FD8\n\
+ movs r0, #0\n\
+ b _08000FDA\n\
+ .align 2, 0\n\
+_08000FD4: .4byte 0x04000054\n\
+_08000FD8:\n\
+ movs r0, #1\n\
+_08000FDA:\n\
+ pop {r3, r4, r5}\n\
+ mov r8, r3\n\
+ mov sb, r4\n\
+ mov sl, r5\n\
+ pop {r4, r5, r6, r7}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#endif // NONMATCHING
+
+void InitGameBoyPlayer(void)
+{
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+ REG_BLDCNT = BLDCNT_TGT2_ALL | BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL;
+ REG_BLDY = 0x10;
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON;
+ gUnknown_02019C00 = 0;
+ gUnknown_02019BEC = 0;
+ gUnknown_02019BF4 = 0;
+ gUnknown_02019BF0 = 0;
+ gGameBoyPlayerEnabled = CheckGameBoyPlayer();
+ REG_IE &= ~INTR_FLAG_VBLANK;
+ REG_DISPSTAT &= ~DISPSTAT_VBLANK_INTR;
+ REG_DISPCNT = 0;
+ gUnknown_02019BFC = -1;
+ gUnknown_02019BE4 = 0;
+ gUnknown_02019BE8 = 0;
+ gUnknown_02019BF8 = 0;
+ gUnknown_02019C08 = 2;
+}
+
+void sub_10C0(void)
+{
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ gIntrTable[0] = sub_13FC;
+ gIntrTable[1] = sub_1828;
+ gUnknown_02019BF4 = 1;
+ sub_1340();
+ }
+
+ gUnknown_02019BFC = -1;
+ gUnknown_02019BE4 = 0;
+ gUnknown_02019C08 = 2;
+ gUnknown_02019C04 = 0;
+}
+
+void sub_111C(void)
+{
+ // This probably wasn't the original code, but it matches.
+ int *var0 = &gUnknown_02019BF4;
+ int val = 0;
+ gUnknown_02019C00 = val;
+ gUnknown_02019BEC = val;
+ *var0 = val;
+ gUnknown_02019BF0 = val;
+ gUnknown_02019BFC = -1;
+ gUnknown_02019BE4 = val;
+ gUnknown_02019BE8 = val;
+ gUnknown_02019BF8 = val;
+ gUnknown_02019C08 = 2;
+}
+
+int sub_1170(void)
+{
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ u8 val = gUnknown_02019C10 - 4;
+ if (val > 1)
+ return 0;
+ }
+
+ return 1;
+}
+
+void sub_1198(void)
+{
+ gIntrTable[0] = SerialIntr;
+ gIntrTable[1] = Timer3Intr;
+}
+
+void sub_11B0(int arg0)
+{
+ if (gUnknown_0200B134.unkCD)
+ {
+ gUnknown_02019BF8 = arg0;
+ gUnknown_02019BFC = 0;
+ gUnknown_02019BE4 = 0;
+ gUnknown_02019BE8 = 0;
+ }
+}
+
+void sub_11E4(int arg0)
+{
+ gUnknown_02019C08 = arg0;
+}
+
+void sub_11F0(int arg0)
+{
+ gUnknown_02019C04 = arg0;
+}
+
+void sub_11FC(void)
+{
+ int var0;
+ int var1;
+
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ switch (gUnknown_02019C10)
+ {
+ case 0:
+ case 1:
+ case 2:
+ break;
+ case 3:
+ case 4:
+ if (gUnknown_02019BFC >= 0 && gUnknown_02019C08 && !gUnknown_02019C04)
+ {
+ if (!(gUnknown_02019BE8 & 1))
+ {
+ while (1)
+ {
+ var0 = gUnknown_086A4C44[gUnknown_02019BF8][gUnknown_02019BFC++];
+ var1 = gUnknown_086A4C44[gUnknown_02019BF8][gUnknown_02019BFC];
+ if (var0 == -1)
+ {
+ gUnknown_02019BFC = var0;
+ gUnknown_02019C00 = 0;
+ break;
+ }
+
+ if (var0 < -1)
+ {
+ if (gUnknown_02019BE4)
+ {
+ if (--gUnknown_02019BE4 == 0)
+ {
+ gUnknown_02019BFC++;
+ }
+ else
+ {
+ gUnknown_02019BFC--;
+ gUnknown_02019BFC -= var1;
+ }
+ }
+ else
+ {
+ gUnknown_02019BE4 = ~var0;
+ gUnknown_02019BFC--;
+ gUnknown_02019BFC -= var1;
+ }
+ }
+ else
+ {
+ gUnknown_02019C00 = var0;
+ break;
+ }
+ }
+ }
+ else if (gUnknown_02019BE8 % 2 == 1 && gUnknown_02019C08 == 1)
+ {
+ gUnknown_02019C00 = 0;
+ }
+ }
+ else
+ {
+ gUnknown_02019C00 = 0;
+ }
+ break;
+ case 5:
+ if (++gUnknown_02019BF0 > 60)
+ {
+ if (gUnknown_02019BF4)
+ sub_1340();
+
+ gUnknown_02019BF0 = 0;
+ }
+ break;
+ }
+ }
+
+ gUnknown_02019BE8++;
+}
+
+void sub_1340(void)
+{
+ REG_IME = 0;
+ REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ REG_IME = 1;
+ REG_RCNT = 0;
+ REG_SIOCNT = SIO_32BIT_MODE | SIO_MULTI_SD;
+ REG_SIOCNT |= SIO_INTR_ENABLE;
+ REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL;
+ REG_IME = INTR_FLAG_VBLANK;
+ REG_SIOCNT_L &= -2;
+ gUnknown_02019C10 = 0;
+ CpuFill32(0, gUnknown_02002808, 0xC);
+ REG_IME = 0;
+ REG_SIOCNT |= SIO_MULTI_BUSY;
+ REG_IME = INTR_FLAG_VBLANK;
+ REG_TM3CNT_L = 0x8000;
+ REG_TM3CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_64CLK;
+}
+
+// void sub_13FC(void)
+// {
+
+// }
diff --git a/src/main.c b/src/main.c
index a6f56be..fb287b2 100755
--- a/src/main.c
+++ b/src/main.c
@@ -1,39 +1,24 @@
#include "global.h"
-#include "m4a.h"
#include "main.h"
+#include "gbplayer.h"
+#include "m4a.h"
extern void sub_438(void);
extern void sub_8BC(void);
extern void sub_8FC(void);
extern void sub_940(void);
-extern void sub_B54(void);
-extern void sub_B8C(void);
-static void InitIntrHandlers(void);
-extern void sub_CBC(void);
-extern void sub_D10(void);
-extern void sub_D74(void);
-extern void sub_FE8(void);
-extern void ReadKeys(void);
extern void sub_1F4C(void);
extern void sub_1F5C(void);
extern void sub_1090C(void);
extern void sub_52A18(void);
-extern u32 IntrMain_Buffer[0x200];
-extern u32 IntrMain[];
-extern IntrFunc *gUnknown_0200FB98;
-extern IntrFunc *gUnknown_02019BE0;
-extern const IntrFunc gIntrTableTemplate[14];
-#define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc)))
-extern IntrFunc gIntrTable[INTR_COUNT];
-extern void (*gUnknown_0200FB9C)(void);
-extern void (*gUnknown_0200FBA0)(void);
-extern void (*gUnknown_02017BD0)(void);
-extern void (*gUnknown_02017BD4)(void);
-extern u16 gUnknown_02002000;
-extern u16 gUnknown_02002002;
+static void sub_B54(void);
+static void sub_B8C(void);
+static void InitIntrHandlers(void);
+static void ReadKeys(void);
-extern s16 gUnknown_08055C44[];
+extern const IntrFunc gIntrTableTemplate[14];
+extern const s16 gUnknown_08055C44[];
void AgbMain(void)
{
@@ -42,7 +27,7 @@ void AgbMain(void)
DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer));
INTR_VECTOR = IntrMain_Buffer;
sub_B54();
- sub_FE8();
+ InitGameBoyPlayer();
while (1)
{
ReadKeys();
@@ -149,7 +134,7 @@ void IntrDummy(void)
{
}
-void sub_B54(void)
+static void sub_B54(void)
{
REG_WAITCNT = WAITCNT_AGB
| WAITCNT_PREFETCH_ENABLE
@@ -169,7 +154,7 @@ void sub_B54(void)
sub_52A18();
}
-void sub_B8C(void)
+static void sub_B8C(void)
{
gMain.mainState = 0;
gMain.subState = 0;
@@ -275,7 +260,7 @@ s16 sub_C74(u16 arg0)
return sub_C24(arg0 + 0x4000);
}
-void ReadKeys(void)
+static void ReadKeys(void)
{
u16 keyInput = ~REG_KEYINPUT;
gMain.newKeys = keyInput & (keyInput ^ gMain.heldKeys);
@@ -385,10 +370,3 @@ void sub_DC4(void)
m4aSoundMain();
}
}
-
-void sub_E90(void)
-{
- u16 keyInput = REG_KEYINPUT ^ KEYS_MASK;
- gUnknown_02002002 = gUnknown_02002000;
- gUnknown_02002000 = keyInput;
-}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 4433922..3cfe8b9 100755
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1,12 +1,22 @@
.space 0x2000
-gUnknown_02002000: @ 0x2002000
- .space 2
+sGbPlayerCurKeys: @ 0x2002000
+ .space 0x2
-gUnknown_02002002: @ 0x2002002
- .space 2
+sGbPlayerPrevKeys: @ 0x2002002
+ .space 0x2
- .space 0x884
+ .space 0x4
+
+gUnknown_02002008: @ 0x2002008
+ .space 0x500
+
+ .space 0x300
+
+gUnknown_02002808: @ 0x2002808
+ .space 0xC
+
+ .space 0x74
gTitlescreen: @ 0x2002888
.space 0x18
@@ -42,7 +52,11 @@ gIntrTable: @ 0x2003060
gMain: @ 0x200B0C0
- .space 0x2F8
+ .space 0x74
+
+gUnknown_0200B134: @ 0x200B134
+
+ .space 0x284
gUnknown_0200B3B8: @ 0x200B3B8
@@ -75,10 +89,46 @@ gUnknown_02017BE0: @ 0x2017BE0
gUnknown_02019BE0: @ 0x2019BE0
.space 0x4
- .space 0x8D0
+gUnknown_02019BE4: @ 0x2019BE4
+ .space 0x4
+
+gUnknown_02019BE8: @ 0x2019BE8
+ .space 0x4
+
+gUnknown_02019BEC: @ 0x2019BEC
+ .space 0x4
+
+gUnknown_02019BF0: @ 0x2019BF0
+ .space 0x4
+
+gUnknown_02019BF4: @ 0x2019BF4
+ .space 0x4
+
+gUnknown_02019BF8: @ 0x2019BF8
+ .space 0x4
+
+gUnknown_02019BFC: @ 0x2019BFC
+ .space 0x4
+
+gUnknown_02019C00: @ 0x2019C00
+ .space 0x4
+
+gUnknown_02019C04: @ 0x2019C04
+ .space 0x4
+
+gUnknown_02019C08: @ 0x2019C08
+ .space 0x4
+
+gGameBoyPlayerEnabled: @ 0x2019C0C
+ .space 0x4
+
+gUnknown_02019C10: @ 0x2019C10
+ .space 0x4
+
+ .space 0x8A0
gAutoDisplayTitlescreenMenu: @ 0x201A4B4
- .space 4
+ .space 0x4
.space 0x1CD8