diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-14 18:23:27 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-14 18:23:27 -0400 |
commit | e07368e90b1c0804dc4e4f2269ce9dc5fb632999 (patch) | |
tree | 459934a13483e2415e5d40d0de64cb9245d77b8c | |
parent | 308bf88e6078a243c3172f8f5312de6dd5f28a7b (diff) |
cereader_tool and ereader_helpers
-rw-r--r-- | asm/cereader_tool.s | 196 | ||||
-rw-r--r-- | asm/ereader_helpers.s | 920 | ||||
-rw-r--r-- | asm/link.s | 4 | ||||
-rw-r--r-- | asm/ss_anne.s | 8 | ||||
-rw-r--r-- | data/data_8471F00.s | 18 | ||||
-rw-r--r-- | include/cereader_tool.h | 42 | ||||
-rw-r--r-- | include/link.h | 2 | ||||
-rw-r--r-- | include/mevent.h | 6 | ||||
-rw-r--r-- | include/save.h | 2 | ||||
-rw-r--r-- | include/unk_815c27c.h | 12 | ||||
-rw-r--r-- | ld_script.txt | 7 | ||||
-rw-r--r-- | src/cereader_tool.c | 88 | ||||
-rw-r--r-- | src/ereader_helpers.c | 397 | ||||
-rw-r--r-- | src/mevent.c | 160 | ||||
-rw-r--r-- | src/save.c | 2 | ||||
-rw-r--r-- | src/trainer_tower.c | 154 | ||||
-rw-r--r-- | sym_bss.txt | 34 | ||||
-rw-r--r-- | sym_common.txt | 2 |
18 files changed, 673 insertions, 1381 deletions
diff --git a/asm/cereader_tool.s b/asm/cereader_tool.s deleted file mode 100644 index 749cb5303..000000000 --- a/asm/cereader_tool.s +++ /dev/null @@ -1,196 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_815D654 -sub_815D654: @ 815D654 - push {lr} - ldr r0, _0815D674 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _0815D678 @ =0x00003d41 - adds r0, r1 - ldrb r1, [r0] - adds r2, r1, 0x1 - adds r0, r2, 0 - asrs r0, 8 - lsls r0, 8 - subs r0, r2, r0 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0815D674: .4byte gSaveBlock1Ptr -_0815D678: .4byte 0x00003d41 - thumb_func_end sub_815D654 - - thumb_func_start sub_815D67C -sub_815D67C: @ 815D67C - push {r4,r5,lr} - adds r5, r0, 0 - ldrb r0, [r5, 0x1] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bhi _0815D6AA - ldrb r0, [r5, 0x2] - cmp r0, 0x2 - bhi _0815D6AA - movs r4, 0xF7 - lsls r4, 2 - adds r0, r5, 0 - adds r1, r4, 0 - bl CalcByteArraySum - adds r4, r5, r4 - ldr r1, [r4] - cmp r0, r1 - bne _0815D6AA - movs r0, 0x1 - b _0815D6AC -_0815D6AA: - movs r0, 0 -_0815D6AC: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_815D67C - - thumb_func_start sub_815D6B4 -sub_815D6B4: @ 815D6B4 - push {r4-r7,lr} - adds r7, r0, 0 - ldrb r6, [r7] - subs r0, r6, 0x1 - cmp r0, 0x7 - bhi _0815D6F8 - movs r5, 0 - cmp r5, r6 - bcs _0815D6E0 - adds r4, r7, 0 - adds r4, 0x8 -_0815D6CA: - adds r0, r4, 0 - bl sub_815D67C - cmp r0, 0 - beq _0815D6F8 - movs r0, 0xF8 - lsls r0, 2 - adds r4, r0 - adds r5, 0x1 - cmp r5, r6 - bcc _0815D6CA -_0815D6E0: - adds r0, r7, 0 - adds r0, 0x8 - lsls r1, r6, 5 - subs r1, r6 - lsls r1, 5 - bl CalcByteArraySum - ldr r1, [r7, 0x4] - cmp r0, r1 - bne _0815D6F8 - movs r0, 0x1 - b _0815D6FA -_0815D6F8: - movs r0, 0 -_0815D6FA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_815D6B4 - - thumb_func_start sub_815D700 -sub_815D700: @ 815D700 - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldrh r0, [r5, 0x2] - cmp r0, 0 - beq _0815D718 - ldr r0, _0815D77C @ =gUnknown_8479CD8 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c" - ldr r2, _0815D780 @ =gUnknown_8479D10 "ttdata->dummy == 0" - movs r1, 0xC6 - movs r3, 0x1 - bl AGBAssert -_0815D718: - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _0815D72A - ldr r0, _0815D77C @ =gUnknown_8479CD8 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c" - ldr r2, _0815D784 @ =gUnknown_8479D24 "ttdata->id == 0" - movs r1, 0xC7 - movs r3, 0x1 - bl AGBAssert -_0815D72A: - movs r6, 0x80 - lsls r6, 5 - adds r0, r4, 0 - movs r1, 0 - adds r2, r6, 0 - bl memset - ldr r2, _0815D788 @ =0x00000f88 - adds r0, r4, 0 - adds r1, r5, 0 - bl memcpy - bl sub_815D654 - strb r0, [r4, 0x1] - movs r0, 0x1E - adds r1, r4, 0 - bl sub_80DA5E0 - cmp r0, 0x1 - bne _0815D78C - adds r0, r4, 0 - movs r1, 0 - adds r2, r6, 0 - bl memset - ldr r0, _0815D788 @ =0x00000f88 - adds r1, r5, r0 - movs r2, 0xF8 - lsls r2, 4 - adds r0, r4, 0 - bl memcpy - movs r0, 0x1F - adds r1, r4, 0 - bl sub_80DA5E0 - cmp r0, 0x1 - bne _0815D78C - movs r0, 0x1 - b _0815D78E - .align 2, 0 -_0815D77C: .4byte gUnknown_8479CD8 -_0815D780: .4byte gUnknown_8479D10 -_0815D784: .4byte gUnknown_8479D24 -_0815D788: .4byte 0x00000f88 -_0815D78C: - movs r0, 0 -_0815D78E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_815D700 - - thumb_func_start sub_815D794 -sub_815D794: @ 815D794 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x80 - lsls r0, 5 - bl AllocZeroed - adds r5, r0, 0 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_815D700 - adds r4, r0, 0 - adds r0, r5, 0 - bl Free - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_815D794 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/ereader_helpers.s b/asm/ereader_helpers.s deleted file mode 100644 index 067ab8659..000000000 --- a/asm/ereader_helpers.s +++ /dev/null @@ -1,920 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_815C27C -sub_815C27C: @ 815C27C - push {r4-r7,lr} - sub sp, 0x4 - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_815C8C8 - movs r7, 0x2 - ldr r4, _0815C2BC @ =gUnknown_3003F84 -_0815C28C: - bl sub_815C898 - ldr r0, _0815C2C0 @ =gUnknown_3002062 - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0815C29E - strb r7, [r4] -_0815C29E: - movs r0, 0x1 - adds r1, r6, 0 - adds r2, r5, 0 - movs r3, 0 - bl sub_815C498 - adds r1, r0, 0 - ldr r0, _0815C2C4 @ =gUnknown_3002064 - strh r1, [r0] - movs r0, 0x13 - ands r0, r1 - cmp r0, 0x10 - bne _0815C2C8 - movs r4, 0 - b _0815C2EA - .align 2, 0 -_0815C2BC: .4byte gUnknown_3003F84 -_0815C2C0: .4byte gUnknown_3002062 -_0815C2C4: .4byte gUnknown_3002064 -_0815C2C8: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0815C2D4 - movs r4, 0x1 - b _0815C2EA -_0815C2D4: - movs r0, 0x4 - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0815C2E8 - strb r0, [r4] - bl VBlankIntrWait - b _0815C28C -_0815C2E8: - movs r4, 0x2 -_0815C2EA: - movs r0, 0 - str r0, [sp] - ldr r1, _0815C308 @ =gUnknown_3002048 - ldr r2, _0815C30C @ =0x05000006 - mov r0, sp - bl CpuSet - bl sub_815C91C - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0815C308: .4byte gUnknown_3002048 -_0815C30C: .4byte 0x05000006 - thumb_func_end sub_815C27C - - thumb_func_start sub_815C310 -sub_815C310: @ 815C310 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - bl sub_815C8C8 - movs r6, 0x2 - ldr r4, _0815C350 @ =gUnknown_3003F84 -_0815C31E: - bl sub_815C898 - ldr r0, _0815C354 @ =gUnknown_3002062 - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0815C330 - strb r6, [r4] -_0815C330: - movs r0, 0 - movs r1, 0 - movs r2, 0 - adds r3, r5, 0 - bl sub_815C498 - adds r1, r0, 0 - ldr r0, _0815C358 @ =gUnknown_3002064 - strh r1, [r0] - movs r0, 0x13 - ands r0, r1 - cmp r0, 0x10 - bne _0815C35C - movs r4, 0 - b _0815C37E - .align 2, 0 -_0815C350: .4byte gUnknown_3003F84 -_0815C354: .4byte gUnknown_3002062 -_0815C358: .4byte gUnknown_3002064 -_0815C35C: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0815C368 - movs r4, 0x1 - b _0815C37E -_0815C368: - movs r0, 0x4 - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0815C37C - strb r0, [r4] - bl VBlankIntrWait - b _0815C31E -_0815C37C: - movs r4, 0x2 -_0815C37E: - movs r0, 0 - str r0, [sp] - ldr r1, _0815C39C @ =gUnknown_3002048 - ldr r2, _0815C3A0 @ =0x05000006 - mov r0, sp - bl CpuSet - bl sub_815C91C - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0815C39C: .4byte gUnknown_3002048 -_0815C3A0: .4byte 0x05000006 - thumb_func_end sub_815C310 - - thumb_func_start sub_815C3A4 -sub_815C3A4: @ 815C3A4 - push {r4,lr} - ldr r4, _0815C3D0 @ =0x04000208 - movs r3, 0 - strh r3, [r4] - ldr r2, _0815C3D4 @ =0x04000200 - ldrh r1, [r2] - ldr r0, _0815C3D8 @ =0x0000ff3f - ands r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r4] - ldr r0, _0815C3DC @ =0x04000128 - strh r3, [r0] - subs r0, 0x1A - strh r3, [r0] - ldr r1, _0815C3E0 @ =0x04000202 - movs r0, 0xC0 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815C3D0: .4byte 0x04000208 -_0815C3D4: .4byte 0x04000200 -_0815C3D8: .4byte 0x0000ff3f -_0815C3DC: .4byte 0x04000128 -_0815C3E0: .4byte 0x04000202 - thumb_func_end sub_815C3A4 - - thumb_func_start sub_815C3E4 -sub_815C3E4: @ 815C3E4 - push {r4-r7,lr} - sub sp, 0x4 - ldr r5, _0815C43C @ =0x04000208 - movs r4, 0 - strh r4, [r5] - ldr r3, _0815C440 @ =0x04000200 - ldrh r1, [r3] - ldr r0, _0815C444 @ =0x0000ff3f - ands r0, r1 - strh r0, [r3] - movs r6, 0x1 - strh r6, [r5] - ldr r0, _0815C448 @ =0x04000134 - strh r4, [r0] - ldr r2, _0815C44C @ =0x04000128 - movs r1, 0x80 - lsls r1, 6 - adds r0, r1, 0 - strh r0, [r2] - ldrh r0, [r2] - ldr r7, _0815C450 @ =0x00004003 - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - strh r4, [r5] - ldrh r0, [r3] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r3] - strh r6, [r5] - ldr r1, _0815C454 @ =gUnknown_3002048 - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _0815C432 - str r0, [sp] - ldr r2, _0815C458 @ =0x05000006 - mov r0, sp - bl CpuSet -_0815C432: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815C43C: .4byte 0x04000208 -_0815C440: .4byte 0x04000200 -_0815C444: .4byte 0x0000ff3f -_0815C448: .4byte 0x04000134 -_0815C44C: .4byte 0x04000128 -_0815C450: .4byte 0x00004003 -_0815C454: .4byte gUnknown_3002048 -_0815C458: .4byte 0x05000006 - thumb_func_end sub_815C3E4 - - thumb_func_start sub_815C45C -sub_815C45C: @ 815C45C - ldr r0, _0815C484 @ =0x04000134 - movs r3, 0 - strh r3, [r0] - ldr r2, _0815C488 @ =0x04000128 - movs r1, 0xA0 - lsls r1, 7 - adds r0, r1, 0 - strh r0, [r2] - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0815C48C @ =gUnknown_3003F84 - strb r3, [r0] - ldr r0, _0815C490 @ =gUnknown_3002066 - strh r3, [r0] - ldr r1, _0815C494 @ =gUnknown_3002068 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_0815C484: .4byte 0x04000134 -_0815C488: .4byte 0x04000128 -_0815C48C: .4byte gUnknown_3003F84 -_0815C490: .4byte gUnknown_3002066 -_0815C494: .4byte gUnknown_3002068 - thumb_func_end sub_815C45C - - thumb_func_start sub_815C498 -sub_815C498: @ 815C498 - push {r4-r6,lr} - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0815C4B8 @ =gUnknown_3002048 - ldrb r0, [r0, 0x1] - cmp r0, 0x6 - bls _0815C4AE - b _0815C5F4 -_0815C4AE: - lsls r0, 2 - ldr r1, _0815C4BC @ =_0815C4C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0815C4B8: .4byte gUnknown_3002048 -_0815C4BC: .4byte _0815C4C0 - .align 2, 0 -_0815C4C0: - .4byte _0815C4DC - .4byte _0815C4F0 - .4byte _0815C510 - .4byte _0815C524 - .4byte _0815C59C - .4byte _0815C5AC - .4byte _0815C5E4 -_0815C4DC: - bl sub_815C3E4 - ldr r1, _0815C4EC @ =gUnknown_3002048 - movs r0, 0x1 - strb r0, [r1, 0x2] - strb r0, [r1, 0x1] - b _0815C5F4 - .align 2, 0 -_0815C4EC: .4byte gUnknown_3002048 -_0815C4F0: - adds r0, r2, 0 - bl sub_815C610 - lsls r0, 16 - cmp r0, 0 - beq _0815C500 - bl sub_815C864 -_0815C500: - ldr r0, _0815C50C @ =gUnknown_3003F84 - ldrb r0, [r0] - cmp r0, 0x2 - beq _0815C50A - b _0815C5F4 -_0815C50A: - b _0815C52C - .align 2, 0 -_0815C50C: .4byte gUnknown_3003F84 -_0815C510: - bl sub_815C45C - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl sub_815C644 - ldr r1, _0815C538 @ =gUnknown_3002048 - movs r0, 0x3 - strb r0, [r1, 0x1] -_0815C524: - ldr r0, _0815C53C @ =gUnknown_3003F84 - ldrb r0, [r0] - cmp r0, 0x2 - bne _0815C540 -_0815C52C: - ldr r1, _0815C538 @ =gUnknown_3002048 - strb r0, [r1, 0x4] - movs r0, 0x6 - strb r0, [r1, 0x1] - b _0815C5F4 - .align 2, 0 -_0815C538: .4byte gUnknown_3002048 -_0815C53C: .4byte gUnknown_3003F84 -_0815C540: - ldr r2, _0815C580 @ =gUnknown_3002066 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - ldr r1, _0815C584 @ =gUnknown_3002068 - ldr r0, [r1] - adds r3, r0, 0x1 - str r3, [r1] - ldr r1, _0815C588 @ =gUnknown_3002048 - ldrb r0, [r1] - cmp r0, 0 - bne _0815C564 - cmp r3, 0x3C - bls _0815C564 - movs r0, 0x1 - strb r0, [r1, 0x4] - movs r0, 0x6 - strb r0, [r1, 0x1] -_0815C564: - ldr r4, _0815C588 @ =gUnknown_3002048 - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _0815C5F4 - ldrb r0, [r4] - cmp r0, 0 - beq _0815C58C - ldrh r0, [r2] - cmp r0, 0x2 - bls _0815C58C - bl sub_815C864 - movs r0, 0x2 - b _0815C5F2 - .align 2, 0 -_0815C580: .4byte gUnknown_3002066 -_0815C584: .4byte gUnknown_3002068 -_0815C588: .4byte gUnknown_3002048 -_0815C58C: - bl sub_815C864 - ldr r1, _0815C598 @ =gUnknown_3002048 - movs r0, 0x2 - strb r0, [r1, 0x2] - b _0815C5F4 - .align 2, 0 -_0815C598: .4byte gUnknown_3002048 -_0815C59C: - bl sub_815C3E4 - ldr r1, _0815C5A8 @ =gUnknown_3002048 - movs r0, 0x5 - strb r0, [r1, 0x1] - b _0815C5F4 - .align 2, 0 -_0815C5A8: .4byte gUnknown_3002048 -_0815C5AC: - ldr r0, _0815C5DC @ =gUnknown_3002048 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0815C5C0 - ldr r0, _0815C5E0 @ =gUnknown_3002066 - ldrh r0, [r0] - cmp r0, 0x2 - bls _0815C5C0 - bl sub_815C864 -_0815C5C0: - ldr r1, _0815C5E0 @ =gUnknown_3002066 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3C - bls _0815C5F4 - ldr r0, _0815C5DC @ =gUnknown_3002048 - movs r1, 0x1 - strb r1, [r0, 0x4] - movs r1, 0x6 - strb r1, [r0, 0x1] - b _0815C5F4 - .align 2, 0 -_0815C5DC: .4byte gUnknown_3002048 -_0815C5E0: .4byte gUnknown_3002066 -_0815C5E4: - ldr r4, _0815C60C @ =gUnknown_3002048 - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _0815C5F4 - bl sub_815C3A4 - movs r0, 0 -_0815C5F2: - strb r0, [r4, 0x2] -_0815C5F4: - ldr r2, _0815C60C @ =gUnknown_3002048 - ldrb r0, [r2, 0x2] - ldrb r1, [r2, 0x4] - lsls r1, 2 - orrs r0, r1 - ldrb r1, [r2, 0x3] - lsls r1, 4 - orrs r0, r1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0815C60C: .4byte gUnknown_3002048 - thumb_func_end sub_815C498 - - thumb_func_start sub_815C610 -sub_815C610: @ 815C610 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0815C62C @ =0x04000128 - ldr r0, [r0] - movs r1, 0xC - ands r0, r1 - cmp r0, 0x8 - bne _0815C634 - cmp r2, 0 - beq _0815C634 - ldr r1, _0815C630 @ =gUnknown_3002048 - movs r0, 0x1 - b _0815C638 - .align 2, 0 -_0815C62C: .4byte 0x04000128 -_0815C630: .4byte gUnknown_3002048 -_0815C634: - ldr r1, _0815C640 @ =gUnknown_3002048 - movs r0, 0 -_0815C638: - strb r0, [r1] - pop {r1} - bx r1 - .align 2, 0 -_0815C640: .4byte gUnknown_3002048 - thumb_func_end sub_815C610 - - thumb_func_start sub_815C644 -sub_815C644: @ 815C644 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r3, _0815C670 @ =gUnknown_3002048 - ldrb r0, [r3] - cmp r0, 0 - beq _0815C67C - ldr r2, _0815C674 @ =0x04000128 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - str r5, [r3, 0x8] - ldr r0, _0815C678 @ =0x04000120 - str r4, [r0] - lsrs r0, r4, 2 - adds r0, 0x1 - str r0, [r3, 0x10] - bl sub_815C690 - b _0815C684 - .align 2, 0 -_0815C670: .4byte gUnknown_3002048 -_0815C674: .4byte 0x04000128 -_0815C678: .4byte 0x04000120 -_0815C67C: - ldr r1, _0815C68C @ =0x04000128 - ldrh r0, [r1] - strh r0, [r1] - str r2, [r3, 0x8] -_0815C684: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815C68C: .4byte 0x04000128 - thumb_func_end sub_815C644 - - thumb_func_start sub_815C690 -sub_815C690: @ 815C690 - ldr r1, _0815C6B4 @ =0x0400010c - ldr r2, _0815C6B8 @ =0x0000fda7 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0815C6BC @ =0x0400010e - movs r2, 0x40 - strh r2, [r0] - ldr r3, _0815C6C0 @ =0x04000208 - movs r0, 0 - strh r0, [r3] - adds r1, 0xF4 - ldrh r0, [r1] - orrs r0, r2 - strh r0, [r1] - movs r0, 0x1 - strh r0, [r3] - bx lr - .align 2, 0 -_0815C6B4: .4byte 0x0400010c -_0815C6B8: .4byte 0x0000fda7 -_0815C6BC: .4byte 0x0400010e -_0815C6C0: .4byte 0x04000208 - thumb_func_end sub_815C690 - - thumb_func_start sub_815C6C4 -sub_815C6C4: @ 815C6C4 - push {lr} - bl sub_815C874 - bl sub_815C864 - pop {r0} - bx r0 - thumb_func_end sub_815C6C4 - - thumb_func_start sub_815C6D4 -sub_815C6D4: @ 815C6D4 - push {r4-r6,lr} - sub sp, 0x8 - ldr r2, _0815C6EC @ =gUnknown_3002048 - ldrb r0, [r2, 0x1] - adds r3, r2, 0 - cmp r0, 0x3 - beq _0815C75C - cmp r0, 0x3 - bgt _0815C6F0 - cmp r0, 0x1 - beq _0815C6F8 - b _0815C852 - .align 2, 0 -_0815C6EC: .4byte gUnknown_3002048 -_0815C6F0: - cmp r0, 0x5 - bne _0815C6F6 - b _0815C824 -_0815C6F6: - b _0815C852 -_0815C6F8: - ldr r1, _0815C728 @ =0x0400012a - ldr r2, _0815C72C @ =0x0000ccd0 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0815C730 @ =0x04000120 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - movs r1, 0 - movs r2, 0 - movs r4, 0 - ldr r6, _0815C72C @ =0x0000ccd0 - ldr r5, _0815C734 @ =0x0000ffff -_0815C714: - lsls r0, r1, 1 - add r0, sp - ldrh r0, [r0] - cmp r0, r6 - bne _0815C738 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - b _0815C742 - .align 2, 0 -_0815C728: .4byte 0x0400012a -_0815C72C: .4byte 0x0000ccd0 -_0815C730: .4byte 0x04000120 -_0815C734: .4byte 0x0000ffff -_0815C738: - cmp r0, r5 - beq _0815C742 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_0815C742: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _0815C714 - cmp r2, 0x2 - beq _0815C752 - b _0815C852 -_0815C752: - cmp r4, 0 - beq _0815C758 - b _0815C852 -_0815C758: - strb r2, [r3, 0x1] - b _0815C852 -_0815C75C: - ldr r0, _0815C798 @ =0x04000120 - ldr r4, [r0] - ldr r0, [r2, 0xC] - cmp r0, 0 - bne _0815C772 - ldrb r0, [r2] - cmp r0, 0 - bne _0815C772 - lsrs r0, r4, 2 - adds r0, 0x1 - str r0, [r2, 0x10] -_0815C772: - ldrb r0, [r3] - cmp r0, 0x1 - bne _0815C7A8 - ldr r1, [r3, 0xC] - ldr r0, [r3, 0x10] - cmp r1, r0 - bge _0815C79C - ldr r2, _0815C798 @ =0x04000120 - ldr r0, [r3, 0x8] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - ldr r0, [r3, 0x14] - ldr r1, [r1] - adds r0, r1 - str r0, [r3, 0x14] - b _0815C7E2 - .align 2, 0 -_0815C798: .4byte 0x04000120 -_0815C79C: - ldr r1, _0815C7A4 @ =0x04000120 - ldr r0, [r3, 0x14] - b _0815C7E0 - .align 2, 0 -_0815C7A4: .4byte 0x04000120 -_0815C7A8: - ldr r1, [r3, 0xC] - cmp r1, 0 - ble _0815C7C8 - ldr r0, [r3, 0x10] - adds r0, 0x1 - cmp r1, r0 - bge _0815C7C8 - ldr r0, [r3, 0x8] - lsls r1, 2 - adds r1, r0 - subs r1, 0x4 - str r4, [r1] - ldr r0, [r3, 0x14] - adds r0, r4 - str r0, [r3, 0x14] - b _0815C7DC -_0815C7C8: - ldr r0, [r3, 0xC] - cmp r0, 0 - beq _0815C7DC - ldr r0, [r3, 0x14] - cmp r0, r4 - bne _0815C7D8 - movs r0, 0x1 - b _0815C7DA -_0815C7D8: - movs r0, 0x2 -_0815C7DA: - strb r0, [r3, 0x3] -_0815C7DC: - ldr r1, _0815C804 @ =gUnknown_3002068 - movs r0, 0 -_0815C7E0: - str r0, [r1] -_0815C7E2: - ldr r1, [r3, 0xC] - adds r1, 0x1 - str r1, [r3, 0xC] - ldr r0, [r3, 0x10] - adds r0, 0x2 - cmp r1, r0 - bge _0815C812 - ldrb r0, [r3] - cmp r0, 0 - beq _0815C80C - ldr r0, _0815C808 @ =0x0400010e - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] - b _0815C852 - .align 2, 0 -_0815C804: .4byte gUnknown_3002068 -_0815C808: .4byte 0x0400010e -_0815C80C: - bl sub_815C864 - b _0815C852 -_0815C812: - movs r0, 0 - movs r1, 0x4 - strb r1, [r3, 0x1] - ldr r1, _0815C820 @ =gUnknown_3002066 - strh r0, [r1] - b _0815C852 - .align 2, 0 -_0815C820: .4byte gUnknown_3002066 -_0815C824: - ldrb r3, [r2] - cmp r3, 0 - bne _0815C830 - ldr r1, _0815C85C @ =0x0400012a - ldrb r0, [r2, 0x3] - strh r0, [r1] -_0815C830: - ldr r0, _0815C860 @ =0x04000120 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r1, [r0, 0x2] - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0815C852 - cmp r3, 0x1 - bne _0815C84E - strb r1, [r2, 0x3] -_0815C84E: - movs r0, 0x6 - strb r0, [r2, 0x1] -_0815C852: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815C85C: .4byte 0x0400012a -_0815C860: .4byte 0x04000120 - thumb_func_end sub_815C6D4 - - thumb_func_start sub_815C864 -sub_815C864: @ 815C864 - ldr r0, _0815C870 @ =0x04000128 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] - bx lr - .align 2, 0 -_0815C870: .4byte 0x04000128 - thumb_func_end sub_815C864 - - thumb_func_start sub_815C874 -sub_815C874: @ 815C874 - ldr r2, _0815C888 @ =0x0400010e - ldrh r1, [r2] - ldr r0, _0815C88C @ =0x0000ff7f - ands r0, r1 - strh r0, [r2] - ldr r1, _0815C890 @ =0x0400010c - ldr r2, _0815C894 @ =0x0000fda7 - adds r0, r2, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_0815C888: .4byte 0x0400010e -_0815C88C: .4byte 0x0000ff7f -_0815C890: .4byte 0x0400010c -_0815C894: .4byte 0x0000fda7 - thumb_func_end sub_815C874 - - thumb_func_start sub_815C898 -sub_815C898: @ 815C898 - push {r4,lr} - ldr r0, _0815C8B8 @ =0x04000130 - ldrh r0, [r0] - ldr r2, _0815C8BC @ =0x000003ff - adds r1, r2, 0 - eors r1, r0 - ldr r4, _0815C8C0 @ =gUnknown_3002062 - ldr r3, _0815C8C4 @ =gUnknown_3002060 - ldrh r2, [r3] - adds r0, r1, 0 - bics r0, r2 - strh r0, [r4] - strh r1, [r3] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815C8B8: .4byte 0x04000130 -_0815C8BC: .4byte 0x000003ff -_0815C8C0: .4byte gUnknown_3002062 -_0815C8C4: .4byte gUnknown_3002060 - thumb_func_end sub_815C898 - - thumb_func_start sub_815C8C8 -sub_815C8C8: @ 815C8C8 - ldr r1, _0815C8F4 @ =gUnknown_300206C - ldr r0, _0815C8F8 @ =0x04000208 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _0815C8FC @ =gUnknown_300206E - ldr r0, _0815C900 @ =0x04000200 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _0815C904 @ =gUnknown_3002070 - ldr r0, _0815C908 @ =0x0400010e - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _0815C90C @ =gUnknown_3002072 - ldr r0, _0815C910 @ =0x04000128 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _0815C914 @ =gUnknown_3002074 - ldr r0, _0815C918 @ =0x04000134 - ldrh r0, [r0] - strh r0, [r1] - bx lr - .align 2, 0 -_0815C8F4: .4byte gUnknown_300206C -_0815C8F8: .4byte 0x04000208 -_0815C8FC: .4byte gUnknown_300206E -_0815C900: .4byte 0x04000200 -_0815C904: .4byte gUnknown_3002070 -_0815C908: .4byte 0x0400010e -_0815C90C: .4byte gUnknown_3002072 -_0815C910: .4byte 0x04000128 -_0815C914: .4byte gUnknown_3002074 -_0815C918: .4byte 0x04000134 - thumb_func_end sub_815C8C8 - - thumb_func_start sub_815C91C -sub_815C91C: @ 815C91C - ldr r1, _0815C948 @ =0x04000208 - ldr r0, _0815C94C @ =gUnknown_300206C - ldrh r0, [r0] - strh r0, [r1] - subs r1, 0x8 - ldr r0, _0815C950 @ =gUnknown_300206E - ldrh r0, [r0] - strh r0, [r1] - subs r1, 0xF2 - ldr r0, _0815C954 @ =gUnknown_3002070 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x1A - ldr r0, _0815C958 @ =gUnknown_3002072 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0xC - ldr r0, _0815C95C @ =gUnknown_3002074 - ldrh r0, [r0] - strh r0, [r1] - bx lr - .align 2, 0 -_0815C948: .4byte 0x04000208 -_0815C94C: .4byte gUnknown_300206C -_0815C950: .4byte gUnknown_300206E -_0815C954: .4byte gUnknown_3002070 -_0815C958: .4byte gUnknown_3002072 -_0815C95C: .4byte gUnknown_3002074 - thumb_func_end sub_815C91C - - thumb_func_start sub_815C960 -sub_815C960: @ 815C960 - push {lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - ldr r1, _0815C978 @ =gUnknown_3002048 - ldr r2, _0815C97C @ =0x05000006 - mov r0, sp - bl CpuSet - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0815C978: .4byte gUnknown_3002048 -_0815C97C: .4byte 0x05000006 - thumb_func_end sub_815C960 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/link.s b/asm/link.s index ae3fc451f..28dc18656 100644 --- a/asm/link.s +++ b/asm/link.s @@ -4686,7 +4686,7 @@ _0800B85C: _0800B860: adds r0, r2, 0 strh r0, [r1] - ldr r2, _0800B8BC @ =gUnknown_3003FB4 + ldr r2, _0800B8BC @ =gSioMlt_Recv ldr r3, _0800B8C0 @ =0x04000120 ldr r0, [r3] ldr r1, [r3, 0x4] @@ -4731,7 +4731,7 @@ _0800B8A0: .align 2, 0 _0800B8B4: .4byte 0x0400012a _0800B8B8: .4byte 0x0000b9a0 -_0800B8BC: .4byte gUnknown_3003FB4 +_0800B8BC: .4byte gSioMlt_Recv _0800B8C0: .4byte 0x04000120 _0800B8C4: .4byte gUnknown_3000E6B _0800B8C8: .4byte 0x00008fff diff --git a/asm/ss_anne.s b/asm/ss_anne.s deleted file mode 100644 index 2428f2984..000000000 --- a/asm/ss_anne.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_8471F00.s b/data/data_8471F00.s index c1e9c3106..b25d7ea57 100644 --- a/data/data_8471F00.s +++ b/data/data_8471F00.s @@ -227,24 +227,6 @@ gUnknown_8479688:: gUnknown_8479748:: .incbin "graphics/misc/unk_8479748.4bpp.lz" - .section .rodata.cereader_tool - - // cereader_tool - - .align 2 -gUnknown_8479CD8:: @ 8479CD8 - .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c" - - .align 2 -gUnknown_8479D10:: @ 8479D10 - .asciz "ttdata->dummy == 0" - - .align 2 -gUnknown_8479D24:: @ 8479D24 - .asciz "ttdata->id == 0" - - // trainer_tower - .section .rodata.after_trainer_tower // unk_815F138 diff --git a/include/cereader_tool.h b/include/cereader_tool.h index 05677dc79..f223bdaa5 100644 --- a/include/cereader_tool.h +++ b/include/cereader_tool.h @@ -3,7 +3,45 @@ #include "global.h" -bool32 sub_815D794(u8 *); -bool32 sub_815D6B4(u8 *); +struct TrainerTowerTrainer_004 +{ + /* 0x000 */ u8 unk_000[11]; + /* 0x00B */ u8 unk_00B; + /* 0x00C */ u8 unk_00C; + /* 0x00E */ u16 unk_00E[6]; + /* 0x01A */ u16 unk_01A[6]; + /* 0x026 */ u16 unk_026[6]; + /* 0x032 */ u16 unk_032[6]; + /* 0x040 */ struct BattleTowerPokemon unk_040[PARTY_SIZE]; +}; // size: 328 + +struct TrainerTowerTrainer +{ + /* 0x000 */ u8 unk_000; + /* 0x000 */ u8 unk_001; + /* 0x002 */ u8 unk_002; + /* 0x003 */ u8 unk_003; + /* 0x004 */ struct TrainerTowerTrainer_004 unk_004[3]; + /* 0x3DC */ u32 checksum; +}; + +struct Unk_203F458_Header +{ + u8 unk0; + u8 unk1; + u32 unk4; +}; + +struct TrainerTowerData +{ + u8 count; + u8 id; + u16 dummy; + u32 checksum; + struct TrainerTowerTrainer trainers[8]; +}; + +bool32 ValidateTrainerTowerData(struct TrainerTowerData * a0); +bool32 CEReaderTool_SaveTrainerTower(struct TrainerTowerData * a0); #endif //GUARD_CEREADER_TOOL_H diff --git a/include/link.h b/include/link.h index a875149aa..33f04a42a 100644 --- a/include/link.h +++ b/include/link.h @@ -147,7 +147,7 @@ extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; extern u8 gUnknown_3003F84; -extern u64 gUnknown_3003FB4; +extern u64 gSioMlt_Recv; void Task_DestroySelf(u8); void OpenLink(void); diff --git a/include/mevent.h b/include/mevent.h index b9b17d8c0..b61fa732d 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -23,9 +23,9 @@ struct MEventStruct_Unk1442CC struct MEvent_Str_1 { - u16 unk_000; - size_t unk_004; - const void * unk_008; + u16 status; + size_t size; + const void * data; }; struct MEvent_Str_2 diff --git a/include/save.h b/include/save.h index f547230b9..7a74373c8 100644 --- a/include/save.h +++ b/include/save.h @@ -121,7 +121,7 @@ u8 Save_LoadGameData(u8 a1); u32 TryCopySpecialSaveSection(u8 sector, u8* dst); u32 sub_8153634(u8 sector, u8* src); void sub_8153688(u8 taskId); -u32 sub_80DA5E0(u8 sector, u8* src); +u32 TryWriteSpecialSaveSection(u8 sector, u8* src); void sub_80DA634(u8 taskId); #endif // GUARD_SAVE_H diff --git a/include/unk_815c27c.h b/include/unk_815c27c.h index cc1cbb7ce..02c886895 100644 --- a/include/unk_815c27c.h +++ b/include/unk_815c27c.h @@ -1,11 +1,11 @@ #ifndef GUARD_UNK_815C27C_H #define GUARD_UNK_815C27C_H -void sub_815C6D4(void); -void sub_815C6C4(void); -void sub_815C8C8(void); -void sub_815C960(void); -void sub_815C91C(void); -u16 sub_815C498(u8, size_t, const void *, u8); +void EReaderHelper_SerialCallback(void); +void EReaderHelper_Timer3Callback(void); +void EReaderHelper_SaveRegsState(void); +void EReaderHelper_ClearsSendRecvMgr(void); +void EReaderHelper_RestoreRegsState(void); +u16 EReaderHandleTransfer(u8, size_t, const void *, void *); #endif //GUARD_UNK_815C27C_H diff --git a/ld_script.txt b/ld_script.txt index ad553a79b..f342d0b98 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -278,11 +278,10 @@ SECTIONS { src/dodrio_berry_picking_2.o(.text); asm/dodrio_berry_picking_2.o(.text); src/teachy_tv.o(.text); - asm/ereader_helpers.o(.text); + src/ereader_helpers.o(.text); src/unk_815C980.o(.text); src/ss_anne.o(.text); - asm/ss_anne.o(.text); - asm/cereader_tool.o(.text); + src/cereader_tool.o(.text); src/trainer_tower.o(.text); asm/unk_815EDDC.o(.text); asm/unk_815F138.o(.text); @@ -456,7 +455,7 @@ SECTIONS { src/unk_815C980.o(.rodata); data/data_8471F00.o(.rodata.8479668); src/ss_anne.o(.rodata); - data/data_8471F00.o(.rodata.cereader_tool); + src/cereader_tool.o(.rodata); src/trainer_tower.o(.rodata); data/data_8471F00.o(.rodata.after_trainer_tower); src/mystery_event_msg.o(.rodata); diff --git a/src/cereader_tool.c b/src/cereader_tool.c new file mode 100644 index 000000000..1b25f4828 --- /dev/null +++ b/src/cereader_tool.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "util.h" +#include "save.h" +#include "malloc.h" +#include "cereader_tool.h" + +u8 sub_815D654(void) +{ + return (gSaveBlock1Ptr->unkArray[0].unk9 + 1) % 256; +} + +static bool32 ValidateTrainerTowerTrainer(struct TrainerTowerTrainer * trainer) +{ + if (trainer->unk_001 < 1 || trainer->unk_001 > 8) + return FALSE; + if (trainer->unk_002 > 2) + return FALSE; + if (CalcByteArraySum((const u8 *)trainer, offsetof(typeof(*trainer), checksum)) != trainer->checksum) + return FALSE; + return TRUE; +} + +bool32 ValidateTrainerTowerData(struct TrainerTowerData * ttdata) +{ + u32 count = ttdata->count; + s32 i; + if (count < 1 || count > 8) + return FALSE; + for (i = 0; i < count; i++) + { + if (!ValidateTrainerTowerTrainer(&ttdata->trainers[i])) + return FALSE; + } + if (CalcByteArraySum((const u8 *)ttdata->trainers, count * sizeof(ttdata->trainers[0])) != ttdata->checksum) + return FALSE; + return TRUE; +} + +#define SEC30_SIZE (offsetof(struct TrainerTowerData, trainers[4])) +#define SEC31_SIZE (sizeof(struct TrainerTowerData) - SEC30_SIZE) + +static bool32 CEReaderTool_SaveTrainerTower_r(struct TrainerTowerData * ttdata, u8 * buffer) +{ + AGB_ASSERT_EX(ttdata->dummy == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 198); + AGB_ASSERT_EX(ttdata->id == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 199) + + memset(buffer, 0, 0x1000); + memcpy(buffer, ttdata, SEC30_SIZE); + buffer[1] = sub_815D654(); + if (TryWriteSpecialSaveSection(30, buffer) != TRUE) + return FALSE; + memset(buffer, 0, 0x1000); + memcpy(buffer, (u8 *)ttdata + SEC30_SIZE, SEC31_SIZE); + if (TryWriteSpecialSaveSection(31, buffer) != TRUE) + return FALSE; + return TRUE; +} + +bool32 CEReaderTool_SaveTrainerTower(struct TrainerTowerData * ttdata) +{ + u8 * buffer = AllocZeroed(0x1000); + bool32 result = CEReaderTool_SaveTrainerTower_r(ttdata, buffer); + Free(buffer); + return result; +} + +static bool32 CEReaderTool_LoadTrainerTower_r(struct TrainerTowerData * ttdata, void * buffer) +{ + if (TryCopySpecialSaveSection(30, buffer) != 1) + return FALSE; + memcpy(ttdata + 0x000, buffer, SEC30_SIZE); + + if (TryCopySpecialSaveSection(31, buffer) != 1) + return FALSE; + memcpy((u8 *)ttdata + SEC30_SIZE, buffer, SEC31_SIZE); + + if (!ValidateTrainerTowerData(ttdata)) + return FALSE; + return TRUE; +} + +bool32 CEReaderTool_LoadTrainerTower(struct TrainerTowerData * ttdata) +{ + void * buffer = AllocZeroed(0x1000); + bool32 success = CEReaderTool_LoadTrainerTower_r(ttdata, buffer); + Free(buffer); + return success; +} diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c new file mode 100644 index 000000000..2a9b9ea71 --- /dev/null +++ b/src/ereader_helpers.c @@ -0,0 +1,397 @@ +#include "global.h" +#include "link.h" +#include "unk_815c27c.h" + +enum { + EREADER_XFR_STATE_INIT, + EREADER_XFR_STATE_HANDSHAKE, + EREADER_XFR_STATE_START, + EREADER_XFR_STATE_TRANSFER, +}; + +struct SendRecvMgr +{ + u8 sendOrRecv; + u8 state; + u8 field_02; + u8 field_03; + u8 field_04; + u32 * dataptr; + int cursor; + int size; + u32 checksum; +}; + +static bool16 DetermineSendRecvState(u8); +static void SetUpTransferManager(size_t, const void *, void *); +static void StartTm3(void); +static void EnableSio(void); +static void DisableTm3(void); +static void GetKeyInput(void); + +static struct SendRecvMgr sSendRecvMgr; +static u16 sJoyNewOrRepeated; +static u16 sJoyNew; +static u16 sSendRecvStatus; +static u16 sCounter1; +static u32 sCounter2; +static u16 sSavedIme; +static u16 sSavedIe; +static u16 sSavedTm3Cnt; +static u16 sSavedSioCnt; +static u16 sSavedSioCnt; +static u16 sSavedRCnt; + +int EReader_Send(size_t r6, const void * r5) +{ + int result; + EReaderHelper_SaveRegsState(); + + while (1) + { + GetKeyInput(); + if (TEST_BUTTON(sJoyNew, B_BUTTON)) + gUnknown_3003F84 = 2; + + sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL); + if ((sSendRecvStatus & 0x13) == 0x10) + { + result = 0; + break; + } + else if (sSendRecvStatus & 8) + { + result = 1; + break; + } + else if (sSendRecvStatus & 4) + { + result = 2; + break; + } + else + { + gUnknown_3003F84 = 0; + VBlankIntrWait(); + } + } + + CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr)); + EReaderHelper_RestoreRegsState(); + return result; +} + +int EReader_Recv(void * r5) +{ + int result; + EReaderHelper_SaveRegsState(); + + while (1) + { + GetKeyInput(); + if (TEST_BUTTON(sJoyNew, B_BUTTON)) + gUnknown_3003F84 = 2; + + sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5); + if ((sSendRecvStatus & 0x13) == 0x10) + { + result = 0; + break; + } + else if (sSendRecvStatus & 8) + { + result = 1; + break; + } + else if (sSendRecvStatus & 4) + { + result = 2; + break; + } + else + { + gUnknown_3003F84 = 0; + VBlankIntrWait(); + } + } + + CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr)); + EReaderHelper_RestoreRegsState(); + return result; +} + +static void CloseSerial(void) +{ + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_SIOCNT = 0; + REG_TM3CNT_H = 0; + REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL; +} + +static void OpenSerialMulti(void) +{ + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_RCNT = 0; + REG_SIOCNT = SIO_MULTI_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_115200_BPS; + REG_IME = 0; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = 1; + if (sSendRecvMgr.state == 0) + CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr)); +} + +static void OpenSerial32(void) +{ + REG_RCNT = 0; + REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE; + REG_SIOCNT |= SIO_MULTI_SD; + gUnknown_3003F84 = 0; + sCounter1 = 0; + sCounter2 = 0; +} + +u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBuffer) +{ + switch (sSendRecvMgr.state) + { + case 0: + OpenSerialMulti(); + sSendRecvMgr.field_02 = 1; + sSendRecvMgr.state = 1; + break; + case 1: + if (DetermineSendRecvState(mode)) + EnableSio(); + if (gUnknown_3003F84 == 2) + { + sSendRecvMgr.field_04 = 2; + sSendRecvMgr.state = 6; + } + break; + case 2: + OpenSerial32(); + SetUpTransferManager(size, data, recvBuffer); + sSendRecvMgr.state = 3; + // fallthrough + case 3: + if (gUnknown_3003F84 == 2) + { + sSendRecvMgr.field_04 = 2; + sSendRecvMgr.state = 6; + } + else + { + sCounter1++; + sCounter2++; + if (sSendRecvMgr.sendOrRecv == 0 && sCounter2 > 60) + { + sSendRecvMgr.field_04 = 1; + sSendRecvMgr.state = 6; + } + if (sSendRecvMgr.field_02 != 2) + { + if (sSendRecvMgr.sendOrRecv != 0 && sCounter1 > 2) + { + EnableSio(); + sSendRecvMgr.field_02 = 2; + } + else + { + EnableSio(); + sSendRecvMgr.field_02 = 2; + } + } + } + break; + case 4: + OpenSerialMulti(); + sSendRecvMgr.state = 5; + break; + case 5: + if (sSendRecvMgr.sendOrRecv == 1 && sCounter1 > 2) + EnableSio(); + if (++sCounter1 > 60) + { + sSendRecvMgr.field_04 = 1; + sSendRecvMgr.state = 6; + } + break; + case 6: + if (sSendRecvMgr.field_02 != 0) + { + CloseSerial(); + sSendRecvMgr.field_02 = 0; + } + break; + } + return sSendRecvMgr.field_02 | (sSendRecvMgr.field_04 << 2) | (sSendRecvMgr.field_03 << 4); +} + +static bool16 DetermineSendRecvState(u8 mode) +{ + bool16 resp; + if ((*(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SI | SIO_MULTI_SD)) == SIO_MULTI_SD && mode) + resp = sSendRecvMgr.sendOrRecv = TRUE; + else + resp = sSendRecvMgr.sendOrRecv = FALSE; + return resp; +} + +static void SetUpTransferManager(size_t size, const void * data, void * recvBuffer) +{ + if (sSendRecvMgr.sendOrRecv) + { + REG_SIOCNT |= SIO_38400_BPS; + sSendRecvMgr.dataptr = (void *)data; + REG_SIODATA32 = size; + sSendRecvMgr.size = size / 4 + 1; + StartTm3(); + } + else + { + REG_SIOCNT |= SIO_9600_BPS; + sSendRecvMgr.dataptr = recvBuffer; + } +} + +static void StartTm3(void) +{ + REG_TM3CNT_L = -601; + REG_TM3CNT_H = TIMER_INTR_ENABLE; + REG_IME = 0; + REG_IE |= INTR_FLAG_TIMER3; + REG_IME = 1; +} + +void EReaderHelper_Timer3Callback(void) +{ + DisableTm3(); + EnableSio(); +} + +void EReaderHelper_SerialCallback(void) +{ + u16 recv[4]; + u16 i; + u16 cnt1; + u16 cnt2; + u32 recv32; + + switch (sSendRecvMgr.state) + { + case 1: + REG_SIOMLT_SEND = 0xCCD0; + *(u64 *)recv = REG_SIOMLT_RECV; + for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++) + { + if (recv[i] == 0xCCD0) + cnt1++; + else if (recv[i] != 0xFFFF) + cnt2++; + } + if (cnt1 == 2 && cnt2 == 0) + sSendRecvMgr.state = 2; + break; + case 3: + recv32 = REG_SIODATA32; + if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.sendOrRecv == 0) + sSendRecvMgr.size = recv32 / 4 + 1; + if (sSendRecvMgr.sendOrRecv == 1) + { + if (sSendRecvMgr.cursor < sSendRecvMgr.size) + { + REG_SIODATA32 = sSendRecvMgr.dataptr[sSendRecvMgr.cursor]; + sSendRecvMgr.checksum += sSendRecvMgr.dataptr[sSendRecvMgr.cursor]; + } + else + REG_SIODATA32 = sSendRecvMgr.checksum; + } + else + { + if (sSendRecvMgr.cursor > 0 && sSendRecvMgr.cursor < sSendRecvMgr.size + 1) + { + sSendRecvMgr.dataptr[sSendRecvMgr.cursor - 1] = recv32; + sSendRecvMgr.checksum += recv32; + } + else if (sSendRecvMgr.cursor != 0) + { + if (sSendRecvMgr.checksum == recv32) + sSendRecvMgr.field_03 = 1; + else + sSendRecvMgr.field_03 = 2; + } + sCounter2 = 0; + } + sSendRecvMgr.cursor++; + if (sSendRecvMgr.cursor < sSendRecvMgr.size + 2) + { + if (sSendRecvMgr.sendOrRecv != 0) + REG_TM3CNT_H |= TIMER_ENABLE; + else + EnableSio(); + } + else + { + sSendRecvMgr.state = 4; + sCounter1 = 0; + } + break; + case 5: + if (sSendRecvMgr.sendOrRecv == 0) + REG_SIODATA8 = sSendRecvMgr.field_03; + *(vu64 *)recv = REG_SIOMLT_RECV; + if (recv[1] == 1 || recv[1] == 2) + { + if (sSendRecvMgr.sendOrRecv == 1) + sSendRecvMgr.field_03 = recv[1]; + sSendRecvMgr.state = 6; + } + break; + } +} + +static void EnableSio(void) +{ + REG_SIOCNT |= SIO_ENABLE; +} + +static void DisableTm3(void) +{ + REG_TM3CNT_H &= ~TIMER_ENABLE; + REG_TM3CNT_L = -601; +} + +static void GetKeyInput(void) +{ + u16 rawKeys = REG_KEYINPUT ^ 0x3FF; + sJoyNew = rawKeys & ~sJoyNewOrRepeated; + sJoyNewOrRepeated = rawKeys; +} + +void EReaderHelper_SaveRegsState(void) +{ + sSavedIme = REG_IME; + sSavedIe = REG_IE; + sSavedTm3Cnt = REG_TM3CNT_H; + sSavedSioCnt = REG_SIOCNT; + sSavedRCnt = REG_RCNT; +} + +void EReaderHelper_RestoreRegsState(void) +{ + REG_IME = sSavedIme; + REG_IE = sSavedIe; + REG_TM3CNT_H = sSavedTm3Cnt; + REG_SIOCNT = sSavedSioCnt; + REG_RCNT = sSavedRCnt; +} + +void EReaderHelper_ClearsSendRecvMgr(void) +{ + CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr)); +} diff --git a/src/mevent.c b/src/mevent.c index 4d625987e..fc0c1f2d4 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -28,7 +28,7 @@ struct MEventTaskData1 u16 t02; u16 t04; u16 t06; - u8 t08; + u8 state; u8 t09; u8 t0A; u8 t0B; @@ -91,46 +91,46 @@ struct MEvent_Str_1 gUnknown_3005ED0; static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE; -void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2) +void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data) { vu16 imeBak = REG_IME; REG_IME = 0; - gIntrTable[1] = sub_815C6D4; - gIntrTable[2] = sub_815C6C4; - sub_815C8C8(); - sub_815C960(); + gIntrTable[1] = EReaderHelper_SerialCallback; + gIntrTable[2] = EReaderHelper_Timer3Callback; + EReaderHelper_SaveRegsState(); + EReaderHelper_ClearsSendRecvMgr(); REG_IE |= INTR_FLAG_VCOUNT; REG_IME = imeBak; - a0->unk_000 = 0; - a0->unk_004 = a1; - a0->unk_008 = a2; + mgr->status = 0; + mgr->size = size; + mgr->data = data; } void sub_8143644(struct MEvent_Str_1 *unused) { vu16 imeBak = REG_IME; REG_IME = 0; - sub_815C960(); - sub_815C91C(); + EReaderHelper_ClearsSendRecvMgr(); + EReaderHelper_RestoreRegsState(); RestoreSerialTimer3IntrHandlers(); REG_IME = imeBak; } -u8 sub_8143674(struct MEvent_Str_1 *a0) +u8 sub_8143674(struct MEvent_Str_1 *mgr) { u8 resp = 0; - a0->unk_000 = sub_815C498(1, a0->unk_004, a0->unk_008, 0); - if ((a0->unk_000 & 0x13) == 0x10) + mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0); + if ((mgr->status & 0x13) == 0x10) resp = 1; - if (a0->unk_000 & 8) + if (mgr->status & 8) resp = 2; - if (a0->unk_000 & 4) + if (mgr->status & 4) resp = 3; gUnknown_3003F84 = 0; return resp; } -void sub_81436BC(void) +static void ResetTTDataBuffer(void) { memset(gDecompressionBuffer, 0, 0x2000); gLinkType = 0x5502; @@ -143,7 +143,7 @@ bool32 sub_81436EC(void) vu16 imeBak = REG_IME; u16 data[4]; REG_IME = 0; - *(u64 *)data = gUnknown_3003FB4; + *(u64 *)data = gSioMlt_Recv; REG_IME = imeBak; if ( data[0] == 0xB9A0 && data[1] == 0xCCD0 @@ -154,7 +154,7 @@ bool32 sub_81436EC(void) return FALSE; } -bool32 sub_814374C(void) +static bool32 IsEReaderConnectionSane(void) { if (sub_800AA48() && GetLinkPlayerCount_2() == 2) return TRUE; @@ -244,7 +244,7 @@ void task_add_00_ereader(void) { u8 taskId = CreateTask(sub_8143910, 0); struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; - data->t08 = 0; + data->state = 0; data->t09 = 0; data->t0A = 0; data->t0B = 0; @@ -258,12 +258,12 @@ void task_add_00_ereader(void) data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2)); } -void sub_81438E8(u16 *a0) +static void ResetDelayTimer(u16 *a0) { *a0 = 0; } -bool32 sub_81438F0(u16 * a0, u16 a1) +static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1) { if (++(*a0) > a1) { @@ -276,49 +276,49 @@ bool32 sub_81438F0(u16 * a0, u16 a1) void sub_8143910(u8 taskId) { struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; - switch (data->t08) + switch (data->state) { case 0: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE52)) - data->t08 = 1; + data->state = 1; break; case 1: - sub_81436BC(); - sub_81438E8(&data->t00); - data->t08 = 2; + ResetTTDataBuffer(); + ResetDelayTimer(&data->t00); + data->state = 2; break; case 2: - if (sub_81438F0(&data->t00, 10)) - data->t08 = 3; + if (AdvanceDelayTimerCheckTimeout(&data->t00, 10)) + data->state = 3; break; case 3: - if (!sub_814374C()) + if (!IsEReaderConnectionSane()) { CloseLink(); - data->t08 = 4; + data->state = 4; } else - data->t08 = 13; + data->state = 13; break; case 4: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE53)) { AddTextPrinterToWindow1(gUnknown_841DE54); - sub_81438E8(&data->t00); - data->t08 = 5; + ResetDelayTimer(&data->t00); + data->state = 5; } break; case 5: - if (sub_81438F0(&data->t00, 90)) + if (AdvanceDelayTimerCheckTimeout(&data->t00, 90)) { - sub_81436BC(); - data->t08 = 6; + ResetTTDataBuffer(); + data->state = 6; } else if (JOY_NEW(B_BUTTON)) { - sub_81438E8(&data->t00); + ResetDelayTimer(&data->t00); PlaySE(SE_SELECT); - data->t08 = 23; + data->state = 23; } break; case 6: @@ -326,64 +326,64 @@ void sub_8143910(u8 taskId) { PlaySE(SE_SELECT); CloseLink(); - sub_81438E8(&data->t00); - data->t08 = 23; + ResetDelayTimer(&data->t00); + data->state = 23; } else if (GetLinkPlayerCount_2() > 1) { - sub_81438E8(&data->t00); + ResetDelayTimer(&data->t00); CloseLink(); - data->t08 = 7; + data->state = 7; } else if (sub_81436EC()) { PlaySE(SE_SELECT); CloseLink(); - sub_81438E8(&data->t00); - data->t08 = 8; + ResetDelayTimer(&data->t00); + data->state = 8; } - else if (sub_81438F0(&data->t00, 10)) + else if (AdvanceDelayTimerCheckTimeout(&data->t00, 10)) { CloseLink(); - sub_81436BC(); - sub_81438E8(&data->t00); + ResetTTDataBuffer(); + ResetDelayTimer(&data->t00); } break; case 7: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7C)) - data->t08 = 4; + data->state = 4; break; case 8: AddTextPrinterToWindow1(gUnknown_841DE95); sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start); - data->t08 = 9; + data->state = 9; break; case 9: data->t0E = sub_8143674(&gUnknown_3005ED0); if (data->t0E != 0) - data->t08 = 10; + data->state = 10; break; case 10: sub_8143644(&gUnknown_3005ED0); if (data->t0E == 3) - data->t08 = 20; + data->state = 20; else if (data->t0E == 1) { - sub_81438E8(&data->t00); + ResetDelayTimer(&data->t00); AddTextPrinterToWindow1(gUnknown_841DE9B); - data->t08 = 11; + data->state = 11; } else - data->t08 = 0; + data->state = 0; break; case 11: - if (sub_81438F0(&data->t00, 840)) - data->t08 = 12; + if (AdvanceDelayTimerCheckTimeout(&data->t00, 840)) + data->state = 12; break; case 12: - sub_81436BC(); + ResetTTDataBuffer(); AddTextPrinterToWindow1(gUnknown_841DE98); - data->t08 = 13; + data->state = 13; break; case 13: switch (sub_8143770(&data->t09, &data->t00)) @@ -392,21 +392,21 @@ void sub_8143910(u8 taskId) break; case 2: AddTextPrinterToWindow1(gUnknown_841DE95); - data->t08 = 14; + data->state = 14; break; case 1: PlaySE(SE_SELECT); CloseLink(); - data->t08 = 23; + data->state = 23; break; case 5: CloseLink(); - data->t08 = 21; + data->state = 21; break; case 3: case 4: CloseLink(); - data->t08 = 20; + data->state = 20; break; } break; @@ -414,65 +414,65 @@ void sub_8143910(u8 taskId) if (HasLinkErrorOccurred()) { CloseLink(); - data->t08 = 20; + data->state = 20; } else if (GetBlockReceivedStatus()) { ResetBlockReceivedFlags(); - data->t08 = 15; + data->state = 15; } break; case 15: - data->t0E = sub_815D6B4(gDecompressionBuffer); + data->t0E = ValidateTrainerTowerData((struct TrainerTowerData *)gDecompressionBuffer); sub_800AA80(data->t0E); - data->t08 = 16; + data->state = 16; break; case 16: if (!gReceivedRemoteLinkPlayers) { if (data->t0E == 1) - data->t08 = 17; + data->state = 17; else - data->t08 = 20; + data->state = 20; } break; case 17: - if (sub_815D794(gDecompressionBuffer)) + if (CEReaderTool_SaveTrainerTower((struct TrainerTowerData *)gDecompressionBuffer)) { AddTextPrinterToWindow1(gUnknown_841DE99); - sub_81438E8(&data->t00); - data->t08 = 18; + ResetDelayTimer(&data->t00); + data->state = 18; } else - data->t08 = 22; + data->state = 22; break; case 18: - if (sub_81438F0(&data->t00, 120)) + if (AdvanceDelayTimerCheckTimeout(&data->t00, 120)) { AddTextPrinterToWindow1(gUnknown_841DE9A); PlayFanfare(258); - data->t08 = 19; + data->state = 19; } break; case 19: if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON)) - data->t08 = 26; + data->state = 26; break; case 23: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7D)) - data->t08 = 26; + data->state = 26; break; case 20: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE96)) - data->t08 = 0; + data->state = 0; break; case 21: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE97)) - data->t08 = 0; + data->state = 0; break; case 22: if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE9C)) - data->t08 = 0; + data->state = 0; break; case 26: sub_812B484(); diff --git a/src/save.c b/src/save.c index 761e3c92d..d3d31a22e 100644 --- a/src/save.c +++ b/src/save.c @@ -828,7 +828,7 @@ u32 TryCopySpecialSaveSection(u8 sector, u8* dst) return 1; } -u32 sub_80DA5E0(u8 sector, u8* src) +u32 TryWriteSpecialSaveSection(u8 sector, u8* src) { s32 i; s32 size; diff --git a/src/trainer_tower.c b/src/trainer_tower.c index a36e93260..46c112030 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -35,45 +35,10 @@ struct UnkStruct_8479D34 u8 flags3[8]; }; -struct UnkSubstruct_203F458_000C_004 -{ - /* 0x000 */ u8 unk_000[11]; - /* 0x00B */ u8 unk_00B; - /* 0x00C */ u8 unk_00C; - /* 0x00E */ u16 unk_00E[6]; - /* 0x01A */ u16 unk_01A[6]; - /* 0x026 */ u16 unk_026[6]; - /* 0x032 */ u16 unk_032[6]; - /* 0x040 */ struct BattleTowerPokemon unk_040[PARTY_SIZE]; -}; // size: 328 - -struct UnkSubstruct_203F458_000C -{ - /* 0x000 */ u8 unk_000; - /* 0x000 */ u8 unk_001; - /* 0x002 */ u8 unk_002; - /* 0x003 */ u8 unk_003; - /* 0x004 */ struct UnkSubstruct_203F458_000C_004 unk_004[3]; - /* 0x3DC */ u8 filler_3DC[4]; -}; - -struct Unk_203F458_Header -{ - u8 unk0; - u8 unk1; - u32 unk4; -}; - -struct UnkStruct_203F458_SaveBlock -{ - struct Unk_203F458_Header unk_0000; - struct UnkSubstruct_203F458_000C unk_0008[8]; -}; - struct UnkStruct_203F458 { /* 0x0000 */ u8 unk_0000; - /* 0x0004 */ struct UnkStruct_203F458_SaveBlock unk_0004; + /* 0x0004 */ struct TrainerTowerData unk_0004; }; struct UnkStruct_203F45C @@ -563,30 +528,7 @@ const u8 gUnknown_847A30E[][3] = { }; extern const struct Unk_203F458_Header gUnknown_84827AC; -extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8]; - -bool32 sub_815D7BC(void * dest, void * buffer) -{ - if (TryCopySpecialSaveSection(30, buffer) != 1) - return FALSE; - memcpy(dest + 0x000, buffer, 0xF88); - - if (TryCopySpecialSaveSection(31, buffer) != 1) - return FALSE; - memcpy(dest + 0xF88, buffer, 0xF80); - - if (!sub_815D6B4(dest)) - return FALSE; - return TRUE; -} - -bool32 sub_815D80C(void * dest) -{ - void * buffer = AllocZeroed(0x1000); - bool32 success = sub_815D7BC(dest, buffer); - Free(buffer); - return success; -} +extern const struct TrainerTowerTrainer *const gUnknown_84827B4[][8]; bool32 sub_815D834(void) { @@ -696,23 +638,23 @@ void sub_815DA54(void) sub_815DC8C(); gUnknown_203F45C = AllocZeroed(sizeof(*gUnknown_203F45C)); r10 = VarGet(VAR_0x4001); - StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); + StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); for (r9 = 0; r9 < 6; r9++) { - gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; - gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; + gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; + gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; - if (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002 == 1) + if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1) { - gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9]; - gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9]; + gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9]; + gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9]; } } - gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; - gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B; - gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C; + gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002; + gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B; + gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C; SetVBlankCounter1Ptr(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0); sub_815DD2C(); } @@ -750,12 +692,12 @@ void sub_815DC8C(void) // fakematching { u32 whichTimer = gSaveBlock1Ptr->unkArrayIdx; s32 r4; - const struct UnkSubstruct_203F458_000C *const * r7; + const struct TrainerTowerTrainer *const * r7; gUnknown_203F458 = AllocZeroed(sizeof(*gUnknown_203F458)); gUnknown_203F458->unk_0000 = gMapHeader.mapDataId - 0x2A; if (sub_815D834() == TRUE) - sub_815D80C(&gUnknown_203F458->unk_0004); + CEReaderTool_LoadTrainerTower(&gUnknown_203F458->unk_0004); else { struct UnkStruct_203F458 * r0_ = gUnknown_203F458; @@ -767,12 +709,12 @@ void sub_815DC8C(void) // fakematching for (r4 = 0; r4 < 8; r4++) { void * r0 = gUnknown_203F458; - r0 = r4 * sizeof(struct UnkSubstruct_203F458_000C) + r0; - r0 += offsetof(struct UnkStruct_203F458, unk_0004.unk_0008); - memcpy(r0, r7[r4], sizeof(struct UnkSubstruct_203F458_000C)); + r0 = r4 * sizeof(struct TrainerTowerTrainer) + r0; + r0 += offsetof(struct UnkStruct_203F458, unk_0004.trainers); + memcpy(r0, r7[r4], sizeof(struct TrainerTowerTrainer)); // r0[r4] = *r7[r4]; } - gUnknown_203F458->unk_0004.unk_0000.unk4 = CalcByteArraySum((void *)gUnknown_203F458->unk_0004.unk_0008, sizeof(gUnknown_203F458->unk_0004.unk_0008)); + gUnknown_203F458->unk_0004.unk4 = CalcByteArraySum((void *)gUnknown_203F458->unk_0004.trainers, sizeof(gUnknown_203F458->unk_0004.trainers)); sub_815EC0C(); } } @@ -799,7 +741,7 @@ void sub_815DC8C(void) "\tbne _0815DCD0\n" "\tldr r0, [r4]\n" "\tadds r0, 0x4\n" - "\tbl sub_815D80C\n" + "\tbl CEReaderTool_LoadTrainerTower\n" "\tb _0815DD18\n" "\t.align 2, 0\n" "_0815DCBC: .4byte gSaveBlock1Ptr\n" @@ -860,14 +802,14 @@ void sub_815DD2C(void) void sub_815DD44(void) { - if (gMapHeader.mapDataId - 0x129 > gUnknown_203F458->unk_0004.unk_0000.unk0) + if (gMapHeader.mapDataId - 0x129 > gUnknown_203F458->unk_0004.count) { gSpecialVar_Result = 3; SetCurrentMapLayout(0x132); } else { - gSpecialVar_Result = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + gSpecialVar_Result = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002; SetCurrentMapLayout(gUnknown_847A284[gUnknown_203F458->unk_0000][gSpecialVar_Result]); sub_815DDB0(); } @@ -877,10 +819,10 @@ void sub_815DDB0(void) { s32 r3, r4; u8 r1, r2, r4_; - switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002) + switch (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002) { case 0: - r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; + r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++) { if (gUnknown_8479ED8[r3].unk1 == r2) @@ -893,7 +835,7 @@ void sub_815DDB0(void) VarSet(VAR_0x4011, r1); break; case 1: - r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; + r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; for (r3 = 0; r3 < NELEMS(gUnknown_847A024); r3++) { if (gUnknown_847A024[r3].unk2 == r2) @@ -915,7 +857,7 @@ void sub_815DDB0(void) case 2: for (r4 = 0; r4 < 3; r4++) { - r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00B; + r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_00B; for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++) { if (gUnknown_8479ED8[r3].unk1 == r2) @@ -962,25 +904,25 @@ void sub_815DF54(void) { u16 r4 = gSpecialVar_0x8006; u8 r1; - u8 r5 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + u8 r5 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002; // HOW DO I MATCH THIS CONTROL FLOW?!?! - r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r5 == 1 ? 0 : r4].unk_00B; + r1 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r5 == 1 ? 0 : r4].unk_00B; switch (gSpecialVar_0x8005) { case 2: sub_815E068(r5, r1); - sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00E, gStringVar4); + sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_00E, gStringVar4); break; case 3: sub_815E068(r5, r1); - sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_01A, gStringVar4); + sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_01A, gStringVar4); break; case 4: sub_815E068(r5, r1); - sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_026, gStringVar4); + sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_026, gStringVar4); break; case 5: - sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_032, gStringVar4); + sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_032, gStringVar4); break; } } @@ -1180,7 +1122,7 @@ void sub_815E124(u8 taskId) void sub_815E160(void) { gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY; - if (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002 == 1) + if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; gTrainerBattleOpponent_A = 0; sub_815E9FC(); @@ -1192,7 +1134,7 @@ void sub_815E160(void) void sub_815E1C0(void) { if (!gSpecialVar_0x8005) - gSpecialVar_Result = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + gSpecialVar_Result = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002; } void sub_815E1F0(void) @@ -1203,7 +1145,7 @@ void sub_815E1F0(void) void sub_815E218(void) { u16 mapDataId = gMapHeader.mapDataId; - if (mapDataId - 0x12A == gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 && mapDataId - 0x129 <= gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_001) + if (mapDataId - 0x12A == gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 && mapDataId - 0x129 <= gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_001) gSpecialVar_Result = FALSE; else gSpecialVar_Result = TRUE; @@ -1239,7 +1181,7 @@ void sub_815E394(void) void sub_815E408(void) { - u16 itemId = gUnknown_847A2B4[gUnknown_203F458->unk_0004.unk_0008->unk_003]; + u16 itemId = gUnknown_847A2B4[gUnknown_203F458->unk_0004.trainers->unk_003]; if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0) gSpecialVar_Result = 2; else if (AddBagItem(itemId, 1) == 1) @@ -1367,9 +1309,9 @@ void sub_815E8B4(void) void sub_815E8CC(void) { - if (gUnknown_203F458->unk_0004.unk_0000.unk0 != gUnknown_203F458->unk_0004.unk_0008[0].unk_001) + if (gUnknown_203F458->unk_0004.count != gUnknown_203F458->unk_0004.trainers[0].unk_001) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.unk_0000.unk0, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.count, STR_CONV_MODE_LEFT_ALIGN, 1); gSpecialVar_Result = TRUE; } else @@ -1394,7 +1336,7 @@ void sub_815E948(void) { s32 i; u16 var_4001 = VarGet(VAR_0x4001); - u8 r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B; + u8 r1 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B; for (i = 0; i < NELEMS(gUnknown_847A074); i++) { @@ -1427,29 +1369,29 @@ void sub_815E9FC(void) ZeroEnemyPartyMons(); - switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002) + switch (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002) { case 0: default: for (r6 = 0; r6 < 2; r6++) { r2 = gUnknown_847A2EE[r5][r6]; - gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; - sub_803E0A4(&gEnemyParty[r6], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); + gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[r6], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); } break; case 1: r2 = gUnknown_847A2FE[r5][0]; - gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2].level = r9; - sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2]); + gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2]); r2 = gUnknown_847A2FE[r5][1]; - gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2].level = r9; - sub_803E0A4(&gEnemyParty[1], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2]); + gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[1], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2]); break; case 2: r2 = gUnknown_847A30E[r5][r4]; - gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; - sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); + gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); break; } } @@ -1474,9 +1416,9 @@ static s32 GetPartyMaxLevel(void) void sub_815EC0C(void) { - if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != gUnknown_203F458->unk_0004.unk_0000.unk1) + if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != gUnknown_203F458->unk_0004.id) { - gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = gUnknown_203F458->unk_0004.unk_0000.unk1; + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = gUnknown_203F458->unk_0004.id; sub_815EDF4(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4, 215999); gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 = FALSE; } diff --git a/sym_bss.txt b/sym_bss.txt index 556a53add..603da6ddb 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -197,38 +197,8 @@ gUnknown_3002040: @ 3002040 gUnknown_3002044: @ 3002044 .space 0x4 -gUnknown_3002048: @ 3002048 - .space 0x18 - -gUnknown_3002060: @ 3002060 - .space 0x2 - -gUnknown_3002062: @ 3002062 - .space 0x2 - -gUnknown_3002064: @ 3002064 - .space 0x2 - -gUnknown_3002066: @ 3002066 - .space 0x2 - -gUnknown_3002068: @ 3002068 - .space 0x4 - -gUnknown_300206C: @ 300206C - .space 0x2 - -gUnknown_300206E: @ 300206E - .space 0x2 - -gUnknown_3002070: @ 3002070 - .space 0x2 - -gUnknown_3002072: @ 3002072 - .space 0x2 - -gUnknown_3002074: @ 3002074 - .space 0x4 + .align 3 + .include "src/ereader_helpers.o" .align 3 .include "src/unk_815C980.o" diff --git a/sym_common.txt b/sym_common.txt index 429623cb7..eb4f075ba 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -96,7 +96,7 @@ gUnknown_3003FA0: @ 3003FA0 gUnknown_3003FB0: @ 3003FB0 .space 0x4 -gUnknown_3003FB4: @ 3003FB4 +gSioMlt_Recv: @ 3003FB4 .space 0xFBC gUnknown_3004F70: @ 3004F70 |