From 4a1baa3359a1e79bf1d88e1a36b9f6691ec2aa4f Mon Sep 17 00:00:00 2001 From: MokhaLeee Date: Fri, 15 Mar 2024 17:10:35 +0800 Subject: [PATCH 1/2] sio_utils --- asm/code_sio.s | 12 +- asm/code_sio_8042DC8.s | 4 +- asm/sio_utils.s | 644 ---------------------------------------- data/const_data_D8714.s | 30 +- data/const_data_sio.s | 13 + data/sio_main.s | 81 ----- include/sio.h | 60 +++- include/sio_core.h | 14 +- include/variables.h | 14 +- ldscript.txt | 11 +- src/sio_core.c | 8 +- src/sio_main.c | 156 ++++++++++ src/sio_main2.c | 144 +++++++++ 13 files changed, 393 insertions(+), 798 deletions(-) delete mode 100644 asm/sio_utils.s create mode 100644 data/const_data_sio.s create mode 100644 src/sio_main.c create mode 100644 src/sio_main2.c diff --git a/asm/code_sio.s b/asm/code_sio.s index 76ff59c77..acc3751b7 100644 --- a/asm/code_sio.s +++ b/asm/code_sio.s @@ -2946,7 +2946,7 @@ sub_80469C4: @ 0x080469C4 movs r1, #0x10 adds r2, r7, #0 bl sub_804C2EC - ldr r4, _08046AC4 @ gUnk_Sio_0203DD0C + ldr r4, _08046AC4 @ gSioTexts adds r0, r4, #0 movs r1, #0x18 bl InitText @@ -3032,7 +3032,7 @@ _08046AAC: _08046AB8: .4byte Img_TacticianSelObj _08046ABC: .4byte 0x06014800 _08046AC0: .4byte Font_0203DB64 -_08046AC4: .4byte gUnk_Sio_0203DD0C +_08046AC4: .4byte gSioTexts _08046AC8: .4byte 0x0000074C _08046ACC: .4byte 0x0000074D _08046AD0: @@ -3796,7 +3796,7 @@ _08047094: subs r4, #1 cmp r4, #0 bge _08047094 - ldr r4, _080471E8 @ gUnk_Sio_0203DD0C + ldr r4, _080471E8 @ gSioTexts adds r0, r4, #0 movs r1, #0x18 bl InitText @@ -3928,7 +3928,7 @@ _080471D8: .4byte gBG2TilemapBuffer+0x102 _080471DC: .4byte gUnknown_085AE464 _080471E0: .4byte Font_0203DB64 _080471E4: .4byte Texts_0203DB14 -_080471E8: .4byte gUnk_Sio_0203DD0C +_080471E8: .4byte gSioTexts _080471EC: .4byte 0x00000772 _080471F0: .4byte 0x00000773 _080471F4: .4byte 0x00000774 @@ -4170,7 +4170,7 @@ _080473D2: subs r4, #1 cmp r4, #0 bge _080473D2 - ldr r4, _08047550 @ gUnk_Sio_0203DD0C + ldr r4, _08047550 @ gSioTexts adds r0, r4, #0 movs r1, #0x18 bl InitText @@ -4325,7 +4325,7 @@ _08047540: .4byte gBG2TilemapBuffer+0x102 _08047544: .4byte gUnknown_085AE464 _08047548: .4byte Font_0203DB64 _0804754C: .4byte Texts_0203DB14 -_08047550: .4byte gUnk_Sio_0203DD0C +_08047550: .4byte gSioTexts _08047554: .4byte 0x00000772 _08047558: .4byte 0x00000773 _0804755C: .4byte 0x00000774 diff --git a/asm/code_sio_8042DC8.s b/asm/code_sio_8042DC8.s index 4c1c50efe..e0c1cd335 100644 --- a/asm/code_sio_8042DC8.s +++ b/asm/code_sio_8042DC8.s @@ -1704,7 +1704,7 @@ _08043F84: adds r0, r7, #0 movs r1, #0x50 movs r3, #0x88 - bl sub_8042FFC + bl StartSioHold str r0, [r7, #0x30] mov r1, r9 adds r1, #1 @@ -1762,7 +1762,7 @@ _08043FEE: adds r0, r7, #0 movs r1, #0x50 movs r3, #0x88 - bl sub_8042FFC + bl StartSioHold str r0, [r7, #0x30] adds r0, r7, #0 movs r1, #7 diff --git a/asm/sio_utils.s b/asm/sio_utils.s deleted file mode 100644 index e13a32a3d..000000000 --- a/asm/sio_utils.s +++ /dev/null @@ -1,644 +0,0 @@ - .INCLUDE "macro.inc" - - .SYNTAX UNIFIED - - THUMB_FUNC_START SioStrCpy -SioStrCpy: @ 0x08042DC8 - push {lr} - movs r3, #0 - b _08042DD6 -_08042DCE: - strb r2, [r1] - adds r0, #1 - adds r1, #1 - adds r3, #1 -_08042DD6: - ldrb r2, [r0] - cmp r2, #0 - bne _08042DCE - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, #0 - pop {r1} - bx r1 - - THUMB_FUNC_END SioStrCpy - - THUMB_FUNC_START SioDrawNumber -SioDrawNumber: @ 0x08042DE8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r2, #0 - adds r6, r3, #0 - bl Text_SetCursor - adds r0, r4, #0 - adds r1, r5, #0 - bl Text_SetColor - adds r0, r4, #0 - adds r1, r6, #0 - bl Text_DrawNumber - pop {r4, r5, r6} - pop {r0} - bx r0 - - THUMB_FUNC_END SioDrawNumber - - THUMB_FUNC_START sub_8042E0C -sub_8042E0C: @ 0x08042E0C - push {lr} - bl SioRegisterIrq - bl sub_8041898 - ldr r2, _08042E28 @ gSioSt - ldr r1, [r2] - movs r3, #0 - movs r0, #1 - strb r0, [r1, #1] - ldr r0, [r2] - strh r3, [r0, #4] - pop {r0} - bx r0 - .align 2, 0 -_08042E28: .4byte gSioSt - - THUMB_FUNC_END sub_8042E0C - - THUMB_FUNC_START sub_8042E2C -sub_8042E2C: @ 0x08042E2C - push {r4, r5, r6, lr} - sub sp, #4 - adds r6, r0, #0 - ldr r0, _08042E70 @ 0x00002586 - mov r1, sp - strh r0, [r1] - bl sub_80415B0 - movs r5, #1 - negs r5, r5 - cmp r0, r5 - beq _08042E68 - ldr r4, _08042E74 @ gSioSt - ldr r1, [r4] - movs r0, #0 - strb r0, [r1, #0x11] - ldr r1, [r4] - movs r0, #5 - strh r0, [r1, #4] - bl sub_80416D0 - ldr r1, [r4] - strb r0, [r1, #6] - mov r0, sp - adds r1, r5, #0 - bl SioSend16 - adds r0, r6, #0 - bl Proc_Break -_08042E68: - add sp, #4 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08042E70: .4byte 0x00002586 -_08042E74: .4byte gSioSt - - THUMB_FUNC_END sub_8042E2C - - THUMB_FUNC_START SetBmStLinkArenaFlag -SetBmStLinkArenaFlag: @ 0x08042E78 - ldr r2, _08042E84 @ gBmSt - ldrb r1, [r2, #4] - movs r0, #0x40 - orrs r0, r1 - strb r0, [r2, #4] - bx lr - .align 2, 0 -_08042E84: .4byte gBmSt - - THUMB_FUNC_END SetBmStLinkArenaFlag - - THUMB_FUNC_START UnsetBmStLinkArenaFlag -UnsetBmStLinkArenaFlag: @ 0x08042E88 - ldr r2, _08042E94 @ gBmSt - ldrb r1, [r2, #4] - movs r0, #0xbf - ands r0, r1 - strb r0, [r2, #4] - bx lr - .align 2, 0 -_08042E94: .4byte gBmSt - - THUMB_FUNC_END UnsetBmStLinkArenaFlag - - THUMB_FUNC_START CheckInLinkArena -CheckInLinkArena: @ 0x08042E98 - ldr r0, _08042EA4 @ gBmSt - ldrb r0, [r0, #4] - lsrs r0, r0, #6 - movs r1, #1 - ands r0, r1 - bx lr - .align 2, 0 -_08042EA4: .4byte gBmSt - - THUMB_FUNC_END CheckInLinkArena - - THUMB_FUNC_START sub_8042EA8 -sub_8042EA8: @ 0x08042EA8 - ldr r1, _08042EB0 @ gLinkArenaSt - movs r0, #0xff - strb r0, [r1, #4] - bx lr - .align 2, 0 -_08042EB0: .4byte gLinkArenaSt - - THUMB_FUNC_END sub_8042EA8 - - THUMB_FUNC_START sub_8042EB4 -sub_8042EB4: @ 0x08042EB4 - push {r4, r5, lr} - sub sp, #4 - adds r5, r0, #0 - movs r4, #0 - str r4, [sp] - movs r0, #0 - movs r1, #0 - movs r2, #1 - movs r3, #0 - bl SetBlendTargetA - movs r0, #1 - str r0, [sp] - movs r1, #1 - movs r2, #0 - movs r3, #1 - bl SetBlendTargetB - movs r0, #0 - movs r1, #0 - movs r2, #0 - movs r3, #0 - bl SetBlendConfig - str r4, [r5, #0x58] - add sp, #4 - pop {r4, r5} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_8042EB4 - - THUMB_FUNC_START sub_8042EF0 -sub_8042EF0: @ 0x08042EF0 - push {r4, lr} - sub sp, #4 - ldr r1, [r0, #0x58] - adds r1, #1 - str r1, [r0, #0x58] - movs r4, #0x3f - ands r4, r1 - cmp r4, #0x1f - ble _08042F06 - movs r0, #0x40 - subs r4, r0, r4 -_08042F06: - cmp r4, #0x10 - ble _08042F0C - movs r4, #0x10 -_08042F0C: - movs r0, #0 - str r0, [sp] - movs r1, #0 - movs r2, #1 - movs r3, #0 - bl SetBlendTargetA - movs r0, #1 - str r0, [sp] - movs r1, #1 - movs r2, #0 - movs r3, #1 - bl SetBlendTargetB - lsls r1, r4, #0x18 - lsrs r1, r1, #0x18 - movs r2, #0x10 - subs r2, r2, r4 - lsls r2, r2, #0x18 - lsrs r2, r2, #0x18 - movs r0, #1 - movs r3, #0 - bl SetBlendConfig - add sp, #4 - pop {r4} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_8042EF0 - - THUMB_FUNC_START sub_8042F44 -sub_8042F44: @ 0x08042F44 - ldr r0, _08042F54 @ gLCDControlBuffer - ldrh r1, [r0, #0x20] - adds r1, #1 - strh r1, [r0, #0x20] - ldrh r1, [r0, #0x24] - subs r1, #1 - strh r1, [r0, #0x24] - bx lr - .align 2, 0 -_08042F54: .4byte gLCDControlBuffer - - THUMB_FUNC_END sub_8042F44 - - THUMB_FUNC_START sub_8042F58 -sub_8042F58: @ 0x08042F58 - push {lr} - adds r2, r0, #0 - ldr r0, _08042F78 @ gSioSt - ldr r0, [r0] - ldr r1, _08042F7C @ 0x00001288 - strh r1, [r0, #0x30] - ldr r1, _08042F80 @ 0x00001B7E - adds r0, r0, r1 - ldrh r0, [r0] - cmp r0, #0 - beq _08042F74 - adds r0, r2, #0 - bl Proc_Break -_08042F74: - pop {r0} - bx r0 - .align 2, 0 -_08042F78: .4byte gSioSt -_08042F7C: .4byte 0x00001288 -_08042F80: .4byte 0x00001B7E - - THUMB_FUNC_END sub_8042F58 - - THUMB_FUNC_START sub_8042F84 -sub_8042F84: @ 0x08042F84 - ldr r0, _08042F94 @ gSioSt - ldr r2, [r0] - movs r1, #6 - ldrsb r1, [r2, r1] - movs r0, #1 - lsls r0, r1 - strb r0, [r2, #0xa] - bx lr - .align 2, 0 -_08042F94: .4byte gSioSt - - THUMB_FUNC_END sub_8042F84 - - THUMB_FUNC_START sub_8042F98 -sub_8042F98: @ 0x08042F98 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08042FD8 @ gSioMsgBuf - movs r2, #0 - movs r1, #0x89 - strb r1, [r0] - ldr r4, _08042FDC @ gSioSt - ldr r1, [r4] - ldrb r1, [r1, #6] - strb r1, [r0, #1] - strh r2, [r0, #2] - movs r1, #4 - bl SioSend - ldr r4, [r4] - ldrb r0, [r4, #0xa] - ldrb r1, [r4, #9] - ands r0, r1 - cmp r0, r1 - bne _08042FD0 - movs r1, #6 - ldrsb r1, [r4, r1] - movs r0, #1 - lsls r0, r1 - strb r0, [r4, #0xa] - adds r0, r5, #0 - bl Proc_Break -_08042FD0: - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08042FD8: .4byte gSioMsgBuf -_08042FDC: .4byte gSioSt - - THUMB_FUNC_END sub_8042F98 - - THUMB_FUNC_START sub_8042FE0 -sub_8042FE0: @ 0x08042FE0 - push {lr} - adds r2, r0, #0 - ldr r1, [r2, #0x30] - ldr r0, [r2, #0x38] - cmp r1, r0 - bge _08042FF8 - ldr r0, [r2, #0x34] - cmp r1, r0 - ble _08042FF8 - ldr r0, [r2, #0x2c] - bl DisplayFrozenUiHand -_08042FF8: - pop {r0} - bx r0 - - THUMB_FUNC_END sub_8042FE0 - - THUMB_FUNC_START sub_8042FFC -sub_8042FFC: @ 0x08042FFC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - mov r8, r3 - ldr r7, [sp, #0x18] - ldr r0, _08043028 @ ProcScr_HOLD - adds r1, r4, #0 - bl Proc_Start - str r5, [r0, #0x2c] - str r6, [r0, #0x30] - mov r1, r8 - str r1, [r0, #0x38] - str r7, [r0, #0x34] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - .align 2, 0 -_08043028: .4byte ProcScr_HOLD - - THUMB_FUNC_END sub_8042FFC - - THUMB_FUNC_START sub_804302C -sub_804302C: @ 0x0804302C - push {lr} - ldr r0, _08043038 @ ProcScr_HOLD - bl Proc_EndEach - pop {r0} - bx r0 - .align 2, 0 -_08043038: .4byte ProcScr_HOLD - - THUMB_FUNC_END sub_804302C - - THUMB_FUNC_START sub_804303C -sub_804303C: @ 0x0804303C - ldr r2, [r0, #0x30] - adds r2, r2, r1 - str r2, [r0, #0x30] - bx lr - - THUMB_FUNC_END sub_804303C - - THUMB_FUNC_START ClearSioBG -ClearSioBG: @ 0x08043044 - push {lr} - movs r0, #0 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #1 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #2 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #3 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - ldr r0, _08043090 @ gBG0TilemapBuffer - movs r1, #0 - bl BG_Fill - ldr r0, _08043094 @ gBG1TilemapBuffer - movs r1, #0 - bl BG_Fill - ldr r0, _08043098 @ gBG2TilemapBuffer - movs r1, #0 - bl BG_Fill - movs r0, #7 - bl BG_EnableSyncByMask - pop {r0} - bx r0 - .align 2, 0 -_08043090: .4byte gBG0TilemapBuffer -_08043094: .4byte gBG1TilemapBuffer -_08043098: .4byte gBG2TilemapBuffer - - THUMB_FUNC_END ClearSioBG - - THUMB_FUNC_START sub_804309C -sub_804309C: @ 0x0804309C - push {lr} - movs r0, #0 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #1 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #2 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - movs r0, #3 - movs r1, #0 - movs r2, #0 - bl BG_SetPosition - ldr r0, _080430F0 @ gBG0TilemapBuffer - movs r1, #0 - bl BG_Fill - ldr r0, _080430F4 @ gBG1TilemapBuffer - movs r1, #0 - bl BG_Fill - ldr r0, _080430F8 @ gBG2TilemapBuffer - movs r1, #0 - bl BG_Fill - ldr r0, _080430FC @ gBG3TilemapBuffer - movs r1, #0 - bl BG_Fill - movs r0, #0xf - bl BG_EnableSyncByMask - pop {r0} - bx r0 - .align 2, 0 -_080430F0: .4byte gBG0TilemapBuffer -_080430F4: .4byte gBG1TilemapBuffer -_080430F8: .4byte gBG2TilemapBuffer -_080430FC: .4byte gBG3TilemapBuffer - - THUMB_FUNC_END sub_804309C - - THUMB_FUNC_START sub_8043100 -sub_8043100: @ 0x08043100 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r4, r1, #0 - lsls r1, r4, #3 - ldr r0, _0804312C @ gUnk_Sio_0203DD0C - adds r5, r1, r0 - adds r0, r5, #0 - bl ClearText - cmp r6, #0 - bge _08043134 - lsls r1, r4, #7 - movs r0, #0x80 - lsls r0, r0, #3 - adds r1, r1, r0 - ldr r0, _08043130 @ gBG2TilemapBuffer+0x002 - adds r1, r1, r0 - adds r0, r5, #0 - bl PutText - b _0804315A - .align 2, 0 -_0804312C: .4byte gUnk_Sio_0203DD0C -_08043130: .4byte gBG2TilemapBuffer+0x002 -_08043134: - adds r0, r6, #0 - bl GetStringFromIndex - adds r1, r0, #0 - adds r0, r5, #0 - bl Text_DrawString - lsls r1, r4, #7 - movs r0, #0x80 - lsls r0, r0, #3 - adds r1, r1, r0 - ldr r0, _08043160 @ gBG2TilemapBuffer+0x002 - adds r1, r1, r0 - adds r0, r5, #0 - bl PutText - movs r0, #4 - bl BG_EnableSyncByMask -_0804315A: - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08043160: .4byte gBG2TilemapBuffer+0x002 - - THUMB_FUNC_END sub_8043100 - - THUMB_FUNC_START sub_8043164 -sub_8043164: @ 0x08043164 - push {r4, r5, lr} - ldr r5, _080431A8 @ gUnk_Sio_0203DA88 - movs r4, #5 -_0804316A: - adds r0, r5, #0 - movs r1, #0xc - bl InitText - adds r5, #8 - subs r4, #1 - cmp r4, #0 - bge _0804316A - ldr r5, _080431AC @ gLinkArenaSt+0x0C - movs r4, #0xa -_0804317E: - adds r0, r5, #0 - movs r1, #0xc - bl InitText - adds r5, #8 - subs r4, #1 - cmp r4, #0 - bge _0804317E - ldr r5, _080431B0 @ gUnk_Sio_0203DD0C - movs r4, #1 -_08043192: - adds r0, r5, #0 - movs r1, #0x18 - bl InitText - adds r5, #8 - subs r4, #1 - cmp r4, #0 - bge _08043192 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_080431A8: .4byte gUnk_Sio_0203DA88 -_080431AC: .4byte gLinkArenaSt+0x0C -_080431B0: .4byte gUnk_Sio_0203DD0C - - THUMB_FUNC_END sub_8043164 - - THUMB_FUNC_START sub_80431B4 -sub_80431B4: @ 0x080431B4 - push {r4, r5, lr} - sub sp, #8 - adds r5, r0, #0 - ldr r1, _08043208 @ gUnknown_080D9D4D - mov r0, sp - movs r2, #8 - bl memcpy - movs r1, #0 - movs r4, #4 - adds r0, r5, #0 - adds r0, #0x26 -_080431CC: - strh r1, [r0] - subs r0, #2 - subs r4, #1 - cmp r4, #0 - bge _080431CC - movs r4, #0 -_080431D8: - cmp r4, #4 - beq _080431FA - adds r0, r5, #0 - adds r0, #0x28 - adds r0, r0, r4 - ldrb r0, [r0] - cmp r0, #0 - beq _080431FA - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - movs r0, #0xff - lsls r0, r0, #8 - orrs r1, r0 - adds r0, r5, #0 - bl UnitAddItem -_080431FA: - adds r4, #1 - cmp r4, #7 - ble _080431D8 - add sp, #8 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08043208: .4byte gUnknown_080D9D4D - - THUMB_FUNC_END sub_80431B4 - - THUMB_FUNC_START SioPlaySoundEffect -SioPlaySoundEffect: @ 0x0804320C - push {r4, lr} - sub sp, #8 - adds r4, r0, #0 - ldr r1, _0804323C @ gUnknown_080D9D56 - mov r0, sp - movs r2, #8 - bl memcpy - ldr r0, _08043240 @ gPlaySt - adds r0, #0x41 - ldrb r0, [r0] - lsls r0, r0, #0x1e - cmp r0, #0 - blt _08043232 - lsls r0, r4, #1 - add r0, sp - ldrh r0, [r0] - bl m4aSongNumStart -_08043232: - add sp, #8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804323C: .4byte gUnknown_080D9D56 -_08043240: .4byte gPlaySt - - THUMB_FUNC_END SioPlaySoundEffect diff --git a/data/const_data_D8714.s b/data/const_data_D8714.s index b016aad1d..01ef92a91 100644 --- a/data/const_data_D8714.s +++ b/data/const_data_D8714.s @@ -1,32 +1,8 @@ .section .rodata - .global gTacticianTextConf -gTacticianTextConf: @ 0x080D8740 - .incbin "baserom.gba", 0xD8740, 0x155E - - .global gUnknown_080D9C9E -gUnknown_080D9C9E: @ 0x080D9C9E - .incbin "baserom.gba", 0xD9C9E, 0x96 - - .global gUnknown_080D9D34 -gUnknown_080D9D34: @ 0x080D9D34 - .incbin "baserom.gba", 0xD9D34, 0x19 - - .global gUnknown_080D9D4D -gUnknown_080D9D4D: @ 0x080D9D4D - .incbin "baserom.gba", 0xD9D4D, 0x9 - - .global gUnknown_080D9D56 -gUnknown_080D9D56: @ 0x080D9D56 - .incbin "baserom.gba", 0xD9D56, 0x8 - - .global gUnknown_080D9D5E -gUnknown_080D9D5E: @ 0x080D9D5E - .incbin "baserom.gba", 0xD9D5E, 0x3 - - .global gUnknown_080D9D61 -gUnknown_080D9D61: @ 0x080D9D61 - .incbin "baserom.gba", 0xD9D61, 0x83 + .global post_gUnknown_080D9D61 +post_gUnknown_080D9D61: + .incbin "baserom.gba", 0xD9D70, 0xD9DE4 - 0xD9D70 .global gUnknown_080D9DE4 gUnknown_080D9DE4: @ 0x080D9DE4 diff --git a/data/const_data_sio.s b/data/const_data_sio.s new file mode 100644 index 000000000..ae4d574ab --- /dev/null +++ b/data/const_data_sio.s @@ -0,0 +1,13 @@ + .section .rodata + + .global gTacticianTextConf +gTacticianTextConf: @ 0x080D8740 + .incbin "baserom.gba", 0xD8740, 0x155E + + .global gUnknown_080D9C9E +gUnknown_080D9C9E: @ 0x080D9C9E + .incbin "baserom.gba", 0xD9C9E, 0x96 + + .global gUnknown_080D9D34 +gUnknown_080D9D34: @ 0x080D9D34 + .incbin "baserom.gba", 0xD9D34, 0x14 diff --git a/data/sio_main.s b/data/sio_main.s index e02cb3268..f7f2f26b3 100644 --- a/data/sio_main.s +++ b/data/sio_main.s @@ -1,86 +1,5 @@ - .section .rodata - .incbin "baserom.gba", 0xD8724, 0x1C - .section .data - .global ProcScr_SIOCON -ProcScr_SIOCON: @ 0x085A932C - @ PROC_NAME - .short 0x1, 0x0 - .word 0x80d8724 - @ PROC_15 - .short 0x15, 0x0 - .word 0x0 - @ PROC_CALL - .short 0x2, 0x0 - .word sub_8042E0C - @ PROC_REPEAT - .short 0x3, 0x0 - .word sub_8042E2C - @ PROC_END - .short 0x0, 0x0 - .word 0x0 - - - .global ProcScr_SIOVSYNC -ProcScr_SIOVSYNC: @ 0x085A9354 - @ PROC_NAME - .short 0x1, 0x0 - .word 0x80d872c - @ PROC_15 - .short 0x15, 0x0 - .word 0x0 - @ PROC_YIELD - .short 0xe, 0x0 - .word 0x0 - @ PROC_REPEAT - .short 0x3, 0x0 - .word sub_8041C1C - @ PROC_END - .short 0x0, 0x0 - .word 0x0 - - - .global ProcScr_SIOMAIN -ProcScr_SIOMAIN: @ 0x085A937C - @ PROC_NAME - .short 0x1, 0x0 - .word 0x80d8738 - @ PROC_15 - .short 0x15, 0x0 - .word 0x0 - @ PROC_REPEAT - .short 0x3, 0x0 - .word sub_8041DC4 - @ PROC_END - .short 0x0, 0x0 - .word 0x0 - .4byte gGenericBuffer - - .global gUnknown_085A93A0 -gUnknown_085A93A0: @ 0x085A93A0 - @ PROC_CALL - .short 0x2, 0x0 - .word sub_8042EB4 - @ PROC_REPEAT - .short 0x3, 0x0 - .word sub_8042EF0 - @ PROC_END - .short 0x0, 0x0 - .word 0x0 - - - .global ProcScr_HOLD -ProcScr_HOLD: @ 0x085A93B8 - @ PROC_NAME - .short 0x1, 0x0 - .word 0x80d9d48 - @ PROC_REPEAT - .short 0x3, 0x0 - .word sub_8042FE0 - @ PROC_END - .short 0x0, 0x0 - .word 0x0 .incbin "baserom.gba", 0x5A93D0, 0x10 .global gUnknown_085A93E0 diff --git a/include/sio.h b/include/sio.h index a4f7b0f2c..1e0cc496a 100644 --- a/include/sio.h +++ b/include/sio.h @@ -39,23 +39,40 @@ struct TacticianTextConf { extern const struct TacticianTextConf gTacticianTextConf[]; struct TacticianTextConf * GetTacticianTextConf(s16); -u32 SioStrCpy(void const * src, void * dst); +u32 SioStrCpy(u8 const * src, u8 * dst); void SioDrawNumber(struct Text * text, int x, int color, int number); -// ??? sub_8042E0C(???); -// ??? sub_8042E2C(???); +void SioInit(void); +void SioPollingMsgAndAck(ProcPtr proc); // ??? SetBmStLinkArenaFlag(???); // ??? UnsetBmStLinkArenaFlag(???); bool CheckInLinkArena(void); // This function is defined as different types by files, maybe a bug. -void sub_8042EA8(); -// ??? sub_8042EB4(???); -// ??? sub_8042EF0(???); -// ??? sub_8042F44(???); -// ??? sub_8042F58(???); -// ??? sub_8042F84(???); -// ??? sub_8042F98(???); -// ??? sub_8042FE0(???); -// ??? sub_8042FFC(???); -// ??? sub_804302C(???); +void sub_8042EA8(void); + +struct Proc_Sio_085A93A0 { + PROC_HEADER; + + STRUCT_PAD(0x29, 0x58); + + /* 38 */ u32 timer; +}; + +void sub_8042EB4(struct Proc_Sio_085A93A0 * proc); +void sub_8042EF0(struct Proc_Sio_085A93A0 * proc); +void sub_8042F44(void); +void sub_8042F58(ProcPtr proc); +void sub_8042F84(void); +void sub_8042F98(ProcPtr proc); + +struct ProcSioHold { + PROC_HEADER; + + int x; + int y, y_min, y_max; +}; + +void SioHold_Loop(struct ProcSioHold * proc); +// ??? StartSioHold(???); +// ??? EndSioHold(???); // ??? sub_804303C(???); void ClearSioBG(void); // ??? sub_804309C(???); @@ -433,7 +450,7 @@ ProcPtr NewProc_085AAAC4(ProcPtr parent, int a, int b); // extern ??? gLinkArenaSt // extern ??? gUnknown_0203DA30 // extern ??? gUnk_Sio_0203DA78 -// extern ??? gUnk_Sio_0203DA88 +extern struct Text gUnk_Sio_0203DA88[]; extern struct Text Texts_0203DAB0; // extern ??? gUnk_Sio_0203DAC0 // extern ??? gUnk_Sio_0203DAC5 @@ -444,7 +461,7 @@ extern struct Font Font_0203DB64; // extern ??? gUnk_Sio_0203DB7C // extern ??? gUnk_Sio_0203DC44 // extern ??? gUnk_Sio_0203DC48 -// extern ??? gUnk_Sio_0203DD0C +extern struct Text gSioTexts[]; extern struct Text Text_0203DB14; extern u8 gUnk_Sio_0203DD24; // extern ??? gUnk_Sio_0203DD28 @@ -510,3 +527,16 @@ extern s16 gUnknown_080D9C9E[]; // extern ??? gUnknown_080DA26A // extern ??? gUnknown_080DA27E // extern ??? gUnknown_080DA2B0 + +extern CONST_DATA struct ProcCmd ProcScr_SIOCON[]; +extern CONST_DATA struct ProcCmd ProcScr_SIOVSYNC[]; +extern CONST_DATA struct ProcCmd ProcScr_SIOMAIN[]; +extern CONST_DATA u8 * gpSioUnkBuffer; +extern CONST_DATA struct ProcCmd gUnknown_085A93A0[]; +extern CONST_DATA struct ProcCmd ProcScr_HOLD[]; +// extern ??? gUnknown_085A93E0 +// extern ??? gUnknown_085A93F0 +// extern ??? gUnknown_085A94A0 +// extern ??? gUnknown_085A94AC +// extern ??? ProcScr_TacticianNameSelection +// extern ??? gUnknown_085A96D4 diff --git a/include/sio_core.h b/include/sio_core.h index f2c1a32a9..b38479fd2 100644 --- a/include/sio_core.h +++ b/include/sio_core.h @@ -4,6 +4,7 @@ #include "global.h" #include "proc.h" +#include "fontgrp.h" #define SIO_MAX_PACKET 0x80 @@ -132,18 +133,18 @@ struct SioSt #define SIO_MAX_DATA (SIO_MAX_PACKET - offsetof(struct SioData, bytes)) -int sub_80415B0(void); -int sub_80416D0(void); +int SioPollingMsg(void); +int GetSioIndex(void); void sub_80416E0(u16 arg_0, u16 sioCnt, u16 arg_2); void sub_8041718(void); void sub_8041898(void); void SioRegisterIrq(void); void SioReleaseIrq(void); void SioHandleIrq_Serial(void); -void sub_8041C1C(void); +void SioVsync_Loop(void); void SioHandleIrq_Timer3(void); void sub_8041D8C(int num); -void sub_8041DC4(void); +void SioMain_Loop(void); void sub_8042138(void); int sub_804213C(void); int sub_8042168(void); @@ -198,7 +199,10 @@ struct LinkArenaStMaybe u8 unk_00; STRUCT_PAD(0x01, 0x03); u8 unk_03; - STRUCT_PAD(0x04, 0x9C); + u8 unk_04; + STRUCT_PAD(0x05, 0x0C); + /* 0C */ struct Text texts[11]; + STRUCT_PAD(0x64, 0x9C); u8 unk_9C[5]; u8 unk_A1[15][15]; }; diff --git a/include/variables.h b/include/variables.h index 90db76106..39bf3d21f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -538,17 +538,9 @@ extern u16 CONST_DATA Pal_EventCursorShinning[]; // extern ??? gUnknown_085A92E0 // extern ??? gUnknown_085A92E4 // extern ??? gUnknown_085A9304 -// extern ??? ProcScr_SIOCON -// extern ??? ProcScr_SIOVSYNC -// extern ??? ProcScr_SIOMAIN -// extern ??? gUnknown_085A93A0 -// extern ??? ProcScr_HOLD -// extern ??? gUnknown_085A93E0 -// extern ??? gUnknown_085A93F0 -// extern ??? gUnknown_085A94A0 -// extern ??? gUnknown_085A94AC -// extern ??? ProcScr_TacticianNameSelection -// extern ??? gUnknown_085A96D4 + +/* sio.h */ + // extern ??? gUnknown_085A96E4 // extern ??? gUnknown_085A96F4 // extern ??? gUnknown_085A9774 diff --git a/ldscript.txt b/ldscript.txt index 6a45e0dae..c582f24cb 100644 --- a/ldscript.txt +++ b/ldscript.txt @@ -239,7 +239,7 @@ SECTIONS . = 0x0203DB7C - __ewram_overlay_end; gUnk_Sio_0203DB7C = .; . = 0x0203DC44 - __ewram_overlay_end; gUnk_Sio_0203DC44 = .; . = 0x0203DC48 - __ewram_overlay_end; gUnk_Sio_0203DC48 = .; - . = 0x0203DD0C - __ewram_overlay_end; gUnk_Sio_0203DD0C = .; + . = 0x0203DD0C - __ewram_overlay_end; gSioTexts = .; . = 0x0203DD1C - __ewram_overlay_end; Text_0203DB14 = .; . = 0x0203DD24 - __ewram_overlay_end; gUnk_Sio_0203DD24 = .; . = 0x0203DD28 - __ewram_overlay_end; gUnk_Sio_0203DD28 = .; @@ -395,7 +395,8 @@ SECTIONS src/cp_staff.o(.text); src/cpextra_80407F0.o(.text); src/sio_core.o(.text); - asm/sio_utils.o(.text); + src/sio_main.o(.text); + src/sio_main2.o(.text); asm/code_sio_8042DC8.o(.text); src/sio_tactician.o(.text); asm/sio_tactician.o(.text); @@ -707,7 +708,9 @@ SECTIONS . = ALIGN(4); src/cp_staff.o(.rodata); . = ALIGN(4); src/cpextra_80407F0.o(.rodata); . = ALIGN(4); src/sio_core.o(.rodata); - . = ALIGN(4); data/sio_main.o(.rodata); + . = ALIGN(4); src/sio_main.o(.rodata); + . = ALIGN(4); data/const_data_sio.o(.rodata); + . = ALIGN(4); src/sio_main2.o(.rodata); . = ALIGN(4); data/const_data_D8714.o(.rodata); . = ALIGN(4); src/uiutils.o(.rodata); . = ALIGN(4); src/uimenu.o(.rodata); @@ -941,6 +944,8 @@ SECTIONS . = ALIGN(4); src/cp_staff.o(.data); . = ALIGN(4); src/cpextra_80407F0.o(.data); . = ALIGN(4); src/sio_core.o(.data); + . = ALIGN(4); src/sio_main.o(.data); + . = ALIGN(4); src/sio_main2.o(.data); . = ALIGN(4); data/sio_main.o(.data); . = ALIGN(4); data/sio_tactician.o(.data); . = ALIGN(4); data/data_5A92E0.o(.data); diff --git a/src/sio_core.c b/src/sio_core.c index 13f69f494..6249e8c57 100644 --- a/src/sio_core.c +++ b/src/sio_core.c @@ -59,7 +59,7 @@ struct SioRegs #define SIO ((struct SioRegs *)(®_SIOCNT)) -int sub_80415B0(void) +int SioPollingMsg(void) { u16 siocnt; @@ -117,7 +117,7 @@ int sub_80415B0(void) } } -int sub_80416D0(void) +int GetSioIndex(void) { return (REG_SIOCNT & SIO_ID) >> 4; // TODO: shift constant } @@ -366,7 +366,7 @@ void SioHandleIrq_Serial(void) gUnknown_03004E70 = 0; } -void sub_8041C1C(void) +void SioVsync_Loop(void) { int i; u32 len; @@ -467,7 +467,7 @@ void sub_8041D8C(int num) PlaySoundEffect(table[num]); } -void sub_8041DC4(void) +void SioMain_Loop(void) { int i, j; diff --git a/src/sio_main.c b/src/sio_main.c new file mode 100644 index 000000000..dbf77b848 --- /dev/null +++ b/src/sio_main.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "fontgrp.h" +#include "hardware.h" +#include "uiutils.h" +#include "sio.h" +#include "sio_core.h" + +u32 SioStrCpy(u8 const * src, u8 * dst) +{ + u32 ret = 0; + while (*src != '\0') + { + *dst++ = *src++; + ret++; + } + *dst = *src; + return ret; +} + +void SioDrawNumber(struct Text * text, int x, int color, int number) +{ + Text_SetCursor(text, x); + Text_SetColor(text, color); + Text_DrawNumber(text, number); +} + +struct ProcCmd CONST_DATA ProcScr_SIOCON[] = { + PROC_NAME("SIOCON"), + PROC_15, + PROC_CALL(SioInit), + PROC_REPEAT(SioPollingMsgAndAck), + PROC_END, +}; + +void SioInit(void) +{ + SioRegisterIrq(); + sub_8041898(); + + gSioSt->unk_001 = 1; + gSioSt->unk_004 = 0; +} + +void SioPollingMsgAndAck(ProcPtr proc) +{ + u16 magic = 0x2586; + if (SioPollingMsg() != -1) + { + gSioSt->unk_011 = 0; + gSioSt->unk_004 = 5; + gSioSt->selfId = GetSioIndex(); + SioSend16(&magic, -1); + Proc_Break(proc); + } +} + +struct ProcCmd CONST_DATA ProcScr_SIOVSYNC[] = { + PROC_NAME("SIOVSYNC"), + PROC_15, + PROC_YIELD, + PROC_REPEAT(SioVsync_Loop), + PROC_END, +}; + +struct ProcCmd CONST_DATA ProcScr_SIOMAIN[] = { + PROC_NAME("SIOMAIN"), + PROC_15, + PROC_REPEAT(SioMain_Loop), + PROC_END, +}; + +CONST_DATA u8 * gpSioUnkBuffer = gGenericBuffer; + +void SetBmStLinkArenaFlag(void) +{ + gBmSt.gameStateBits |= BM_FLAG_LINKARENA; +} + +void UnsetBmStLinkArenaFlag(void) +{ + gBmSt.gameStateBits &= ~BM_FLAG_LINKARENA; +} + +bool CheckInLinkArena(void) +{ + return !!(gBmSt.gameStateBits & BM_FLAG_LINKARENA); +} + +void sub_8042EA8(void) +{ + gLinkArenaSt.unk_04 = -1; +} + +struct ProcCmd CONST_DATA gUnknown_085A93A0[] = { + PROC_CALL(sub_8042EB4), + PROC_REPEAT(sub_8042EF0), + PROC_END, +}; + +void sub_8042EB4(struct Proc_Sio_085A93A0 * proc) +{ + SetBlendTargetA(0, 0, 1, 0, 0); + SetBlendTargetB(1, 1, 0, 1, 1); + SetBlendConfig(BLEND_EFFECT_NONE, 0, 0, 0); + + proc->timer = 0; +} + +void sub_8042EF0(struct Proc_Sio_085A93A0 * proc) +{ + int time = (++proc->timer) % 0x40; + + if (time >= 0x20) + time = 0x40 - time; + + if (time > 0x10) + time = 0x10; + + SetBlendTargetA(0, 0, 1, 0, 0); + SetBlendTargetB(1, 1, 0, 1, 1); + SetBlendAlpha(time, 0x10 - time); +} + +void sub_8042F44(void) +{ + gLCDControlBuffer.bgoffset[BG_1].x++; + gLCDControlBuffer.bgoffset[BG_2].x--; +} + +void sub_8042F58(ProcPtr proc) +{ + gSioSt->unk_030 = 0x1288; + if (gSioSt->unk_1B7E != 0) + Proc_Break(proc); +} + +void sub_8042F84(void) +{ + gSioSt->unk_00A = 1 << gSioSt->selfId; +} + +void sub_8042F98(ProcPtr proc) +{ + gSioMsgBuf.kind = 0x89; + gSioMsgBuf.sender = gSioSt->selfId; + gSioMsgBuf.param = 0; + + SioSend(&gSioMsgBuf, 4); + + if ((gSioSt->unk_00A & gSioSt->unk_009) == gSioSt->unk_009) + { + gSioSt->unk_00A = 1 << gSioSt->selfId; + Proc_Break(proc); + } +} + diff --git a/src/sio_main2.c b/src/sio_main2.c new file mode 100644 index 000000000..8252e3a82 --- /dev/null +++ b/src/sio_main2.c @@ -0,0 +1,144 @@ +#include "global.h" +#include "fontgrp.h" +#include "hardware.h" +#include "uiutils.h" +#include "soundwrapper.h" +#include "bmunit.h" +#include "bmitem.h" +#include "constants/items.h" +#include "sio.h" +#include "sio_core.h" + +struct ProcCmd CONST_DATA ProcScr_HOLD[] = { + PROC_NAME("HOLD"), + PROC_REPEAT(SioHold_Loop), + PROC_END, +}; + +void SioHold_Loop(struct ProcSioHold * proc) +{ + if (proc->y < proc->y_max && proc->y > proc->y_min) + DisplayFrozenUiHand(proc->x, proc->y); +} + +ProcPtr StartSioHold(ProcPtr parent, int x, int y, int y_max, int y_min) +{ + struct ProcSioHold * proc; + proc = Proc_Start(ProcScr_HOLD, parent); + proc->x = x; + proc->y = y; + proc->y_max = y_max; + proc->y_min = y_min; + return proc; +} + +void EndSioHold(void) +{ + Proc_EndEach(ProcScr_HOLD); +} + +void sub_804303C(ProcPtr proc, int num) +{ + ((struct Proc *)proc)->y += num; +} + +void ClearSioBG(void) +{ + BG_SetPosition(BG_0, 0, 0); + BG_SetPosition(BG_1, 0, 0); + BG_SetPosition(BG_2, 0, 0); + BG_SetPosition(BG_3, 0, 0); + + BG_Fill(gBG0TilemapBuffer, 0); + BG_Fill(gBG1TilemapBuffer, 0); + BG_Fill(gBG2TilemapBuffer, 0); + + BG_EnableSyncByMask(BG0_SYNC_BIT | BG1_SYNC_BIT | BG2_SYNC_BIT); +} + +void sub_804309C(void) +{ + BG_SetPosition(BG_0, 0, 0); + BG_SetPosition(BG_1, 0, 0); + BG_SetPosition(BG_2, 0, 0); + BG_SetPosition(BG_3, 0, 0); + + BG_Fill(gBG0TilemapBuffer, 0); + BG_Fill(gBG1TilemapBuffer, 0); + BG_Fill(gBG2TilemapBuffer, 0); + BG_Fill(gBG3TilemapBuffer, 0); + + BG_EnableSyncByMask(BG0_SYNC_BIT | BG1_SYNC_BIT | BG2_SYNC_BIT | BG3_SYNC_BIT); +} + +void sub_8043100(int msg, int text_idx) +{ + struct Text * text = &gSioTexts[text_idx]; + + ClearText(text); + + if (msg < 0) + { + PutText(text, TILEMAP_LOCATED(gBG2TilemapBuffer, 1, text_idx * 2 + 0x10)); + } + else + { + Text_DrawString(text, GetStringFromIndex(msg)); + PutText(text, TILEMAP_LOCATED(gBG2TilemapBuffer, 1, text_idx * 2 + 0x10)); + BG_EnableSyncByMask(BG2_SYNC_BIT); + } +} + +void sub_8043164(void) +{ + int i; + for (i = 0; i < 6; i++) + InitText(&gUnk_Sio_0203DA88[i], 12); + + for (i = 0; i < 11; i++) + InitText(&gLinkArenaSt.texts[i], 12); + + for (i = 0; i < 2; i++) + InitText(&gSioTexts[i], 24); +} + +void sub_80431B4(struct Unit * unit) +{ + int i; + u8 item_list[] = { + ITEM_SWORD_IRON, + ITEM_LANCE_IRON, + ITEM_AXE_IRON, + ITEM_BOW_IRON, + ITEM_NONE, + ITEM_ANIMA_FIRE, + ITEM_LIGHT_LIGHTNING, + ITEM_DARK_FLUX, + }; + + for (i = 0; i < UNIT_ITEM_COUNT; i++) + unit->items[i] = 0; + + for (i = 0; i < 8; i++) + { + if (i == 4) + continue; + + if (unit->ranks[i] == 0) + continue; + + UnitAddItem(unit, item_list[i] | (0xFF << 8)); + } +} + +void SioPlaySoundEffect(int idx) +{ + u16 sfx_list[] = {0x6C, 0x6B, 0x6A, 0x66}; + PlaySoundEffect(sfx_list[idx]); +} + +u8 const gUnknown_080D9D5E[] = {1, 2, 4}; +u8 const gUnknown_080D9D61[] = { + 0x02, 0x06, 0x0D, 0x13, 0x14, 0xFE, 0x14, 0x13, 0x0D, 0x06, 0x02, 0x00, 0xFF, 0x01, 0x00, + // ... +}; From cd3f93a8c8cbbae8f070bb2b6978573e1165527c Mon Sep 17 00:00:00 2001 From: MokhaLeee Date: Mon, 18 Mar 2024 11:14:08 +0800 Subject: [PATCH 2/2] decomp to sub_8043308 --- asm/code_sio.s | 20 +++---- asm/code_sio_8042DC8.s | 116 ++-------------------------------------- data/sio_main.s | 22 +++----- include/bmsave.h | 4 +- include/sio.h | 39 +++++++++++--- include/variables.h | 12 ----- ldscript.txt | 2 +- src/bmsave-multiarena.c | 8 +-- src/sio_main2.c | 58 ++++++++++++++++++++ 9 files changed, 117 insertions(+), 164 deletions(-) diff --git a/asm/code_sio.s b/asm/code_sio.s index acc3751b7..e049a834b 100644 --- a/asm/code_sio.s +++ b/asm/code_sio.s @@ -1177,7 +1177,7 @@ _08045B4C: bl SetUnitStatus movs r1, #0 strb r1, [r5, #0x1b] - ldr r0, _08045B88 @ gUnk_Sio_0203DB10 + ldr r0, _08045B88 @ gSioSaveConfig ldrb r1, [r0] movs r0, #4 ands r0, r1 @@ -1191,7 +1191,7 @@ _08045B78: .4byte gUnknown_080D9E44 _08045B7C: .4byte gLinkArenaSt _08045B80: .4byte gUnk_Sio_0203DAC5 _08045B84: .4byte gUnk_Sio_0203DDB4 -_08045B88: .4byte gUnk_Sio_0203DB10 +_08045B88: .4byte gSioSaveConfig _08045B8C: adds r0, r5, #0 bl sub_804D40C @@ -1206,7 +1206,7 @@ _08045BA0: strb r4, [r5, #0xb] cmp r6, #0 beq _08045BB8 - ldr r0, _08045C04 @ gUnk_Sio_0203DB10 + ldr r0, _08045C04 @ gSioSaveConfig ldrb r1, [r0] movs r0, #1 ands r0, r1 @@ -1256,7 +1256,7 @@ _08045BCC: pop {r0} bx r0 .align 2, 0 -_08045C04: .4byte gUnk_Sio_0203DB10 +_08045C04: .4byte gSioSaveConfig _08045C08: .4byte gUnk_Sio_0203DD90 _08045C0C: .4byte gSioSt _08045C10: .4byte gLinkArenaSt @@ -4803,7 +4803,7 @@ sub_8047928: @ 0x08047928 beq _08047952 movs r0, #1 bl SioPlaySoundEffect - ldr r0, _08047A48 @ gUnk_Sio_0203DB10 + ldr r0, _08047A48 @ gSioSaveConfig bl WriteMultiArenaSaveConfig adds r0, r6, #0 bl Proc_Break @@ -4929,7 +4929,7 @@ _08047A3A: bx r0 .align 2, 0 _08047A44: .4byte gKeyStatusPtr -_08047A48: .4byte gUnk_Sio_0203DB10 +_08047A48: .4byte gSioSaveConfig _08047A4C: .4byte gUnknown_080D9E50 _08047A50: .4byte 0x00000745 @@ -5063,7 +5063,7 @@ sub_8047B34: @ 0x08047B34 push {r4, r5, r6, r7, lr} sub sp, #4 adds r6, r0, #0 - ldr r4, _08047BC4 @ gUnk_Sio_0203DB10 + ldr r4, _08047BC4 @ gSioSaveConfig adds r0, r4, #0 bl ReadMultiArenaSaveConfig ldrb r0, [r4] @@ -5122,7 +5122,7 @@ sub_8047B34: @ 0x08047B34 movs r0, #3 b _08047BDC .align 2, 0 -_08047BC4: .4byte gUnk_Sio_0203DB10 +_08047BC4: .4byte gSioSaveConfig _08047BC8: .4byte gUnknown_085AB358 _08047BCC: .4byte 0x06014800 _08047BD0: .4byte gUnknown_085ADBE8 @@ -5350,7 +5350,7 @@ sub_8047D88: @ 0x08047D88 push {r5, r6, r7} sub sp, #4 adds r6, r0, #0 - ldr r4, _08047E20 @ gUnk_Sio_0203DB10 + ldr r4, _08047E20 @ gSioSaveConfig adds r0, r4, #0 bl ReadMultiArenaSaveConfig ldrb r0, [r4] @@ -5409,7 +5409,7 @@ sub_8047D88: @ 0x08047D88 movs r0, #3 b _08047E38 .align 2, 0 -_08047E20: .4byte gUnk_Sio_0203DB10 +_08047E20: .4byte gSioSaveConfig _08047E24: .4byte gUnknown_085AB358 _08047E28: .4byte 0x06014800 _08047E2C: .4byte gUnknown_085ADBE8 diff --git a/asm/code_sio_8042DC8.s b/asm/code_sio_8042DC8.s index e0c1cd335..329663b78 100644 --- a/asm/code_sio_8042DC8.s +++ b/asm/code_sio_8042DC8.s @@ -2,124 +2,16 @@ .SYNTAX UNIFIED - THUMB_FUNC_START sub_8043244 -sub_8043244: @ 0x08043244 - push {r4, lr} - ldr r4, _08043264 @ gUnk_Sio_0203DB10 - adds r0, r4, #0 - bl ReadMultiArenaSaveConfig - ldrb r0, [r4] - movs r1, #8 - orrs r0, r1 - strb r0, [r4] - adds r0, r4, #0 - bl WriteMultiArenaSaveConfig - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08043264: .4byte gUnk_Sio_0203DB10 - - THUMB_FUNC_END sub_8043244 - - THUMB_FUNC_START sub_8043268 -sub_8043268: @ 0x08043268 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r0, _0804328C @ gKeyStatusPtr - ldr r0, [r0] - ldrh r4, [r0, #8] - adds r3, r4, #0 - cmp r3, #0 - bne _08043298 - ldr r1, _08043290 @ gUnk_Sio_0203DD4C - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - cmp r0, #0x3b - ble _080432EC - ldr r0, _08043294 @ gUnknown_0300180C - str r3, [r1] - str r3, [r0] - b _080432EC - .align 2, 0 -_0804328C: .4byte gKeyStatusPtr -_08043290: .4byte gUnk_Sio_0203DD4C -_08043294: .4byte gUnknown_0300180C -_08043298: - ldr r0, _080432CC @ gUnk_Sio_0203DD4C - movs r6, #0 - str r6, [r0] - ldr r1, _080432D0 @ gUnk_Sio_0203DD2C - ldr r2, _080432D4 @ gUnknown_03001808 - ldr r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - strh r4, [r0] - ldr r1, _080432D8 @ gUnknown_0300180C - ldr r4, [r1] - lsls r0, r4, #1 - adds r0, r0, r5 - ldrh r0, [r0] - cmp r3, r0 - bne _080432E0 - adds r0, r4, #1 - str r0, [r1] - lsls r0, r0, #1 - adds r0, r0, r5 - ldrh r1, [r0] - ldr r0, _080432DC @ 0x0000FFFF - cmp r1, r0 - bne _080432E2 - movs r0, #1 - b _080432EE - .align 2, 0 -_080432CC: .4byte gUnk_Sio_0203DD4C -_080432D0: .4byte gUnk_Sio_0203DD2C -_080432D4: .4byte gUnknown_03001808 -_080432D8: .4byte gUnknown_0300180C -_080432DC: .4byte 0x0000FFFF -_080432E0: - str r6, [r1] -_080432E2: - ldr r0, [r2] - adds r0, #1 - movs r1, #0xf - ands r0, r1 - str r0, [r2] -_080432EC: - movs r0, #0 -_080432EE: - pop {r4, r5, r6} - pop {r1} - bx r1 - - THUMB_FUNC_END sub_8043268 - - THUMB_FUNC_START sub_80432F4 -sub_80432F4: @ 0x080432F4 - push {lr} - ldr r0, _08043304 @ gUnknown_085A93F0 - bl sub_8043268 - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - pop {r1} - bx r1 - .align 2, 0 -_08043304: .4byte gUnknown_085A93F0 - - THUMB_FUNC_END sub_80432F4 - THUMB_FUNC_START sub_8043308 sub_8043308: @ 0x08043308 push {lr} adds r1, r0, #0 - ldr r0, _08043318 @ gUnknown_085A94AC + ldr r0, _08043318 @ ProcScr_Sio_085A94AC bl Proc_StartBlocking pop {r0} bx r0 .align 2, 0 -_08043318: .4byte gUnknown_085A94AC +_08043318: .4byte ProcScr_Sio_085A94AC THUMB_FUNC_END sub_8043308 @@ -1462,7 +1354,7 @@ sub_8043D8C: @ 0x08043D8C mov r9, r0 ldr r1, [r7, #0x2c] str r1, [sp, #4] - ldr r0, _08043DD0 @ gUnknown_085A93E0 + ldr r0, _08043DD0 @ gSioList_085A93E0 bl sub_8043268 lsls r0, r0, #0x18 cmp r0, #0 @@ -1483,7 +1375,7 @@ sub_8043D8C: @ 0x08043D8C bl Proc_Goto b _08044270 .align 2, 0 -_08043DD0: .4byte gUnknown_085A93E0 +_08043DD0: .4byte gSioList_085A93E0 _08043DD4: .4byte gUnk_Sio_0203DB7C _08043DD8: ldr r1, [sp, #4] diff --git a/data/sio_main.s b/data/sio_main.s index f7f2f26b3..6c4ef57f6 100644 --- a/data/sio_main.s +++ b/data/sio_main.s @@ -1,18 +1,6 @@ .section .data - .incbin "baserom.gba", 0x5A93D0, 0x10 - - .global gUnknown_085A93E0 -gUnknown_085A93E0: @ 0x085A93E0 - .incbin "baserom.gba", 0x5A93E0, 0x10 - - .global gUnknown_085A93F0 -gUnknown_085A93F0: @ 0x085A93F0 -@ Replacing .incbin "baserom.gba", 0x5A93F0, 0xB0 - .4byte 0x200020 - .4byte 0x100010 - .4byte 0x2000200 - .4byte 0xffff0008 +Sio_UnitConf_1: .4byte 0x73c0001 .4byte 0x1 .4byte 0x766 @@ -37,6 +25,8 @@ gUnknown_085A93F0: @ 0x085A93F0 .4byte 0x0 .4byte 0x0 .4byte 0x0 + +Sio_UnitConf_2: .4byte 0x7410002 .4byte 0x100 .4byte 0x76c @@ -56,10 +46,10 @@ gUnknown_085A93F0: @ 0x085A93F0 .global gUnknown_085A94A0 gUnknown_085A94A0: @ 0x085A94A0 - .4byte gUnknown_085A93F0 + 0x10, gUnknown_085A93F0 + 0x70, gUnknown_085A93F0 + 0x70 + .4byte Sio_UnitConf_1, Sio_UnitConf_2, Sio_UnitConf_2 - .global gUnknown_085A94AC -gUnknown_085A94AC: @ 0x085A94AC + .global ProcScr_Sio_085A94AC +ProcScr_Sio_085A94AC: @ 0x085A94AC @ PROC_YIELD .short 0xe, 0x0 .word 0x0 diff --git a/include/bmsave.h b/include/bmsave.h index fe71216ad..ad858b504 100755 --- a/include/bmsave.h +++ b/include/bmsave.h @@ -603,8 +603,8 @@ void WriteMultiArenaSaveTeam(int team, struct Unit *units_src, char const *name_ bool ReadMultiArenaSaveTeam(int team, struct Unit *units_dst, char *name_dst); void WriteMultiArenaSaveRankings(struct MultiArenaRankingEnt const *src); void ReadMultiArenaSaveRankings(struct MultiArenaRankingEnt *dst); -void WriteMultiArenaSaveConfig(u16 const *config_src); -void ReadMultiArenaSaveConfig(u16 *config_dst); +void WriteMultiArenaSaveConfig(void const * config_src); +void ReadMultiArenaSaveConfig(void * config_dst); bool IsMultiArenaSaveReady(); void LoadAndVerfySuspendSave(); // ??? ReadExtraMapSaveHead(???); diff --git a/include/sio.h b/include/sio.h index 1e0cc496a..b12a0a83d 100644 --- a/include/sio.h +++ b/include/sio.h @@ -39,6 +39,18 @@ struct TacticianTextConf { extern const struct TacticianTextConf gTacticianTextConf[]; struct TacticianTextConf * GetTacticianTextConf(s16); +enum sio_save_config_bitfile { + SIO_SAVE_CONF_B3 = 1 << 3, +}; + +struct SioSaveConf { + u8 _unk0_ : 3; + u8 _unk3_ : 1; + u8 _unk4_ : 4; + u8 _unk8_; +}; +extern struct SioSaveConf gSioSaveConfig; + u32 SioStrCpy(u8 const * src, u8 * dst); void SioDrawNumber(struct Text * text, int x, int color, int number); void SioInit(void); @@ -81,7 +93,7 @@ void ClearSioBG(void); // ??? sub_80431B4(???); void SioPlaySoundEffect(int); // ??? sub_8043244(???); -// ??? sub_8043268(???); +bool sub_8043268(const u16 * list); // ??? sub_80432F4(???); // ??? sub_8043308(???); // ??? sub_804331C(???); @@ -454,7 +466,7 @@ extern struct Text gUnk_Sio_0203DA88[]; extern struct Text Texts_0203DAB0; // extern ??? gUnk_Sio_0203DAC0 // extern ??? gUnk_Sio_0203DAC5 -// extern ??? gUnk_Sio_0203DB10 + extern struct Text Texts_0203DB14[10]; // extern ??? gUnk_Sio_0203DB1C extern struct Font Font_0203DB64; @@ -465,8 +477,8 @@ extern struct Text gSioTexts[]; extern struct Text Text_0203DB14; extern u8 gUnk_Sio_0203DD24; // extern ??? gUnk_Sio_0203DD28 -// extern ??? gUnk_Sio_0203DD2C -// extern ??? gUnk_Sio_0203DD4C +extern u16 gUnk_Sio_0203DD2C[]; +extern int gUnk_Sio_0203DD4C; // extern ??? gUnk_Sio_0203DD50 // extern ??? gUnk_Sio_0203DD8C // extern ??? gUnk_Sio_0203DD90 @@ -534,9 +546,22 @@ extern CONST_DATA struct ProcCmd ProcScr_SIOMAIN[]; extern CONST_DATA u8 * gpSioUnkBuffer; extern CONST_DATA struct ProcCmd gUnknown_085A93A0[]; extern CONST_DATA struct ProcCmd ProcScr_HOLD[]; -// extern ??? gUnknown_085A93E0 -// extern ??? gUnknown_085A93F0 +// extern ??? gSioList_085A93E0 +extern CONST_DATA u16 gSioList_085A93F0[]; // extern ??? gUnknown_085A94A0 -// extern ??? gUnknown_085A94AC +extern CONST_DATA struct ProcCmd ProcScr_Sio_085A94AC[]; // extern ??? ProcScr_TacticianNameSelection // extern ??? gUnknown_085A96D4 + +extern int gUnknown_03001808; +extern int gUnknown_0300180C; +// extern ??? gUnknown_03001810 +// extern ??? gUnknown_03001818 +// extern ??? gUnknown_0300182C +// extern ??? gUnknown_03001830 +// extern ??? gUnknown_03001834 +// extern ??? gUnknown_03001838 +// extern ??? gUnknown_03001840 +// extern ??? gUnknown_03001850 +// extern ??? gUnknown_03001860 +// extern ??? gUnknown_03001864 diff --git a/include/variables.h b/include/variables.h index 39bf3d21f..3f796ade0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -121,18 +121,6 @@ extern int gBaArenaFlag; // extern ??? gDungeonState // extern ??? gUnknown_030017AC -// extern ??? gUnknown_03001808 -// extern ??? gUnknown_0300180C -// extern ??? gUnknown_03001810 -// extern ??? gUnknown_03001818 -// extern ??? gUnknown_0300182C -// extern ??? gUnknown_03001830 -// extern ??? gUnknown_03001834 -// extern ??? gUnknown_03001838 -// extern ??? gUnknown_03001840 -// extern ??? gUnknown_03001850 -// extern ??? gUnknown_03001860 -// extern ??? gUnknown_03001864 extern u16 gUnknown_030018F0[]; // extern ??? gUnitDef1 // extern ??? gUnknown_03001C48 diff --git a/ldscript.txt b/ldscript.txt index c582f24cb..a4ded8382 100644 --- a/ldscript.txt +++ b/ldscript.txt @@ -232,7 +232,7 @@ SECTIONS . = 0x0203DAB0 - __ewram_overlay_end; Texts_0203DAB0 = .; . = 0x0203DAC0 - __ewram_overlay_end; gUnk_Sio_0203DAC0 = .; . = 0x0203DAC5 - __ewram_overlay_end; gUnk_Sio_0203DAC5 = .; - . = 0x0203DB10 - __ewram_overlay_end; gUnk_Sio_0203DB10 = .; + . = 0x0203DB10 - __ewram_overlay_end; gSioSaveConfig = .; . = 0x0203DB14 - __ewram_overlay_end; Texts_0203DB14 = .; . = 0x0203DB1C - __ewram_overlay_end; gUnk_Sio_0203DB1C = .; . = 0x0203DB64 - __ewram_overlay_end; Font_0203DB64 = .; diff --git a/src/bmsave-multiarena.c b/src/bmsave-multiarena.c index 0195f7901..2738e600e 100644 --- a/src/bmsave-multiarena.c +++ b/src/bmsave-multiarena.c @@ -280,23 +280,23 @@ void ReadMultiArenaSaveRankings(struct MultiArenaRankingEnt *dst) ReadSramFast(src_sram->rankings, dst, sizeof(src_sram->rankings)); } -void WriteMultiArenaSaveConfig(u16 const *config_src) +void WriteMultiArenaSaveConfig(void const * config_src) { struct SaveBlockInfo block_info; struct MultiArenaSaveBlock * dst_sram = GetSaveWriteAddr(SAVE_ID_ARENA); - WriteAndVerifySramFast(config_src, &dst_sram->config, sizeof(u16)); + WriteAndVerifySramFast(config_src, &dst_sram->config, 2); block_info.magic32 = SAVEMAGIC32_ARENA; block_info.kind = SAVEBLOCK_KIND_ARENA; WriteSaveBlockInfo(&block_info, SAVE_ID_ARENA); } -void ReadMultiArenaSaveConfig(u16 *config_dst) +void ReadMultiArenaSaveConfig(void * config_dst) { struct MultiArenaSaveBlock * src_sram = GetSaveReadAddr(SAVE_ID_ARENA); - ReadSramFast(&src_sram->config, config_dst, sizeof(u16)); + ReadSramFast(&src_sram->config, config_dst, 2); } bool IsMultiArenaSaveReady(void) diff --git a/src/sio_main2.c b/src/sio_main2.c index 8252e3a82..b70b35bec 100644 --- a/src/sio_main2.c +++ b/src/sio_main2.c @@ -5,6 +5,7 @@ #include "soundwrapper.h" #include "bmunit.h" #include "bmitem.h" +#include "bmsave.h" #include "constants/items.h" #include "sio.h" #include "sio_core.h" @@ -137,6 +138,63 @@ void SioPlaySoundEffect(int idx) PlaySoundEffect(sfx_list[idx]); } +void sub_8043244(void) +{ + ReadMultiArenaSaveConfig(&gSioSaveConfig); + gSioSaveConfig._unk3_ = true; + WriteMultiArenaSaveConfig(&gSioSaveConfig); +} + +bool sub_8043268(const u16 * list) +{ + if (gKeyStatusPtr->newKeys == 0) + { + if (++gUnk_Sio_0203DD4C >= 0x3C) + { + gUnknown_0300180C = gUnk_Sio_0203DD4C = 0; + } + return false; + } + + gUnk_Sio_0203DD4C = 0; + gUnk_Sio_0203DD2C[gUnknown_03001808] = gKeyStatusPtr->newKeys; + + if (gUnk_Sio_0203DD2C[gUnknown_03001808] == list[gUnknown_0300180C]) + { + gUnknown_0300180C = gUnknown_0300180C + 1; + + if (list[gUnknown_0300180C] == 0xFFFF) + return true; + } + else + { + gUnknown_0300180C = 0; + } + + gUnknown_03001808 = (gUnknown_03001808 + 1) & 0xF; + return false; +} + +/** + * Maybe some lists for sub_8043268() ? + */ +u16 gSioList_085A93D0[] = { + DPAD_LEFT, DPAD_LEFT, DPAD_RIGHT, DPAD_RIGHT, L_BUTTON, L_BUTTON, START_BUTTON, -1 +}; + +u16 gSioList_085A93E0[] = { + DPAD_LEFT, DPAD_LEFT, DPAD_RIGHT, DPAD_RIGHT, L_BUTTON, L_BUTTON, START_BUTTON, -1 +}; + +u16 gSioList_085A93F0[] = { + DPAD_LEFT, DPAD_LEFT, DPAD_RIGHT, DPAD_RIGHT, L_BUTTON, L_BUTTON, START_BUTTON, -1 +}; + +bool sub_80432F4(void) +{ + return sub_8043268(gSioList_085A93F0); +} + u8 const gUnknown_080D9D5E[] = {1, 2, 4}; u8 const gUnknown_080D9D61[] = { 0x02, 0x06, 0x0D, 0x13, 0x14, 0xFE, 0x14, 0x13, 0x0D, 0x06, 0x02, 0x00, 0xFF, 0x01, 0x00,