diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-24 18:16:51 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-24 18:16:51 -0500 |
commit | 41baa271c3fff795ee7ffa16d756ae427e5b792c (patch) | |
tree | e7b11179dc21ea9246ca9bffdf07589a156e86f9 | |
parent | bd344c1390ee9e0bbcfdb4aac5250a37e574a05f (diff) |
More decompiling + gbplayer lib code
-rwxr-xr-x | Makefile | 1 | ||||
-rwxr-xr-x | asm/bonus_field_select.s (renamed from asm/rom_25A4.s) | 4 | ||||
-rwxr-xr-x | asm/ereader.s (renamed from asm/rom_2C58.s) | 0 | ||||
-rwxr-xr-x | asm/high_scores.s | 5 | ||||
-rwxr-xr-x | asm/options.s | 22 | ||||
-rwxr-xr-x | asm/rom_11B9C.s | 4 | ||||
-rwxr-xr-x | asm/rom_9BC.s | 638 | ||||
-rwxr-xr-x | data/rom.s | 82 | ||||
-rwxr-xr-x | include/gba/io_reg.h | 1 | ||||
-rwxr-xr-x | include/gbplayer.h | 8 | ||||
-rwxr-xr-x | include/main.h | 34 | ||||
-rwxr-xr-x | ld_script.txt | 5 | ||||
-rwxr-xr-x | src/gbplayer.c | 433 | ||||
-rwxr-xr-x | src/main.c | 46 | ||||
-rwxr-xr-x | sym_ewram.txt | 66 |
15 files changed, 647 insertions, 702 deletions
@@ -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} @@ -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) +// { + +// } @@ -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 |