From 945241d45eb302775eaa656a73e21072081a4f57 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 21 Oct 2020 18:36:06 +0100 Subject: [PATCH 01/59] arm9 pxi_fifo --- arm9/asm/PXI_fifo.s | 269 -------------------------------- arm9/lib/include/CARD_common.h | 2 - arm9/lib/include/OS_interrupt.h | 1 + arm9/lib/include/PXI_fifo.h | 20 +++ arm9/lib/include/consts.h | 9 +- arm9/lib/include/registers.h | 1 + arm9/lib/src/CARD_common.c | 2 - arm9/lib/src/CARD_pullOut.c | 3 - arm9/lib/src/CARD_request.c | 2 - arm9/lib/src/CARD_spi.c | 1 + arm9/lib/src/OS_reset.c | 5 +- arm9/lib/src/PXI_fifo.c | 185 ++++++++++++++++++++++ arm9/lib/src/PXI_init.c | 3 +- arm9/lib/src/SND_command.c | 17 +- include/nitro/PXI_fifo_shared.h | 6 + 15 files changed, 229 insertions(+), 297 deletions(-) delete mode 100644 arm9/asm/PXI_fifo.s create mode 100644 arm9/lib/src/PXI_fifo.c diff --git a/arm9/asm/PXI_fifo.s b/arm9/asm/PXI_fifo.s deleted file mode 100644 index c1980dea7..000000000 --- a/arm9/asm/PXI_fifo.s +++ /dev/null @@ -1,269 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .bss - - .global UNK_021D5364 -UNK_021D5364: ; 0x021D5364 - .space 0x4 - - .global UNK_021D5368 -UNK_021D5368: ; 0x021D5368 - .space 0x80 - - .text - - arm_func_start PXIi_HandlerRecvFifoNotEmpty -PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x8 - ldr sl, _020CFCD4 ; =0x04000184 - ldr r5, _020CFCD8 ; =UNK_021D5368 - ldr r4, _020CFCDC ; =0x04000188 - mov r7, #0x4100000 - mov r6, #0x0 - mvn r8, #0x3 - mvn r9, #0x2 -_020CFBE0: - ldrh r0, [r10, #0x0] - ands r0, r0, #0x4000 - ldrneh r0, [r10, #0x0] - movne r1, r9 - orrne r0, r0, #0xc000 - strneh r0, [r10, #0x0] - bne _020CFC28 - bl OS_DisableInterrupts - ldrh r1, [r10, #0x0] - ands r1, r1, #0x100 - beq _020CFC18 - bl OS_RestoreInterrupts - mov r1, r8 - b _020CFC28 -_020CFC18: - ldr r1, [r7, #0x0] - str r1, [sp, #0x0] - bl OS_RestoreInterrupts - mov r1, r6 -_020CFC28: - cmp r1, r8 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r10,lr} - bxeq lr - mvn r0, #0x2 - cmp r1, r0 - beq _020CFBE0 - ldr r1, [sp, #0x0] - mov r0, r1, lsl #0x1b - movs r0, r0, lsr #0x1b - beq _020CFBE0 - ldr r3, [r5, r0, lsl #0x2] - cmp r3, #0x0 - beq _020CFC74 - mov r2, r1, lsl #0x1a - mov r1, r1, lsr #0x6 - mov r2, r2, lsr #0x1f - blx r3 - b _020CFBE0 -_020CFC74: - mov r0, r1, lsl #0x1a - movs r0, r0, lsr #0x1f - bne _020CFBE0 - orr r0, r1, #0x20 - str r0, [sp, #0x0] - ldrh r0, [r10, #0x0] - ands r0, r0, #0x4000 - ldrneh r0, [r10, #0x0] - orrne r0, r0, #0xc000 - strneh r0, [r10, #0x0] - bne _020CFBE0 - bl OS_DisableInterrupts - ldrh r1, [r10, #0x0] - ands r1, r1, #0x2 - beq _020CFCB8 - bl OS_RestoreInterrupts - b _020CFBE0 -_020CFCB8: - ldr r1, [sp, #0x0] - str r1, [r4, #0x0] - bl OS_RestoreInterrupts - b _020CFBE0 -_020CFCC8: - add sp, sp, #0x8 - ldmia sp!, {r4-r10, lr} - bx lr -_020CFCD4: .word 0x04000184 -_020CFCD8: .word UNK_021D5368 -_020CFCDC: .word 0x04000188 - - arm_func_start PXI_SendWordByFifo -PXI_SendWordByFifo: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [sp, #0x0] - and r0, r0, #0x1f - bic r3, r3, #0x1f - orr r12, r3, r0 - bic r3, r12, #0x20 - and r0, r2, #0x1 - orr r3, r3, r0, lsl #0x5 - str r12, [sp, #0x0] - and r2, r3, #0x3f - bic r0, r1, #0xfc000000 - orr r0, r2, r0, lsl #0x6 - str r3, [sp, #0x0] - ldr r2, _020CFD8C ; =0x04000184 - str r0, [sp, #0x0] - ldrh r0, [r2, #0x0] - ands r0, r0, #0x4000 - ldrneh r1, [r2, #0x0] - addne sp, sp, #0x4 - mvnne r0, #0x0 - orrne r1, r1, #0xc000 - strneh r1, [r2, #0x0] - ldmneia sp!, {lr} - bxne lr - bl OS_DisableInterrupts - ldr r1, _020CFD8C ; =0x04000184 - ldrh r1, [r1, #0x0] - ands r1, r1, #0x2 - beq _020CFD6C - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mvn r0, #0x1 - ldmia sp!, {lr} - bx lr -_020CFD6C: - ldr r2, [sp, #0x0] - ldr r1, _020CFD90 ; =0x04000188 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts -_020CFD7C: - mov r0, #0x0 - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020CFD8C: .word 0x04000184 -_020CFD90: .word 0x04000188 - - arm_func_start PXI_IsCallbackReady -PXI_IsCallbackReady: - ldr r2, _020CFDB8 ; =0x027FFC00 - mov r3, #0x1 - add r1, r2, r1, lsl #0x2 - mov r2, r3, lsl r0 - ldr r0, [r1, #0x388] - ands r0, r2, r0 - moveq r3, #0x0 - mov r0, r3 - bx lr - .balign 4 -_020CFDB8: .word 0x027FFC00 - - arm_func_start PXI_SetFifoRecvCallback -PXI_SetFifoRecvCallback: ; 0x020CFDBC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r1, _020CFE20 ; =UNK_021D5368 - cmp r5, #0x0 - str r5, [r1, r4, lsl #0x2] - beq _020CFDF8 - ldr r3, _020CFE24 ; =0x027FFC00 - mov r1, #0x1 - ldr r2, [r3, #0x388] - orr r1, r2, r1, lsl r4 - str r1, [r3, #0x388] - b _020CFE10 -_020CFDF8: - ldr r3, _020CFE24 ; =0x027FFC00 - mov r1, #0x1 - mvn r1, r1, lsl r4 - ldr r2, [r3, #0x388] - and r1, r2, r1 - str r1, [r3, #0x388] -_020CFE10: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CFE20: .word UNK_021D5368 -_020CFE24: .word 0x027FFC00 - - arm_func_start PXI_InitFifo -PXI_InitFifo: ; 0x020CFE28 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020CFF18 ; =UNK_021D5364 - mov r4, r0 - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - bne _020CFF04 - mov r2, #0x1 - ldr r0, _020CFF1C ; =0x027FFC00 - strh r2, [r1, #0x0] - mov r2, #0x0 - str r2, [r0, #0x388] - ldr r0, _020CFF20 ; =UNK_021D5368 - mov r1, r2 -_020CFE64: - str r1, [r0, r2, lsl #0x2] - add r2, r2, #0x1 - cmp r2, #0x20 - blt _020CFE64 - ldr r2, _020CFF24 ; =0x0000C408 - ldr r1, _020CFF28 ; =0x04000184 - mov r0, #0x40000 - strh r2, [r1, #0x0] - bl OS_ResetRequestIrqMask - ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty - mov r0, #0x40000 - bl OS_SetIrqFunction - mov r0, #0x40000 - bl OS_EnableIrqMask - mov r12, #0x0 - ldr r3, _020CFF30 ; =0x04000180 - mov r1, r12 - mov r2, #0x3e8 -_020CFEAC: - ldrh r0, [r3, #0x0] - ands lr, r0, #0xf - mov r0, lr, lsl #0x8 - strh r0, [r3, #0x0] - bne _020CFEC8 - cmp r12, #0x4 - bgt _020CFF04 -_020CFEC8: - ldrh r0, [r3, #0x0] - mov r5, r2 - and r0, r0, #0xf - cmp r0, lr - bne _020CFEFC -_020CFEDC: - cmp r5, #0x0 - movle r12, r1 - ble _020CFEFC - ldrh r0, [r3, #0x0] - sub r5, r5, #0x1 - and r0, r0, #0xf - cmp r0, lr - beq _020CFEDC -_020CFEFC: - add r12, r12, #0x1 - b _020CFEAC -_020CFF04: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020CFF18: .word UNK_021D5364 -_020CFF1C: .word 0x027FFC00 -_020CFF20: .word UNK_021D5368 -_020CFF24: .word 0x0000C408 -_020CFF28: .word 0x04000184 -_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty -_020CFF30: .word 0x04000180 diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h index c8a247eec..1ae31b7ae 100644 --- a/arm9/lib/include/CARD_common.h +++ b/arm9/lib/include/CARD_common.h @@ -224,8 +224,6 @@ void CARD_UnlockBackup(u16 lock_id); #define CARD_RETRY_COUNT_MAX 10 -extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2); - static inline void CARDi_SendPxi(u32 data) { while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0) diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index 3d1390798..c3812128b 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -12,6 +12,7 @@ #define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT) #define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT) #define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT) +#define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT) #define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT) extern OSIrqFunction OS_IRQTable[]; diff --git a/arm9/lib/include/PXI_fifo.h b/arm9/lib/include/PXI_fifo.h index becba32e5..b1ca33f31 100644 --- a/arm9/lib/include/PXI_fifo.h +++ b/arm9/lib/include/PXI_fifo.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_ARM9_PXI_FIFO_H #include "nitro/PXI_fifo_shared.h" +#include "nitro/types.h" typedef enum { @@ -13,4 +14,23 @@ typedef enum PXI_FIFO_NO_CALLBACK_ENTRY = -5 } PXIFifoStatus; +typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err); + +typedef union +{ + struct + { + u32 tag:5; + u32 err:1; + u32 data:26; + } e; + u32 raw; +} PXIFifoMessage; + +void PXI_InitFifo(void); +void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback); +BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc); +s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err); +void PXIi_HandlerRecvFifoNotEmpty(void); + #endif //POKEDIAMOND_ARM9_PXI_FIFO_H diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 7c56a9a34..095a15df8 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -35,8 +35,6 @@ #define HW_CACHE_LINE_SIZE 32 -#define PXI_PROC_ARM7 0x01 - #define OSi_CONSOLE_NOT_DETECT 0xffffffff #define OS_CONSOLE_NITRO 0x80000000 @@ -50,4 +48,11 @@ #define HW_CPU_CLOCK_ARM9 67027964 +#define REG_PXI_SUBP_FIFO_CNT_E_MASK 0x8000 +#define REG_PXI_SUBP_FIFO_CNT_ERR_MASK 0x4000 +#define REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK 0x0400 +#define REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK 0x0100 +#define REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK 0x0008 +#define REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK 0x0002 + #endif //POKEDIAMOND_ARM9_CONSTS_H diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h index 44a21bf0a..d55347d52 100644 --- a/arm9/lib/include/registers.h +++ b/arm9/lib/include/registers.h @@ -350,6 +350,7 @@ #define REG_OS_IE_VE_SHIFT 2 #define REG_OS_IE_T0_SHIFT 3 #define REG_OS_IE_T1_SHIFT 4 +#define REG_OS_IE_IFN_SHIFT 18 #define REG_OS_IE_MC_SHIFT 19 #define REG_OS_TM0CNT_H_I_MASK 0x0040 diff --git a/arm9/lib/src/CARD_common.c b/arm9/lib/src/CARD_common.c index 65d92377f..f820027e3 100644 --- a/arm9/lib/src/CARD_common.c +++ b/arm9/lib/src/CARD_common.c @@ -14,8 +14,6 @@ static CARDiCommandArg cardi_arg ALIGN(32); u8 cardi_thread_stack[0x400] ALIGN(4); -extern void PXI_SetFifoRecvCallback(u32 param1, void* callback); - static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target); static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target); diff --git a/arm9/lib/src/CARD_pullOut.c b/arm9/lib/src/CARD_pullOut.c index 27293d602..3456df48f 100644 --- a/arm9/lib/src/CARD_pullOut.c +++ b/arm9/lib/src/CARD_pullOut.c @@ -12,9 +12,6 @@ static CARDPulledOutCallback CARD_UserCallback; static BOOL CARDi_IsPulledOutFlag = FALSE; -extern void PXI_SetFifoRecvCallback(u32 param1, void* callback); -extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2); - static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err); static void CARDi_SendtoPxi(u32 data, u32 wait); diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c index 2d728d148..098fe7a57 100644 --- a/arm9/lib/src/CARD_request.c +++ b/arm9/lib/src/CARD_request.c @@ -6,8 +6,6 @@ extern CARDiCommon cardi_common; -extern u32 PXI_IsCallbackReady(u32 param1, u32 param2); - ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err) { #pragma unused (data) diff --git a/arm9/lib/src/CARD_spi.c b/arm9/lib/src/CARD_spi.c index 3a911333e..5f02b2766 100644 --- a/arm9/lib/src/CARD_spi.c +++ b/arm9/lib/src/CARD_spi.c @@ -1,6 +1,7 @@ #include "function_target.h" #include "nitro/types.h" #include "CARD_common.h" +#include "CARD_spi.h" #include "MI_memory.h" extern CARDiCommon cardi_common; diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c index 8be8fb335..45d2bb130 100644 --- a/arm9/lib/src/OS_reset.c +++ b/arm9/lib/src/OS_reset.c @@ -10,14 +10,11 @@ #include "MI_dma.h" #include "CARD_common.h" #include "PXI_init.h" +#include "PXI_fifo.h" static u16 OSi_IsInitReset = 0; vu16 OSi_IsResetOccurred = 0; -extern u32 PXI_IsCallbackReady(u32 param1, u32 param2); -extern void PXI_SetFifoRecvCallback(u32 param1, void* callback); -extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2); - static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); static void OSi_SendToPxi(u16 data); static void OSi_DoResetSystem(void); diff --git a/arm9/lib/src/PXI_fifo.c b/arm9/lib/src/PXI_fifo.c new file mode 100644 index 000000000..35db1c7fd --- /dev/null +++ b/arm9/lib/src/PXI_fifo.c @@ -0,0 +1,185 @@ +#include "function_target.h" +#include "consts.h" +#include "OS_interrupt.h" +#include "OS_system.h" +#include "PXI_fifo.h" +#include "systemWork.h" + +static u16 FifoCtrlInit = 0; +static PXIFifoCallback FifoRecvCallbackTable[PXI_MAX_FIFO_TAG]; + +static inline PXIFifoStatus PXIi_SetToFifo(u32 data); + +ARM_FUNC void PXI_InitFifo(void) +{ + OSSystemWork *p = OS_GetSystemWork(); + OSIntrMode enabled = OS_DisableInterrupts(); + s32 i; + + if (!FifoCtrlInit) + { + FifoCtrlInit = TRUE; + + p->pxiHandleChecker[PXI_PROC_ARM9] = 0UL; + + for (i = 0; i < PXI_MAX_FIFO_TAG; i++) + { + FifoRecvCallbackTable[i] = NULL; + } + + reg_PXI_SUBP_FIFO_CNT = (REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK + | REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK | REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + + (void)OS_ResetRequestIrqMask(OS_IE_SPFIFO_RECV); + (void)OS_SetIrqFunction(OS_IE_SPFIFO_RECV, PXIi_HandlerRecvFifoNotEmpty); + (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); + + { + s32 timeout; + s32 c; + + for (i = 0; ; i++) + { + c = reg_PXI_SUBPINTF & 15; + reg_PXI_SUBPINTF = (u16)(c << 8); + + if (c == 0 && i > 4) + { + break; + } + + for (timeout = 1000; (reg_PXI_SUBPINTF & 15) == c; timeout--) + { + if (timeout == 0) + { + i = 0; + break; + } + } + } + } + } + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback) +{ + OSSystemWork *p = OS_GetSystemWork(); + OSIntrMode enabled = OS_DisableInterrupts(); + + FifoRecvCallbackTable[fifotag] = callback; + if (callback) + { + p->pxiHandleChecker[PXI_PROC_ARM9] |= (1UL << fifotag); + } + else + { + p->pxiHandleChecker[PXI_PROC_ARM9] &= ~(1UL << fifotag); + } + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc) +{ + OSSystemWork *p = OS_GetSystemWork(); + + return (p->pxiHandleChecker[proc] & (1UL << fifotag)) ? TRUE : FALSE; +} + +ARM_FUNC s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err) +{ + PXIFifoMessage fifomsg; + + fifomsg.e.tag = (PXIFifoTag)fifotag; + fifomsg.e.err = (u32)err; + fifomsg.e.data = data; + + return PXIi_SetToFifo(fifomsg.raw); +} + +static inline PXIFifoStatus PXIi_SetToFifo(u32 data) +{ + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) + { + reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + return PXI_FIFO_FAIL_SEND_ERR; + } + + OSIntrMode enabled = OS_DisableInterrupts(); + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK) + { + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_FAIL_SEND_FULL; + } + + reg_PXI_SEND_FIFO = data; + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_SUCCESS; +} + +static inline PXIFifoStatus PXIi_GetFromFifo(u32 *data_buf) +{ + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) + { + reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + return PXI_FIFO_FAIL_RECV_ERR; + } + + OSIntrMode enabled = OS_DisableInterrupts(); + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK) + { + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_FAIL_RECV_EMPTY; + } + + + *data_buf = reg_PXI_RECV_FIFO; + (void)OS_RestoreInterrupts(enabled); + + return PXI_FIFO_SUCCESS; +} + +ARM_FUNC void PXIi_HandlerRecvFifoNotEmpty(void) +{ + PXIFifoMessage fifomsg; + PXIFifoStatus ret_code; + PXIFifoTag tag; + + while (TRUE) + { + ret_code = PXIi_GetFromFifo(&fifomsg.raw); + + if (ret_code == PXI_FIFO_FAIL_RECV_EMPTY) + { + break; + } + if (ret_code == PXI_FIFO_FAIL_RECV_ERR) + { + continue; + } + + tag = (PXIFifoTag)fifomsg.e.tag; + + if (tag) + { + if (FifoRecvCallbackTable[tag]) + { + (FifoRecvCallbackTable[tag])(tag, fifomsg.e.data, (BOOL)fifomsg.e.err); + } + else + { + if (fifomsg.e.err) + { + } + else + { + fifomsg.e.err = TRUE; + (void)PXIi_SetToFifo(fifomsg.raw); + } + } + } + else + { + } + } +} diff --git a/arm9/lib/src/PXI_init.c b/arm9/lib/src/PXI_init.c index f079ca3db..d70ca3b01 100644 --- a/arm9/lib/src/PXI_init.c +++ b/arm9/lib/src/PXI_init.c @@ -1,8 +1,7 @@ #include "PXI_init.h" +#include "PXI_fifo.h" #include "function_target.h" -extern void PXI_InitFifo(void); - ARM_FUNC void PXI_Init(void) { PXI_InitFifo(); diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c index 130a4ebc6..4ad80be5f 100644 --- a/arm9/lib/src/SND_command.c +++ b/arm9/lib/src/SND_command.c @@ -18,11 +18,6 @@ static u32 sCurrentTag; static u32 sFinishedTag; static struct SNDCommand *sFreeList; -// TODO remove these function declarations once they are in the headers -extern s32 PXI_SendWordByFifo(u32, u32, u32); -extern void PXI_SetFifoRecvCallback(u32, void (*)(s32, s32)); -extern BOOL PXI_IsCallbackReady(u32, u32); - static void InitPXI(void); static void RequestCommandProc(void); static struct SNDCommand *AllocCommand(void); @@ -280,25 +275,25 @@ ARM_FUNC s32 SND_CountWaitingCommand(void) { return SND_CMD_COUNT - SND_CountFreeCommand() - SND_CountReservedCommand(); } -ARM_FUNC static void PxiFifoCallback(s32 a, s32 b) { -#pragma unused (a) +ARM_FUNC static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL) { +#pragma unused (tag) OSIntrMode oldirq = OS_DisableInterrupts(); - SNDi_CallAlarmHandler(b); + SNDi_CallAlarmHandler((s32)data); (void)OS_RestoreInterrupts(oldirq); } ARM_FUNC static void InitPXI(void) { - PXI_SetFifoRecvCallback(7, PxiFifoCallback); + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback); if (!IsCommandAvailable()) return; - if (PXI_IsCallbackReady(7, 1)) + if (PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)) return; do { OS_SpinWait(100); - } while (!PXI_IsCallbackReady(7, 1)); + } while (!PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)); } ARM_FUNC static void RequestCommandProc(void) { diff --git a/include/nitro/PXI_fifo_shared.h b/include/nitro/PXI_fifo_shared.h index 2698e89df..297625a18 100644 --- a/include/nitro/PXI_fifo_shared.h +++ b/include/nitro/PXI_fifo_shared.h @@ -13,6 +13,12 @@ #ifndef POKEDIAMOND_PXI_FIFO_SHARED_H #define POKEDIAMOND_PXI_FIFO_SHARED_H +typedef enum +{ + PXI_PROC_ARM9 = 0, + PXI_PROC_ARM7 = 1 +} PXIProc; + typedef enum { PXI_FIFO_TAG_EX = 0, // Extension format PXI_FIFO_TAG_USER_0, // for application programmer, use it in free From 86ad31de51cd466af6fc396bc08191f132777a58 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 21 Oct 2020 19:01:41 +0100 Subject: [PATCH 02/59] remove docker image badge from readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 8f47902cf..934f08240 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # Pokémon Diamond [![Build Status](https://travis-ci.org/pret/pokediamond.svg?branch=master)](https://travis-ci.org/pret/pokediamond) -![Docker Image CI](https://github.com/pret/pokediamond/workflows/Docker%20Image%20CI/badge.svg) This is a decompilation of Pokémon Diamond. From 8d15f8569fe860224f9b2ddd49bd0e4fea6305de Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 21 Oct 2020 22:10:27 +0100 Subject: [PATCH 03/59] change travis .org to .com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 934f08240..2f6255c0c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Pokémon Diamond -[![Build Status](https://travis-ci.org/pret/pokediamond.svg?branch=master)](https://travis-ci.org/pret/pokediamond) +[![Build Status](https://travis-ci.com/pret/pokediamond.svg?branch=master)](https://travis-ci.com/pret/pokediamond) This is a decompilation of Pokémon Diamond. From 0e73b7e2a559a2235ae4aa9543a9b2d573e23f96 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 30 Oct 2020 19:52:47 +0000 Subject: [PATCH 04/59] split module 59 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 3 + .../59/asm/{module_59.s => mod59_021D74E0.s} | 664 +---------------- arm9/modules/59/asm/mod59_021D9868.s | 666 ++++++++++++++++++ 4 files changed, 672 insertions(+), 664 deletions(-) rename arm9/modules/59/asm/{module_59.s => mod59_021D74E0.s} (86%) create mode 100644 arm9/modules/59/asm/mod59_021D9868.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 57fbde667..127840965 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -937,7 +937,8 @@ Overlay MODULE_59 { ##Rowan's intro## After arm9 - Object module_59.o + Object mod59_021D74E0.o + Object mod59_021D9868.o } Overlay MODULE_60 diff --git a/arm9/global.inc b/arm9/global.inc index 0af44f980..60f00ea29 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7469,6 +7469,9 @@ .extern MOD59_021D74E0 .extern MOD59_021D7564 .extern MOD59_021D76C0 +.extern MOD59_021D9868 +.extern MOD59_021D9898 +.extern MOD59_021D99F8 .extern MOD60_021D74E0 .extern MOD60_021D76B8 .extern MOD60_021D75B0 diff --git a/arm9/modules/59/asm/module_59.s b/arm9/modules/59/asm/mod59_021D74E0.s similarity index 86% rename from arm9/modules/59/asm/module_59.s rename to arm9/modules/59/asm/mod59_021D74E0.s index 9182c632a..abc37879f 100644 --- a/arm9/modules/59/asm/module_59.s +++ b/arm9/modules/59/asm/mod59_021D74E0.s @@ -4411,633 +4411,8 @@ _021D985C: _021D9864: .word MOD59_021D9DDC thumb_func_end MOD59_021D8920 - thumb_func_start MOD59_021D9868 -MOD59_021D9868: ; 0x021D9868 - push {r4, lr} - mov r2, #1 - add r4, r0, #0 - mov r0, #3 - mov r1, #0x53 - lsl r2, r2, #0x12 - bl FUN_0201681C - add r0, r4, #0 - mov r1, #0x28 - mov r2, #0x53 - bl OverlayManager_CreateAndGetData - mov r1, #0 - mov r2, #0x28 - add r4, r0, #0 - bl memset - mov r0, #0x53 - str r0, [r4] - mov r0, #0 - str r0, [r4, #0x24] - mov r0, #1 - pop {r4, pc} - thumb_func_end MOD59_021D9868 - - thumb_func_start MOD59_021D9898 -MOD59_021D9898: ; 0x021D9898 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r1, #0 - bl OverlayManager_GetData - ldr r1, [r5] - add r4, r0, #0 - mov r6, #0 - cmp r1, #5 - bls _021D98AE - b _021D99E2 -_021D98AE: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_021D98BA: ; jump table - .short _021D98C6 - _021D98BA - 2 ; case 0 - .short _021D992C - _021D98BA - 2 ; case 1 - .short _021D9952 - _021D98BA - 2 ; case 2 - .short _021D997C - _021D98BA - 2 ; case 3 - .short _021D998E - _021D98BA - 2 ; case 4 - .short _021D99C0 - _021D98BA - 2 ; case 5 -_021D98C6: - add r0, r6, #0 - add r1, r6, #0 - bl FUN_0200E3A0 - mov r0, #1 - add r1, r6, #0 - bl FUN_0200E3A0 - add r0, r6, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - add r0, r6, #0 - add r1, r0, #0 - bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 - mov r2, #1 - lsl r2, r2, #0x1a - ldr r1, [r2] - ldr r0, _021D99E8 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2] - ldr r2, _021D99EC ; =0x04001000 - ldr r1, [r2] - and r0, r1 - str r0, [r2] - mov r0, #4 - mov r1, #8 - bl FUN_0201669C - add r0, r4, #0 - bl MOD59_021D9A20 - add r0, r4, #0 - bl MOD59_021D9C48 - ldr r0, _021D99F0 ; =MOD59_021D9A14 - add r1, r4, #0 - bl Main_SetVBlankIntrCB - bl FUN_0201E788 - mov r0, #0x3c - str r0, [r4, #0x24] - mov r0, #1 - str r0, [r5] - b _021D99E2 -_021D992C: - ldr r0, [r4, #0x24] - cmp r0, #0 - beq _021D9938 - sub r0, r0, #1 - str r0, [r4, #0x24] - b _021D99E2 -_021D9938: - ldr r0, _021D99F4 ; =0x00000406 - bl FUN_0200414C - ldr r1, _021D99F4 ; =0x00000406 - mov r0, #4 - mov r2, #1 - bl FUN_0200433C - mov r0, #0x5a - str r0, [r4, #0x24] - mov r0, #2 - str r0, [r5] - b _021D99E2 -_021D9952: - ldr r0, [r4, #0x24] - cmp r0, #0 - beq _021D995E - sub r0, r0, #1 - str r0, [r4, #0x24] - b _021D99E2 -_021D995E: - str r6, [r4, #0x24] - mov r0, #6 - mov r1, #1 - str r0, [sp] - str r1, [sp, #4] - ldr r0, [r4] - add r2, r1, #0 - str r0, [sp, #8] - add r0, r6, #0 - add r3, r6, #0 - bl FUN_0200E1D0 - mov r0, #3 - str r0, [r5] - b _021D99E2 -_021D997C: - bl MOD59_021D9D78 - bl FUN_0200E308 - cmp r0, #1 - bne _021D99E2 - mov r0, #4 - str r0, [r5] - b _021D99E2 -_021D998E: - bl MOD59_021D9D78 - add r0, r4, #0 - add r1, r6, #0 - mov r2, #0x28 - mov r3, #0x30 - bl MOD59_021D9C74 - cmp r0, #1 - bne _021D99E2 - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, [r4] - str r0, [sp, #8] - add r0, r6, #0 - add r1, r0, #0 - add r2, r0, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - mov r0, #5 - str r0, [r5] - b _021D99E2 -_021D99C0: - bl MOD59_021D9D78 - bl FUN_0200E308 - cmp r0, #1 - bne _021D99E2 - add r0, r4, #0 - bl MOD59_021D9C68 - add r0, r4, #0 - bl MOD59_021D9BD0 - add r0, r6, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - mov r6, #1 -_021D99E2: - add r0, r6, #0 - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 -_021D99E8: .word 0xFFFFE0FF -_021D99EC: .word 0x04001000 -_021D99F0: .word MOD59_021D9A14 -_021D99F4: .word 0x00000406 - thumb_func_end MOD59_021D9898 - - thumb_func_start MOD59_021D99F8 -MOD59_021D99F8: ; 0x021D99F8 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - ldr r4, [r0] - add r0, r5, #0 - bl OverlayManager_FreeData - add r0, r4, #0 - bl FUN_020168D0 - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD59_021D99F8 - - thumb_func_start MOD59_021D9A14 -MOD59_021D9A14: ; 0x021D9A14 - ldr r3, _021D9A1C ; =FUN_0201AB60 - ldr r0, [r0, #4] - bx r3 - nop -_021D9A1C: .word FUN_0201AB60 - thumb_func_end MOD59_021D9A14 - - thumb_func_start MOD59_021D9A20 -MOD59_021D9A20: ; 0x021D9A20 - push {r3, r4, r5, lr} - sub sp, #0xb8 - ldr r5, _021D9BB4 ; =0x021DA0D4 - add r4, r0, #0 - add r3, sp, #0x90 - mov r2, #5 -_021D9A2C: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _021D9A2C - add r0, sp, #0x90 - bl FUN_0201E66C - ldr r0, [r4] - bl FUN_02016B94 - add r3, sp, #0x80 - ldr r5, _021D9BB8 ; =0x021DA054 - str r0, [r4, #4] - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl FUN_02016BBC - ldr r5, _021D9BBC ; =0x021DA080 - add r3, sp, #0x64 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #2 - str r0, [r3] - ldr r0, [r4, #4] - mov r3, #0 - bl FUN_02016C18 - ldr r3, [r4] - mov r0, #2 - mov r1, #0x20 - mov r2, #0 - bl FUN_02017F18 - ldr r0, [r4, #4] - mov r1, #2 - bl FUN_02018744 - ldr r5, _021D9BC0 ; =0x021DA09C - add r3, sp, #0x48 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - ldr r0, [r4, #4] - add r3, r1, #0 - bl FUN_02016C18 - mov r3, #0 - str r3, [sp] - str r3, [sp, #4] - str r3, [sp, #8] - ldr r0, [r4] - mov r1, #1 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - bl FUN_0200687C - mov r3, #0 - str r3, [sp] - str r3, [sp, #4] - str r3, [sp, #8] - ldr r0, [r4] - mov r1, #4 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - bl FUN_020068C8 - ldr r5, _021D9BC4 ; =0x021DA064 - add r3, sp, #0x2c - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #1 - str r0, [r3] - ldr r0, [r4, #4] - mov r3, #0 - bl FUN_02016C18 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #2 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - mov r3, #1 - bl FUN_0200687C - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #5 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - mov r3, #1 - bl FUN_020068C8 - ldr r5, _021D9BC8 ; =0x021DA0B8 - add r3, sp, #0x10 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #3 - str r0, [r3] - ldr r0, [r4, #4] - mov r3, #0 - bl FUN_02016C18 - mov r1, #0 - str r1, [sp] - str r1, [sp, #4] - str r1, [sp, #8] - ldr r0, [r4] - mov r3, #3 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - bl FUN_0200687C - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #3 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x88 - add r3, r1, #0 - bl FUN_020068C8 - mov r2, #0 - str r2, [sp] - ldr r0, [r4] - mov r1, #6 - str r0, [sp, #4] - mov r0, #0x88 - add r3, r2, #0 - bl FUN_02006930 - ldr r2, [r4] - mov r0, #0 - mov r1, #0x20 - bl FUN_02002ED0 - mov r0, #0 - add r1, r0, #0 - bl FUN_02017FE4 - mov r0, #4 - mov r1, #0 - bl FUN_02017FE4 - mov r2, #0xc - ldr r0, _021D9BCC ; =0x04000050 - mov r1, #2 - mov r3, #4 - str r2, [sp] - bl G2x_SetBlendAlpha_ - add sp, #0xb8 - pop {r3, r4, r5, pc} - nop -_021D9BB4: .word MOD59_021DA0D4 -_021D9BB8: .word MOD59_021DA054 -_021D9BBC: .word MOD59_021DA080 -_021D9BC0: .word MOD59_021DA09C -_021D9BC4: .word MOD59_021DA064 -_021D9BC8: .word MOD59_021DA0B8 -_021D9BCC: .word 0x04000050 - thumb_func_end MOD59_021D9A20 - - thumb_func_start MOD59_021D9BD0 -MOD59_021D9BD0: ; 0x021D9BD0 - push {r4, lr} - add r4, r0, #0 - mov r0, #0 - add r1, r0, #0 - bl FUN_0201797C - mov r0, #1 - mov r1, #0 - bl FUN_0201797C - mov r0, #2 - mov r1, #0 - bl FUN_0201797C - mov r0, #3 - mov r1, #0 - bl FUN_0201797C - mov r0, #4 - mov r1, #0 - bl FUN_0201797C - mov r0, #5 - mov r1, #0 - bl FUN_0201797C - mov r0, #6 - mov r1, #0 - bl FUN_0201797C - mov r0, #7 - mov r1, #0 - bl FUN_0201797C - ldr r0, _021D9C44 ; =0x04000050 - mov r1, #0 - strh r1, [r0] - ldr r0, [r4, #4] - mov r1, #3 - bl FUN_020178A0 - ldr r0, [r4, #4] - mov r1, #1 - bl FUN_020178A0 - ldr r0, [r4, #4] - mov r1, #0 - bl FUN_020178A0 - ldr r0, [r4, #4] - mov r1, #2 - bl FUN_020178A0 - ldr r0, [r4, #4] - bl FreeToHeap - pop {r4, pc} - nop -_021D9C44: .word 0x04000050 - thumb_func_end MOD59_021D9BD0 - - thumb_func_start MOD59_021D9C48 -MOD59_021D9C48: ; 0x021D9C48 - push {r4, lr} - add r4, r0, #0 - ldr r2, _021D9C64 ; =0x00000225 - ldr r3, [r4] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - str r0, [r4, #8] - bl FUN_0201BD5C - mov r0, #0 - str r0, [r4, #0xc] - pop {r4, pc} - .align 2, 0 -_021D9C64: .word 0x00000225 - thumb_func_end MOD59_021D9C48 - - thumb_func_start MOD59_021D9C68 -MOD59_021D9C68: ; 0x021D9C68 - ldr r3, _021D9C70 ; =DestroyMsgData - ldr r0, [r0, #8] - bx r3 - nop -_021D9C70: .word DestroyMsgData - thumb_func_end MOD59_021D9C68 - - thumb_func_start MOD59_021D9C74 -MOD59_021D9C74: ; 0x021D9C74 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r4, r0, #0 - ldr r0, [r4, #0xc] - str r1, [sp, #0x10] - add r7, r3, #0 - mov r5, #0 - cmp r0, #3 - bhi _021D9D66 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_021D9C92: ; jump table - .short _021D9C9A - _021D9C92 - 2 ; case 0 - .short _021D9D24 - _021D9C92 - 2 ; case 1 - .short _021D9D36 - _021D9C92 - 2 ; case 2 - .short _021D9D50 - _021D9C92 - 2 ; case 3 -_021D9C9A: - mov r0, #2 - add r1, r5, #0 - bl FUN_0201797C - mov r0, #1 - ldr r1, [r4] - lsl r0, r0, #0xa - bl String_ctor - add r6, r0, #0 - ldr r0, [r4, #8] - ldr r1, [sp, #0x10] - add r2, r6, #0 - bl ReadMsgDataIntoString - add r1, r4, #0 - ldr r0, [r4, #4] - ldr r2, _021D9D6C ; =0x021DA04C - add r1, #0x10 - bl FUN_02019150 - add r1, r5, #0 - mov r0, #1 - lsl r0, r0, #8 - str r0, [sp] - mov r0, #0xc0 - str r0, [sp, #4] - add r0, r4, #0 - add r0, #0x10 - add r2, r1, #0 - add r3, r1, #0 - bl FUN_020196F4 - add r0, r5, #0 - add r1, r6, #0 - add r2, r0, #0 - bl FUN_02002F08 - mov r1, #1 - lsl r1, r1, #8 - sub r0, r1, r0 - lsr r3, r0, #1 - str r7, [sp] - add r1, r5, #0 - ldr r0, _021D9D70 ; =0x000F0200 - str r1, [sp, #4] - str r0, [sp, #8] - add r0, r4, #0 - add r0, #0x10 - add r2, r6, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - add r0, #0x10 - bl FUN_020191D0 - mov r0, #2 - mov r1, #1 - bl FUN_0201797C - mov r0, #0xf0 - str r0, [r4, #0x24] - mov r0, #1 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D24: - ldr r0, [r4, #0x24] - cmp r0, #0 - beq _021D9D30 - sub r0, r0, #1 - str r0, [r4, #0x24] - b _021D9D66 -_021D9D30: - mov r0, #2 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D36: - ldr r0, _021D9D74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - and r0, r1 - cmp r0, #1 - beq _021D9D4A - mov r0, #2 - and r0, r1 - cmp r0, #2 - bne _021D9D66 -_021D9D4A: - mov r0, #3 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D50: - add r0, r4, #0 - add r0, #0x10 - bl FUN_02019178 - ldr r0, [r4, #4] - mov r1, #2 - bl FUN_02018744 - add r0, r5, #0 - str r0, [r4, #0xc] - mov r5, #1 -_021D9D66: - add r0, r5, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_021D9D6C: .word MOD59_021DA04C -_021D9D70: .word 0x000F0200 -_021D9D74: .word gMain - thumb_func_end MOD59_021D9C74 - - thumb_func_start MOD59_021D9D78 -MOD59_021D9D78: ; 0x021D9D78 - push {r3, lr} - ldr r1, [r0, #0x20] - mov r2, #3 - add r3, r1, #4 - str r3, [r0, #0x20] - ldr r0, [r0, #4] - mov r1, #1 - asr r3, r3, #4 - bl FUN_020179E0 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD59_021D9D78 - .rodata + .global MOD59_021D9D90 MOD59_021D9D90: ; 0x021D9D90 .byte 0x00, 0x08, 0x00, 0x18, 0x18, 0x05, 0x2D, 0x01, 0x00, 0x04, 0x00, 0x18, 0x18, 0x05, 0x2D, 0x01 @@ -5168,40 +4543,3 @@ MOD59_021D9FE8: ; 0x021D9FE8 .byte 0x34, 0x35, 0x36, 0x37, 0x4C, 0x4D, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x4E, 0x4F .byte 0x50, 0x51, 0x52, 0x53, 0x58, 0x59, 0x5A, 0x5B, 0x60, 0x61, 0x54, 0x55, 0x56, 0x57, 0x5C, 0x5D .byte 0x5E, 0x5F, 0x62, 0x63 - - .global MOD59_021DA04C -MOD59_021DA04C: ; 0x021DA04C - .byte 0x02, 0x00, 0x00, 0x20, 0x18, 0x01, 0x01, 0x00 - - .global MOD59_021DA054 -MOD59_021DA054: ; 0x021DA054 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD59_021DA064 -MOD59_021DA064: ; 0x021DA064 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD59_021DA080 -MOD59_021DA080: ; 0x021DA080 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD59_021DA09C -MOD59_021DA09C: ; 0x021DA09C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD59_021DA0B8 -MOD59_021DA0B8: ; 0x021DA0B8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x01, 0x03, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD59_021DA0D4 -MOD59_021DA0D4: ; 0x021DA0D4 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .data - .bss diff --git a/arm9/modules/59/asm/mod59_021D9868.s b/arm9/modules/59/asm/mod59_021D9868.s new file mode 100644 index 000000000..4e03cbe39 --- /dev/null +++ b/arm9/modules/59/asm/mod59_021D9868.s @@ -0,0 +1,666 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD59_021D9868 +MOD59_021D9868: ; 0x021D9868 + push {r4, lr} + mov r2, #1 + add r4, r0, #0 + mov r0, #3 + mov r1, #0x53 + lsl r2, r2, #0x12 + bl FUN_0201681C + add r0, r4, #0 + mov r1, #0x28 + mov r2, #0x53 + bl OverlayManager_CreateAndGetData + mov r1, #0 + mov r2, #0x28 + add r4, r0, #0 + bl memset + mov r0, #0x53 + str r0, [r4] + mov r0, #0 + str r0, [r4, #0x24] + mov r0, #1 + pop {r4, pc} + thumb_func_end MOD59_021D9868 + + thumb_func_start MOD59_021D9898 +MOD59_021D9898: ; 0x021D9898 + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r1, #0 + bl OverlayManager_GetData + ldr r1, [r5] + add r4, r0, #0 + mov r6, #0 + cmp r1, #5 + bls _021D98AE + b _021D99E2 +_021D98AE: + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_021D98BA: ; jump table + .short _021D98C6 - _021D98BA - 2 ; case 0 + .short _021D992C - _021D98BA - 2 ; case 1 + .short _021D9952 - _021D98BA - 2 ; case 2 + .short _021D997C - _021D98BA - 2 ; case 3 + .short _021D998E - _021D98BA - 2 ; case 4 + .short _021D99C0 - _021D98BA - 2 ; case 5 +_021D98C6: + add r0, r6, #0 + add r1, r6, #0 + bl FUN_0200E3A0 + mov r0, #1 + add r1, r6, #0 + bl FUN_0200E3A0 + add r0, r6, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + add r0, r6, #0 + add r1, r0, #0 + bl FUN_02015F34 + bl FUN_0201E6D8 + bl FUN_0201E740 + mov r2, #1 + lsl r2, r2, #0x1a + ldr r1, [r2] + ldr r0, _021D99E8 ; =0xFFFFE0FF + and r1, r0 + str r1, [r2] + ldr r2, _021D99EC ; =0x04001000 + ldr r1, [r2] + and r0, r1 + str r0, [r2] + mov r0, #4 + mov r1, #8 + bl FUN_0201669C + add r0, r4, #0 + bl MOD59_021D9A20 + add r0, r4, #0 + bl MOD59_021D9C48 + ldr r0, _021D99F0 ; =MOD59_021D9A14 + add r1, r4, #0 + bl Main_SetVBlankIntrCB + bl FUN_0201E788 + mov r0, #0x3c + str r0, [r4, #0x24] + mov r0, #1 + str r0, [r5] + b _021D99E2 +_021D992C: + ldr r0, [r4, #0x24] + cmp r0, #0 + beq _021D9938 + sub r0, r0, #1 + str r0, [r4, #0x24] + b _021D99E2 +_021D9938: + ldr r0, _021D99F4 ; =0x00000406 + bl FUN_0200414C + ldr r1, _021D99F4 ; =0x00000406 + mov r0, #4 + mov r2, #1 + bl FUN_0200433C + mov r0, #0x5a + str r0, [r4, #0x24] + mov r0, #2 + str r0, [r5] + b _021D99E2 +_021D9952: + ldr r0, [r4, #0x24] + cmp r0, #0 + beq _021D995E + sub r0, r0, #1 + str r0, [r4, #0x24] + b _021D99E2 +_021D995E: + str r6, [r4, #0x24] + mov r0, #6 + mov r1, #1 + str r0, [sp] + str r1, [sp, #4] + ldr r0, [r4] + add r2, r1, #0 + str r0, [sp, #8] + add r0, r6, #0 + add r3, r6, #0 + bl FUN_0200E1D0 + mov r0, #3 + str r0, [r5] + b _021D99E2 +_021D997C: + bl MOD59_021D9D78 + bl FUN_0200E308 + cmp r0, #1 + bne _021D99E2 + mov r0, #4 + str r0, [r5] + b _021D99E2 +_021D998E: + bl MOD59_021D9D78 + add r0, r4, #0 + add r1, r6, #0 + mov r2, #0x28 + mov r3, #0x30 + bl MOD59_021D9C74 + cmp r0, #1 + bne _021D99E2 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + str r0, [sp, #8] + add r0, r6, #0 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + mov r0, #5 + str r0, [r5] + b _021D99E2 +_021D99C0: + bl MOD59_021D9D78 + bl FUN_0200E308 + cmp r0, #1 + bne _021D99E2 + add r0, r4, #0 + bl MOD59_021D9C68 + add r0, r4, #0 + bl MOD59_021D9BD0 + add r0, r6, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + mov r6, #1 +_021D99E2: + add r0, r6, #0 + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 +_021D99E8: .word 0xFFFFE0FF +_021D99EC: .word 0x04001000 +_021D99F0: .word MOD59_021D9A14 +_021D99F4: .word 0x00000406 + thumb_func_end MOD59_021D9898 + + thumb_func_start MOD59_021D99F8 +MOD59_021D99F8: ; 0x021D99F8 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + ldr r4, [r0] + add r0, r5, #0 + bl OverlayManager_FreeData + add r0, r4, #0 + bl FUN_020168D0 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD59_021D99F8 + + thumb_func_start MOD59_021D9A14 +MOD59_021D9A14: ; 0x021D9A14 + ldr r3, _021D9A1C ; =FUN_0201AB60 + ldr r0, [r0, #4] + bx r3 + nop +_021D9A1C: .word FUN_0201AB60 + thumb_func_end MOD59_021D9A14 + + thumb_func_start MOD59_021D9A20 +MOD59_021D9A20: ; 0x021D9A20 + push {r3, r4, r5, lr} + sub sp, #0xb8 + ldr r5, _021D9BB4 ; =0x021DA0D4 + add r4, r0, #0 + add r3, sp, #0x90 + mov r2, #5 +_021D9A2C: + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _021D9A2C + add r0, sp, #0x90 + bl FUN_0201E66C + ldr r0, [r4] + bl FUN_02016B94 + add r3, sp, #0x80 + ldr r5, _021D9BB8 ; =0x021DA054 + str r0, [r4, #4] + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl FUN_02016BBC + ldr r5, _021D9BBC ; =0x021DA080 + add r3, sp, #0x64 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + ldr r0, [r4, #4] + mov r3, #0 + bl FUN_02016C18 + ldr r3, [r4] + mov r0, #2 + mov r1, #0x20 + mov r2, #0 + bl FUN_02017F18 + ldr r0, [r4, #4] + mov r1, #2 + bl FUN_02018744 + ldr r5, _021D9BC0 ; =0x021DA09C + add r3, sp, #0x48 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #0 + str r0, [r3] + ldr r0, [r4, #4] + add r3, r1, #0 + bl FUN_02016C18 + mov r3, #0 + str r3, [sp] + str r3, [sp, #4] + str r3, [sp, #8] + ldr r0, [r4] + mov r1, #1 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + bl FUN_0200687C + mov r3, #0 + str r3, [sp] + str r3, [sp, #4] + str r3, [sp, #8] + ldr r0, [r4] + mov r1, #4 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + bl FUN_020068C8 + ldr r5, _021D9BC4 ; =0x021DA064 + add r3, sp, #0x2c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + ldr r0, [r4, #4] + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #2 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + mov r3, #1 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #5 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + mov r3, #1 + bl FUN_020068C8 + ldr r5, _021D9BC8 ; =0x021DA0B8 + add r3, sp, #0x10 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + ldr r0, [r4, #4] + mov r3, #0 + bl FUN_02016C18 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + str r1, [sp, #8] + ldr r0, [r4] + mov r3, #3 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #3 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x88 + add r3, r1, #0 + bl FUN_020068C8 + mov r2, #0 + str r2, [sp] + ldr r0, [r4] + mov r1, #6 + str r0, [sp, #4] + mov r0, #0x88 + add r3, r2, #0 + bl FUN_02006930 + ldr r2, [r4] + mov r0, #0 + mov r1, #0x20 + bl FUN_02002ED0 + mov r0, #0 + add r1, r0, #0 + bl FUN_02017FE4 + mov r0, #4 + mov r1, #0 + bl FUN_02017FE4 + mov r2, #0xc + ldr r0, _021D9BCC ; =0x04000050 + mov r1, #2 + mov r3, #4 + str r2, [sp] + bl G2x_SetBlendAlpha_ + add sp, #0xb8 + pop {r3, r4, r5, pc} + nop +_021D9BB4: .word MOD59_021DA0D4 +_021D9BB8: .word MOD59_021DA054 +_021D9BBC: .word MOD59_021DA080 +_021D9BC0: .word MOD59_021DA09C +_021D9BC4: .word MOD59_021DA064 +_021D9BC8: .word MOD59_021DA0B8 +_021D9BCC: .word 0x04000050 + thumb_func_end MOD59_021D9A20 + + thumb_func_start MOD59_021D9BD0 +MOD59_021D9BD0: ; 0x021D9BD0 + push {r4, lr} + add r4, r0, #0 + mov r0, #0 + add r1, r0, #0 + bl FUN_0201797C + mov r0, #1 + mov r1, #0 + bl FUN_0201797C + mov r0, #2 + mov r1, #0 + bl FUN_0201797C + mov r0, #3 + mov r1, #0 + bl FUN_0201797C + mov r0, #4 + mov r1, #0 + bl FUN_0201797C + mov r0, #5 + mov r1, #0 + bl FUN_0201797C + mov r0, #6 + mov r1, #0 + bl FUN_0201797C + mov r0, #7 + mov r1, #0 + bl FUN_0201797C + ldr r0, _021D9C44 ; =0x04000050 + mov r1, #0 + strh r1, [r0] + ldr r0, [r4, #4] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #4] + mov r1, #1 + bl FUN_020178A0 + ldr r0, [r4, #4] + mov r1, #0 + bl FUN_020178A0 + ldr r0, [r4, #4] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #4] + bl FreeToHeap + pop {r4, pc} + nop +_021D9C44: .word 0x04000050 + thumb_func_end MOD59_021D9BD0 + + thumb_func_start MOD59_021D9C48 +MOD59_021D9C48: ; 0x021D9C48 + push {r4, lr} + add r4, r0, #0 + ldr r2, _021D9C64 ; =0x00000225 + ldr r3, [r4] + mov r0, #1 + mov r1, #0x1a + bl NewMsgDataFromNarc + str r0, [r4, #8] + bl FUN_0201BD5C + mov r0, #0 + str r0, [r4, #0xc] + pop {r4, pc} + .align 2, 0 +_021D9C64: .word 0x00000225 + thumb_func_end MOD59_021D9C48 + + thumb_func_start MOD59_021D9C68 +MOD59_021D9C68: ; 0x021D9C68 + ldr r3, _021D9C70 ; =DestroyMsgData + ldr r0, [r0, #8] + bx r3 + nop +_021D9C70: .word DestroyMsgData + thumb_func_end MOD59_021D9C68 + + thumb_func_start MOD59_021D9C74 +MOD59_021D9C74: ; 0x021D9C74 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r4, r0, #0 + ldr r0, [r4, #0xc] + str r1, [sp, #0x10] + add r7, r3, #0 + mov r5, #0 + cmp r0, #3 + bhi _021D9D66 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D9C92: ; jump table + .short _021D9C9A - _021D9C92 - 2 ; case 0 + .short _021D9D24 - _021D9C92 - 2 ; case 1 + .short _021D9D36 - _021D9C92 - 2 ; case 2 + .short _021D9D50 - _021D9C92 - 2 ; case 3 +_021D9C9A: + mov r0, #2 + add r1, r5, #0 + bl FUN_0201797C + mov r0, #1 + ldr r1, [r4] + lsl r0, r0, #0xa + bl String_ctor + add r6, r0, #0 + ldr r0, [r4, #8] + ldr r1, [sp, #0x10] + add r2, r6, #0 + bl ReadMsgDataIntoString + add r1, r4, #0 + ldr r0, [r4, #4] + ldr r2, _021D9D6C ; =0x021DA04C + add r1, #0x10 + bl FUN_02019150 + add r1, r5, #0 + mov r0, #1 + lsl r0, r0, #8 + str r0, [sp] + mov r0, #0xc0 + str r0, [sp, #4] + add r0, r4, #0 + add r0, #0x10 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_020196F4 + add r0, r5, #0 + add r1, r6, #0 + add r2, r0, #0 + bl FUN_02002F08 + mov r1, #1 + lsl r1, r1, #8 + sub r0, r1, r0 + lsr r3, r0, #1 + str r7, [sp] + add r1, r5, #0 + ldr r0, _021D9D70 ; =0x000F0200 + str r1, [sp, #4] + str r0, [sp, #8] + add r0, r4, #0 + add r0, #0x10 + add r2, r6, #0 + str r1, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r6, #0 + bl String_dtor + add r0, r4, #0 + add r0, #0x10 + bl FUN_020191D0 + mov r0, #2 + mov r1, #1 + bl FUN_0201797C + mov r0, #0xf0 + str r0, [r4, #0x24] + mov r0, #1 + str r0, [r4, #0xc] + b _021D9D66 +_021D9D24: + ldr r0, [r4, #0x24] + cmp r0, #0 + beq _021D9D30 + sub r0, r0, #1 + str r0, [r4, #0x24] + b _021D9D66 +_021D9D30: + mov r0, #2 + str r0, [r4, #0xc] + b _021D9D66 +_021D9D36: + ldr r0, _021D9D74 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + and r0, r1 + cmp r0, #1 + beq _021D9D4A + mov r0, #2 + and r0, r1 + cmp r0, #2 + bne _021D9D66 +_021D9D4A: + mov r0, #3 + str r0, [r4, #0xc] + b _021D9D66 +_021D9D50: + add r0, r4, #0 + add r0, #0x10 + bl FUN_02019178 + ldr r0, [r4, #4] + mov r1, #2 + bl FUN_02018744 + add r0, r5, #0 + str r0, [r4, #0xc] + mov r5, #1 +_021D9D66: + add r0, r5, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_021D9D6C: .word MOD59_021DA04C +_021D9D70: .word 0x000F0200 +_021D9D74: .word gMain + thumb_func_end MOD59_021D9C74 + + thumb_func_start MOD59_021D9D78 +MOD59_021D9D78: ; 0x021D9D78 + push {r3, lr} + ldr r1, [r0, #0x20] + mov r2, #3 + add r3, r1, #4 + str r3, [r0, #0x20] + ldr r0, [r0, #4] + mov r1, #1 + asr r3, r3, #4 + bl FUN_020179E0 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD59_021D9D78 + + .rodata + + .global MOD59_021DA04C +MOD59_021DA04C: ; 0x021DA04C + .byte 0x02, 0x00, 0x00, 0x20, 0x18, 0x01, 0x01, 0x00 + + .global MOD59_021DA054 +MOD59_021DA054: ; 0x021DA054 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD59_021DA064 +MOD59_021DA064: ; 0x021DA064 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD59_021DA080 +MOD59_021DA080: ; 0x021DA080 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD59_021DA09C +MOD59_021DA09C: ; 0x021DA09C + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD59_021DA0B8 +MOD59_021DA0B8: ; 0x021DA0B8 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x01, 0x03, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD59_021DA0D4 +MOD59_021DA0D4: ; 0x021DA0D4 + .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 From a3d3445857aef18c6132eedd1fbbb215ae88a4f5 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 30 Oct 2020 20:44:22 +0000 Subject: [PATCH 05/59] split some more of mod 5 and decomp a func in it --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 5 + arm9/modules/05/asm/mod05_021E72FC_asm1.s | 78 +++ arm9/modules/05/asm/mod05_021E72FC_asm2.s | 172 +++++++ arm9/modules/05/asm/mod05_021E7504.s | 316 ++++++++++++ arm9/modules/05/asm/module_05.s | 578 ---------------------- arm9/modules/05/include/mod05_021E72FC.h | 8 + arm9/modules/05/src/mod05_021E72FC_src.c | 18 + 8 files changed, 598 insertions(+), 579 deletions(-) create mode 100644 arm9/modules/05/asm/mod05_021E72FC_asm1.s create mode 100644 arm9/modules/05/asm/mod05_021E72FC_asm2.s create mode 100644 arm9/modules/05/asm/mod05_021E7504.s create mode 100644 arm9/modules/05/include/mod05_021E72FC.h create mode 100644 arm9/modules/05/src/mod05_021E72FC_src.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 29df73804..c6a38a910 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ add_compile_options(-fms-extensions) file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) -target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include) +target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include arm9/modules/05/include) add_executable(calcrom .travis/calcrom/calcrom.cpp) target_include_directories(calcrom PRIVATE /usr/local/include) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 127840965..eb4e1fa10 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -554,6 +554,11 @@ Overlay MODULE_05 Object mod05_021E5C8C.o Object mod05_021E5E10.o Object mod05_021E5FD8.o + #kinda awkward split, sorry + Object mod05_021E72FC_asm1.o + Object mod05_021E72FC_src.o + Object mod05_021E72FC_asm2.o + Object mod05_021E7504.o Object module_05.o } diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm1.s b/arm9/modules/05/asm/mod05_021E72FC_asm1.s new file mode 100644 index 000000000..2bc62fca6 --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E72FC_asm1.s @@ -0,0 +1,78 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + #in asm2 + .extern MOD05_021E73B4 + .extern MOD05_021E74D4 + + thumb_func_start MOD05_021E72FC +MOD05_021E72FC: ; 0x021E72FC + push {r4, r5, r6, lr} + add r6, r1, #0 + add r5, r0, #0 + add r0, r6, #0 + bl FUN_020553A0 + bl FUN_02058720 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + add r0, r4, #0 + bl FUN_02054B30 + cmp r0, #1 + bne _021E731E + mov r2, #3 + b _021E734C +_021E731E: + add r0, r4, #0 + bl FUN_02054B3C + cmp r0, #1 + bne _021E732C + mov r2, #2 + b _021E734C +_021E732C: + add r0, r4, #0 + bl FUN_02054B48 + cmp r0, #1 + bne _021E733A + mov r2, #0 + b _021E734C +_021E733A: + add r0, r4, #0 + bl FUN_02054B54 + cmp r0, #1 + bne _021E7348 + mov r2, #1 + b _021E734C +_021E7348: + mov r0, #0 + pop {r4, r5, r6, pc} +_021E734C: + add r0, r5, #0 + add r1, r6, #0 + bl MOD05_021E7358 + mov r0, #1 + pop {r4, r5, r6, pc} + + thumb_func_start MOD05_021E7358 +MOD05_021E7358: ; 0x021E7358 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + mov r0, #0x18 + add r6, r1, #0 + add r7, r2, #0 + bl MOD05_021E74D4 + add r4, r0, #0 + str r5, [r4, #0xc] + str r6, [r4, #0x10] + ldr r0, _021E7380 ; =0x00000658 + str r7, [r4] + bl FUN_020054C8 + ldr r1, _021E7384 ; =MOD05_021E73B4 + add r0, r5, #0 + add r2, r4, #0 + bl FUN_020463CC + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E7380: .word 0x00000658 +_021E7384: .word MOD05_021E73B4 diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm2.s b/arm9/modules/05/asm/mod05_021E72FC_asm2.s new file mode 100644 index 000000000..2bfcbe12c --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E72FC_asm2.s @@ -0,0 +1,172 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + #in c file + .extern MOD05_021E7388 + + thumb_func_start MOD05_021E73B4 +MOD05_021E73B4: ; 0x021E73B4 + push {r4, r5, r6, lr} + bl FUN_0204652C + add r4, r0, #0 + ldr r0, [r4, #0x10] + bl FUN_020553A0 + add r6, r0, #0 + bl FUN_02058720 + lsl r0, r0, #0x18 + lsr r5, r0, #0x18 + ldr r0, [r4, #8] + cmp r0, #0 + beq _021E73DC + cmp r0, #1 + beq _021E73EE + cmp r0, #2 + beq _021E741C + b _021E74CA +_021E73DC: + mov r1, #1 + add r0, r6, #0 + lsl r1, r1, #8 + bl FUN_02058410 + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + b _021E74CA +_021E73EE: + ldr r0, [r4, #0x10] + bl FUN_02057254 + cmp r0, #0 + beq _021E74CA + ldr r0, [r4] + mov r1, #0xc + bl FUN_0205AFDC + add r1, r0, #0 + ldr r0, [r4, #0x10] + bl FUN_02057260 + ldr r0, [r4, #0x10] + ldr r1, [r4] + bl FUN_02055304 + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + mov r0, #7 + str r0, [r4, #4] + b _021E74CA +_021E741C: + ldr r0, [r4, #4] + cmp r0, #2 + beq _021E742A + cmp r0, #4 + beq _021E742A + cmp r0, #6 + bne _021E743A +_021E742A: + ldr r0, [r4] + bl MOD05_021E7388 + str r0, [r4] + ldr r0, [r4, #0x10] + ldr r1, [r4] + bl FUN_02055304 +_021E743A: + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] + bne _021E74CA + add r0, r5, #0 + bl FUN_02054B30 + cmp r0, #1 + bne _021E7452 + mov r0, #3 + str r0, [r4] + b _021E748A +_021E7452: + add r0, r5, #0 + bl FUN_02054B3C + cmp r0, #1 + bne _021E7462 + mov r0, #2 + str r0, [r4] + b _021E748A +_021E7462: + add r0, r5, #0 + bl FUN_02054B48 + cmp r0, #1 + bne _021E7472 + mov r0, #0 + str r0, [r4] + b _021E748A +_021E7472: + add r0, r5, #0 + bl FUN_02054B54 + cmp r0, #1 + bne _021E7482 + mov r0, #1 + str r0, [r4] + b _021E748A +_021E7482: + ldr r0, [r4] + bl MOD05_021E7388 + str r0, [r4] +_021E748A: + ldr r0, [r4, #0x10] + ldr r2, [r4] + add r1, r6, #0 + bl FUN_02056B74 + cmp r0, #0 + bne _021E749E + mov r0, #1 + str r0, [r4, #8] + b _021E74CA +_021E749E: + add r0, r6, #0 + mov r1, #0x80 + bl FUN_02058418 + mov r1, #1 + add r0, r6, #0 + lsl r1, r1, #8 + bl FUN_02058418 + ldr r0, [r4, #0x10] + ldr r1, [r4] + bl FUN_02055304 + add r0, r4, #0 + bl MOD05_021E74F8 + ldr r0, _021E74D0 ; =0x00000658 + mov r1, #0 + bl FUN_020054F0 + mov r0, #1 + pop {r4, r5, r6, pc} +_021E74CA: + mov r0, #0 + pop {r4, r5, r6, pc} + nop +_021E74D0: .word 0x00000658 + + thumb_func_start MOD05_021E74D4 +MOD05_021E74D4: ; 0x021E74D4 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #4 + add r1, r5, #0 + bl AllocFromHeapAtEnd + add r4, r0, #0 + bne _021E74E8 + bl ErrorHandling +_021E74E8: + add r0, r4, #0 + mov r1, #0 + add r2, r5, #0 + bl memset + add r0, r4, #0 + pop {r3, r4, r5, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E74F8 +MOD05_021E74F8: ; 0x021E74F8 + ldr r3, _021E7500 ; =FUN_02016A8C + add r1, r0, #0 + mov r0, #4 + bx r3 + .balign 4, 0 +_021E7500: .word FUN_02016A8C diff --git a/arm9/modules/05/asm/mod05_021E7504.s b/arm9/modules/05/asm/mod05_021E7504.s new file mode 100644 index 000000000..d7f960b27 --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E7504.s @@ -0,0 +1,316 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E7504 +MOD05_021E7504: ; 0x021E7504 + add r1, r0, #0 + ldr r0, [r1, #0x10] + cmp r0, #3 + bhi _021E7536 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021E7518: ; jump table + .short _021E7520 - _021E7518 - 2 ; case 0 + .short _021E752C - _021E7518 - 2 ; case 1 + .short _021E7526 - _021E7518 - 2 ; case 2 + .short _021E7532 - _021E7518 - 2 ; case 3 +_021E7520: + mov r0, #2 + str r0, [r1, #0x10] + b _021E7536 +_021E7526: + mov r0, #1 + str r0, [r1, #0x10] + b _021E7536 +_021E752C: + mov r0, #3 + str r0, [r1, #0x10] + b _021E7536 +_021E7532: + mov r0, #0 + str r0, [r1, #0x10] +_021E7536: + ldr r0, [r1] + ldr r3, _021E7540 ; =FUN_02055304 + ldr r0, [r0, #0x38] + ldr r1, [r1, #0x10] + bx r3 + .balign 4, 0 +_021E7540: .word FUN_02055304 + + thumb_func_start MOD05_021E7544 +MOD05_021E7544: ; 0x021E7544 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r1, #0 + add r7, r0, #0 + ldr r0, [r5] + ldr r0, [r0, #0x38] + bl FUN_020553A0 + add r6, r0, #0 + ldr r0, [r5, #8] + cmp r0, #0 + beq _021E7564 + cmp r0, #1 + beq _021E756E + add sp, #0x24 + pop {r4, r5, r6, r7, pc} +_021E7564: + mov r0, #1 + str r0, [r5, #8] + ldr r0, _021E760C ; =0x0000064F + bl FUN_020054C8 +_021E756E: + ldr r0, [r5, #0xc] + lsr r2, r0, #0x1f + lsl r1, r0, #0x1f + sub r1, r1, r2 + mov r0, #0x1f + ror r1, r0 + add r0, r2, r1 + beq _021E7584 + add r0, r5, #0 + bl MOD05_021E7504 +_021E7584: + add r0, r6, #0 + add r1, sp, #0x18 + bl FUN_02058BA4 + ldr r4, [r5, #0xc] + add r0, r4, #0 + bl _dflt + str r0, [sp, #0x14] + lsl r0, r4, #0xb + str r1, [sp, #0x10] + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7610 ; =0x9999999A + ldr r1, _021E7614 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x10] + bl _dmul + bl _dfix + str r0, [sp, #0x1c] + add r0, r6, #0 + add r1, sp, #0x18 + bl FUN_02058BB4 + ldr r0, [r5, #0xc] + add r0, r0, #1 + str r0, [r5, #0xc] + cmp r0, #0x14 + bne _021E75EA + mov r0, #6 + str r0, [sp] + mov r1, #0 + mov r0, #1 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r0, #2 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_0200E1D0 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} +_021E75EA: + ble _021E7606 + bl FUN_0200E308 + cmp r0, #0 + beq _021E7606 + ldr r0, [r5, #4] + mov r1, #1 + str r1, [r0] + add r0, r5, #0 + bl FreeToHeap + add r0, r7, #0 + bl FUN_0200CAB4 +_021E7606: + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop +_021E760C: .word 0x0000064F +_021E7610: .word 0x9999999A +_021E7614: .word 0x40C19999 + + thumb_func_start MOD05_021E7618 +MOD05_021E7618: ; 0x021E7618 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r5, r1, #0 + add r6, r0, #0 + ldr r0, [r5] + ldr r0, [r0, #0x38] + bl FUN_020553A0 + ldr r1, [r5, #8] + add r4, r0, #0 + cmp r1, #0 + beq _021E763C + cmp r1, #1 + beq _021E7694 + cmp r1, #2 + beq _021E771C + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} +_021E763C: + bl FUN_02058914 + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BA4 + ldr r1, [r5, #0xc] + mov r0, #0x14 + sub r6, r0, r1 + add r0, r6, #0 + bl _dflt + str r0, [sp, #0xc] + lsl r0, r6, #0xb + add r7, r1, #0 + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7744 ; =0x9999999A + ldr r1, _021E7748 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0xc] + add r1, r7, #0 + bl _dmul + bl _dfix + str r0, [sp, #0x18] + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BB4 + add r0, r4, #0 + bl MOD05_021F1D8C + ldr r0, _021E774C ; =0x0000064F + bl FUN_020054C8 + mov r0, #1 + str r0, [r5, #8] +_021E7694: + ldr r0, [r5, #0xc] + lsr r2, r0, #0x1f + lsl r1, r0, #0x1f + sub r1, r1, r2 + mov r0, #0x1f + ror r1, r0 + add r0, r2, r1 + beq _021E76AA + add r0, r5, #0 + bl MOD05_021E7504 +_021E76AA: + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BA4 + ldr r1, [r5, #0xc] + mov r0, #0x14 + sub r6, r0, r1 + add r0, r6, #0 + bl _dflt + str r0, [sp, #0x10] + lsl r0, r6, #0xb + add r7, r1, #0 + bl _dflt + add r2, r0, #0 + add r3, r1, #0 + ldr r0, _021E7744 ; =0x9999999A + ldr r1, _021E7748 ; =0x40C19999 + bl _dadd + add r2, r0, #0 + add r3, r1, #0 + ldr r0, [sp, #0x10] + add r1, r7, #0 + bl _dmul + bl _dfix + str r0, [sp, #0x18] + add r0, r4, #0 + add r1, sp, #0x14 + bl FUN_02058BB4 + ldr r0, [r5, #0xc] + add r0, r0, #1 + str r0, [r5, #0xc] + cmp r0, #2 + bne _021E770E + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + add r1, r0, #0 + add r2, r0, #0 + mov r3, #0 + bl FUN_0200E1D0 +_021E770E: + ldr r0, [r5, #0xc] + cmp r0, #0x14 + ble _021E7740 + mov r0, #2 + add sp, #0x20 + str r0, [r5, #8] + pop {r3, r4, r5, r6, r7, pc} +_021E771C: + bl FUN_0200E308 + cmp r0, #0 + beq _021E7740 + ldr r0, [r5] + mov r1, #1 + ldr r0, [r0, #0x38] + bl FUN_02055304 + ldr r0, [r5, #4] + mov r1, #1 + str r1, [r0] + add r0, r5, #0 + bl FreeToHeap + add r0, r6, #0 + bl FUN_0200CAB4 +_021E7740: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E7744: .word 0x9999999A +_021E7748: .word 0x40C19999 +_021E774C: .word 0x0000064F + + thumb_func_start MOD05_021E7750 +MOD05_021E7750: ; 0x021E7750 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #4 + mov r1, #0x14 + add r7, r2, #0 + bl AllocFromHeapAtEnd + add r4, r0, #0 + mov r1, #0 + mov r2, #0x14 + bl MI_CpuFill8 + str r5, [r4] + str r7, [r4, #4] + ldr r0, [r5, #0x38] + bl FUN_020552F8 + str r0, [r4, #0x10] + cmp r6, #0 + beq _021E7786 + ldr r0, _021E7794 ; =MOD05_021E7544 + add r1, r4, #0 + mov r2, #0x64 + bl FUN_0200CA44 + pop {r3, r4, r5, r6, r7, pc} +_021E7786: + ldr r0, _021E7798 ; =MOD05_021E7618 + add r1, r4, #0 + mov r2, #0x64 + bl FUN_0200CA44 + pop {r3, r4, r5, r6, r7, pc} + nop +_021E7794: .word MOD05_021E7544 +_021E7798: .word MOD05_021E7618 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index d8ed3656e..b72324073 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -3,584 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD05_021E72FC -MOD05_021E72FC: ; 0x021E72FC - push {r4, r5, r6, lr} - add r6, r1, #0 - add r5, r0, #0 - add r0, r6, #0 - bl FUN_020553A0 - bl FUN_02058720 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - add r0, r4, #0 - bl FUN_02054B30 - cmp r0, #1 - bne _021E731E - mov r2, #3 - b _021E734C -_021E731E: - add r0, r4, #0 - bl FUN_02054B3C - cmp r0, #1 - bne _021E732C - mov r2, #2 - b _021E734C -_021E732C: - add r0, r4, #0 - bl FUN_02054B48 - cmp r0, #1 - bne _021E733A - mov r2, #0 - b _021E734C -_021E733A: - add r0, r4, #0 - bl FUN_02054B54 - cmp r0, #1 - bne _021E7348 - mov r2, #1 - b _021E734C -_021E7348: - mov r0, #0 - pop {r4, r5, r6, pc} -_021E734C: - add r0, r5, #0 - add r1, r6, #0 - bl MOD05_021E7358 - mov r0, #1 - pop {r4, r5, r6, pc} - - thumb_func_start MOD05_021E7358 -MOD05_021E7358: ; 0x021E7358 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - mov r0, #0x18 - add r6, r1, #0 - add r7, r2, #0 - bl MOD05_021E74D4 - add r4, r0, #0 - str r5, [r4, #0xc] - str r6, [r4, #0x10] - ldr r0, _021E7380 ; =0x00000658 - str r7, [r4] - bl FUN_020054C8 - ldr r1, _021E7384 ; =MOD05_021E73B4 - add r0, r5, #0 - add r2, r4, #0 - bl FUN_020463CC - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E7380: .word 0x00000658 -_021E7384: .word MOD05_021E73B4 - - thumb_func_start MOD05_021E7388 -MOD05_021E7388: ; 0x021E7388 - cmp r0, #3 - bhi _021E73B0 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_021E7398: ; jump table - .short _021E73A0 - _021E7398 - 2 ; case 0 - .short _021E73A8 - _021E7398 - 2 ; case 1 - .short _021E73A4 - _021E7398 - 2 ; case 2 - .short _021E73AC - _021E7398 - 2 ; case 3 -_021E73A0: - mov r0, #2 - bx lr -_021E73A4: - mov r0, #1 - bx lr -_021E73A8: - mov r0, #3 - bx lr -_021E73AC: - mov r0, #0 - bx lr -_021E73B0: - mov r0, #0 - bx lr - - thumb_func_start MOD05_021E73B4 -MOD05_021E73B4: ; 0x021E73B4 - push {r4, r5, r6, lr} - bl FUN_0204652C - add r4, r0, #0 - ldr r0, [r4, #0x10] - bl FUN_020553A0 - add r6, r0, #0 - bl FUN_02058720 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - ldr r0, [r4, #8] - cmp r0, #0 - beq _021E73DC - cmp r0, #1 - beq _021E73EE - cmp r0, #2 - beq _021E741C - b _021E74CA -_021E73DC: - mov r1, #1 - add r0, r6, #0 - lsl r1, r1, #8 - bl FUN_02058410 - ldr r0, [r4, #8] - add r0, r0, #1 - str r0, [r4, #8] - b _021E74CA -_021E73EE: - ldr r0, [r4, #0x10] - bl FUN_02057254 - cmp r0, #0 - beq _021E74CA - ldr r0, [r4] - mov r1, #0xc - bl FUN_0205AFDC - add r1, r0, #0 - ldr r0, [r4, #0x10] - bl FUN_02057260 - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 - ldr r0, [r4, #8] - add r0, r0, #1 - str r0, [r4, #8] - mov r0, #7 - str r0, [r4, #4] - b _021E74CA -_021E741C: - ldr r0, [r4, #4] - cmp r0, #2 - beq _021E742A - cmp r0, #4 - beq _021E742A - cmp r0, #6 - bne _021E743A -_021E742A: - ldr r0, [r4] - bl MOD05_021E7388 - str r0, [r4] - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 -_021E743A: - ldr r0, [r4, #4] - sub r0, r0, #1 - str r0, [r4, #4] - bne _021E74CA - add r0, r5, #0 - bl FUN_02054B30 - cmp r0, #1 - bne _021E7452 - mov r0, #3 - str r0, [r4] - b _021E748A -_021E7452: - add r0, r5, #0 - bl FUN_02054B3C - cmp r0, #1 - bne _021E7462 - mov r0, #2 - str r0, [r4] - b _021E748A -_021E7462: - add r0, r5, #0 - bl FUN_02054B48 - cmp r0, #1 - bne _021E7472 - mov r0, #0 - str r0, [r4] - b _021E748A -_021E7472: - add r0, r5, #0 - bl FUN_02054B54 - cmp r0, #1 - bne _021E7482 - mov r0, #1 - str r0, [r4] - b _021E748A -_021E7482: - ldr r0, [r4] - bl MOD05_021E7388 - str r0, [r4] -_021E748A: - ldr r0, [r4, #0x10] - ldr r2, [r4] - add r1, r6, #0 - bl FUN_02056B74 - cmp r0, #0 - bne _021E749E - mov r0, #1 - str r0, [r4, #8] - b _021E74CA -_021E749E: - add r0, r6, #0 - mov r1, #0x80 - bl FUN_02058418 - mov r1, #1 - add r0, r6, #0 - lsl r1, r1, #8 - bl FUN_02058418 - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 - add r0, r4, #0 - bl MOD05_021E74F8 - ldr r0, _021E74D0 ; =0x00000658 - mov r1, #0 - bl FUN_020054F0 - mov r0, #1 - pop {r4, r5, r6, pc} -_021E74CA: - mov r0, #0 - pop {r4, r5, r6, pc} - nop -_021E74D0: .word 0x00000658 - - thumb_func_start MOD05_021E74D4 -MOD05_021E74D4: ; 0x021E74D4 - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r0, #4 - add r1, r5, #0 - bl AllocFromHeapAtEnd - add r4, r0, #0 - bne _021E74E8 - bl ErrorHandling -_021E74E8: - add r0, r4, #0 - mov r1, #0 - add r2, r5, #0 - bl memset - add r0, r4, #0 - pop {r3, r4, r5, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E74F8 -MOD05_021E74F8: ; 0x021E74F8 - ldr r3, _021E7500 ; =FUN_02016A8C - add r1, r0, #0 - mov r0, #4 - bx r3 - .balign 4, 0 -_021E7500: .word FUN_02016A8C - - thumb_func_start MOD05_021E7504 -MOD05_021E7504: ; 0x021E7504 - add r1, r0, #0 - ldr r0, [r1, #0x10] - cmp r0, #3 - bhi _021E7536 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_021E7518: ; jump table - .short _021E7520 - _021E7518 - 2 ; case 0 - .short _021E752C - _021E7518 - 2 ; case 1 - .short _021E7526 - _021E7518 - 2 ; case 2 - .short _021E7532 - _021E7518 - 2 ; case 3 -_021E7520: - mov r0, #2 - str r0, [r1, #0x10] - b _021E7536 -_021E7526: - mov r0, #1 - str r0, [r1, #0x10] - b _021E7536 -_021E752C: - mov r0, #3 - str r0, [r1, #0x10] - b _021E7536 -_021E7532: - mov r0, #0 - str r0, [r1, #0x10] -_021E7536: - ldr r0, [r1] - ldr r3, _021E7540 ; =FUN_02055304 - ldr r0, [r0, #0x38] - ldr r1, [r1, #0x10] - bx r3 - .balign 4, 0 -_021E7540: .word FUN_02055304 - - thumb_func_start MOD05_021E7544 -MOD05_021E7544: ; 0x021E7544 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r1, #0 - add r7, r0, #0 - ldr r0, [r5] - ldr r0, [r0, #0x38] - bl FUN_020553A0 - add r6, r0, #0 - ldr r0, [r5, #8] - cmp r0, #0 - beq _021E7564 - cmp r0, #1 - beq _021E756E - add sp, #0x24 - pop {r4, r5, r6, r7, pc} -_021E7564: - mov r0, #1 - str r0, [r5, #8] - ldr r0, _021E760C ; =0x0000064F - bl FUN_020054C8 -_021E756E: - ldr r0, [r5, #0xc] - lsr r2, r0, #0x1f - lsl r1, r0, #0x1f - sub r1, r1, r2 - mov r0, #0x1f - ror r1, r0 - add r0, r2, r1 - beq _021E7584 - add r0, r5, #0 - bl MOD05_021E7504 -_021E7584: - add r0, r6, #0 - add r1, sp, #0x18 - bl FUN_02058BA4 - ldr r4, [r5, #0xc] - add r0, r4, #0 - bl _dflt - str r0, [sp, #0x14] - lsl r0, r4, #0xb - str r1, [sp, #0x10] - bl _dflt - add r2, r0, #0 - add r3, r1, #0 - ldr r0, _021E7610 ; =0x9999999A - ldr r1, _021E7614 ; =0x40C19999 - bl _dadd - add r2, r0, #0 - add r3, r1, #0 - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x10] - bl _dmul - bl _dfix - str r0, [sp, #0x1c] - add r0, r6, #0 - add r1, sp, #0x18 - bl FUN_02058BB4 - ldr r0, [r5, #0xc] - add r0, r0, #1 - str r0, [r5, #0xc] - cmp r0, #0x14 - bne _021E75EA - mov r0, #6 - str r0, [sp] - mov r1, #0 - mov r0, #1 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r0, #2 - add r2, r1, #0 - add r3, r1, #0 - bl FUN_0200E1D0 - add sp, #0x24 - pop {r4, r5, r6, r7, pc} -_021E75EA: - ble _021E7606 - bl FUN_0200E308 - cmp r0, #0 - beq _021E7606 - ldr r0, [r5, #4] - mov r1, #1 - str r1, [r0] - add r0, r5, #0 - bl FreeToHeap - add r0, r7, #0 - bl FUN_0200CAB4 -_021E7606: - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - nop -_021E760C: .word 0x0000064F -_021E7610: .word 0x9999999A -_021E7614: .word 0x40C19999 - - thumb_func_start MOD05_021E7618 -MOD05_021E7618: ; 0x021E7618 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x20 - add r5, r1, #0 - add r6, r0, #0 - ldr r0, [r5] - ldr r0, [r0, #0x38] - bl FUN_020553A0 - ldr r1, [r5, #8] - add r4, r0, #0 - cmp r1, #0 - beq _021E763C - cmp r1, #1 - beq _021E7694 - cmp r1, #2 - beq _021E771C - add sp, #0x20 - pop {r3, r4, r5, r6, r7, pc} -_021E763C: - bl FUN_02058914 - add r0, r4, #0 - add r1, sp, #0x14 - bl FUN_02058BA4 - ldr r1, [r5, #0xc] - mov r0, #0x14 - sub r6, r0, r1 - add r0, r6, #0 - bl _dflt - str r0, [sp, #0xc] - lsl r0, r6, #0xb - add r7, r1, #0 - bl _dflt - add r2, r0, #0 - add r3, r1, #0 - ldr r0, _021E7744 ; =0x9999999A - ldr r1, _021E7748 ; =0x40C19999 - bl _dadd - add r2, r0, #0 - add r3, r1, #0 - ldr r0, [sp, #0xc] - add r1, r7, #0 - bl _dmul - bl _dfix - str r0, [sp, #0x18] - add r0, r4, #0 - add r1, sp, #0x14 - bl FUN_02058BB4 - add r0, r4, #0 - bl MOD05_021F1D8C - ldr r0, _021E774C ; =0x0000064F - bl FUN_020054C8 - mov r0, #1 - str r0, [r5, #8] -_021E7694: - ldr r0, [r5, #0xc] - lsr r2, r0, #0x1f - lsl r1, r0, #0x1f - sub r1, r1, r2 - mov r0, #0x1f - ror r1, r0 - add r0, r2, r1 - beq _021E76AA - add r0, r5, #0 - bl MOD05_021E7504 -_021E76AA: - add r0, r4, #0 - add r1, sp, #0x14 - bl FUN_02058BA4 - ldr r1, [r5, #0xc] - mov r0, #0x14 - sub r6, r0, r1 - add r0, r6, #0 - bl _dflt - str r0, [sp, #0x10] - lsl r0, r6, #0xb - add r7, r1, #0 - bl _dflt - add r2, r0, #0 - add r3, r1, #0 - ldr r0, _021E7744 ; =0x9999999A - ldr r1, _021E7748 ; =0x40C19999 - bl _dadd - add r2, r0, #0 - add r3, r1, #0 - ldr r0, [sp, #0x10] - add r1, r7, #0 - bl _dmul - bl _dfix - str r0, [sp, #0x18] - add r0, r4, #0 - add r1, sp, #0x14 - bl FUN_02058BB4 - ldr r0, [r5, #0xc] - add r0, r0, #1 - str r0, [r5, #0xc] - cmp r0, #2 - bne _021E770E - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r1, #4 - str r1, [sp, #8] - add r1, r0, #0 - add r2, r0, #0 - mov r3, #0 - bl FUN_0200E1D0 -_021E770E: - ldr r0, [r5, #0xc] - cmp r0, #0x14 - ble _021E7740 - mov r0, #2 - add sp, #0x20 - str r0, [r5, #8] - pop {r3, r4, r5, r6, r7, pc} -_021E771C: - bl FUN_0200E308 - cmp r0, #0 - beq _021E7740 - ldr r0, [r5] - mov r1, #1 - ldr r0, [r0, #0x38] - bl FUN_02055304 - ldr r0, [r5, #4] - mov r1, #1 - str r1, [r0] - add r0, r5, #0 - bl FreeToHeap - add r0, r6, #0 - bl FUN_0200CAB4 -_021E7740: - add sp, #0x20 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E7744: .word 0x9999999A -_021E7748: .word 0x40C19999 -_021E774C: .word 0x0000064F - - thumb_func_start MOD05_021E7750 -MOD05_021E7750: ; 0x021E7750 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #4 - mov r1, #0x14 - add r7, r2, #0 - bl AllocFromHeapAtEnd - add r4, r0, #0 - mov r1, #0 - mov r2, #0x14 - bl MI_CpuFill8 - str r5, [r4] - str r7, [r4, #4] - ldr r0, [r5, #0x38] - bl FUN_020552F8 - str r0, [r4, #0x10] - cmp r6, #0 - beq _021E7786 - ldr r0, _021E7794 ; =MOD05_021E7544 - add r1, r4, #0 - mov r2, #0x64 - bl FUN_0200CA44 - pop {r3, r4, r5, r6, r7, pc} -_021E7786: - ldr r0, _021E7798 ; =MOD05_021E7618 - add r1, r4, #0 - mov r2, #0x64 - bl FUN_0200CA44 - pop {r3, r4, r5, r6, r7, pc} - nop -_021E7794: .word MOD05_021E7544 -_021E7798: .word MOD05_021E7618 - thumb_func_start MOD05_021E779C MOD05_021E779C: ; 0x021E779C push {r4, lr} diff --git a/arm9/modules/05/include/mod05_021E72FC.h b/arm9/modules/05/include/mod05_021E72FC.h new file mode 100644 index 000000000..82f56cb26 --- /dev/null +++ b/arm9/modules/05/include/mod05_021E72FC.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_MOD05_021E72FC_H +#define POKEDIAMOND_MOD05_021E72FC_H + +#include "nitro/types.h" + +u32 MOD05_021E7388(u32 param0); + +#endif //POKEDIAMOND_MOD05_021E72FC_H diff --git a/arm9/modules/05/src/mod05_021E72FC_src.c b/arm9/modules/05/src/mod05_021E72FC_src.c new file mode 100644 index 000000000..9ab08746f --- /dev/null +++ b/arm9/modules/05/src/mod05_021E72FC_src.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "mod05_021E72FC.h" + +THUMB_FUNC u32 MOD05_021E7388(u32 param0) +{ + switch (param0) + { + case 0: + return 2; + case 2: + return 1; + case 1: + return 3; + case 3: + return 0; + } + return 0; +} From a0406f6ceb255646f9276cc4e61ddd76f6b0a28f Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 31 Oct 2020 11:04:33 +0000 Subject: [PATCH 06/59] decompile MOD05_021E7358 --- arm9/global.inc | 1 + arm9/modules/05/asm/mod05_021E72FC_asm1.s | 23 ----------------------- arm9/modules/05/include/mod05_021E72FC.h | 10 ++++++++++ arm9/modules/05/src/mod05_021E72FC_src.c | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/arm9/global.inc b/arm9/global.inc index 60f00ea29..83745becf 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -6509,6 +6509,7 @@ .extern MOD05_021E7184 .extern MOD05_021E71E8 .extern MOD05_021E72FC +.extern MOD05_021E7358 .extern MOD05_021E7750 .extern MOD05_021E799C .extern MOD05_021E7AC0 diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm1.s b/arm9/modules/05/asm/mod05_021E72FC_asm1.s index 2bc62fca6..84999c303 100644 --- a/arm9/modules/05/asm/mod05_021E72FC_asm1.s +++ b/arm9/modules/05/asm/mod05_021E72FC_asm1.s @@ -53,26 +53,3 @@ _021E734C: bl MOD05_021E7358 mov r0, #1 pop {r4, r5, r6, pc} - - thumb_func_start MOD05_021E7358 -MOD05_021E7358: ; 0x021E7358 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - mov r0, #0x18 - add r6, r1, #0 - add r7, r2, #0 - bl MOD05_021E74D4 - add r4, r0, #0 - str r5, [r4, #0xc] - str r6, [r4, #0x10] - ldr r0, _021E7380 ; =0x00000658 - str r7, [r4] - bl FUN_020054C8 - ldr r1, _021E7384 ; =MOD05_021E73B4 - add r0, r5, #0 - add r2, r4, #0 - bl FUN_020463CC - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E7380: .word 0x00000658 -_021E7384: .word MOD05_021E73B4 diff --git a/arm9/modules/05/include/mod05_021E72FC.h b/arm9/modules/05/include/mod05_021E72FC.h index 82f56cb26..406d6f6ea 100644 --- a/arm9/modules/05/include/mod05_021E72FC.h +++ b/arm9/modules/05/include/mod05_021E72FC.h @@ -3,6 +3,16 @@ #include "nitro/types.h" +typedef struct UnkStruct021E7358 +{ + u32 Unk00; + u8 dummy[8]; + u32 Unk0C; + u32 Unk10; + +} UnkStruct021E7358; + +void MOD05_021E7358(u32 param0, u32 param1, u32 param2); u32 MOD05_021E7388(u32 param0); #endif //POKEDIAMOND_MOD05_021E72FC_H diff --git a/arm9/modules/05/src/mod05_021E72FC_src.c b/arm9/modules/05/src/mod05_021E72FC_src.c index 9ab08746f..90b05ce22 100644 --- a/arm9/modules/05/src/mod05_021E72FC_src.c +++ b/arm9/modules/05/src/mod05_021E72FC_src.c @@ -1,6 +1,21 @@ #include "global.h" #include "mod05_021E72FC.h" +extern UnkStruct021E7358 *MOD05_021E74D4(u32 param0); +extern void FUN_020054C8(u32 param0); +extern MOD05_021E73B4(); +extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2); + +THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2) +{ + UnkStruct021E7358 *res = MOD05_021E74D4(24); + res->Unk0C = param0; + res->Unk10 = param1; + res->Unk00 = param2; + FUN_020054C8(1624); + FUN_020463CC(param0, MOD05_021E73B4, res); +} + THUMB_FUNC u32 MOD05_021E7388(u32 param0) { switch (param0) From ce3a633c5af004dc2d7101d223c95d2a5e1e1471 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 1 Nov 2020 20:11:23 +0000 Subject: [PATCH 07/59] decompile MOD05_021E72FC --- arm9/arm9.lsf | 4 +- ...5_021E72FC_asm2.s => mod05_021E72FC_asm.s} | 0 arm9/modules/05/asm/mod05_021E72FC_asm1.s | 55 ------------------- arm9/modules/05/include/mod05_021E72FC.h | 1 + arm9/modules/05/src/mod05_021E72FC_src.c | 37 +++++++++++++ 5 files changed, 39 insertions(+), 58 deletions(-) rename arm9/modules/05/asm/{mod05_021E72FC_asm2.s => mod05_021E72FC_asm.s} (100%) delete mode 100644 arm9/modules/05/asm/mod05_021E72FC_asm1.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index eb4e1fa10..d3eb80a06 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -554,10 +554,8 @@ Overlay MODULE_05 Object mod05_021E5C8C.o Object mod05_021E5E10.o Object mod05_021E5FD8.o - #kinda awkward split, sorry - Object mod05_021E72FC_asm1.o Object mod05_021E72FC_src.o - Object mod05_021E72FC_asm2.o + Object mod05_021E72FC_asm.o Object mod05_021E7504.o Object module_05.o } diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm2.s b/arm9/modules/05/asm/mod05_021E72FC_asm.s similarity index 100% rename from arm9/modules/05/asm/mod05_021E72FC_asm2.s rename to arm9/modules/05/asm/mod05_021E72FC_asm.s diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm1.s b/arm9/modules/05/asm/mod05_021E72FC_asm1.s deleted file mode 100644 index 84999c303..000000000 --- a/arm9/modules/05/asm/mod05_021E72FC_asm1.s +++ /dev/null @@ -1,55 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - #in asm2 - .extern MOD05_021E73B4 - .extern MOD05_021E74D4 - - thumb_func_start MOD05_021E72FC -MOD05_021E72FC: ; 0x021E72FC - push {r4, r5, r6, lr} - add r6, r1, #0 - add r5, r0, #0 - add r0, r6, #0 - bl FUN_020553A0 - bl FUN_02058720 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - add r0, r4, #0 - bl FUN_02054B30 - cmp r0, #1 - bne _021E731E - mov r2, #3 - b _021E734C -_021E731E: - add r0, r4, #0 - bl FUN_02054B3C - cmp r0, #1 - bne _021E732C - mov r2, #2 - b _021E734C -_021E732C: - add r0, r4, #0 - bl FUN_02054B48 - cmp r0, #1 - bne _021E733A - mov r2, #0 - b _021E734C -_021E733A: - add r0, r4, #0 - bl FUN_02054B54 - cmp r0, #1 - bne _021E7348 - mov r2, #1 - b _021E734C -_021E7348: - mov r0, #0 - pop {r4, r5, r6, pc} -_021E734C: - add r0, r5, #0 - add r1, r6, #0 - bl MOD05_021E7358 - mov r0, #1 - pop {r4, r5, r6, pc} diff --git a/arm9/modules/05/include/mod05_021E72FC.h b/arm9/modules/05/include/mod05_021E72FC.h index 406d6f6ea..3aba6c4d2 100644 --- a/arm9/modules/05/include/mod05_021E72FC.h +++ b/arm9/modules/05/include/mod05_021E72FC.h @@ -12,6 +12,7 @@ typedef struct UnkStruct021E7358 } UnkStruct021E7358; +BOOL MOD05_021E72FC(u32 param0, u32 param1); void MOD05_021E7358(u32 param0, u32 param1, u32 param2); u32 MOD05_021E7388(u32 param0); diff --git a/arm9/modules/05/src/mod05_021E72FC_src.c b/arm9/modules/05/src/mod05_021E72FC_src.c index 90b05ce22..63dc6a7cd 100644 --- a/arm9/modules/05/src/mod05_021E72FC_src.c +++ b/arm9/modules/05/src/mod05_021E72FC_src.c @@ -5,6 +5,43 @@ extern UnkStruct021E7358 *MOD05_021E74D4(u32 param0); extern void FUN_020054C8(u32 param0); extern MOD05_021E73B4(); extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2); +extern void FUN_020553A0(u32 param0); +extern u32 FUN_02058720(void); +extern BOOL FUN_02054B30(u8 param0); +extern BOOL FUN_02054B3C(u8 param0); +extern BOOL FUN_02054B48(u8 param0); +extern BOOL FUN_02054B54(u8 param0); + +THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1) +{ + FUN_020553A0(param1); + u8 res = (u8)FUN_02058720(); + u32 r2; + if (FUN_02054B30(res) == TRUE) + { + r2 = 3; + goto label; + } + else if (FUN_02054B3C(res) == TRUE) + { + r2 = 2; + goto label; + } + else if (FUN_02054B48(res) == TRUE) + { + r2 = 0; + goto label; + } + else if (FUN_02054B54(res) == TRUE) + { + r2 = 1; + goto label; + } + return FALSE; +label: + MOD05_021E7358(param0, param1, r2); + return TRUE; +} THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2) { From 87a52afbb4b9a2cb8c29bde3078e9800198df084 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 1 Nov 2020 21:53:36 +0000 Subject: [PATCH 08/59] decompile MOD59_Init --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 5 +- arm9/asm/unk_02087A6C.s | 2 +- arm9/global.inc | 2 +- ...{mod59_021D74E0.s => mod59_021D74E0_asm.s} | 63 ------------------- arm9/modules/59/include/mod59_021D74E0.h | 32 ++++++++++ arm9/modules/59/src/mod59_021D74E0_src.c | 29 +++++++++ .../src/{unk_02006234.c => overlay_manager.c} | 9 +-- include/main.h | 2 +- include/overlay_manager.h | 14 +++++ 10 files changed, 83 insertions(+), 77 deletions(-) rename arm9/modules/59/asm/{mod59_021D74E0.s => mod59_021D74E0_asm.s} (98%) create mode 100644 arm9/modules/59/include/mod59_021D74E0.h create mode 100644 arm9/modules/59/src/mod59_021D74E0_src.c rename arm9/src/{unk_02006234.c => overlay_manager.c} (78%) create mode 100644 include/overlay_manager.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c6a38a910..dc3f7fcce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ add_compile_options(-fms-extensions) file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) -target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include arm9/modules/05/include) +target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/59/include arm9/modules/63/include) add_executable(calcrom .travis/calcrom/calcrom.cpp) target_include_directories(calcrom PRIVATE /usr/local/include) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d3eb80a06..fd44aa0d6 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -19,7 +19,7 @@ Static arm9 Object unk_02005CFC.o Object poke_overlay.o Object unk_020061E8.o - Object unk_02006234.o + Object overlay_manager.o Object filesystem.o Object unk_02006864.o Object unk_02006D98.o @@ -940,7 +940,8 @@ Overlay MODULE_59 { ##Rowan's intro## After arm9 - Object mod59_021D74E0.o + Object mod59_021D74E0_src.o + Object mod59_021D74E0_asm.o Object mod59_021D9868.o } diff --git a/arm9/asm/unk_02087A6C.s b/arm9/asm/unk_02087A6C.s index d51eab432..b343ac2c4 100644 --- a/arm9/asm/unk_02087A6C.s +++ b/arm9/asm/unk_02087A6C.s @@ -5,7 +5,7 @@ .global UNK_020FD144 UNK_020FD144: ; 0x020FD144 - .word MOD59_021D74E0, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID + .word MOD59_Init, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID .text diff --git a/arm9/global.inc b/arm9/global.inc index 83745becf..ba5cc7bf4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7467,7 +7467,7 @@ .extern MOD58_021D9A20 .extern MOD58_021D9B8C .extern MOD58_021D9BF0 -.extern MOD59_021D74E0 +.extern MOD59_Init .extern MOD59_021D7564 .extern MOD59_021D76C0 .extern MOD59_021D9868 diff --git a/arm9/modules/59/asm/mod59_021D74E0.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s similarity index 98% rename from arm9/modules/59/asm/mod59_021D74E0.s rename to arm9/modules/59/asm/mod59_021D74E0_asm.s index abc37879f..8358f7688 100644 --- a/arm9/modules/59/asm/mod59_021D74E0.s +++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s @@ -3,69 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD59_021D74E0 -MOD59_021D74E0: ; 0x021D74E0 - push {r3, r4, r5, lr} - mov r2, #1 - add r5, r0, #0 - mov r0, #3 - mov r1, #0x52 - lsl r2, r2, #0x12 - bl FUN_0201681C - add r0, r5, #0 - mov r1, #0xb4 - mov r2, #0x52 - bl OverlayManager_CreateAndGetData - mov r1, #0 - mov r2, #0xb4 - add r4, r0, #0 - bl memset - mov r0, #0x52 - str r0, [r4] - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #4] - bl Sav2_PlayerData_GetOptionsAddr - mov r1, #0 - str r0, [r4, #8] - str r1, [r4, #0xc] - str r1, [r4, #0x10] - str r1, [r4, #0x14] - ldr r0, [r4, #8] - add r2, r1, #0 - str r0, [sp] - mov r0, #0x52 - mov r3, #7 - bl FUN_02077A84 - str r0, [r4, #0x70] - ldr r0, [r4, #8] - mov r1, #3 - str r0, [sp] - mov r0, #0x52 - mov r2, #0 - mov r3, #7 - bl FUN_02077A84 - str r0, [r4, #0x74] - add r0, r4, #0 - mov r1, #0 - add r0, #0x88 - strb r1, [r0] - add r0, r4, #0 - add r0, #0x89 - strb r1, [r0] - add r0, r4, #0 - add r0, #0x8a - strb r1, [r0] - add r0, r4, #0 - add r0, #0x8b - strb r1, [r0] - add r4, #0x90 - str r1, [r4] - mov r0, #1 - pop {r3, r4, r5, pc} - thumb_func_end MOD59_021D74E0 - thumb_func_start MOD59_021D7564 MOD59_021D7564: ; 0x021D7564 push {r3, r4, r5, r6, lr} diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h new file mode 100644 index 000000000..9342913da --- /dev/null +++ b/arm9/modules/59/include/mod59_021D74E0.h @@ -0,0 +1,32 @@ +#ifndef POKEDIAMOND_MOD59_021D74E0_H +#define POKEDIAMOND_MOD59_021D74E0_H + +#include "nitro/types.h" +#include "options.h" +#include "save_block_2.h" +#include "main.h" + +typedef struct MOD59_OverlayData +{ + u32 heap_id; + struct SaveBlock2 *sav2; + struct Options *options; + u32 Unk0C; + u32 Unk10; + u32 Unk14; + u8 padding[0x58]; + u32 Unk70; + u32 Unk74; + u8 padding2[0x10]; + u8 Unk88; + u8 Unk89; + u8 Unk8A; + u8 Unk8B; + u8 padding3[4]; + u32 Unk90; + //TODO pad to 0xb4 +} MOD59_OverlayData; + +BOOL MOD59_Init(struct UnkStruct_02006234 *param0); + +#endif //POKEDIAMOND_MOD59_021D74E0_H diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c new file mode 100644 index 000000000..9fccfd954 --- /dev/null +++ b/arm9/modules/59/src/mod59_021D74E0_src.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "player_data.h" +#include "overlay_manager.h" +#include "mod59_021D74E0.h" + +extern void FUN_0201681C(u32 param0, u32 heap_id, u32 param2); +extern u32 FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options); + +THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0) +{ + //note: 0xb4 is likely the overlay data struct size, once struct is padded replace with sizeof + FUN_0201681C(3, 0x52, 1 << 18); + MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, 0xb4, 0x52); + (void)memset((void *)data, 0, 0xb4); + + data->heap_id = 0x52; + int *field18 = OverlayManager_GetField18(param0); + data->sav2 = (struct SaveBlock2 *)field18[2]; //? + data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2); + data->Unk14 = data->Unk10 = data->Unk0C = 0; + data->Unk70 = FUN_02077A84(0x52, 0, 0, 7, data->options); + data->Unk74 = FUN_02077A84(0x52, 3, 0, 7, data->options); + data->Unk88 = 0; + data->Unk89 = 0; + data->Unk8A = 0; + data->Unk8B = 0; + data->Unk90 = 0; + return TRUE; +} diff --git a/arm9/src/unk_02006234.c b/arm9/src/overlay_manager.c similarity index 78% rename from arm9/src/unk_02006234.c rename to arm9/src/overlay_manager.c index a493311de..a59e15ac7 100644 --- a/arm9/src/unk_02006234.c +++ b/arm9/src/overlay_manager.c @@ -2,14 +2,7 @@ #include "main.h" #include "poke_overlay.h" #include "heap.h" - -struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id); //todo header? -void OverlayManager_delete(struct UnkStruct_02006234 * a0); -void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id); -void * OverlayManager_GetData(struct UnkStruct_02006234 * a0); -void OverlayManager_FreeData(struct UnkStruct_02006234 * a0); -int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0); -BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0); +#include "overlay_manager.h" THUMB_FUNC struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id) { diff --git a/include/main.h b/include/main.h index 499861a8b..d40e22f94 100644 --- a/include/main.h +++ b/include/main.h @@ -22,7 +22,7 @@ struct UnkStruct_02006234 u32 unk14; int * unk18; void * unk1C; - u32 unk20; + struct SaveBlock2 * unk20; u32 unk24; }; diff --git a/include/overlay_manager.h b/include/overlay_manager.h new file mode 100644 index 000000000..c189ed3c5 --- /dev/null +++ b/include/overlay_manager.h @@ -0,0 +1,14 @@ +#ifndef POKEDIAMOND_OVERLAY_MANAGER_H +#define POKEDIAMOND_OVERLAY_MANAGER_H + +#include "nitro/types.h" + +struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id); +void OverlayManager_delete(struct UnkStruct_02006234 * a0); +void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id); +void * OverlayManager_GetData(struct UnkStruct_02006234 * a0); +void OverlayManager_FreeData(struct UnkStruct_02006234 * a0); +int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0); +BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0); + +#endif //POKEDIAMOND_OVERLAY_MANAGER_H From cf5eab9389a246354ea5a2a1f24cb281924e12ec Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 4 Nov 2020 14:30:38 +0000 Subject: [PATCH 09/59] finish mod05_021E72FC --- arm9/arm9.lsf | 3 +- arm9/modules/05/asm/mod05_021E72FC_asm.s | 172 ----------------------- arm9/modules/05/include/mod05_021E72FC.h | 6 +- arm9/modules/05/src/mod05_021E72FC.c | 161 +++++++++++++++++++++ arm9/modules/05/src/mod05_021E72FC_src.c | 70 --------- 5 files changed, 167 insertions(+), 245 deletions(-) delete mode 100644 arm9/modules/05/asm/mod05_021E72FC_asm.s create mode 100644 arm9/modules/05/src/mod05_021E72FC.c delete mode 100644 arm9/modules/05/src/mod05_021E72FC_src.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index fd44aa0d6..6eab7a85d 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -554,8 +554,7 @@ Overlay MODULE_05 Object mod05_021E5C8C.o Object mod05_021E5E10.o Object mod05_021E5FD8.o - Object mod05_021E72FC_src.o - Object mod05_021E72FC_asm.o + Object mod05_021E72FC.o Object mod05_021E7504.o Object module_05.o } diff --git a/arm9/modules/05/asm/mod05_021E72FC_asm.s b/arm9/modules/05/asm/mod05_021E72FC_asm.s deleted file mode 100644 index 2bfcbe12c..000000000 --- a/arm9/modules/05/asm/mod05_021E72FC_asm.s +++ /dev/null @@ -1,172 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - #in c file - .extern MOD05_021E7388 - - thumb_func_start MOD05_021E73B4 -MOD05_021E73B4: ; 0x021E73B4 - push {r4, r5, r6, lr} - bl FUN_0204652C - add r4, r0, #0 - ldr r0, [r4, #0x10] - bl FUN_020553A0 - add r6, r0, #0 - bl FUN_02058720 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - ldr r0, [r4, #8] - cmp r0, #0 - beq _021E73DC - cmp r0, #1 - beq _021E73EE - cmp r0, #2 - beq _021E741C - b _021E74CA -_021E73DC: - mov r1, #1 - add r0, r6, #0 - lsl r1, r1, #8 - bl FUN_02058410 - ldr r0, [r4, #8] - add r0, r0, #1 - str r0, [r4, #8] - b _021E74CA -_021E73EE: - ldr r0, [r4, #0x10] - bl FUN_02057254 - cmp r0, #0 - beq _021E74CA - ldr r0, [r4] - mov r1, #0xc - bl FUN_0205AFDC - add r1, r0, #0 - ldr r0, [r4, #0x10] - bl FUN_02057260 - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 - ldr r0, [r4, #8] - add r0, r0, #1 - str r0, [r4, #8] - mov r0, #7 - str r0, [r4, #4] - b _021E74CA -_021E741C: - ldr r0, [r4, #4] - cmp r0, #2 - beq _021E742A - cmp r0, #4 - beq _021E742A - cmp r0, #6 - bne _021E743A -_021E742A: - ldr r0, [r4] - bl MOD05_021E7388 - str r0, [r4] - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 -_021E743A: - ldr r0, [r4, #4] - sub r0, r0, #1 - str r0, [r4, #4] - bne _021E74CA - add r0, r5, #0 - bl FUN_02054B30 - cmp r0, #1 - bne _021E7452 - mov r0, #3 - str r0, [r4] - b _021E748A -_021E7452: - add r0, r5, #0 - bl FUN_02054B3C - cmp r0, #1 - bne _021E7462 - mov r0, #2 - str r0, [r4] - b _021E748A -_021E7462: - add r0, r5, #0 - bl FUN_02054B48 - cmp r0, #1 - bne _021E7472 - mov r0, #0 - str r0, [r4] - b _021E748A -_021E7472: - add r0, r5, #0 - bl FUN_02054B54 - cmp r0, #1 - bne _021E7482 - mov r0, #1 - str r0, [r4] - b _021E748A -_021E7482: - ldr r0, [r4] - bl MOD05_021E7388 - str r0, [r4] -_021E748A: - ldr r0, [r4, #0x10] - ldr r2, [r4] - add r1, r6, #0 - bl FUN_02056B74 - cmp r0, #0 - bne _021E749E - mov r0, #1 - str r0, [r4, #8] - b _021E74CA -_021E749E: - add r0, r6, #0 - mov r1, #0x80 - bl FUN_02058418 - mov r1, #1 - add r0, r6, #0 - lsl r1, r1, #8 - bl FUN_02058418 - ldr r0, [r4, #0x10] - ldr r1, [r4] - bl FUN_02055304 - add r0, r4, #0 - bl MOD05_021E74F8 - ldr r0, _021E74D0 ; =0x00000658 - mov r1, #0 - bl FUN_020054F0 - mov r0, #1 - pop {r4, r5, r6, pc} -_021E74CA: - mov r0, #0 - pop {r4, r5, r6, pc} - nop -_021E74D0: .word 0x00000658 - - thumb_func_start MOD05_021E74D4 -MOD05_021E74D4: ; 0x021E74D4 - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r0, #4 - add r1, r5, #0 - bl AllocFromHeapAtEnd - add r4, r0, #0 - bne _021E74E8 - bl ErrorHandling -_021E74E8: - add r0, r4, #0 - mov r1, #0 - add r2, r5, #0 - bl memset - add r0, r4, #0 - pop {r3, r4, r5, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E74F8 -MOD05_021E74F8: ; 0x021E74F8 - ldr r3, _021E7500 ; =FUN_02016A8C - add r1, r0, #0 - mov r0, #4 - bx r3 - .balign 4, 0 -_021E7500: .word FUN_02016A8C diff --git a/arm9/modules/05/include/mod05_021E72FC.h b/arm9/modules/05/include/mod05_021E72FC.h index 3aba6c4d2..6c61c9138 100644 --- a/arm9/modules/05/include/mod05_021E72FC.h +++ b/arm9/modules/05/include/mod05_021E72FC.h @@ -6,7 +6,8 @@ typedef struct UnkStruct021E7358 { u32 Unk00; - u8 dummy[8]; + u32 Unk04; + u32 Unk08; u32 Unk0C; u32 Unk10; @@ -15,5 +16,8 @@ typedef struct UnkStruct021E7358 BOOL MOD05_021E72FC(u32 param0, u32 param1); void MOD05_021E7358(u32 param0, u32 param1, u32 param2); u32 MOD05_021E7388(u32 param0); +BOOL MOD05_021E73B4(UnkStruct021E7358 *param0); +UnkStruct021E7358 *MOD05_021E74D4(u32 param0); +void MOD05_021E74F8(UnkStruct021E7358 *param0); #endif //POKEDIAMOND_MOD05_021E72FC_H diff --git a/arm9/modules/05/src/mod05_021E72FC.c b/arm9/modules/05/src/mod05_021E72FC.c new file mode 100644 index 000000000..2039e1134 --- /dev/null +++ b/arm9/modules/05/src/mod05_021E72FC.c @@ -0,0 +1,161 @@ +#include "global.h" +#include "mod05_021E72FC.h" +#include "heap.h" + +extern void FUN_020054C8(u32 param0); +extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2); +extern u32 FUN_020553A0(u32 param0); +extern u32 FUN_02058720(u32 param0); +extern BOOL FUN_02054B30(u8 param0); +extern BOOL FUN_02054B3C(u8 param0); +extern BOOL FUN_02054B48(u8 param0); +extern BOOL FUN_02054B54(u8 param0); +extern UnkStruct021E7358 *FUN_0204652C(UnkStruct021E7358 *param0); +extern void FUN_02058410(u32 param0, u32 param1); +extern BOOL FUN_02057254(u32 param0); +extern u32 FUN_0205AFDC(u32 param0, u32 param1); +extern void FUN_02057260(u32 param0, u32 param1); +extern void FUN_02055304(u32 param0, u32 param1); +extern BOOL FUN_02056B74(u32 param0, u32 param1, u32 param2); +extern void FUN_02058418(u32 param0, u32 param1); +extern void MOD05_021E74F8(UnkStruct021E7358 *param0); +extern void FUN_020054F0(u32 param0, u32 param1); +extern void FUN_02016A8C(u32 param0, void *param1); + +THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1) +{ + u8 res = (u8)FUN_02058720(FUN_020553A0(param1)); + u32 r2; + if (FUN_02054B30(res) == TRUE) + { + r2 = 3; + goto label; + } + else if (FUN_02054B3C(res) == TRUE) + { + r2 = 2; + goto label; + } + else if (FUN_02054B48(res) == TRUE) + { + r2 = 0; + goto label; + } + else if (FUN_02054B54(res) == TRUE) + { + r2 = 1; + goto label; + } + return FALSE; +label: + MOD05_021E7358(param0, param1, r2); + return TRUE; +} + +THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2) +{ + UnkStruct021E7358 *res = MOD05_021E74D4(24); + res->Unk0C = param0; + res->Unk10 = param1; + res->Unk00 = param2; + FUN_020054C8(1624); + FUN_020463CC(param0, MOD05_021E73B4, res); +} + +THUMB_FUNC u32 MOD05_021E7388(u32 param0) +{ + switch (param0) + { + case 0: + return 2; + case 2: + return 1; + case 1: + return 3; + case 3: + return 0; + } + return 0; +} + +THUMB_FUNC BOOL MOD05_021E73B4(UnkStruct021E7358 *param0) +{ + UnkStruct021E7358 *strct = FUN_0204652C(param0); + u32 res = FUN_020553A0(strct->Unk10); + u8 res2 = (u8)FUN_02058720(res); + switch (strct->Unk08) //Unk08, u32? + { + case 0: + FUN_02058410(res, 1 << 8); + strct->Unk08++; + break; + case 1: + if (!FUN_02057254(strct->Unk10)) + { + break; + } + FUN_02057260(strct->Unk10, FUN_0205AFDC(strct->Unk00, 12)); + FUN_02055304(strct->Unk10, strct->Unk00); + strct->Unk08++; + strct->Unk04 = 7; + break; + case 2: + if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6) + { + strct->Unk00 = MOD05_021E7388(strct->Unk00); + FUN_02055304(strct->Unk10, strct->Unk00); + } + if (--(strct->Unk04)) + { + break; + } + if (FUN_02054B30(res2) == TRUE) + { + strct->Unk00 = 3; + } + else if (FUN_02054B3C(res2) == TRUE) + { + strct->Unk00 = 2; + } + else if (FUN_02054B48(res2) == TRUE) + { + strct->Unk00 = 0; + } + else if (FUN_02054B54(res2) == TRUE) + { + strct->Unk00 = 1; + } + else + { + strct->Unk00 = MOD05_021E7388(strct->Unk00); + } + if (FUN_02056B74(strct->Unk10, res, strct->Unk00) == FALSE) + { + strct->Unk08 = 1; + break; + } + FUN_02058418(res, 0x80); + FUN_02058418(res, 1 << 8); + FUN_02055304(strct->Unk10, strct->Unk00); + MOD05_021E74F8(strct); + FUN_020054F0(1624, 0); + return TRUE; + } + return FALSE; +} + +THUMB_FUNC UnkStruct021E7358 *MOD05_021E74D4(u32 param0) +{ + UnkStruct021E7358 *res = (UnkStruct021E7358 *)AllocFromHeapAtEnd(4, param0); + if (res == NULL) + { + ErrorHandling(); + } + memset((void *)res, 0, param0); + return res; +} + +THUMB_FUNC void MOD05_021E74F8(UnkStruct021E7358 *param0) +{ + FUN_02016A8C(4, param0); +} diff --git a/arm9/modules/05/src/mod05_021E72FC_src.c b/arm9/modules/05/src/mod05_021E72FC_src.c deleted file mode 100644 index 63dc6a7cd..000000000 --- a/arm9/modules/05/src/mod05_021E72FC_src.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "global.h" -#include "mod05_021E72FC.h" - -extern UnkStruct021E7358 *MOD05_021E74D4(u32 param0); -extern void FUN_020054C8(u32 param0); -extern MOD05_021E73B4(); -extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2); -extern void FUN_020553A0(u32 param0); -extern u32 FUN_02058720(void); -extern BOOL FUN_02054B30(u8 param0); -extern BOOL FUN_02054B3C(u8 param0); -extern BOOL FUN_02054B48(u8 param0); -extern BOOL FUN_02054B54(u8 param0); - -THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1) -{ - FUN_020553A0(param1); - u8 res = (u8)FUN_02058720(); - u32 r2; - if (FUN_02054B30(res) == TRUE) - { - r2 = 3; - goto label; - } - else if (FUN_02054B3C(res) == TRUE) - { - r2 = 2; - goto label; - } - else if (FUN_02054B48(res) == TRUE) - { - r2 = 0; - goto label; - } - else if (FUN_02054B54(res) == TRUE) - { - r2 = 1; - goto label; - } - return FALSE; -label: - MOD05_021E7358(param0, param1, r2); - return TRUE; -} - -THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2) -{ - UnkStruct021E7358 *res = MOD05_021E74D4(24); - res->Unk0C = param0; - res->Unk10 = param1; - res->Unk00 = param2; - FUN_020054C8(1624); - FUN_020463CC(param0, MOD05_021E73B4, res); -} - -THUMB_FUNC u32 MOD05_021E7388(u32 param0) -{ - switch (param0) - { - case 0: - return 2; - case 2: - return 1; - case 1: - return 3; - case 3: - return 0; - } - return 0; -} From 35284bc1fdf68413786c364462c3db7e2123162a Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 4 Nov 2020 14:33:41 +0000 Subject: [PATCH 10/59] cleanup --- arm9/modules/05/src/mod05_021E72FC.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arm9/modules/05/src/mod05_021E72FC.c b/arm9/modules/05/src/mod05_021E72FC.c index 2039e1134..8a31d032c 100644 --- a/arm9/modules/05/src/mod05_021E72FC.c +++ b/arm9/modules/05/src/mod05_021E72FC.c @@ -18,7 +18,6 @@ extern void FUN_02057260(u32 param0, u32 param1); extern void FUN_02055304(u32 param0, u32 param1); extern BOOL FUN_02056B74(u32 param0, u32 param1, u32 param2); extern void FUN_02058418(u32 param0, u32 param1); -extern void MOD05_021E74F8(UnkStruct021E7358 *param0); extern void FUN_020054F0(u32 param0, u32 param1); extern void FUN_02016A8C(u32 param0, void *param1); @@ -83,7 +82,7 @@ THUMB_FUNC BOOL MOD05_021E73B4(UnkStruct021E7358 *param0) UnkStruct021E7358 *strct = FUN_0204652C(param0); u32 res = FUN_020553A0(strct->Unk10); u8 res2 = (u8)FUN_02058720(res); - switch (strct->Unk08) //Unk08, u32? + switch (strct->Unk08) { case 0: FUN_02058410(res, 1 << 8); From ea374bdadadcf550465cf23c88b34958caef620d Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 8 Nov 2020 20:13:22 +0000 Subject: [PATCH 11/59] split module 21 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 5 + arm9/modules/21/asm/mod21_02254854.s | 312 ++++++++++++++++++ .../21/asm/{module_21.s => mod21_02254A6C.s} | 306 ----------------- 4 files changed, 319 insertions(+), 307 deletions(-) create mode 100644 arm9/modules/21/asm/mod21_02254854.s rename arm9/modules/21/asm/{module_21.s => mod21_02254A6C.s} (58%) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 6eab7a85d..d95024ae8 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,7 +664,8 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object module_21_sinit.o - Object module_21.o + Object mod21_02254854.o + Object mod21_02254A6C.o } Overlay MODULE_22 diff --git a/arm9/global.inc b/arm9/global.inc index ba5cc7bf4..4845852b9 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7435,6 +7435,11 @@ .extern MOD20_02254420 .extern MOD20_02254460 .extern MOD20_02254488 +.extern MOD21_02254A6C +.extern MOD21_02254B04 +.extern MOD21_02254B10 +.extern MOD21_02254B34 +.extern MOD21_02254B40 .extern MOD51_02254A68 .extern MOD51_02254AB8 .extern MOD52_021D76C8 diff --git a/arm9/modules/21/asm/mod21_02254854.s b/arm9/modules/21/asm/mod21_02254854.s new file mode 100644 index 000000000..bcbbf9159 --- /dev/null +++ b/arm9/modules/21/asm/mod21_02254854.s @@ -0,0 +1,312 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD21_02254854 +MOD21_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x2c + add r7, r2, #0 + str r3, [sp] + bl AllocFromHeap + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD21_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD21_02254930 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FreeToHeap +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD21_02254930 + thumb_func_end MOD21_02254854 + + thumb_func_start MOD21_0225489C +MOD21_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r1, r5, #0 + add r0, #0x24 + add r1, #0x14 + bl MOD21_02254A6C + cmp r0, #0 + beq _0225490A + mov r1, #0 + strb r1, [r5] + strb r1, [r5, #1] + strb r1, [r5, #2] + mov r0, #1 + strb r0, [r5, #3] + strb r1, [r5, #6] + add r0, r5, #0 + str r1, [r5, #0x20] + add r0, #0x14 + bl GF_RTC_CopyTime + ldr r0, [r5, #0x14] + cmp r0, #0x18 + blo _022548D6 + mov r1, #0x18 + bl _u32_div_f + str r1, [r5, #0x14] +_022548D6: + ldr r0, [r5, #0x18] + cmp r0, #0x3c + blo _022548E6 + ldr r0, [r5, #0x14] + mov r1, #0x3c + bl _u32_div_f + str r1, [r5, #0x14] +_022548E6: + ldr r0, [r5, #0x18] + ldr r2, _02254910 ; =MOD21_02254974 + strb r0, [r5, #5] + mov r0, #8 + str r0, [sp] + ldr r0, _02254914 ; =MOD21_02254D80 + mov r1, #1 + add r3, r5, #0 + bl MOD20_02254130 + str r0, [r5, #0x10] + cmp r0, #0 + bne _02254904 + mov r0, #0 + pop {r3, r4, r5, pc} +_02254904: + str r4, [r5, #0x28] + mov r0, #1 + pop {r3, r4, r5, pc} +_0225490A: + mov r0, #0 + pop {r3, r4, r5, pc} + nop +_02254910: .word MOD21_02254974 +_02254914: .word MOD21_02254D80 + thumb_func_end MOD21_0225489C + + thumb_func_start MOD21_02254918 +MOD21_02254918: ; 0x02254918 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x24] + bl MOD21_02254B04 + ldr r0, [r4, #0x10] + bl MOD20_02254198 + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + thumb_func_end MOD21_02254918 + + thumb_func_start MOD21_02254930 +MOD21_02254930: ; 0x02254930 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _02254966 + ldr r0, [r4, #0x28] + ldr r1, [r4, #0x10] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _02254968 ; =MOD21_02254D84 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254966 + add r0, r4, #0 + bl MOD21_02254918 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x28] + bl MOD20_022529A0 +_02254966: + pop {r3, r4, r5, pc} + .align 2, 0 +_02254968: .word MOD21_02254D84 + thumb_func_end MOD21_02254930 + + thumb_func_start MOD21_0225496C +MOD21_0225496C: ; 0x0225496C + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD21_0225496C + + thumb_func_start MOD21_02254974 +MOD21_02254974: ; 0x02254974 + cmp r2, #0 + beq _02254984 + cmp r2, #1 + bne _0225498C + mov r0, #1 + str r0, [r3, #0x20] + strb r0, [r3, #6] + bx lr +_02254984: + mov r0, #0 + str r0, [r3, #0x20] + mov r0, #1 + strb r0, [r3, #6] +_0225498C: + bx lr + .align 2, 0 + thumb_func_end MOD21_02254974 + + thumb_func_start MOD21_02254990 +MOD21_02254990: ; 0x02254990 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254998 + b _0225499A +_02254998: + mov r1, #2 +_0225499A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD21_02254990 + + thumb_func_start MOD21_022549A4 +MOD21_022549A4: ; 0x022549A4 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549B4 + cmp r0, #1 + beq _022549C4 + b _022549DE +_022549B4: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD21_02254B10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549DE +_022549C4: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD21_02254B34 + cmp r0, #0 + beq _022549DE + ldr r0, [r4, #0x28] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD21_02254990 +_022549DE: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_022549A4 + + thumb_func_start MOD21_022549E4 +MOD21_022549E4: ; 0x022549E4 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _022549F8 + mov r1, #2 + bl MOD21_02254990 + mov r0, #0 + pop {r4, pc} +_022549F8: + ldrb r0, [r4, #6] + cmp r0, #0 + beq _02254A0A + mov r0, #0 + strb r0, [r4, #6] + ldr r0, [r4, #0x24] + mov r1, #2 + bl MOD21_02254B10 +_02254A0A: + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD21_02254B34 + cmp r0, #0 + beq _02254A32 + ldr r0, [r4, #0x18] + strb r0, [r4, #5] + add r0, r4, #0 + add r0, #0x14 + bl GF_RTC_CopyTime + ldrb r1, [r4, #5] + ldr r0, [r4, #0x18] + cmp r1, r0 + beq _02254A32 + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD21_02254B10 +_02254A32: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_022549E4 + + thumb_func_start MOD21_02254A38 +MOD21_02254A38: ; 0x02254A38 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A48 + cmp r0, #1 + beq _02254A58 + b _02254A66 +_02254A48: + ldr r0, [r4, #0x24] + mov r1, #3 + bl MOD21_02254B10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A66 +_02254A58: + ldr r0, [r4, #0x24] + bl MOD21_02254B40 + cmp r0, #0 + beq _02254A66 + mov r0, #1 + pop {r4, pc} +_02254A66: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_02254A38 + + .section .rodata + + .global MOD21_02254D80 +MOD21_02254D80: ; 0x02254D80 + .byte 0x10, 0xAF, 0x10, 0xCF + + .global MOD21_02254D84 +MOD21_02254D84: ; 0x02254D84 + .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/mod21_02254A6C.s similarity index 58% rename from arm9/modules/21/asm/module_21.s rename to arm9/modules/21/asm/mod21_02254A6C.s index ad12a6826..88dcb27c1 100644 --- a/arm9/modules/21/asm/module_21.s +++ b/arm9/modules/21/asm/mod21_02254A6C.s @@ -3,304 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254854 -MOD21_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x2c - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD21_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD21_02254930 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD21_02254930 - thumb_func_end MOD21_02254854 - - thumb_func_start MOD21_0225489C -MOD21_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r1, r5, #0 - add r0, #0x24 - add r1, #0x14 - bl MOD21_02254A6C - cmp r0, #0 - beq _0225490A - mov r1, #0 - strb r1, [r5] - strb r1, [r5, #1] - strb r1, [r5, #2] - mov r0, #1 - strb r0, [r5, #3] - strb r1, [r5, #6] - add r0, r5, #0 - str r1, [r5, #0x20] - add r0, #0x14 - bl GF_RTC_CopyTime - ldr r0, [r5, #0x14] - cmp r0, #0x18 - blo _022548D6 - mov r1, #0x18 - bl _u32_div_f - str r1, [r5, #0x14] -_022548D6: - ldr r0, [r5, #0x18] - cmp r0, #0x3c - blo _022548E6 - ldr r0, [r5, #0x14] - mov r1, #0x3c - bl _u32_div_f - str r1, [r5, #0x14] -_022548E6: - ldr r0, [r5, #0x18] - ldr r2, _02254910 ; =MOD21_02254974 - strb r0, [r5, #5] - mov r0, #8 - str r0, [sp] - ldr r0, _02254914 ; =MOD21_02254D80 - mov r1, #1 - add r3, r5, #0 - bl MOD20_02254130 - str r0, [r5, #0x10] - cmp r0, #0 - bne _02254904 - mov r0, #0 - pop {r3, r4, r5, pc} -_02254904: - str r4, [r5, #0x28] - mov r0, #1 - pop {r3, r4, r5, pc} -_0225490A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop -_02254910: .word MOD21_02254974 -_02254914: .word MOD21_02254D80 - thumb_func_end MOD21_0225489C - - thumb_func_start MOD21_02254918 -MOD21_02254918: ; 0x02254918 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x24] - bl MOD21_02254B04 - ldr r0, [r4, #0x10] - bl MOD20_02254198 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD21_02254918 - - thumb_func_start MOD21_02254930 -MOD21_02254930: ; 0x02254930 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldrb r0, [r4] - cmp r0, #3 - bhs _02254966 - ldr r0, [r4, #0x28] - ldr r1, [r4, #0x10] - bl MOD20_02252C14 - ldrb r1, [r4] - add r0, r4, #0 - lsl r2, r1, #2 - ldr r1, _02254968 ; =MOD21_02254D84 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254966 - add r0, r4, #0 - bl MOD21_02254918 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0x28] - bl MOD20_022529A0 -_02254966: - pop {r3, r4, r5, pc} - .align 2, 0 -_02254968: .word MOD21_02254D84 - thumb_func_end MOD21_02254930 - - thumb_func_start MOD21_0225496C -MOD21_0225496C: ; 0x0225496C - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD21_0225496C - - thumb_func_start MOD21_02254974 -MOD21_02254974: ; 0x02254974 - cmp r2, #0 - beq _02254984 - cmp r2, #1 - bne _0225498C - mov r0, #1 - str r0, [r3, #0x20] - strb r0, [r3, #6] - bx lr -_02254984: - mov r0, #0 - str r0, [r3, #0x20] - mov r0, #1 - strb r0, [r3, #6] -_0225498C: - bx lr - .align 2, 0 - thumb_func_end MOD21_02254974 - - thumb_func_start MOD21_02254990 -MOD21_02254990: ; 0x02254990 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254998 - b _0225499A -_02254998: - mov r1, #2 -_0225499A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD21_02254990 - - thumb_func_start MOD21_022549A4 -MOD21_022549A4: ; 0x022549A4 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _022549B4 - cmp r0, #1 - beq _022549C4 - b _022549DE -_022549B4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549DE -_022549C4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B34 - cmp r0, #0 - beq _022549DE - ldr r0, [r4, #0x28] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD21_02254990 -_022549DE: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549A4 - - thumb_func_start MOD21_022549E4 -MOD21_022549E4: ; 0x022549E4 - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _022549F8 - mov r1, #2 - bl MOD21_02254990 - mov r0, #0 - pop {r4, pc} -_022549F8: - ldrb r0, [r4, #6] - cmp r0, #0 - beq _02254A0A - mov r0, #0 - strb r0, [r4, #6] - ldr r0, [r4, #0x24] - mov r1, #2 - bl MOD21_02254B10 -_02254A0A: - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B34 - cmp r0, #0 - beq _02254A32 - ldr r0, [r4, #0x18] - strb r0, [r4, #5] - add r0, r4, #0 - add r0, #0x14 - bl GF_RTC_CopyTime - ldrb r1, [r4, #5] - ldr r0, [r4, #0x18] - cmp r1, r0 - beq _02254A32 - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B10 -_02254A32: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549E4 - - thumb_func_start MOD21_02254A38 -MOD21_02254A38: ; 0x02254A38 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254A48 - cmp r0, #1 - beq _02254A58 - b _02254A66 -_02254A48: - ldr r0, [r4, #0x24] - mov r1, #3 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254A66 -_02254A58: - ldr r0, [r4, #0x24] - bl MOD21_02254B40 - cmp r0, #0 - beq _02254A66 - mov r0, #1 - pop {r4, pc} -_02254A66: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254A38 - thumb_func_start MOD21_02254A6C MOD21_02254A6C: ; 0x02254A6C push {r4, r5, r6, lr} @@ -711,14 +413,6 @@ _02254D7C: .word 0x040002A8 .section .rodata - .global MOD21_02254D80 -MOD21_02254D80: ; 0x02254D80 - .byte 0x10, 0xAF, 0x10, 0xCF - - .global MOD21_02254D84 -MOD21_02254D84: ; 0x02254D84 - .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 - .global MOD21_02254D90 MOD21_02254D90: ; 0x02254D90 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 From 697c2313123690ebb4af45629cbc337d19941d04 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 9 Nov 2020 19:49:19 +0000 Subject: [PATCH 12/59] start decompiling mod21_02254854 --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 3 +- ...{mod21_02254854.s => mod21_02254854_asm.s} | 37 ------------------- arm9/modules/21/include/mod21_02254854.h | 8 ++++ arm9/modules/21/src/mod21_02254854_src.c | 21 +++++++++++ arm9/modules/21/src/module_21_sinit.c | 2 +- arm9/src/unk_0200CA44.c | 20 +++++----- include/unk_0200CA44.h | 8 ++-- 8 files changed, 47 insertions(+), 54 deletions(-) rename arm9/modules/21/asm/{mod21_02254854.s => mod21_02254854_asm.s} (87%) create mode 100644 arm9/modules/21/include/mod21_02254854.h create mode 100644 arm9/modules/21/src/mod21_02254854_src.c diff --git a/CMakeLists.txt b/CMakeLists.txt index dc3f7fcce..4ef6e9299 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ add_compile_options(-fms-extensions) file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) -target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/59/include arm9/modules/63/include) +target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include) add_executable(calcrom .travis/calcrom/calcrom.cpp) target_include_directories(calcrom PRIVATE /usr/local/include) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d95024ae8..20c1b64c9 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,7 +664,8 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object module_21_sinit.o - Object mod21_02254854.o + Object mod21_02254854_src.o + Object mod21_02254854_asm.o Object mod21_02254A6C.o } diff --git a/arm9/modules/21/asm/mod21_02254854.s b/arm9/modules/21/asm/mod21_02254854_asm.s similarity index 87% rename from arm9/modules/21/asm/mod21_02254854.s rename to arm9/modules/21/asm/mod21_02254854_asm.s index bcbbf9159..5e5dd9582 100644 --- a/arm9/modules/21/asm/mod21_02254854.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,43 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254854 -MOD21_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x2c - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD21_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD21_02254930 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD21_02254930 - thumb_func_end MOD21_02254854 - thumb_func_start MOD21_0225489C MOD21_0225489C: ; 0x0225489C push {r3, r4, r5, lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h new file mode 100644 index 000000000..061e7e4b5 --- /dev/null +++ b/arm9/modules/21/include/mod21_02254854.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_MOD21_02254854_H +#define POKEDIAMOND_MOD21_02254854_H + +#include "nitro/types.h" + +BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3); + +#endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c new file mode 100644 index 000000000..8a0c41460 --- /dev/null +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" + +extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); +extern void MOD21_02254930(void *, void *); + +THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) //param0 is likely actually a struct +{ + void * alloced = AllocFromHeap(8, 0x2c); + if (alloced != NULL) + { + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) + { + *param0 = (u32)alloced; + return TRUE; + } + FreeToHeap(alloced); + } + return FALSE; +} \ No newline at end of file diff --git a/arm9/modules/21/src/module_21_sinit.c b/arm9/modules/21/src/module_21_sinit.c index 2af569ec7..c4b2ac5a7 100644 --- a/arm9/modules/21/src/module_21_sinit.c +++ b/arm9/modules/21/src/module_21_sinit.c @@ -1,7 +1,7 @@ #include "global.h" +#include "mod21_02254854.h" extern void Poketch_InitApp(void *func1, void *func2); -extern void MOD21_02254854(); extern void MOD21_0225496C(); THUMB_FUNC static void MOD21_02254840(void) diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c index fc4656b20..1a572a89d 100644 --- a/arm9/src/unk_0200CA44.c +++ b/arm9/src/unk_0200CA44.c @@ -2,30 +2,30 @@ #include "main.h" #include "unk_0200CA44.h" -extern void FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); +extern BOOL FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); extern void FUN_0201B6A0(s32); -THUMB_FUNC void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk18, r0, r1, r2); + return FUN_0201B60C(gMain.unk18, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk1C, r0, r1, r2); + return FUN_0201B60C(gMain.unk1C, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk24, r0, r1, r2); + return FUN_0201B60C(gMain.unk24, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk20, r0, r1, r2); + return FUN_0201B60C(gMain.unk20, r0, r1, r2); } -THUMB_FUNC void FUN_0200CAB4(s32 unk1) +THUMB_FUNC void FUN_0200CAB4(s32 unk1) //bool? { FUN_0201B6A0(unk1); } diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h index 27d58c5cb..3a3be022d 100644 --- a/include/unk_0200CA44.h +++ b/include/unk_0200CA44.h @@ -1,10 +1,10 @@ #ifndef POKEDIAMOND_UNK_0200CA44_H #define POKEDIAMOND_UNK_0200CA44_H -void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); void FUN_0200CAB4(s32 unk1); #endif //POKEDIAMOND_UNK_0200CA44_H From b65d56bc44308503f4da143fd9a014926020450c Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 10 Nov 2020 15:52:15 +0000 Subject: [PATCH 13/59] fix a few small issues --- arm9/modules/21/src/mod21_02254854_src.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 8a0c41460..fcb342475 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -1,6 +1,7 @@ #include "global.h" #include "heap.h" #include "unk_0200CA44.h" +#include "mod21_02254854.h" extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); extern void MOD21_02254930(void *, void *); @@ -18,4 +19,4 @@ THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) FreeToHeap(alloced); } return FALSE; -} \ No newline at end of file +} From ebbcd4c9d985bd3c66e45fee6cf201525d501633 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 10 Nov 2020 16:38:39 +0000 Subject: [PATCH 14/59] mod21_0225489C --- arm9/modules/21/asm/mod21_02254854_asm.s | 63 ------------------------ arm9/modules/21/include/mod21_02254854.h | 15 +++++- arm9/modules/21/src/mod21_02254854_src.c | 46 +++++++++++++++-- 3 files changed, 56 insertions(+), 68 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 5e5dd9582..c879c8195 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,69 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_0225489C -MOD21_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r1, r5, #0 - add r0, #0x24 - add r1, #0x14 - bl MOD21_02254A6C - cmp r0, #0 - beq _0225490A - mov r1, #0 - strb r1, [r5] - strb r1, [r5, #1] - strb r1, [r5, #2] - mov r0, #1 - strb r0, [r5, #3] - strb r1, [r5, #6] - add r0, r5, #0 - str r1, [r5, #0x20] - add r0, #0x14 - bl GF_RTC_CopyTime - ldr r0, [r5, #0x14] - cmp r0, #0x18 - blo _022548D6 - mov r1, #0x18 - bl _u32_div_f - str r1, [r5, #0x14] -_022548D6: - ldr r0, [r5, #0x18] - cmp r0, #0x3c - blo _022548E6 - ldr r0, [r5, #0x14] - mov r1, #0x3c - bl _u32_div_f - str r1, [r5, #0x14] -_022548E6: - ldr r0, [r5, #0x18] - ldr r2, _02254910 ; =MOD21_02254974 - strb r0, [r5, #5] - mov r0, #8 - str r0, [sp] - ldr r0, _02254914 ; =MOD21_02254D80 - mov r1, #1 - add r3, r5, #0 - bl MOD20_02254130 - str r0, [r5, #0x10] - cmp r0, #0 - bne _02254904 - mov r0, #0 - pop {r3, r4, r5, pc} -_02254904: - str r4, [r5, #0x28] - mov r0, #1 - pop {r3, r4, r5, pc} -_0225490A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop -_02254910: .word MOD21_02254974 -_02254914: .word MOD21_02254D80 - thumb_func_end MOD21_0225489C - thumb_func_start MOD21_02254918 MOD21_02254918: ; 0x02254918 push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index 061e7e4b5..dc68ebeb0 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -3,6 +3,19 @@ #include "nitro/types.h" -BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3); +typedef struct UnkStruct02254854 +{ + u8 bytearray[8]; + u8 padding0[8]; + BOOL Unk10; + u32 Unk14[2]; + u8 padding1[4]; + u32 Unk20; + u32 Unk24; + u32 Unk28; +} UnkStruct02254854; + +BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); +BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index fcb342475..5e808856a 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -3,20 +3,58 @@ #include "unk_0200CA44.h" #include "mod21_02254854.h" -extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); extern void MOD21_02254930(void *, void *); -THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) //param0 is likely actually a struct +extern void GF_RTC_CopyTime(u32 *param0); + +extern void MOD21_02254D80(); +extern void MOD21_02254974(); +extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); +extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); + +THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { - void * alloced = AllocFromHeap(8, 0x2c); + UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) { - *param0 = (u32)alloced; + *param0 = alloced; return TRUE; } FreeToHeap(alloced); } return FALSE; } + +THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) +{ +#pragma unused (param2, param3) //not sure, please check + if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) + { + param0->bytearray[0] = 0; + param0->bytearray[1] = 0; + param0->bytearray[2] = 0; + param0->bytearray[3] = 1; + param0->bytearray[6] = 0; + param0->Unk20 = 0; + GF_RTC_CopyTime(param0->Unk14); + if (param0->Unk14[0] >= 0x18) + { + param0->Unk14[0] = param0->Unk14[0] % 0x18; + } + if (param0->Unk14[1] >= 0x3c) + { + param0->Unk14[0] = param0->Unk14[0] % 0x3c; + } + param0->bytearray[5] = (u8)param0->Unk14[1]; + param0->Unk10 = MOD20_02254130(MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + if (param0->Unk10 == FALSE) + { + return FALSE; + } + param0->Unk28 = param1; + return TRUE; + } + return FALSE; +} From 32fbb72519542c49ac8c33cdc8f4ebf7d808871c Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 12 Nov 2020 18:15:46 +0000 Subject: [PATCH 15/59] mod21_02254918 --- arm9/modules/21/asm/mod21_02254854_asm.s | 13 +------------ arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index c879c8195..2081400a2 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,18 +3,7 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254918 -MOD21_02254918: ; 0x02254918 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x24] - bl MOD21_02254B04 - ldr r0, [r4, #0x10] - bl MOD20_02254198 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD21_02254918 + .extern MOD21_02254918 thumb_func_start MOD21_02254930 MOD21_02254930: ; 0x02254930 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index dc68ebeb0..c04959b3c 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -17,5 +17,6 @@ typedef struct UnkStruct02254854 BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); +void MOD21_02254918(UnkStruct02254854 *param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 5e808856a..870efa179 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -12,6 +12,9 @@ extern void MOD21_02254974(); extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD21_02254B04(u32 param0); +extern void MOD20_02254198(BOOL param0); + THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); @@ -58,3 +61,10 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 } return FALSE; } + +THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) +{ + MOD21_02254B04(param0->Unk24); + MOD20_02254198(param0->Unk10); + FreeToHeap((void *)param0); +} From bc3be40047d1b9ec45e7b355dff2280e7c5faa0a Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 14 Nov 2020 00:07:14 +0000 Subject: [PATCH 16/59] more mod 21 --- arm9/arm9.lsf | 1 - arm9/modules/21/asm/mod21_02254854_asm.s | 71 ------------------------ arm9/modules/21/include/mod21_02254854.h | 3 + arm9/modules/21/src/mod21_02254854_src.c | 66 ++++++++++++++++++++-- arm9/modules/21/src/module_21_sinit.c | 13 ----- arm9/src/unk_0200CA44.c | 10 ++-- include/unk_0200CA44.h | 8 +-- 7 files changed, 72 insertions(+), 100 deletions(-) delete mode 100644 arm9/modules/21/src/module_21_sinit.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 20c1b64c9..e0073d879 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -663,7 +663,6 @@ Overlay MODULE_21 { ##Pokétch Clock## After MODULE_20 - Object module_21_sinit.o Object mod21_02254854_src.o Object mod21_02254854_asm.o Object mod21_02254A6C.o diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 2081400a2..8da8777fb 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,67 +3,6 @@ .section .text .balign 4, 0 - .extern MOD21_02254918 - - thumb_func_start MOD21_02254930 -MOD21_02254930: ; 0x02254930 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldrb r0, [r4] - cmp r0, #3 - bhs _02254966 - ldr r0, [r4, #0x28] - ldr r1, [r4, #0x10] - bl MOD20_02252C14 - ldrb r1, [r4] - add r0, r4, #0 - lsl r2, r1, #2 - ldr r1, _02254968 ; =MOD21_02254D84 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254966 - add r0, r4, #0 - bl MOD21_02254918 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0x28] - bl MOD20_022529A0 -_02254966: - pop {r3, r4, r5, pc} - .align 2, 0 -_02254968: .word MOD21_02254D84 - thumb_func_end MOD21_02254930 - - thumb_func_start MOD21_0225496C -MOD21_0225496C: ; 0x0225496C - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD21_0225496C - - thumb_func_start MOD21_02254974 -MOD21_02254974: ; 0x02254974 - cmp r2, #0 - beq _02254984 - cmp r2, #1 - bne _0225498C - mov r0, #1 - str r0, [r3, #0x20] - strb r0, [r3, #6] - bx lr -_02254984: - mov r0, #0 - str r0, [r3, #0x20] - mov r0, #1 - strb r0, [r3, #6] -_0225498C: - bx lr - .align 2, 0 - thumb_func_end MOD21_02254974 - thumb_func_start MOD21_02254990 MOD21_02254990: ; 0x02254990 ldrb r2, [r0, #2] @@ -189,13 +128,3 @@ _02254A66: pop {r4, pc} .align 2, 0 thumb_func_end MOD21_02254A38 - - .section .rodata - - .global MOD21_02254D80 -MOD21_02254D80: ; 0x02254D80 - .byte 0x10, 0xAF, 0x10, 0xCF - - .global MOD21_02254D84 -MOD21_02254D84: ; 0x02254D84 - .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index c04959b3c..dabacf1c7 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -18,5 +18,8 @@ typedef struct UnkStruct02254854 BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); void MOD21_02254918(UnkStruct02254854 *param0); +void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); +void MOD21_0225496C(UnkStruct02254854 *param0); +void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 870efa179..f7fbe2216 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -3,24 +3,37 @@ #include "unk_0200CA44.h" #include "mod21_02254854.h" -extern void MOD21_02254930(void *, void *); - extern void GF_RTC_CopyTime(u32 *param0); -extern void MOD21_02254D80(); -extern void MOD21_02254974(); +u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD20_02252C14(u32 param0, BOOL param1); + +extern u32 MOD21_022549A4(UnkStruct02254854 *); +extern u32 MOD21_022549E4(UnkStruct02254854 *); +extern u32 MOD21_02254A38(UnkStruct02254854 *); extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); +extern void MOD20_022529A0(u32 param0); + +extern void Poketch_InitApp(void *func1, void *func2); + +THUMB_FUNC static void MOD21_02254840(void) +{ + Poketch_InitApp(MOD21_02254854, MOD21_0225496C); +} + +#define NitroStaticInit MOD21_02254840 +#include "sinit.h" THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { - if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1)) { *param0 = alloced; return TRUE; @@ -51,7 +64,7 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 param0->Unk14[0] = param0->Unk14[0] % 0x3c; } param0->bytearray[5] = (u8)param0->Unk14[1]; - param0->Unk10 = MOD20_02254130(MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); if (param0->Unk10 == FALSE) { return FALSE; @@ -62,9 +75,50 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 return FALSE; } +u32 (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; + THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) { MOD21_02254B04(param0->Unk24); MOD20_02254198(param0->Unk10); FreeToHeap((void *)param0); } + +THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1) +{ + if (param1->bytearray[0] >= 3) + { + return; + } + MOD20_02252C14(param1->Unk28, param1->Unk10); + if (!MOD21_02254D84[param1->bytearray[0]](param1)) + { + return; + } + MOD21_02254918(param1); + FUN_0200CAB4((s32)param0); + MOD20_022529A0(param1->Unk28); +} + +THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0) +{ + param0->bytearray[2] = 1; +} + +THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3) +{ +#pragma unused (param0, param1) + switch (param2) + { + case 1: + param3->Unk20 = 1; + param3->bytearray[6] = 1; + return; + case 0: + param3->Unk20 = 0; + param3->bytearray[6] = 1; + return; + default: + return; + } +} diff --git a/arm9/modules/21/src/module_21_sinit.c b/arm9/modules/21/src/module_21_sinit.c deleted file mode 100644 index c4b2ac5a7..000000000 --- a/arm9/modules/21/src/module_21_sinit.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "global.h" -#include "mod21_02254854.h" - -extern void Poketch_InitApp(void *func1, void *func2); -extern void MOD21_0225496C(); - -THUMB_FUNC static void MOD21_02254840(void) -{ - Poketch_InitApp(MOD21_02254854, MOD21_0225496C); -} - -#define NitroStaticInit MOD21_02254840 -#include "sinit.h" diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c index 1a572a89d..fd703cd39 100644 --- a/arm9/src/unk_0200CA44.c +++ b/arm9/src/unk_0200CA44.c @@ -2,25 +2,25 @@ #include "main.h" #include "unk_0200CA44.h" -extern BOOL FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); +extern BOOL FUN_0201B60C(void *, void (*)(u32, void *), void *, void *); extern void FUN_0201B6A0(s32); -THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk18, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk1C, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk24, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk20, r0, r1, r2); } diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h index 3a3be022d..2e479ab87 100644 --- a/include/unk_0200CA44.h +++ b/include/unk_0200CA44.h @@ -1,10 +1,10 @@ #ifndef POKEDIAMOND_UNK_0200CA44_H #define POKEDIAMOND_UNK_0200CA44_H -BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2); void FUN_0200CAB4(s32 unk1); #endif //POKEDIAMOND_UNK_0200CA44_H From 89476f60f8b7bdef718c566252421922c1ace7a2 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 14:22:17 +0000 Subject: [PATCH 17/59] mod21_02254990 --- arm9/modules/21/asm/mod21_02254854_asm.s | 16 +--------------- arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 8da8777fb..ee8a1d56f 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,21 +3,7 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254990 -MOD21_02254990: ; 0x02254990 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254998 - b _0225499A -_02254998: - mov r1, #2 -_0225499A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD21_02254990 + .extern MOD21_02254990 thumb_func_start MOD21_022549A4 MOD21_022549A4: ; 0x022549A4 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index dabacf1c7..26ef3e877 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -21,5 +21,6 @@ void MOD21_02254918(UnkStruct02254854 *param0); void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); +void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index f7fbe2216..eaa8d7ad9 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -122,3 +122,17 @@ THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct0225 return; } } + +THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) +{ + if (param0->bytearray[2] == 0) + { + param0->bytearray[0] = param1; + } + else + { + param0->bytearray[0] = 2; + } + param0->bytearray[1] = 0; +} + From 18795a69f067096ce79e9aa3ca8bfa41ca0e400c Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 14:39:57 +0000 Subject: [PATCH 18/59] mod21_022549A4 --- arm9/modules/21/asm/mod21_02254854_asm.s | 35 ------------------------ arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 32 +++++++++++++++++++--- 3 files changed, 29 insertions(+), 39 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index ee8a1d56f..344d0d646 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -5,41 +5,6 @@ .extern MOD21_02254990 - thumb_func_start MOD21_022549A4 -MOD21_022549A4: ; 0x022549A4 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _022549B4 - cmp r0, #1 - beq _022549C4 - b _022549DE -_022549B4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549DE -_022549C4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B34 - cmp r0, #0 - beq _022549DE - ldr r0, [r4, #0x28] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD21_02254990 -_022549DE: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549A4 - thumb_func_start MOD21_022549E4 MOD21_022549E4: ; 0x022549E4 push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index 26ef3e877..e6b6c3cf0 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -22,5 +22,6 @@ void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); +BOOL MOD21_022549A4(UnkStruct02254854 * param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index eaa8d7ad9..db8769af1 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -10,14 +10,17 @@ extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); extern void MOD20_02252C14(u32 param0, BOOL param1); -extern u32 MOD21_022549A4(UnkStruct02254854 *); -extern u32 MOD21_022549E4(UnkStruct02254854 *); -extern u32 MOD21_02254A38(UnkStruct02254854 *); +extern BOOL MOD21_022549E4(UnkStruct02254854 *); +extern BOOL MOD21_02254A38(UnkStruct02254854 *); extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); +extern void MOD21_02254B10(u32 param0, u32 param1); +extern BOOL MOD21_02254B34(u32 param0, u32 param1); +extern void MOD20_0225298C(u32 param0); + extern void Poketch_InitApp(void *func1, void *func2); THUMB_FUNC static void MOD21_02254840(void) @@ -75,7 +78,7 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 return FALSE; } -u32 (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; +BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) { @@ -136,3 +139,24 @@ THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) param0->bytearray[1] = 0; } +THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 0); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B34(param0->Unk24, 0) == FALSE) + { + break; + } + MOD20_0225298C(param0->Unk28); + MOD21_02254990(param0, 1); + break; + default: + break; + } + return FALSE; +} From c3419a42429718f57f3de5d19e2cd44a18e53033 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 18:19:26 +0000 Subject: [PATCH 19/59] fully decomp mod21_02254854.o --- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254854_asm.s | 81 ------------------- arm9/modules/21/include/mod21_02254854.h | 2 + ...{mod21_02254854_src.c => mod21_02254854.c} | 48 ++++++++++- 4 files changed, 48 insertions(+), 86 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254854_asm.s rename arm9/modules/21/src/{mod21_02254854_src.c => mod21_02254854.c} (80%) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index e0073d879..d77a4c21e 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -663,8 +663,7 @@ Overlay MODULE_21 { ##Pokétch Clock## After MODULE_20 - Object mod21_02254854_src.o - Object mod21_02254854_asm.o + Object mod21_02254854.o Object mod21_02254A6C.o } diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s deleted file mode 100644 index 344d0d646..000000000 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ /dev/null @@ -1,81 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - .extern MOD21_02254990 - - thumb_func_start MOD21_022549E4 -MOD21_022549E4: ; 0x022549E4 - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _022549F8 - mov r1, #2 - bl MOD21_02254990 - mov r0, #0 - pop {r4, pc} -_022549F8: - ldrb r0, [r4, #6] - cmp r0, #0 - beq _02254A0A - mov r0, #0 - strb r0, [r4, #6] - ldr r0, [r4, #0x24] - mov r1, #2 - bl MOD21_02254B10 -_02254A0A: - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B34 - cmp r0, #0 - beq _02254A32 - ldr r0, [r4, #0x18] - strb r0, [r4, #5] - add r0, r4, #0 - add r0, #0x14 - bl GF_RTC_CopyTime - ldrb r1, [r4, #5] - ldr r0, [r4, #0x18] - cmp r1, r0 - beq _02254A32 - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B10 -_02254A32: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549E4 - - thumb_func_start MOD21_02254A38 -MOD21_02254A38: ; 0x02254A38 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254A48 - cmp r0, #1 - beq _02254A58 - b _02254A66 -_02254A48: - ldr r0, [r4, #0x24] - mov r1, #3 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254A66 -_02254A58: - ldr r0, [r4, #0x24] - bl MOD21_02254B40 - cmp r0, #0 - beq _02254A66 - mov r0, #1 - pop {r4, pc} -_02254A66: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254A38 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index e6b6c3cf0..b501962ec 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -23,5 +23,7 @@ void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); BOOL MOD21_022549A4(UnkStruct02254854 * param0); +BOOL MOD21_022549E4(UnkStruct02254854 * param0); +BOOL MOD21_02254A38(UnkStruct02254854 * param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854.c similarity index 80% rename from arm9/modules/21/src/mod21_02254854_src.c rename to arm9/modules/21/src/mod21_02254854.c index db8769af1..44c97b8ef 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -10,15 +10,13 @@ extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); extern void MOD20_02252C14(u32 param0, BOOL param1); -extern BOOL MOD21_022549E4(UnkStruct02254854 *); -extern BOOL MOD21_02254A38(UnkStruct02254854 *); - extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); extern void MOD21_02254B10(u32 param0, u32 param1); extern BOOL MOD21_02254B34(u32 param0, u32 param1); +extern BOOL MOD21_02254B40(u32 param0); extern void MOD20_0225298C(u32 param0); extern void Poketch_InitApp(void *func1, void *func2); @@ -160,3 +158,47 @@ THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) } return FALSE; } + +THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0) +{ + if (param0->bytearray[2]) + { + MOD21_02254990(param0, 2); + return FALSE; + } + if (param0->bytearray[6]) + { + param0->bytearray[6] = 0; + MOD21_02254B10(param0->Unk24, 2); + } + if (MOD21_02254B34(param0->Unk24, 1)) + { + param0->bytearray[5] = (u8)param0->Unk14[1]; + GF_RTC_CopyTime(param0->Unk14); + if (param0->bytearray[5] != param0->Unk14[1]) + { + MOD21_02254B10(param0->Unk24, 1); + } + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_02254A38(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 3); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B40(param0->Unk24)) + { + return TRUE; + } + break; + default: + break; + } + return FALSE; +} From b929414450ac7ee42268815a4a6c913a955476e4 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 18:57:14 +0000 Subject: [PATCH 20/59] start decompiling mod21_02254A6C --- arm9/arm9.lsf | 3 +- ...{mod21_02254A6C.s => mod21_02254A6C_asm.s} | 51 ------------------- arm9/modules/21/include/mod21_02254A6C.h | 17 +++++++ arm9/modules/21/src/mod21_02254A6C_src.c | 31 +++++++++++ 4 files changed, 50 insertions(+), 52 deletions(-) rename arm9/modules/21/asm/{mod21_02254A6C.s => mod21_02254A6C_asm.s} (89%) create mode 100644 arm9/modules/21/include/mod21_02254A6C.h create mode 100644 arm9/modules/21/src/mod21_02254A6C_src.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d77a4c21e..2085fcbee 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,7 +664,8 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object mod21_02254854.o - Object mod21_02254A6C.o + Object mod21_02254A6C_src.o + Object mod21_02254A6C_asm.o } Overlay MODULE_22 diff --git a/arm9/modules/21/asm/mod21_02254A6C.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s similarity index 89% rename from arm9/modules/21/asm/mod21_02254A6C.s rename to arm9/modules/21/asm/mod21_02254A6C_asm.s index 88dcb27c1..a5a2d7aec 100644 --- a/arm9/modules/21/asm/mod21_02254A6C.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,57 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254A6C -MOD21_02254A6C: ; 0x02254A6C - push {r4, r5, r6, lr} - sub sp, #8 - add r6, r1, #0 - mov r1, #3 - add r5, r0, #0 - mov r0, #8 - lsl r1, r1, #8 - bl AllocFromHeap - add r4, r0, #0 - beq _02254ACC - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - str r6, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - mov r0, #8 - str r0, [sp] - mov r0, #0xc - mov r1, #0x19 - mov r2, #1 - add r3, sp, #4 - bl FUN_02006BDC - add r6, r0, #0 - bne _02254AB2 - add r0, r4, #0 - bl FreeToHeap - add sp, #8 - mov r0, #0 - pop {r4, r5, r6, pc} -_02254AB2: - ldr r0, [sp, #4] - add r1, r4, #0 - add r0, #0xc - add r1, #0x30 - bl MOD21_02254AD4 - add r0, r6, #0 - bl FreeToHeap - add sp, #8 - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_02254ACC: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD21_02254A6C - thumb_func_start MOD21_02254AD4 MOD21_02254AD4: ; 0x02254AD4 push {r3, r4, r5, r6, r7, lr} diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h new file mode 100644 index 000000000..9c37ecc53 --- /dev/null +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -0,0 +1,17 @@ +#ifndef POKEDIAMOND_MOD21_02254A6C_H +#define POKEDIAMOND_MOD21_02254A6C_H + +#include "nitro/types.h" + +typedef struct UnkStruct02254A6C +{ + void *Unk00; + u32 Unk04; + u32 Unk08[1]; + u8 padding0[0x24]; + u32 Unk30[1]; +} UnkStruct02254A6C; + +BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); + +#endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c new file mode 100644 index 000000000..ee664f136 --- /dev/null +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "heap.h" +#include "mod21_02254A6C.h" + +extern void MOD20_022536F4(u32 *param0, u32 param1); +extern u32 MOD20_02252D34(void); +extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); +extern void MOD21_02254AD4(u32 param0, u32 *param1); + +THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) +{ + UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8); + u32 sp4; + if (strct != NULL) + { + MOD20_022536F4(strct->Unk08, 8); + strct->Unk00 = param1; + strct->Unk04 = MOD20_02252D34(); + void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8); + if (res == 0) + { + FreeToHeap(strct); + return FALSE; + } + MOD21_02254AD4(sp4 + 0xc, strct->Unk30); + FreeToHeap(res); + param0->Unk00 = strct; + return TRUE; + } + return FALSE; +} \ No newline at end of file From 0a7108543bb346f86b6688b11e45cd478df3d890 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 21:10:49 +0000 Subject: [PATCH 21/59] mod21_02254AD4 --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 27 ------------------------ arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254A6C_src.c | 19 ++++++++++++++--- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index a5a2d7aec..45ff2a27c 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,33 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254AD4 -MOD21_02254AD4: ; 0x02254AD4 - push {r3, r4, r5, r6, r7, lr} - mov r6, #9 - add r5, r0, #0 - add r4, r1, #0 - mov r7, #0 - lsl r6, r6, #6 -_02254AE0: - add r0, r5, #0 - add r1, r4, #0 - mov r2, #0x40 - bl MIi_CpuCopy16 - add r1, r4, #0 - add r0, r5, r6 - add r1, #0x40 - mov r2, #0x10 - bl MIi_CpuCopy16 - add r7, r7, #1 - add r5, #0x40 - add r4, #0x50 - sub r6, #0x30 - cmp r7, #9 - blt _02254AE0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD21_02254AD4 - thumb_func_start MOD21_02254B04 MOD21_02254B04: ; 0x02254B04 push {r3, lr} diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 9c37ecc53..71bc78e78 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -13,5 +13,6 @@ typedef struct UnkStruct02254A6C } UnkStruct02254A6C; BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); +void MOD21_02254AD4(void *param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index ee664f136..4bd810d4d 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -1,11 +1,11 @@ #include "global.h" #include "heap.h" #include "mod21_02254A6C.h" +#include "MI_memory.h" extern void MOD20_022536F4(u32 *param0, u32 param1); extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); -extern void MOD21_02254AD4(u32 param0, u32 *param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -22,10 +22,23 @@ THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) FreeToHeap(strct); return FALSE; } - MOD21_02254AD4(sp4 + 0xc, strct->Unk30); + MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30); FreeToHeap(res); param0->Unk00 = strct; return TRUE; } return FALSE; -} \ No newline at end of file +} + +THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) +{ + s32 i = 0; + for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30) + { + MI_CpuCopy16(param0, param1, 0x40); + MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10); + i++; + param0 = (void *)((u32)param0 + 0x40); + param1 = (void *)((u32)param1 + 0x50); + } +} From 2e10bebe00a1c459c13854230a3014881d02e312 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 22:16:42 +0000 Subject: [PATCH 22/59] a bit of cleanup --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 10 ---------- arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254854.c | 10 ++++------ arm9/modules/21/src/mod21_02254A6C_src.c | 8 ++++++++ 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index 45ff2a27c..f1cc29848 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,16 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B04 -MOD21_02254B04: ; 0x02254B04 - push {r3, lr} - cmp r0, #0 - beq _02254B0E - bl FreeToHeap -_02254B0E: - pop {r3, pc} - thumb_func_end MOD21_02254B04 - thumb_func_start MOD21_02254B10 MOD21_02254B10: ; 0x02254B10 push {lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index b501962ec..cc716a1d6 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_MOD21_02254854_H #include "nitro/types.h" +#include "mod21_02254A6C.h" typedef struct UnkStruct02254854 { diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 71bc78e78..493c27462 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -14,5 +14,6 @@ typedef struct UnkStruct02254A6C BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); +void MOD21_02254B04(void *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 44c97b8ef..0cdb0c321 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -6,17 +6,15 @@ extern void GF_RTC_CopyTime(u32 *param0); u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; -extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); extern void MOD20_02252C14(u32 param0, BOOL param1); -extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern void MOD21_02254B10(u32 param0, u32 param1); -extern BOOL MOD21_02254B34(u32 param0, u32 param1); -extern BOOL MOD21_02254B40(u32 param0); +extern void MOD21_02254B10(void *param0, u32 param1); +extern BOOL MOD21_02254B34(void *param0, u32 param1); +extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); extern void Poketch_InitApp(void *func1, void *func2); @@ -47,7 +45,7 @@ THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) { #pragma unused (param2, param3) //not sure, please check - if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) + if (MOD21_02254A6C((UnkStruct02254A6C *)¶m0->Unk24, param0->Unk14)) //todo fix { param0->bytearray[0] = 0; param0->bytearray[1] = 0; diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 4bd810d4d..a37b5728e 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -42,3 +42,11 @@ THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) param1 = (void *)((u32)param1 + 0x50); } } + +THUMB_FUNC void MOD21_02254B04(void *param0) +{ + if (param0 != NULL) + { + FreeToHeap(param0); + } +} From 408f6b2f49ab9bfd4523c373f2342af7d2fe63cf Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 2 Dec 2020 21:30:04 +0000 Subject: [PATCH 23/59] MOD21_02254B10 --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 20 -------------------- arm9/modules/21/include/mod21_02254854.h | 2 +- arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254854.c | 1 - arm9/modules/21/src/mod21_02254A6C_src.c | 7 +++++++ 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index f1cc29848..3848695ab 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,26 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B10 -MOD21_02254B10: ; 0x02254B10 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254B30 ; =MOD21_02254DAC - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254B30: .word MOD21_02254DAC - thumb_func_end MOD21_02254B10 - thumb_func_start MOD21_02254B34 MOD21_02254B34: ; 0x02254B34 ldr r3, _02254B3C ; =MOD20_02253794 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index cc716a1d6..26501f35c 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -12,7 +12,7 @@ typedef struct UnkStruct02254854 u32 Unk14[2]; u8 padding1[4]; u32 Unk20; - u32 Unk24; + void *Unk24; u32 Unk28; } UnkStruct02254854; diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 493c27462..64857190d 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -15,5 +15,6 @@ typedef struct UnkStruct02254A6C BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); +void MOD21_02254B10(u32 *param0, u32 param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 0cdb0c321..0f706f4d8 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -12,7 +12,6 @@ extern void MOD20_02252C14(u32 param0, BOOL param1); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern void MOD21_02254B10(void *param0, u32 param1); extern BOOL MOD21_02254B34(void *param0, u32 param1); extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index a37b5728e..7a792c50a 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -6,6 +6,8 @@ extern void MOD20_022536F4(u32 *param0, u32 param1); extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); +extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); +extern void MOD21_02254DAC(void); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -50,3 +52,8 @@ THUMB_FUNC void MOD21_02254B04(void *param0) FreeToHeap(param0); } } + +THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) +{ + MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); +} From 21ff3852f8fd49e9f491a2a12fb81d43e5147727 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 2 Dec 2020 22:14:27 +0000 Subject: [PATCH 24/59] 2 more funcs --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 18 ------------------ arm9/modules/21/include/mod21_02254A6C.h | 2 ++ arm9/modules/21/src/mod21_02254854.c | 2 -- arm9/modules/21/src/mod21_02254A6C_src.c | 12 ++++++++++++ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index 3848695ab..ff26bc887 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,24 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B34 -MOD21_02254B34: ; 0x02254B34 - ldr r3, _02254B3C ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254B3C: .word MOD20_02253794 - thumb_func_end MOD21_02254B34 - - thumb_func_start MOD21_02254B40 -MOD21_02254B40: ; 0x02254B40 - ldr r3, _02254B48 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254B48: .word MOD20_022537B8 - thumb_func_end MOD21_02254B40 - thumb_func_start MOD21_02254B4C MOD21_02254B4C: ; 0x02254B4C push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 64857190d..c2eba5b7e 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -16,5 +16,7 @@ BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); void MOD21_02254B10(u32 *param0, u32 param1); +BOOL MOD21_02254B34(void *param0, u32 param1); +BOOL MOD21_02254B40(void *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 0f706f4d8..fe285936a 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -12,8 +12,6 @@ extern void MOD20_02252C14(u32 param0, BOOL param1); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern BOOL MOD21_02254B34(void *param0, u32 param1); -extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); extern void Poketch_InitApp(void *func1, void *func2); diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 7a792c50a..b36baa2af 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -8,6 +8,8 @@ extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); extern void MOD21_02254DAC(void); +extern BOOL MOD20_02253794(void *param0, u32 param1); +extern BOOL MOD20_022537B8(void *param0); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -57,3 +59,13 @@ THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) { MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); } + +THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1) +{ + return MOD20_02253794((void *)((u32)param0 + 8), param1); +} + +THUMB_FUNC BOOL MOD21_02254B40(void *param0) +{ + return MOD20_022537B8((void *)((u32)param0 + 8)); +} From 8c4c85d47a2457e524eb63f91ef32f2c8cd8c38d Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 5 Dec 2020 21:19:20 +0000 Subject: [PATCH 25/59] two mod 21 funcs --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 81 +----------------------- arm9/modules/21/include/mod21_02254A6C.h | 8 +++ arm9/modules/21/src/mod21_02254A6C_src.c | 39 ++++++++++++ 3 files changed, 49 insertions(+), 79 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index ff26bc887..f364df848 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,85 +3,8 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B4C -MOD21_02254B4C: ; 0x02254B4C - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254B4C - - thumb_func_start MOD21_02254B60 -MOD21_02254B60: ; 0x02254B60 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254BE8 ; =MOD21_02254D90 - mov r1, #6 - mov r3, #0 - bl FUN_02016C18 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x17 - mov r3, #6 - bl FUN_0200687C - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x18 - mov r3, #6 - bl FUN_020068C8 - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - add r0, r5, #0 - bl MOD21_02254C5C - ldr r0, [r5, #4] - mov r1, #6 - bl FUN_02017CD0 - ldr r1, _02254BEC ; =0x04001000 - ldr r0, _02254BF0 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD21_02254B4C - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 -_02254BE8: .word MOD21_02254D90 -_02254BEC: .word 0x04001000 -_02254BF0: .word 0xFFFFE0FF - thumb_func_end MOD21_02254B60 + .extern MOD21_02254B4C + .extern MOD21_02254B60 thumb_func_start MOD21_02254BF4 MOD21_02254BF4: ; 0x02254BF4 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index c2eba5b7e..d0fc3284b 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -12,11 +12,19 @@ typedef struct UnkStruct02254A6C u32 Unk30[1]; } UnkStruct02254A6C; +typedef struct UnkStruct02254B60 +{ + u32 Unk00; + u32 Unk04; +} UnkStruct02254B60; + BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); void MOD21_02254B10(u32 *param0, u32 param1); BOOL MOD21_02254B34(void *param0, u32 param1); BOOL MOD21_02254B40(void *param0); +BOOL MOD21_02254B4C(void *param0); +BOOL MOD21_02254B60(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index b36baa2af..44c2515a9 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -10,6 +10,17 @@ extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, v extern void MOD21_02254DAC(void); extern BOOL MOD20_02253794(void *param0, u32 param1); extern BOOL MOD20_022537B8(void *param0); +extern UnkStruct02254B60 *MOD20_022538A0(void *param0); +extern BOOL MOD20_02253888(void *param0, void *param1); + +extern void MOD21_02254D90(void); + +extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); +extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void MOD20_02252D7C(u32 param0, u32 param1); +extern void MOD21_02254C5C(UnkStruct02254B60 *param0); +extern void FUN_02017CD0(u32 param0, u32 param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -69,3 +80,31 @@ THUMB_FUNC BOOL MOD21_02254B40(void *param0) { return MOD20_022537B8((void *)((u32)param0 + 8)); } + +THUMB_FUNC BOOL MOD21_02254B4C(void *param0) +{ + return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0); +} + +THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254B60 *strct = MOD20_022538A0(param1); + FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); + FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); + FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); + MOD20_02252D7C(0, 0); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + u32 r3 = reg_GXS_DB_DISPCNT; + u32 r2 = reg_GXS_DB_DISPCNT; + vu32 tmp = r3; //unused? wtf + u32 r0 = ~0x1F00 & r2; + r2 = r3 << 0x13; + r3 = r2 >> 0x1b; + r2 = 4 | r3; + r2 <<= 8; + r0 |= r2; + reg_GXS_DB_DISPCNT = r0; + return MOD21_02254B4C(param1); +} From 87be48c985eeb0c1c8faf2817898f4cef3d4830f Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 5 Dec 2020 22:31:04 +0000 Subject: [PATCH 26/59] small cleanup + another func --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 17 +---------------- arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254A6C_src.c | 13 +++++++++++-- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index f364df848..b70b3d9a0 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -5,22 +5,7 @@ .extern MOD21_02254B4C .extern MOD21_02254B60 - - thumb_func_start MOD21_02254BF4 -MOD21_02254BF4: ; 0x02254BF4 - push {r3, r4, r5, lr} - add r5, r1, #0 - add r0, r5, #0 - bl MOD20_022538A0 - add r4, r0, #0 - bl MOD21_02254C5C - ldr r0, [r4, #4] - mov r1, #6 - bl FUN_02017CD0 - add r0, r5, #0 - bl MOD21_02254B4C - pop {r3, r4, r5, pc} - thumb_func_end MOD21_02254BF4 + .extern MOD21_02254BF4 thumb_func_start MOD21_02254C14 MOD21_02254C14: ; 0x02254C14 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index d0fc3284b..5376e3258 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -26,5 +26,6 @@ BOOL MOD21_02254B34(void *param0, u32 param1); BOOL MOD21_02254B40(void *param0); BOOL MOD21_02254B4C(void *param0); BOOL MOD21_02254B60(u32 param0, void *param1); +BOOL MOD21_02254BF4(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 44c2515a9..25a8548ba 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -100,11 +100,20 @@ THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) u32 r2 = reg_GXS_DB_DISPCNT; vu32 tmp = r3; //unused? wtf u32 r0 = ~0x1F00 & r2; - r2 = r3 << 0x13; - r3 = r2 >> 0x1b; + r2 = r3 << 19; //cast with shift? can't replicate both though + r3 = r2 >> 27; r2 = 4 | r3; r2 <<= 8; r0 |= r2; reg_GXS_DB_DISPCNT = r0; return MOD21_02254B4C(param1); } + +THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254B60 *strct = MOD20_022538A0(param1); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} From a3060d816a528bdef9f5b6da7246c423a46fce61 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 6 Dec 2020 19:50:02 +0000 Subject: [PATCH 27/59] almost finished --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 42 ++---------------------- arm9/modules/21/include/mod21_02254A6C.h | 19 +++++------ arm9/modules/21/src/mod21_02254A6C_src.c | 34 ++++++++++++++++--- 3 files changed, 41 insertions(+), 54 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index b70b3d9a0..05679d5c2 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,48 +3,10 @@ .section .text .balign 4, 0 - .extern MOD21_02254B4C .extern MOD21_02254B60 .extern MOD21_02254BF4 - - thumb_func_start MOD21_02254C14 -MOD21_02254C14: ; 0x02254C14 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0] - ldr r0, [r0, #0xc] - cmp r0, #0 - beq _02254C30 - mov r0, #0 - add r1, r0, #0 - bl MOD11_02252DB4 - b _02254C38 -_02254C30: - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C -_02254C38: - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - thumb_func_end MOD21_02254C14 - - thumb_func_start MOD21_02254C40 -MOD21_02254C40: ; 0x02254C40 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FUN_020178A0 - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254C40 + .extern MOD21_02254C14 + .extern MOD21_02254C40 thumb_func_start MOD21_02254C5C MOD21_02254C5C: ; 0x02254C5C diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 5376e3258..568ec26fb 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -3,20 +3,17 @@ #include "nitro/types.h" -typedef struct UnkStruct02254A6C +typedef struct UnkStruct02254A6C UnkStruct02254A6C; + +struct UnkStruct02254A6C { - void *Unk00; + UnkStruct02254A6C *Unk00; u32 Unk04; u32 Unk08[1]; - u8 padding0[0x24]; + u32 Unk0C; + u8 padding0[0x20]; u32 Unk30[1]; -} UnkStruct02254A6C; - -typedef struct UnkStruct02254B60 -{ - u32 Unk00; - u32 Unk04; -} UnkStruct02254B60; +}; BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); @@ -27,5 +24,7 @@ BOOL MOD21_02254B40(void *param0); BOOL MOD21_02254B4C(void *param0); BOOL MOD21_02254B60(u32 param0, void *param1); BOOL MOD21_02254BF4(u32 param0, void *param1); +BOOL MOD21_02254C14(u32 param0, void *param1); +BOOL MOD21_02254C40(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 25a8548ba..ef4229050 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -10,7 +10,7 @@ extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, v extern void MOD21_02254DAC(void); extern BOOL MOD20_02253794(void *param0, u32 param1); extern BOOL MOD20_022537B8(void *param0); -extern UnkStruct02254B60 *MOD20_022538A0(void *param0); +extern UnkStruct02254A6C *MOD20_022538A0(void *param0); extern BOOL MOD20_02253888(void *param0, void *param1); extern void MOD21_02254D90(void); @@ -19,8 +19,11 @@ extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void MOD20_02252D7C(u32 param0, u32 param1); -extern void MOD21_02254C5C(UnkStruct02254B60 *param0); +extern void MOD21_02254C5C(UnkStruct02254A6C *param0); extern void FUN_02017CD0(u32 param0, u32 param1); +extern void FUN_020178A0(u32 param0, u32 param1); + +extern void MOD11_02252DB4(u32 param0, u32 param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -89,7 +92,7 @@ THUMB_FUNC BOOL MOD21_02254B4C(void *param0) THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) { #pragma unused (param0) - UnkStruct02254B60 *strct = MOD20_022538A0(param1); + UnkStruct02254A6C *strct = MOD20_022538A0(param1); FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); @@ -112,8 +115,31 @@ THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) { #pragma unused (param0) - UnkStruct02254B60 *strct = MOD20_022538A0(param1); + UnkStruct02254A6C *strct = MOD20_022538A0(param1); MOD21_02254C5C(strct); FUN_02017CD0(strct->Unk04, 6); return MOD21_02254B4C(param1); } + +THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + if (strct->Unk00->Unk0C) + { + MOD11_02252DB4(0, 0); + } + else + { + MOD20_02252D7C(0, 0); + } + return MOD21_02254B4C(param1); +} + +THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + FUN_020178A0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} From 12c64ee79eabced2a1cc1fc83209be37142bc44c Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 11 Dec 2020 21:07:34 +0000 Subject: [PATCH 28/59] match all of module 21 --- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254A6C_asm.s | 171 ------------------ arm9/modules/21/include/mod21_02254A6C.h | 8 + ...{mod21_02254A6C_src.c => mod21_02254A6C.c} | 48 ++++- 4 files changed, 54 insertions(+), 176 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254A6C_asm.s rename arm9/modules/21/src/{mod21_02254A6C_src.c => mod21_02254A6C.c} (70%) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 2085fcbee..d77a4c21e 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,8 +664,7 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object mod21_02254854.o - Object mod21_02254A6C_src.o - Object mod21_02254A6C_asm.o + Object mod21_02254A6C.o } Overlay MODULE_22 diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s deleted file mode 100644 index 05679d5c2..000000000 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ /dev/null @@ -1,171 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - .extern MOD21_02254B60 - .extern MOD21_02254BF4 - .extern MOD21_02254C14 - .extern MOD21_02254C40 - - thumb_func_start MOD21_02254C5C -MOD21_02254C5C: ; 0x02254C5C - push {r4, r5, lr} - sub sp, #0x1c - add r4, r0, #0 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254C7A: - ldrh r1, [r2] - tst r1, r0 - bne _02254C7A - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254C8A: - ldrh r2, [r3] - tst r2, r0 - bne _02254C8A - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #3 - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #8 - mov r3, #7 - bl FUN_02018170 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0, #4] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254D00: - ldrh r1, [r2] - tst r1, r0 - bne _02254D00 - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254D10: - ldrh r2, [r3] - tst r2, r0 - bne _02254D10 - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0xf - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0x14 - mov r3, #7 - bl FUN_02018170 - add sp, #0x1c - pop {r4, r5, pc} - nop -_02254D74: .word 0x04000280 -_02254D78: .word 0x040002A0 -_02254D7C: .word 0x040002A8 - thumb_func_end MOD21_02254C5C - - .section .rodata - - .global MOD21_02254D90 -MOD21_02254D90: ; 0x02254D90 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD21_02254DAC -MOD21_02254DAC: ; 0x02254DAC - .word 0x00, MOD21_02254B60, 0x00 - .word 0x01, MOD21_02254BF4, 0x00 - .word 0x02, MOD21_02254C14, 0x00 - .word 0x03, MOD21_02254C40, 0x00 - .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 568ec26fb..bae9cab66 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -15,6 +15,13 @@ struct UnkStruct02254A6C u32 Unk30[1]; }; +typedef struct UnkOverlayStruct1 +{ + u32 number; + BOOL (*func)(u32 param0, void *param1); + u32 Unk08; +} UnkOverlayStruct1; //todo should probably be in mod 20 header + BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); @@ -26,5 +33,6 @@ BOOL MOD21_02254B60(u32 param0, void *param1); BOOL MOD21_02254BF4(u32 param0, void *param1); BOOL MOD21_02254C14(u32 param0, void *param1); BOOL MOD21_02254C40(u32 param0, void *param1); +void MOD21_02254C5C(UnkStruct02254A6C *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C.c similarity index 70% rename from arm9/modules/21/src/mod21_02254A6C_src.c rename to arm9/modules/21/src/mod21_02254A6C.c index ef4229050..1dcbe4b8e 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C.c @@ -7,22 +7,33 @@ extern void MOD20_022536F4(u32 *param0, u32 param1); extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); -extern void MOD21_02254DAC(void); + +UnkOverlayStruct1 const MOD21_02254DAC[] = { + { 0, MOD21_02254B60, 0 }, + { 1, MOD21_02254BF4, 0 }, + { 2, MOD21_02254C14, 0 }, + { 3, MOD21_02254C40, 0 }, + { 0, NULL, 0 } +}; + extern BOOL MOD20_02253794(void *param0, u32 param1); extern BOOL MOD20_022537B8(void *param0); extern UnkStruct02254A6C *MOD20_022538A0(void *param0); extern BOOL MOD20_02253888(void *param0, void *param1); -extern void MOD21_02254D90(void); +//todo datatype +u8 const MOD21_02254D90[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void MOD20_02252D7C(u32 param0, u32 param1); -extern void MOD21_02254C5C(UnkStruct02254A6C *param0); extern void FUN_02017CD0(u32 param0, u32 param1); extern void FUN_020178A0(u32 param0, u32 param1); +extern void FUN_02018170(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 *param6, u8 param7, u32 param8, u32 param9, u32 param10); + extern void MOD11_02252DB4(u32 param0, u32 param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) @@ -143,3 +154,34 @@ THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1) FUN_020178A0(strct->Unk04, 6); return MOD21_02254B4C(param1); } + +THUMB_FUNC void MOD21_02254C5C(UnkStruct02254A6C *param0) +{ + u32 tmp = (u32)param0->Unk00->Unk00; + reg_CP_DIVCNT = 0; + (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp; + reg_CP_DIV_DENOM = 10; + while (reg_CP_DIVCNT & ((u32)®_CP_DIVCNT >> 0xb)) { } + + u32 regaddr = (u32)®_CP_DIV_RESULT_L; + u32 divResult = *(u32 *)regaddr; + while (reg_CP_DIVCNT & (regaddr >> 0xb)) { } + + u32 divRemRes = reg_CP_DIVREM_RESULT_L; + FUN_02018170(param0->Unk04, 6, 3, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9); + FUN_02018170(param0->Unk04, 6, 8, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9); + + tmp = param0->Unk00->Unk04; + reg_CP_DIVCNT = 0; + (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp; + reg_CP_DIV_DENOM = 10; + + while (reg_CP_DIVCNT & ((u32)®_CP_DIVCNT >> 0xb)) { } + + divResult = *(u32 *)regaddr; + while (reg_CP_DIVCNT & (regaddr >> 0xb)) { } + + divRemRes = reg_CP_DIVREM_RESULT_L; + FUN_02018170(param0->Unk04, 6, 15, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9); + FUN_02018170(param0->Unk04, 6, 20, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9); +} From 22c9ea3a992c48fc5c8926902cbde48861195f10 Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 18 Dec 2020 13:42:23 -0500 Subject: [PATCH 29/59] decompile Options --- arm9/asm/options.s | 239 ----------------------- arm9/asm/unk_020377F0.s | 2 +- arm9/asm/unk_020476CC.s | 10 +- arm9/asm/unk_02054590.s | 4 +- arm9/asm/unk_020625EC.s | 4 +- arm9/asm/unk_020653EC.s | 4 +- arm9/asm/unk_0206C700.s | 4 +- arm9/asm/unk_0206F3FC.s | 2 +- arm9/asm/unk_02072548.s | 2 +- arm9/asm/unk_020772F0.s | 2 +- arm9/asm/unk_02079C70.s | 4 +- arm9/asm/unk_02085338.s | 2 +- arm9/asm/unk_020859C0.s | 2 +- arm9/asm/unk_02086084.s | 4 +- arm9/asm/unk_02087D00.s | 4 +- arm9/global.inc | 32 +-- arm9/modules/05/asm/mod05_021E2B80.s | 2 +- arm9/modules/05/asm/module_05.s | 2 +- arm9/modules/06/asm/module_06.s | 6 +- arm9/modules/11/asm/module_11_thumb2.s | 14 +- arm9/modules/12/asm/module_12.s | 16 +- arm9/modules/14/asm/module_14.s | 4 +- arm9/modules/17/asm/module_17.s | 10 +- arm9/modules/18/asm/module_18.s | 2 +- arm9/modules/52/asm/module_52.s | 2 +- arm9/modules/53/asm/module_53.s | 2 +- arm9/modules/54/asm/module_54.s | 2 +- arm9/modules/55/asm/module_55.s | 4 +- arm9/modules/56/asm/module_56.s | 4 +- arm9/modules/58/asm/module_58.s | 4 +- arm9/modules/59/asm/mod59_021D74E0_asm.s | 2 +- arm9/modules/60/asm/module_60.s | 28 +-- arm9/modules/61/asm/module_61.s | 4 +- arm9/modules/64/asm/module_64.s | 4 +- arm9/modules/65/asm/module_65.s | 4 +- arm9/modules/71/asm/module_71.s | 4 +- arm9/modules/73/asm/module_73.s | 4 +- arm9/modules/75/asm/module_75.s | 4 +- arm9/modules/76/asm/module_76.s | 4 +- arm9/modules/77/asm/module_77.s | 4 +- arm9/modules/80/asm/module_80.s | 20 +- arm9/modules/81/asm/module_81.s | 4 +- arm9/modules/82/asm/module_82.s | 2 +- arm9/modules/83/asm/module_83.s | 8 +- arm9/src/options.c | 110 +++++++++++ arm9/src/sound.c | 2 +- include/options.h | 28 ++- 47 files changed, 259 insertions(+), 372 deletions(-) delete mode 100644 arm9/asm/options.s create mode 100644 arm9/src/options.c diff --git a/arm9/asm/options.s b/arm9/asm/options.s deleted file mode 100644 index 14d2a4494..000000000 --- a/arm9/asm/options.s +++ /dev/null @@ -1,239 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .text - - thumb_func_start FUN_02024F30 -FUN_02024F30: ; 0x02024F30 - push {r4, lr} - mov r1, #0x2 - bl AllocFromHeap - add r4, r0, #0x0 - bl Options_init - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02024F44 -FUN_02024F44: ; 0x02024F44 - ldr r3, _02024F4C ; =MI_CpuCopy8 - mov r2, #0x2 - bx r3 - nop -_02024F4C: .word MI_CpuCopy8 - - thumb_func_start Options_init -Options_init: ; 0x02024F50 - push {r4, lr} - add r4, r0, #0x0 - mov r1, #0x0 - mov r2, #0x2 - bl MI_CpuFill8 - ldrh r1, [r4, #0x0] - mov r0, #0xf - bic r1, r0 - mov r0, #0x1 - orr r0, r1 - strh r0, [r4, #0x0] - ldrh r1, [r4, #0x0] - mov r0, #0x30 - bic r1, r0 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - mov r0, #0x40 - bic r1, r0 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - mov r0, #0x80 - bic r1, r0 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - ldr r0, _02024F94 ; =0xFFFFFCFF - and r0, r1 - strh r0, [r4, #0x0] - ldrh r1, [r4, #0x0] - ldr r0, _02024F98 ; =0xFFFF83FF - and r0, r1 - strh r0, [r4, #0x0] - pop {r4, pc} - nop -_02024F94: .word 0xFFFFFCFF -_02024F98: .word 0xFFFF83FF - - thumb_func_start FUN_02024F9C -FUN_02024F9C: ; 0x02024F9C - push {r3, lr} - cmp r0, #0x0 - beq _02024FAC - bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025064 - add r1, r0, #0x0 -_02024FAC: - cmp r1, #0x0 - beq _02024FCA - cmp r1, #0x1 - beq _02024FBA - cmp r1, #0x2 - beq _02024FC2 - b _02024FCA -_02024FBA: - ldr r0, _02024FD4 ; =gMain - mov r1, #0x1 - str r1, [r0, #0x34] - pop {r3, pc} -_02024FC2: - ldr r0, _02024FD4 ; =gMain - mov r1, #0x3 - str r1, [r0, #0x34] - pop {r3, pc} -_02024FCA: - ldr r0, _02024FD4 ; =gMain - mov r1, #0x0 - str r1, [r0, #0x34] - pop {r3, pc} - nop -_02024FD4: .word gMain - - thumb_func_start FUN_02024FD8 -FUN_02024FD8: ; 0x02024FD8 - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1c - bx lr - - thumb_func_start FUN_02024FE0 -FUN_02024FE0: ; 0x02024FE0 - ldrh r3, [r0, #0x0] - mov r2, #0xf - lsl r1, r1, #0x10 - bic r3, r2 - lsr r2, r1, #0x10 - mov r1, #0xf - and r1, r2 - orr r1, r3 - strh r1, [r0, #0x0] - bx lr - - thumb_func_start FUN_02024FF4 -FUN_02024FF4: ; 0x02024FF4 - push {r3, lr} - bl FUN_02024FD8 - cmp r0, #0x0 - bne _02025002 - mov r0, #0x8 - pop {r3, pc} -_02025002: - cmp r0, #0x1 - bne _0202500A - mov r0, #0x4 - pop {r3, pc} -_0202500A: - mov r0, #0x1 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02025010 -FUN_02025010: ; 0x02025010 - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1a - lsr r0, r0, #0x1e - bx lr - - thumb_func_start FUN_02025018 -FUN_02025018: ; 0x02025018 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1e - ldrh r3, [r0, #0x0] - mov r2, #0x30 - lsr r1, r1, #0x1a - bic r3, r2 - orr r1, r3 - strh r1, [r0, #0x0] - bx lr - - thumb_func_start FUN_0202502C -FUN_0202502C: ; 0x0202502C - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1f - bx lr - - thumb_func_start FUN_02025034 -FUN_02025034: ; 0x02025034 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - ldrh r3, [r0, #0x0] - mov r2, #0x80 - lsr r1, r1, #0x18 - bic r3, r2 - orr r1, r3 - strh r1, [r0, #0x0] - bx lr - - thumb_func_start FUN_02025048 -FUN_02025048: ; 0x02025048 - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x19 - lsr r0, r0, #0x1f - bx lr - - thumb_func_start FUN_02025050 -FUN_02025050: ; 0x02025050 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - ldrh r3, [r0, #0x0] - mov r2, #0x40 - lsr r1, r1, #0x19 - bic r3, r2 - orr r1, r3 - strh r1, [r0, #0x0] - bx lr - - thumb_func_start FUN_02025064 -FUN_02025064: ; 0x02025064 - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x16 - lsr r0, r0, #0x1e - bx lr - - thumb_func_start FUN_0202506C -FUN_0202506C: ; 0x0202506C - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1e - ldrh r3, [r0, #0x0] - ldr r2, _02025080 ; =0xFFFFFCFF - lsr r1, r1, #0x16 - and r2, r3 - orr r1, r2 - strh r1, [r0, #0x0] - bx lr - .balign 4 -_02025080: .word 0xFFFFFCFF - - thumb_func_start FUN_02025084 -FUN_02025084: ; 0x02025084 - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x11 - lsr r0, r0, #0x1b - bx lr - - thumb_func_start FUN_0202508C -FUN_0202508C: ; 0x0202508C - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1b - ldrh r3, [r0, #0x0] - ldr r2, _020250A0 ; =0xFFFF83FF - lsr r1, r1, #0x11 - and r2, r3 - orr r1, r2 - strh r1, [r0, #0x0] - bx lr - .balign 4 -_020250A0: .word 0xFFFF83FF diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index e7d630f64..9d5e2f326 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -2478,7 +2478,7 @@ FUN_020389CC: ; 0x020389CC mov r0, #0x0 str r0, [r4, #0x18] ldr r0, [sp, #0x0] - bl FUN_02025084 + bl Options_GetFrame str r0, [r4, #0x1c] lsl r1, r6, #0x18 ldr r0, [r5, #0xc] diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index 568c4b5d4..8eac19429 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -116,7 +116,7 @@ _02047774: lsl r1, r1, #0x4 str r0, [r7, r1] add r0, r5, #0x0 - bl FUN_02024F30 + bl Options_new mov r1, #0x13 lsl r1, r1, #0x4 str r0, [r7, r1] @@ -237,7 +237,7 @@ FUN_02047814: ; 0x02047814 lsl r1, r1, #0x4 ldr r0, [sp, #0x14] ldr r1, [r4, r1] - bl FUN_02024F44 + bl Options_copy add r0, r5, #0x0 bl Script_GetTimeOfDay mov r1, #0x16 @@ -513,7 +513,7 @@ FUN_02047A78: ; 0x02047A78 lsl r1, r1, #0x4 ldr r0, [sp, #0xc] ldr r1, [r5, r1] - bl FUN_02024F44 + bl Options_copy ldr r1, [sp, #0x8] add r0, r5, #0x0 mov r2, #0x0 @@ -712,7 +712,7 @@ _02047C98: lsl r1, r1, #0x4 ldr r0, [sp, #0x4] ldr r1, [r6, r1] - bl FUN_02024F44 + bl Options_copy ldr r1, [sp, #0x8] add r0, r6, #0x0 mov r2, #0x0 @@ -896,7 +896,7 @@ _02047E2C: lsl r1, r1, #0x4 ldr r0, [sp, #0x10] ldr r1, [r5, r1] - bl FUN_02024F44 + bl Options_copy ldr r1, [sp, #0x14] add r0, r5, #0x0 mov r2, #0x0 diff --git a/arm9/asm/unk_02054590.s b/arm9/asm/unk_02054590.s index 772871af4..c4969083c 100644 --- a/arm9/asm/unk_02054590.s +++ b/arm9/asm/unk_02054590.s @@ -74,7 +74,7 @@ FUN_02054608: ; 0x02054608 bl FUN_0201AB08 add r6, r0, #0x0 add r0, r4, #0x0 - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x0] @@ -119,7 +119,7 @@ FUN_02054658: ; 0x02054658 mov r0, #0x0 bl FUN_02002BB8 add r0, r6, #0x0 - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0x0 str r3, [sp, #0x0] str r0, [sp, #0x4] diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s index 9809241c0..e60a5b4f7 100644 --- a/arm9/asm/unk_020625EC.s +++ b/arm9/asm/unk_020625EC.s @@ -101,11 +101,11 @@ FUN_020625EC: ; 0x020625EC str r0, [r4, r1] add r0, r6, #0x0 bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay strh r0, [r4, #0x1a] add r0, r6, #0x0 bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame strh r0, [r4, #0x1c] str r4, [r7, #0x8] mov r0, #0x1 diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s index 1cf56132a..74da05c09 100644 --- a/arm9/asm/unk_020653EC.s +++ b/arm9/asm/unk_020653EC.s @@ -67,11 +67,11 @@ FUN_020653EC: ; 0x020653EC add r6, r0, #0x0 strb r1, [r4, #0x1a] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay strb r0, [r4, #0x16] add r0, r6, #0x0 bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame strh r0, [r4, #0x14] add r0, r4, #0x0 ldr r2, [r4, #0x0] diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index f5a0873e6..7fa07ac06 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -2343,7 +2343,7 @@ _0206DA26: mov r1, #0x4 bl FUN_02018744 ldr r0, [r5, #0x2c] - bl FUN_02025084 + bl Options_GetFrame add r6, r0, #0x0 lsl r0, r6, #0x18 lsr r0, r0, #0x18 @@ -2675,7 +2675,7 @@ FUN_0206DD6C: ; 0x0206DD6C mov r1, #0xff bl FUN_02019620 ldr r0, [r4, #0x2c] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0x0 str r3, [sp, #0x0] str r0, [sp, #0x4] diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s index 8d7d828a4..e09b1ec4d 100644 --- a/arm9/asm/unk_0206F3FC.s +++ b/arm9/asm/unk_0206F3FC.s @@ -1310,7 +1310,7 @@ FUN_0206FD24: ; 0x0206FD24 ldr r0, _0206FE70 ; =0x000005A4 ldr r0, [r5, r0] ldr r0, [r0, #0xc] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x0] diff --git a/arm9/asm/unk_02072548.s b/arm9/asm/unk_02072548.s index f6f09ad1c..f35f769c5 100644 --- a/arm9/asm/unk_02072548.s +++ b/arm9/asm/unk_02072548.s @@ -1664,7 +1664,7 @@ FUN_0207322C: ; 0x0207322C ldr r0, _0207326C ; =0x000005A4 ldr r0, [r4, r0] ldr r0, [r0, #0xc] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0x0 str r3, [sp, #0x0] str r0, [sp, #0x4] diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s index 7a24d756c..eba7f7399 100644 --- a/arm9/asm/unk_020772F0.s +++ b/arm9/asm/unk_020772F0.s @@ -2355,7 +2355,7 @@ FUN_02077FE8: ; 0x02077FE8 mov r2, #0x12 bl FUN_02002EEC ldr r0, [r5, #0x18] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x0] diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s index 8bace89f2..3562d2e7e 100644 --- a/arm9/asm/unk_02079C70.s +++ b/arm9/asm/unk_02079C70.s @@ -1660,7 +1660,7 @@ _0207A99E: lsl r0, r0, #0x2 ldr r0, [r5, r0] ldr r0, [r0, #0x4] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x0] @@ -4738,7 +4738,7 @@ FUN_0207C23C: ; 0x0207C23C lsl r0, r0, #0x2 ldr r0, [r4, r0] ldr r0, [r0, #0x4] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x0] diff --git a/arm9/asm/unk_02085338.s b/arm9/asm/unk_02085338.s index 45fcb9954..08f7d90ca 100644 --- a/arm9/asm/unk_02085338.s +++ b/arm9/asm/unk_02085338.s @@ -32,7 +32,7 @@ FUN_02085338: ; 0x02085338 add r0, r6, #0x0 strb r1, [r4, #0x3] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame str r0, [r4, #0x8] cmp r5, #0x2 bne _02085390 diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s index 846e53361..a299f623f 100644 --- a/arm9/asm/unk_020859C0.s +++ b/arm9/asm/unk_020859C0.s @@ -348,7 +348,7 @@ _02085A9A: str r0, [r4, r1] ldr r0, [r4, #0x0] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame add r5, r0, #0x0 add r0, r4, #0x0 add r1, r4, #0x0 diff --git a/arm9/asm/unk_02086084.s b/arm9/asm/unk_02086084.s index 6ef3d1509..4d8fa9a44 100644 --- a/arm9/asm/unk_02086084.s +++ b/arm9/asm/unk_02086084.s @@ -36,11 +36,11 @@ FUN_02086084: ; 0x02086084 bl OverlayManager_GetField18 str r0, [r4, #0x0] ldr r0, [r0, #0x10] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay str r0, [r4, #0x10] ldr r0, [r4, #0x0] ldr r0, [r0, #0x10] - bl FUN_02025084 + bl Options_GetFrame str r0, [r4, #0x14] bl FUN_02086468 str r0, [r4, #0x38] diff --git a/arm9/asm/unk_02087D00.s b/arm9/asm/unk_02087D00.s index 49d4676c3..65d4db3d3 100644 --- a/arm9/asm/unk_02087D00.s +++ b/arm9/asm/unk_02087D00.s @@ -544,11 +544,11 @@ FUN_020880A0: ; 0x020880A0 str r0, [r4, #0x0] ldr r0, [r5, #0xc] ldr r0, [r0, #0x18] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay strb r0, [r4, #0xa] ldr r0, [r5, #0xc] ldr r0, [r0, #0x18] - bl FUN_02025084 + bl Options_GetFrame strb r0, [r4, #0xb] ldr r0, _02088108 ; =UNK_020FD16C ldr r2, [r5, #0x0] diff --git a/arm9/global.inc b/arm9/global.inc index 4845852b9..0a00bc9b2 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1586,23 +1586,23 @@ .extern FUN_02024EF4 .extern FUN_02024F0C .extern FUN_02024F18 -.extern FUN_02024F30 -.extern FUN_02024F44 +.extern Options_new +.extern Options_copy .extern Options_init -.extern FUN_02024F9C -.extern FUN_02024FD8 -.extern FUN_02024FE0 -.extern FUN_02024FF4 -.extern FUN_02025010 -.extern FUN_02025018 -.extern FUN_0202502C -.extern FUN_02025034 -.extern FUN_02025048 -.extern FUN_02025050 -.extern FUN_02025064 -.extern FUN_0202506C -.extern FUN_02025084 -.extern FUN_0202508C +.extern Options_SetButtonModeOnMain +.extern Options_GetTextSpeed +.extern Options_SetTextSpeed +.extern Options_GetTextFrameDelay +.extern Options_GetSoundMethod +.extern Options_SetSoundMethod +.extern Options_GetBattleScene +.extern Options_SetBattleScene +.extern Options_GetBattleStyle +.extern Options_SetBattleStyle +.extern Options_GetButtonMode +.extern Options_SetButtonMode +.extern Options_GetFrame +.extern Options_SetFrame .extern FUN_020250A4 .extern FUN_020250C4 .extern FUN_02025128 diff --git a/arm9/modules/05/asm/mod05_021E2B80.s b/arm9/modules/05/asm/mod05_021E2B80.s index 8aa392612..2722d1770 100644 --- a/arm9/modules/05/asm/mod05_021E2B80.s +++ b/arm9/modules/05/asm/mod05_021E2B80.s @@ -205,7 +205,7 @@ MOD05_021E2D00: ; 0x021E2D00 ldr r0, [r0] ldr r0, [r0, #0xc] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay pop {r3, pc} .balign 4, 0 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index b72324073..38ca97a9d 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -16817,7 +16817,7 @@ _021EFC20: str r1, [r0] ldr r0, [r4, #0x34] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 1337a5932..ac0c3eeb1 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -8929,7 +8929,7 @@ _0223DA3E: mov r0, #0x85 lsl r0, r0, #2 ldr r0, [r4, r0] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -41696,12 +41696,12 @@ MOD06_0224DBA8: ; 0x0224DBA8 ldr r0, [r5, #8] bl Sav2_PlayerData_GetOptionsAddr add r4, r0, #0 - bl FUN_02025084 + bl Options_GetFrame mov r1, #0x53 lsl r1, r1, #2 str r0, [r5, r1] add r0, r4, #0 - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r1, #0x15 lsl r1, r1, #4 str r0, [r5, r1] diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s index 15f4c2371..f04e67da9 100644 --- a/arm9/modules/11/asm/module_11_thumb2.s +++ b/arm9/modules/11/asm/module_11_thumb2.s @@ -120,7 +120,7 @@ _0222F30E: mov r0, #0x13 lsl r0, r0, #4 ldr r0, [r4, r0] - bl FUN_02025084 + bl Options_GetFrame add r4, r0, #0 lsl r0, r4, #0x18 lsr r0, r0, #0x18 @@ -3600,7 +3600,7 @@ _02230E2E: mov r1, #0x6d lsl r1, r1, #2 ldr r0, [r0, r1] - bl FUN_0202502C + bl Options_GetBattleScene cmp r0, #0 bne _02230E40 mov r0, #1 @@ -3613,11 +3613,11 @@ _02230E40: MOD11_02230E44: ; 0x02230E44 mov r1, #0x6d lsl r1, r1, #2 - ldr r3, _02230E50 ; =FUN_02025084 + ldr r3, _02230E50 ; =Options_GetFrame ldr r0, [r0, r1] bx r3 nop -_02230E50: .word FUN_02025084 +_02230E50: .word Options_GetFrame thumb_func_start MOD11_02230E54 MOD11_02230E54: ; 0x02230E54 @@ -3632,7 +3632,7 @@ _02230E62: mov r1, #0x6d lsl r1, r1, #2 ldr r0, [r0, r1] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay pop {r3, pc} .align 2, 0 @@ -3640,11 +3640,11 @@ _02230E62: MOD11_02230E70: ; 0x02230E70 mov r1, #0x6d lsl r1, r1, #2 - ldr r3, _02230E7C ; =FUN_02025048 + ldr r3, _02230E7C ; =Options_GetBattleStyle ldr r0, [r0, r1] bx r3 nop -_02230E7C: .word FUN_02025048 +_02230E7C: .word Options_GetBattleStyle thumb_func_start MOD11_02230E80 MOD11_02230E80: ; 0x02230E80 diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 215acf371..c24f23a75 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -4224,7 +4224,7 @@ MOD12_0222F834: ; 0x0222F834 ldr r1, [r5] ldr r0, _0222F930 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02025084 + bl Options_GetFrame add r4, r0, #0 lsl r0, r4, #0x18 lsr r0, r0, #0x18 @@ -6224,7 +6224,7 @@ MOD12_022308F0: ; 0x022308F0 ldr r1, [r5] ldr r0, _022309C4 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02025084 + bl Options_GetFrame add r4, r0, #0 lsl r0, r4, #0x18 lsr r0, r0, #0x18 @@ -15253,7 +15253,7 @@ _02234F2A: bne _02234F40 ldr r0, _02234FAC ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 b _02234F42 _02234F40: @@ -25497,7 +25497,7 @@ MOD12_02239AD0: ; 0x02239AD0 bne _02239AF2 ldr r0, _02239B44 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 b _02239AF4 _02239AF2: @@ -34742,7 +34742,7 @@ MOD12_0223E1EC: ; 0x0223E1EC bne _0223E20E ldr r0, _0223E26C ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 b _0223E210 _0223E20E: @@ -43529,7 +43529,7 @@ MOD12_022425F4: ; 0x022425F4 bne _02242616 ldr r0, _02242674 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 b _02242618 _02242616: @@ -43673,7 +43673,7 @@ MOD12_022426BC: ; 0x022426BC ldr r1, [r5] ldr r0, _02242784 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02025084 + bl Options_GetFrame add r4, r0, #0 lsl r0, r4, #0x18 lsr r0, r0, #0x18 @@ -43843,7 +43843,7 @@ MOD12_02242804: ; 0x02242804 ldr r1, [r6] ldr r0, _022429D0 ; =0x00001988 ldr r0, [r1, r0] - bl FUN_02025084 + bl Options_GetFrame add r4, r0, #0 lsl r0, r4, #0x18 lsr r0, r0, #0x18 diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s index ae226da34..0bded4bfc 100644 --- a/arm9/modules/14/asm/module_14.s +++ b/arm9/modules/14/asm/module_14.s @@ -9849,11 +9849,11 @@ MOD14_021DC3AC: ; 0x021DC3AC MOD14_021DC3B4: ; 0x021DC3B4 mov r1, #0x69 lsl r1, r1, #2 - ldr r3, _021DC3C0 ; =FUN_02025084 + ldr r3, _021DC3C0 ; =Options_GetFrame ldr r0, [r0, r1] bx r3 nop -_021DC3C0: .word FUN_02025084 +_021DC3C0: .word Options_GetFrame thumb_func_start MOD14_021DC3C4 MOD14_021DC3C4: ; 0x021DC3C4 diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s index be4096d77..1f3abbf21 100644 --- a/arm9/modules/17/asm/module_17.s +++ b/arm9/modules/17/asm/module_17.s @@ -4666,7 +4666,7 @@ MOD17_021D9918: ; 0x021D9918 ldr r0, [r5, r0] add r7, r2, #0 add r4, r3, #0 - bl FUN_02025084 + bl Options_GetFrame add r6, r0, #0 mov r0, #0 mov r1, #0xe0 @@ -4847,7 +4847,7 @@ _021D9A7E: bne _021D9ACE add r0, r0, #4 ldr r0, [r5, r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay b _021D9AD0 _021D9ACE: mov r0, #1 @@ -11480,12 +11480,12 @@ _021DCA42: ldr r1, [r4, #0xc] bl MOD17_021DCC38 ldr r0, [r4, #0xc] - bl FUN_02025084 + bl Options_GetFrame mov r1, #0x4f lsl r1, r1, #2 str r0, [r5, r1] ldr r0, [r4, #0xc] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r1, #5 lsl r1, r1, #6 str r0, [r5, r1] @@ -11760,7 +11760,7 @@ MOD17_021DCC38: ; 0x021DCC38 sub sp, #8 add r4, r0, #0 add r0, r1, #0 - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index b611c8837..d09c0d20c 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -7963,7 +7963,7 @@ MOD18_0223D414: ; 0x0223D414 add r6, r0, #0 ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 ldr r0, _0223D580 ; =0x02251388 mov r2, #0x15 diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s index 3fac1c6f9..22824930d 100644 --- a/arm9/modules/52/asm/module_52.s +++ b/arm9/modules/52/asm/module_52.s @@ -116,7 +116,7 @@ MOD52_021D7594: ; 0x021D7594 bl MOD52_021D7688 add r0, r4, #0 mov r1, #0 - bl FUN_02024F9C + bl Options_SetButtonModeOnMain add r0, r5, #0 bl Sav2_SysInfo_MacAddressIsMine cmp r0, #0 diff --git a/arm9/modules/53/asm/module_53.s b/arm9/modules/53/asm/module_53.s index d128782bd..366c45bd1 100644 --- a/arm9/modules/53/asm/module_53.s +++ b/arm9/modules/53/asm/module_53.s @@ -846,7 +846,7 @@ MOD53_021D7B60: ; 0x021D7B60 bl FUN_020068C8 ldr r0, [r5, #8] ldr r0, [r0, #8] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index 0acfed984..11026c327 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -766,7 +766,7 @@ MOD54_021D7AA0: ; 0x021D7AA0 bl FUN_020068C8 ldr r0, [r5, #8] ldr r0, [r0, #8] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index eb1246394..8c06cc76e 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -808,7 +808,7 @@ MOD55_021D7AE0: ; 0x021D7AE0 bl FUN_020068C8 ldr r0, [r5, #8] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -5349,7 +5349,7 @@ MOD55_021DA0A4: ; 0x021DA0A4 ldr r0, [r5, #8] add r6, r1, #0 bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r4, r0, #0 mov r0, #0xce lsl r0, r0, #2 diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index fbe645b51..309d4cc02 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -1014,7 +1014,7 @@ MOD56_0221257C: ; 0x0221257C add r5, #0xc4 ldr r0, [r5] bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -8164,7 +8164,7 @@ MOD56_02215EA4: ; 0x02215EA4 add r4, r1, #0 add r6, r2, #0 bl Sav2_PlayerData_GetOptionsAddr - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r7, r0, #0 mov r0, #0xdb lsl r0, r0, #2 diff --git a/arm9/modules/58/asm/module_58.s b/arm9/modules/58/asm/module_58.s index ddcbedd9b..a22e6e08b 100644 --- a/arm9/modules/58/asm/module_58.s +++ b/arm9/modules/58/asm/module_58.s @@ -662,7 +662,7 @@ MOD58_021D9F14: ; 0x021D9F14 mov r3, #5 bl FUN_020068C8 ldr r0, [r5, #0xc] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -2226,7 +2226,7 @@ MOD58_021DAB94: ; 0x021DAB94 mov r3, #0xa bl FUN_0200D0BC ldr r0, [r5, #0xc] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0 str r3, [sp] str r0, [sp, #4] diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s index 8358f7688..77f574fda 100644 --- a/arm9/modules/59/asm/mod59_021D74E0_asm.s +++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s @@ -936,7 +936,7 @@ _021D7C5E: add r0, r6, #0 bl String_dtor ldr r0, [r5, #8] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r3, r4, #0 str r3, [sp] str r0, [sp, #4] diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s index 28028e5fc..81f6d2737 100644 --- a/arm9/modules/60/asm/module_60.s +++ b/arm9/modules/60/asm/module_60.s @@ -25,7 +25,7 @@ MOD60_021D74E0: ; 0x021D74E0 add r4, r0, #0 bl memset add r0, r5, #0 - bl FUN_02024FD8 + bl Options_GetTextSpeed ldrh r1, [r4, #0x18] mov r2, #0xf lsl r0, r0, #0x10 @@ -36,7 +36,7 @@ MOD60_021D74E0: ; 0x021D74E0 orr r0, r1 strh r0, [r4, #0x18] add r0, r5, #0 - bl FUN_0202502C + bl Options_GetBattleScene lsl r0, r0, #0x10 lsr r0, r0, #0x10 lsl r0, r0, #0x1f @@ -47,7 +47,7 @@ MOD60_021D74E0: ; 0x021D74E0 orr r0, r1 strh r0, [r4, #0x18] add r0, r5, #0 - bl FUN_02025048 + bl Options_GetBattleStyle lsl r0, r0, #0x10 lsr r0, r0, #0x10 lsl r0, r0, #0x1f @@ -58,7 +58,7 @@ MOD60_021D74E0: ; 0x021D74E0 orr r0, r1 strh r0, [r4, #0x18] add r0, r5, #0 - bl FUN_02025010 + bl Options_GetSoundMethod lsl r0, r0, #0x10 lsr r0, r0, #0x10 lsl r0, r0, #0x1e @@ -69,7 +69,7 @@ MOD60_021D74E0: ; 0x021D74E0 orr r0, r1 strh r0, [r4, #0x18] add r0, r5, #0 - bl FUN_02025064 + bl Options_GetButtonMode lsl r0, r0, #0x10 lsr r0, r0, #0x10 lsl r0, r0, #0x1e @@ -80,7 +80,7 @@ MOD60_021D74E0: ; 0x021D74E0 orr r0, r1 strh r0, [r4, #0x18] add r0, r5, #0 - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x10 lsr r0, r0, #0x10 lsl r0, r0, #0x1b @@ -172,32 +172,32 @@ MOD60_021D75B0: ; 0x021D75B0 ldr r0, [r4, #0x1c] lsl r1, r1, #0x1c lsr r1, r1, #0x1c - bl FUN_02024FE0 + bl Options_SetTextSpeed ldrh r1, [r4, #0x18] ldr r0, [r4, #0x1c] lsl r1, r1, #0x19 lsr r1, r1, #0x1f - bl FUN_02025034 + bl Options_SetBattleScene ldrh r1, [r4, #0x18] ldr r0, [r4, #0x1c] lsl r1, r1, #0x18 lsr r1, r1, #0x1f - bl FUN_02025050 + bl Options_SetBattleStyle ldrh r1, [r4, #0x18] ldr r0, [r4, #0x1c] lsl r1, r1, #0x1a lsr r1, r1, #0x1e - bl FUN_02025018 + bl Options_SetSoundMethod ldrh r1, [r4, #0x18] ldr r0, [r4, #0x1c] lsl r1, r1, #0x16 lsr r1, r1, #0x1e - bl FUN_0202506C + bl Options_SetButtonMode ldrh r1, [r4, #0x18] ldr r0, [r4, #0x1c] lsl r1, r1, #0x11 lsr r1, r1, #0x1b - bl FUN_0202508C + bl Options_SetFrame b _021D769A _021D7680: cmp r0, #2 @@ -210,7 +210,7 @@ _021D7680: mov r0, #0 lsl r1, r1, #0x16 lsr r1, r1, #0x1e - bl FUN_02024F9C + bl Options_SetButtonModeOnMain _021D769A: add r0, r5, #0 bl OverlayManager_FreeData @@ -1270,7 +1270,7 @@ _021D7F3C: add r1, r1, r2 add r1, #0x5e ldrh r1, [r1] - bl FUN_02024F9C + bl Options_SetButtonModeOnMain _021D7F54: ldr r0, [sp, #0x14] mov r1, #0x54 diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index 5cb5badbe..861757e80 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -44,11 +44,11 @@ MOD61_021D74E0: ; 0x021D74E0 strh r1, [r0] ldr r0, [r4, #0x1c] ldr r0, [r0, #4] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay strb r0, [r4, #0x10] ldr r0, [r4, #0x1c] ldr r0, [r0, #4] - bl FUN_02025084 + bl Options_GetFrame strh r0, [r4, #0xa] mov r0, #1 pop {r3, r4, r5, pc} diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s index 1dee05627..71dc63ea3 100644 --- a/arm9/modules/64/asm/module_64.s +++ b/arm9/modules/64/asm/module_64.s @@ -35,11 +35,11 @@ _021D7504: bl OverlayManager_GetField18 add r4, r0, #0 ldr r0, [r4, #4] - bl FUN_02025084 + bl Options_GetFrame ldr r1, _021D7634 ; =0x000006A8 str r0, [r5, r1] ldr r0, [r4, #4] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay ldr r1, _021D7638 ; =0x000006AC str r0, [r5, r1] mov r0, #8 diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s index af08a5f39..25ca7a888 100644 --- a/arm9/modules/65/asm/module_65.s +++ b/arm9/modules/65/asm/module_65.s @@ -950,7 +950,7 @@ MOD65_021D7C04: ; 0x021D7C04 bl FUN_0200CB00 ldr r0, [r6, #0x20] ldr r0, [r0, #0x18] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -1103,7 +1103,7 @@ _021D7D42: _021D7D66: ldr r0, [r5, #0x20] ldr r0, [r0, #0x18] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r5, #0x7c strb r0, [r5] pop {r4, r5, r6, pc} diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index b77c8662b..21cf712a8 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -278,7 +278,7 @@ MOD71_0222D820: ; 0x0222D820 bl MOD71_0222D780 ldr r0, [r4, #8] ldr r0, [r0, #0x18] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 mov r2, #0x5d @@ -6668,7 +6668,7 @@ MOD71_02230C48: ; 0x02230C48 mov r1, #0 bl FUN_02019620 add r0, r4, #0 - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s index 20e8b5077..e06f4d001 100644 --- a/arm9/modules/73/asm/module_73.s +++ b/arm9/modules/73/asm/module_73.s @@ -55,11 +55,11 @@ _021D7536: bl MOD73_021D8DF4 ldr r0, [r4, #0x10] ldr r0, [r0, #0x18] - bl FUN_02025084 + bl Options_GetFrame str r0, [r5, #0x24] ldr r0, [r4, #0x10] ldr r0, [r0, #0x18] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay str r0, [r5, #0x28] mov r0, #0xae mov r1, #1 diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s index 63f45d1d7..214736ee5 100644 --- a/arm9/modules/75/asm/module_75.s +++ b/arm9/modules/75/asm/module_75.s @@ -841,7 +841,7 @@ MOD75_021E7214: ; 0x021E7214 add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -9447,7 +9447,7 @@ MOD75_021EB660: ; 0x021EB660 add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0 str r3, [sp] str r0, [sp, #4] diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s index 12b6e9fc7..7f49e675c 100644 --- a/arm9/modules/76/asm/module_76.s +++ b/arm9/modules/76/asm/module_76.s @@ -437,7 +437,7 @@ MOD76_021D7814: ; 0x021D7814 bl FUN_0200CB00 ldr r0, [r4] ldr r0, [r0, #8] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -2053,7 +2053,7 @@ MOD76_021D853C: ; 0x021D853C bl FUN_02002B7C ldr r0, [r4] ldr r0, [r0, #8] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay mov r3, #0 str r3, [sp] str r0, [sp, #4] diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s index 1c074133b..678242227 100644 --- a/arm9/modules/77/asm/module_77.s +++ b/arm9/modules/77/asm/module_77.s @@ -1383,7 +1383,7 @@ MOD77_021D7FAC: ; 0x021D7FAC add r3, r1, #0 bl FUN_020068C8 ldr r0, [r5, #8] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -1685,7 +1685,7 @@ _021D82B0: ldr r2, [r5, r2] bl ReadMsgDataIntoString ldr r0, [r5, #8] - bl FUN_02024FF4 + bl Options_GetTextFrameDelay add r3, r4, #0 str r3, [sp] str r0, [sp, #4] diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index 29a329f05..ef7fab2d5 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -2328,11 +2328,11 @@ MOD80_0222E7B0: ; 0x0222E7B0 thumb_func_start MOD80_0222E7BC MOD80_0222E7BC: ; 0x0222E7BC ldr r0, [r0] - ldr r3, _0222E7C4 ; =FUN_02024FF4 + ldr r3, _0222E7C4 ; =Options_GetTextFrameDelay ldr r0, [r0, #0x24] bx r3 .align 2, 0 -_0222E7C4: .word FUN_02024FF4 +_0222E7C4: .word Options_GetTextFrameDelay thumb_func_end MOD80_0222E7BC thumb_func_start MOD80_0222E7C8 @@ -2805,7 +2805,7 @@ MOD80_0222EB6C: ; 0x0222EB6C bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -4099,7 +4099,7 @@ MOD80_0222F5A8: ; 0x0222F5A8 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -5388,7 +5388,7 @@ MOD80_02230054: ; 0x02230054 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -6395,7 +6395,7 @@ MOD80_02230840: ; 0x02230840 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -8807,7 +8807,7 @@ MOD80_02231BF4: ; 0x02231BF4 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -11836,7 +11836,7 @@ MOD80_0223346C: ; 0x0223346C bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -14380,7 +14380,7 @@ MOD80_022348CC: ; 0x022348CC bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -18024,7 +18024,7 @@ MOD80_02236488: ; 0x02236488 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x24] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s index 3db42aa1b..927b69b67 100644 --- a/arm9/modules/81/asm/module_81.s +++ b/arm9/modules/81/asm/module_81.s @@ -1325,11 +1325,11 @@ _02238840: .word 0x0000014E thumb_func_start MOD81_02238844 MOD81_02238844: ; 0x02238844 ldr r0, [r0] - ldr r3, _0223884C ; =FUN_02025084 + ldr r3, _0223884C ; =Options_GetFrame ldr r0, [r0, #0x14] bx r3 .align 2, 0 -_0223884C: .word FUN_02025084 +_0223884C: .word Options_GetFrame thumb_func_end MOD81_02238844 thumb_func_start MOD81_02238850 diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 4e09a3ed0..89f24d967 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -1638,7 +1638,7 @@ MOD82_0222E264: ; 0x0222E264 bl FUN_02002EEC ldr r0, [r5] ldr r0, [r0, #0x10] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index ca3ff8d3c..59fd717f8 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -2561,7 +2561,7 @@ _0222E960: add r3, r2, #0 bl FUN_0200CB00 ldr r0, [r4, #0x14] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -6152,7 +6152,7 @@ MOD83_02230668: ; 0x02230668 mov r2, #0x56 bl FUN_02002ED0 ldr r0, [r4, #8] - bl FUN_02025084 + bl Options_GetFrame lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp] @@ -10287,7 +10287,7 @@ _022327E6: ldr r1, _02232B58 ; =0x00002B48 str r0, [r4, r1] ldr r0, [r4, r1] - bl FUN_02025084 + bl Options_GetFrame ldr r1, _02232B5C ; =0x00002B4C str r0, [r4, r1] sub r1, #0xc @@ -18540,7 +18540,7 @@ MOD83_02236764: ; 0x02236764 ldr r0, [r4, #0x10] bl Sav2_PlayerData_GetOptionsAddr str r0, [r4, #0x18] - bl FUN_02025084 + bl Options_GetFrame str r0, [r4, #0x1c] ldr r1, _022367F8 ; =0x00000496 mov r0, #9 diff --git a/arm9/src/options.c b/arm9/src/options.c new file mode 100644 index 000000000..296b398a7 --- /dev/null +++ b/arm9/src/options.c @@ -0,0 +1,110 @@ +#include "global.h" +#include "heap.h" +#include "main.h" +#include "MI_memory.h" +#include "options.h" +#include "player_data.h" + +#pragma thumb on + +struct Options * Options_new(u32 heap_id) { + struct Options * ret = AllocFromHeap(heap_id, sizeof(struct Options)); + Options_init(ret); + return ret; +} + +void Options_copy(struct Options * src, struct Options * dest) { + MI_CpuCopy8(src, dest, sizeof(struct Options)); +} + +void Options_init(struct Options * options) { + MI_CpuFill8(options, 0, sizeof(struct Options)); + + options->textSpeed = 1; // mid speed + options->soundMethod = 0; // stereo + options->battleStyle = 0; // shift + options->battleScene = 0; // on + options->buttonMode = 0; // normal + options->frame = 0; // frame 1 +} + +void Options_SetButtonModeOnMain(struct SaveBlock2 * sav2, u32 buttonMode) { + if (sav2 != NULL) { + buttonMode = Options_GetButtonMode(Sav2_PlayerData_GetOptionsAddr(sav2)); + } + + switch (buttonMode) { + case 1: + gMain.unk34 = 1; + break; + case 2: + gMain.unk34 = 3; + break; + case 0: + default: + gMain.unk34 = 0; + break; + } +} + +u16 Options_GetTextSpeed(struct Options * options) { + return options->textSpeed; +} + +void Options_SetTextSpeed(struct Options * options, u16 textSpeed) { + options->textSpeed = (u16)(u32)textSpeed; +} + +u32 Options_GetTextFrameDelay(struct Options * options) { + u16 textSpeed = Options_GetTextSpeed(options); + + if (textSpeed == 0) { + return 8; + } + + if (textSpeed == 1) { + return 4; + } + + return 1; +} + +u16 Options_GetSoundMethod(struct Options * options) { + return options->soundMethod; +} + +void Options_SetSoundMethod(struct Options * options, u16 soundMethod) { + options->soundMethod = (u16)(u32)soundMethod; +} + +u16 Options_GetBattleScene(struct Options * options) { + return options->battleScene; +} + +void Options_SetBattleScene(struct Options * options, u16 battleScene) { + options->battleScene = (u16)(u32)battleScene; +} + +u16 Options_GetBattleStyle(struct Options * options) { + return options->battleStyle; +} + +void Options_SetBattleStyle(struct Options * options, u16 battleStyle) { + options->battleStyle = (u16)(u32)battleStyle; +} + +u16 Options_GetButtonMode(struct Options * options) { + return options->buttonMode; +} + +void Options_SetButtonMode(struct Options * options, u16 buttonMode) { + options->buttonMode = (u16)(u32)buttonMode; +} + +u16 Options_GetFrame(struct Options * options) { + return options->frame; +} + +void Options_SetFrame(struct Options * options, u16 frame) { + options->frame = (u16)(u32)frame; +} diff --git a/arm9/src/sound.c b/arm9/src/sound.c index dd928287a..a1e31bbdb 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -38,7 +38,7 @@ void InitSoundData(void * a0, struct Options * a1) FUN_020040A4(sdat); UNK_02107070[1] = 0; sdat->unk_BCD4C = a0; - FUN_02004D60(a1->unk0_4); + FUN_02004D60(a1->soundMethod); } void DoSoundUpdateFrame(void) diff --git a/include/options.h b/include/options.h index 5f7a3d3f1..0f8c89ae1 100644 --- a/include/options.h +++ b/include/options.h @@ -2,14 +2,30 @@ #define POKEDIAMOND_OPTIONS_H struct Options { - u16 unk0_0:4; - u16 unk0_4:2; - u16 unk0_6:1; - u16 unk0_7:1; - u16 unk0_8:2; - u16 unk0_A:5; + u16 textSpeed:4; + u16 soundMethod:2; + u16 battleStyle:1; + u16 battleScene:1; + u16 buttonMode:2; + u16 frame:5; }; +struct Options * Options_new(u32 heap_id); +void Options_copy(struct Options * src, struct Options * dest); void Options_init(struct Options * options); +void Options_SetButtonModeOnMain(struct SaveBlock2 * sav2, u32 buttonMode); +u16 Options_GetTextSpeed(struct Options * options); +void Options_SetTextSpeed(struct Options * options, u16 textSpeed); +u32 Options_GetTextFrameDelay(struct Options * options); +u16 Options_GetSoundMethod(struct Options * options); +void Options_SetSoundMethod(struct Options * options, u16 soundMethod); +u16 Options_GetBattleScene(struct Options * options); +void Options_SetBattleScene(struct Options * options, u16 battleScene); +u16 Options_GetBattleStyle(struct Options * options); +void Options_SetBattleStyle(struct Options * options, u16 battleStyle); +u16 Options_GetButtonMode(struct Options * options); +void Options_SetButtonMode(struct Options * options, u16 buttonMode); +u16 Options_GetFrame(struct Options * options); +void Options_SetFrame(struct Options * options, u16 frame); #endif //POKEDIAMOND_OPTIONS_H From 7dfef0140ad1b09d7091ffc2db958a0c00b8f215 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 19:21:52 +0000 Subject: [PATCH 30/59] initial try of github actions instead of travis --- .github/calcrom/.gitignore | 2 + .github/calcrom/Makefile | 17 ++++ .github/calcrom/calcrom.cpp | 153 ++++++++++++++++++++++++++++++++++++ .github/calcrom/webhook.sh | 19 +++++ .github/workflows/build.yml | 47 +++++++++++ 5 files changed, 238 insertions(+) create mode 100644 .github/calcrom/.gitignore create mode 100644 .github/calcrom/Makefile create mode 100644 .github/calcrom/calcrom.cpp create mode 100644 .github/calcrom/webhook.sh create mode 100644 .github/workflows/build.yml diff --git a/.github/calcrom/.gitignore b/.github/calcrom/.gitignore new file mode 100644 index 000000000..e4016dbea --- /dev/null +++ b/.github/calcrom/.gitignore @@ -0,0 +1,2 @@ +calcrom +*.exe diff --git a/.github/calcrom/Makefile b/.github/calcrom/Makefile new file mode 100644 index 000000000..e3b6ff509 --- /dev/null +++ b/.github/calcrom/Makefile @@ -0,0 +1,17 @@ +CXX := g++ +CXXFLAGS := -O3 -std=c++11 + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +TARGET := calcrom$(EXE) + +.PHONY: all + +all: $(TARGET) + +$(TARGET): calcrom.cpp + $(CXX) $(CXXFLAGS) -o $@ $^ diff --git a/.github/calcrom/calcrom.cpp b/.github/calcrom/calcrom.cpp new file mode 100644 index 000000000..2947f5e73 --- /dev/null +++ b/.github/calcrom/calcrom.cpp @@ -0,0 +1,153 @@ +/* + * CALCROM.CPP + * © PikalaxALT 2020 + * + * Simple C++ executable to measure the completion rate of Pokémon Diamond + * reverse engineering (decompilation). + * + * Requirements: + * - Must have C++11 compliant compiler. + * - MacOS X: Must provide elf.h on the include (-I) path. + * - Must be placed in ".travis/calcrom/". + * + * Changelog: + * - 0.1.0 (26 May 2020): + * Initial implementation + * - 0.1.1 (26 May 2020): + * Allow program to be run from wherever + * - 0.1.2 (27 May 2020): + * Extra security on ELF header + * - 0.1.3 (30 Jun 2020): + * Account for diamond/pearl split + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +struct Glob : public vector { + glob_t glob_result; +public: + Glob(string const & pattern) { + int result = glob(pattern.c_str(), GLOB_TILDE | GLOB_BRACE, NULL, &glob_result); + if (result) { + stringstream ss; + ss << "Glob(" << pattern << ") failed with error " << result << endl; + throw runtime_error(ss.str()); + } + assign(glob_result.gl_pathv, glob_result.gl_pathv + glob_result.gl_pathc); + }; + void operator~() { + globfree(&glob_result); + } +}; + +void analyze(string basedir, string subdir, string version) { + fstream elf; + Elf32_Ehdr ehdr; + vector shdr; + stringstream pattern; + + // Accumulate sizes + // src asm + // data _____|_____ + // text | + unsigned sizes[2][2] = {{0, 0}, {0, 0}}; + char * shstrtab = NULL; + size_t shstrsz = 0; + stringstream builddir; + builddir << subdir << "/build/" << version; + pattern << basedir << "/" << subdir << "/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}"; + for (char const * & fname : Glob(pattern.str())) + { + string fname_s(fname); + string ext = fname_s.substr(fname_s.rfind('.'), 4); + bool is_asm = ext == ".s"; + fname_s = fname_s.replace(fname_s.find(subdir), 4, builddir.str()); + fname_s = fname_s.replace(fname_s.rfind('.'), 4, ".o"); + elf.open(fname_s, ios_base::in | ios_base::binary); + if (!elf.good()) { + cerr << "Error: file not found: " << fname_s << endl; + return; + } + elf.read((char *)&ehdr, sizeof(ehdr)); + if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0 + || ehdr.e_ehsize != sizeof(Elf32_Ehdr) + || ehdr.e_shentsize != sizeof(Elf32_Shdr)) + { + elf.close(); + stringstream ss; + ss << "Error validating " << fname_s << " as an ELF file" << endl; + throw runtime_error(ss.str()); + } + // Read ELF sections + elf.seekg(ehdr.e_shoff); + shdr.resize(ehdr.e_shnum); + elf.read((char *)shdr.data(), ehdr.e_shnum * ehdr.e_shentsize); + + // Read .shstrtab + if (shstrsz < shdr[ehdr.e_shstrndx].sh_size) { + shstrtab = (char *)realloc(shstrtab, shdr[ehdr.e_shstrndx].sh_size); + shstrsz = shdr[ehdr.e_shstrndx].sh_size; + } + elf.seekg(shdr[ehdr.e_shstrndx].sh_offset); + elf.read(shstrtab, shdr[ehdr.e_shstrndx].sh_size); + elf.close(); + + // Analyze sections + for (Elf32_Shdr & hdr : shdr) { + string shname = shstrtab + hdr.sh_name; + bool is_text = (shname == ".text" || shname == ".init" || shname == ".itcm"); + bool is_data = (shname == ".data" || shname == ".rodata" || shname == ".sdata" || shname == ".dtcm"); + size_t size = hdr.sh_size + (hdr.sh_size & 3 ? 4 - (hdr.sh_size & 3) : 0); + if (is_text || is_data) + { + sizes[is_text][is_asm] += size; + } + } + } + free(shstrtab); + + cout << "Analysis of " << (version.empty() ? subdir : version) << " binary:" << endl; + // Report code + unsigned total_text = sizes[1][0] + sizes[1][1]; + double total_text_d = total_text; + double src_text_d = sizes[1][0]; + double asm_text_d = sizes[1][1]; + cout << " " << total_text << " total bytes of code" << endl; + cout << " " << sizes[1][0] << " bytes of code in src (" << (src_text_d / total_text_d * 100.0) << "%)" << endl; + cout << " " << sizes[1][1] << " bytes of code in asm (" << (asm_text_d / total_text_d * 100.0) << "%)" << endl; + cout << endl; + // Report data + unsigned total_data = sizes[0][0] + sizes[0][1]; + double total_data_d = total_data; + double src_data_d = sizes[0][0]; + double asm_data_d = sizes[0][1]; + cout << " " << total_data << " total bytes of data" << endl; + cout << " " << sizes[0][0] << " bytes of data in src (" << (src_data_d / total_data_d * 100.0) << "%)" << endl; + cout << " " << sizes[0][1] << " bytes of data in asm (" << (asm_data_d / total_data_d * 100.0) << "%)" << endl; + // Let vectors fall to gc +} + +int main(int argc, char ** argv) +{ + if (argc < 2) { + cout << "usage: calcrom PROJECT_DIR" << endl; + throw invalid_argument("missing required argument: PROJECT_DIR\n"); + } + + analyze(argv[1], "arm9", "diamond.us"); + cout << endl; + analyze(argv[1], "arm9", "pearl.us"); + cout << endl; + analyze(argv[1], "arm7", ""); + + return 0; +} diff --git a/.github/calcrom/webhook.sh b/.github/calcrom/webhook.sh new file mode 100644 index 000000000..fd12b64fa --- /dev/null +++ b/.github/calcrom/webhook.sh @@ -0,0 +1,19 @@ +#!/bin/bash -ex + +# Only run this script if it's the master branch build. +if [[ "$GITHUB_REF" != "refs/head/master" || "$GITHUB_EVENT_NAME" != "push" ]]; then + exit 0 +fi + +build_name=$1 +url=$2 +map_file=$(dirname "$0")/../../arm9/build/diamond.us/arm9.elf.xMAP +if [ ! -f $map_file ]; then + echo "$map_file does not exist!" + exit 1 +fi + +make -C ${GITHUB_WORKSPACE}/.github/calcrom +output=$(${GITHUB_WORKSPACE}/.github/calcrom/calcrom ${GITHUB_WORKSPACE} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') +curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$url\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL +popd diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..8d06370e1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,47 @@ +name: build + +on: [push, pull_request] + +env: + LM_LICENSE_FILE: "$GITHUB_WORKSPACE/tools/mwccarm/license.dat" + CC: gcc-8 + CXX: g++-8 + CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png" + CALCROM_DISCORD_WEBHOOK_USERNAME: OK + CALCROM_WEBHOOK_URL: ${{ secrets.WebhookUrl }} + + +jobs: + build: + runs-on: ubuntu-20.04 + + strategy: + matrix: + version: [diamond, pearl] + + steps: + - name: Update and Install Software + run: | + sudo apt update + sudo apt -y upgrade + sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi wine32 wine-stable + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Setup Repo + run: | + mkdir -p $HOME/download + cd $HOME/download + wget http://private.martmists.com/mwccarm.zip + wget http://private.martmists.com/nitro.tar.gz + unzip mwccarm.zip + mv mwccarm $GITHUB_WORKSPACE/tools + tar xzf nitro.tar.gz + mv tools/bin $GITHUB_WORKSPACE/tools + mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7 + mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9 + working-directory: $HOME + - name: Build + run: make ${{ matrix.version }} + - name: Webhook + run: .github/calcrom/calcrom.sh pokediamond "$CALCROM_WEBHOOK_URL" + continue-on-error: true From 37d851b4db9676801f3402c31cdb9cf950aeff70 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 19:29:46 +0000 Subject: [PATCH 31/59] attempt to fix wine --- .github/workflows/build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8d06370e1..4b1d4629b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,12 @@ jobs: run: | sudo apt update sudo apt -y upgrade - sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi wine32 wine-stable + sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi + sudo dpkg --add-architecture i386 + wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - + sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport + sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main" + sudo apt install --install-recommends winehq-stable - name: Checkout Repo uses: actions/checkout@v2 - name: Setup Repo From 6bc1bdcbb0d056e0ac910e85e0607799212f34d9 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 19:34:45 +0000 Subject: [PATCH 32/59] change to 18.04 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4b1d4629b..9cfe2dec9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ env: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-18.04 strategy: matrix: From e0ab568aaa3c6ef77723382c144023073717010e Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 19:45:27 +0000 Subject: [PATCH 33/59] try to fix workspace reference --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9cfe2dec9..cc0e07ead 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: build on: [push, pull_request] env: - LM_LICENSE_FILE: "$GITHUB_WORKSPACE/tools/mwccarm/license.dat" + LM_LICENSE_FILE: "${{ github.workspace }}/tools/mwccarm/license.dat" CC: gcc-8 CXX: g++-8 CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png" @@ -39,11 +39,11 @@ jobs: wget http://private.martmists.com/mwccarm.zip wget http://private.martmists.com/nitro.tar.gz unzip mwccarm.zip - mv mwccarm $GITHUB_WORKSPACE/tools + mv mwccarm ${{ github.workspace }}/tools tar xzf nitro.tar.gz - mv tools/bin $GITHUB_WORKSPACE/tools - mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7 - mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9 + mv tools/bin ${{ github.workspace }}/tools + mv include/nitro/specfiles/ARM7-TS.lcf.template ${{ github.workspace }}/arm7 + mv include/nitro/specfiles/ARM9-TS.lcf.template ${{ github.workspace }}/arm9 working-directory: $HOME - name: Build run: make ${{ matrix.version }} From b4a660bf15e1ffe7a678b64aa1103f79d4a6d83e Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 19:55:43 +0000 Subject: [PATCH 34/59] fix home --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc0e07ead..a90ef1eb8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: build on: [push, pull_request] env: - LM_LICENSE_FILE: "${{ github.workspace }}/tools/mwccarm/license.dat" + LM_LICENSE_FILE: "$GITHUB_WORKSPACE/tools/mwccarm/license.dat" CC: gcc-8 CXX: g++-8 CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png" @@ -34,17 +34,17 @@ jobs: uses: actions/checkout@v2 - name: Setup Repo run: | - mkdir -p $HOME/download - cd $HOME/download + mkdir -p ~/download + cd ~/download wget http://private.martmists.com/mwccarm.zip wget http://private.martmists.com/nitro.tar.gz unzip mwccarm.zip - mv mwccarm ${{ github.workspace }}/tools + mv mwccarm $GITHUB_WORKSPACE/tools tar xzf nitro.tar.gz - mv tools/bin ${{ github.workspace }}/tools - mv include/nitro/specfiles/ARM7-TS.lcf.template ${{ github.workspace }}/arm7 - mv include/nitro/specfiles/ARM9-TS.lcf.template ${{ github.workspace }}/arm9 - working-directory: $HOME + mv tools/bin $GITHUB_WORKSPACE/tools + mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7 + mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9 + working-directory: ~ - name: Build run: make ${{ matrix.version }} - name: Webhook From ff283a07b0188e9e807e3299e2e1a408de6bf9c9 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 20:33:36 +0000 Subject: [PATCH 35/59] remove travis --- .github/workflows/build.yml | 2 +- .travis.yml | 41 ---------- .travis/calcrom/.gitignore | 2 - .travis/calcrom/Makefile | 17 ---- .travis/calcrom/calcrom.cpp | 153 ------------------------------------ .travis/calcrom/webhook.sh | 18 ----- 6 files changed, 1 insertion(+), 232 deletions(-) delete mode 100644 .travis.yml delete mode 100644 .travis/calcrom/.gitignore delete mode 100644 .travis/calcrom/Makefile delete mode 100644 .travis/calcrom/calcrom.cpp delete mode 100755 .travis/calcrom/webhook.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a90ef1eb8..c6d6aec4a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,5 +48,5 @@ jobs: - name: Build run: make ${{ matrix.version }} - name: Webhook - run: .github/calcrom/calcrom.sh pokediamond "$CALCROM_WEBHOOK_URL" + run: $GITHUB_WORKSPACE/.github/calcrom/webhook.sh pokediamond "$CALCROM_WEBHOOK_URL" continue-on-error: true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ac7000822..000000000 --- a/.travis.yml +++ /dev/null @@ -1,41 +0,0 @@ -dist: bionic -os: linux -language: c -env: - global: - - LM_LICENSE_FILE="$TRAVIS_BUILD_DIR/tools/mwccarm/license.dat" - - CC=gcc-8 - - CXX=g++-8 -addons: - apt: - packages: - - g++-8-multilib - - linux-libc-dev - - binutils-arm-none-eabi - - wine32 - - wine-stable -cache: - apt: true -install: - # These files are only accessible from Travis CI IP Addresses to prevent piracy. - - mkdir -p $HOME/download - - pushd $HOME/download - - wget http://private.martmists.com/mwccarm.zip - - wget http://private.martmists.com/nitro.tar.gz - - unzip mwccarm.zip - - mv mwccarm $TRAVIS_BUILD_DIR/tools - - tar xzf nitro.tar.gz - - mv tools/bin $TRAVIS_BUILD_DIR/tools - - mv include/nitro/specfiles/ARM7-TS.lcf.template $TRAVIS_BUILD_DIR/arm7 - - mv include/nitro/specfiles/ARM9-TS.lcf.template $TRAVIS_BUILD_DIR/arm9 - - popd - -script: - - travis_retry make - - travis_retry make pearl - -notifications: - email: false - -after_success: - - .travis/calcrom/webhook.sh pokediamond diff --git a/.travis/calcrom/.gitignore b/.travis/calcrom/.gitignore deleted file mode 100644 index e4016dbea..000000000 --- a/.travis/calcrom/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -calcrom -*.exe diff --git a/.travis/calcrom/Makefile b/.travis/calcrom/Makefile deleted file mode 100644 index e3b6ff509..000000000 --- a/.travis/calcrom/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -CXX := g++ -CXXFLAGS := -O3 -std=c++11 - -ifeq ($(OS),Windows_NT) -EXE := .exe -else -EXE := -endif - -TARGET := calcrom$(EXE) - -.PHONY: all - -all: $(TARGET) - -$(TARGET): calcrom.cpp - $(CXX) $(CXXFLAGS) -o $@ $^ diff --git a/.travis/calcrom/calcrom.cpp b/.travis/calcrom/calcrom.cpp deleted file mode 100644 index 2947f5e73..000000000 --- a/.travis/calcrom/calcrom.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/* - * CALCROM.CPP - * © PikalaxALT 2020 - * - * Simple C++ executable to measure the completion rate of Pokémon Diamond - * reverse engineering (decompilation). - * - * Requirements: - * - Must have C++11 compliant compiler. - * - MacOS X: Must provide elf.h on the include (-I) path. - * - Must be placed in ".travis/calcrom/". - * - * Changelog: - * - 0.1.0 (26 May 2020): - * Initial implementation - * - 0.1.1 (26 May 2020): - * Allow program to be run from wherever - * - 0.1.2 (27 May 2020): - * Extra security on ELF header - * - 0.1.3 (30 Jun 2020): - * Account for diamond/pearl split - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -struct Glob : public vector { - glob_t glob_result; -public: - Glob(string const & pattern) { - int result = glob(pattern.c_str(), GLOB_TILDE | GLOB_BRACE, NULL, &glob_result); - if (result) { - stringstream ss; - ss << "Glob(" << pattern << ") failed with error " << result << endl; - throw runtime_error(ss.str()); - } - assign(glob_result.gl_pathv, glob_result.gl_pathv + glob_result.gl_pathc); - }; - void operator~() { - globfree(&glob_result); - } -}; - -void analyze(string basedir, string subdir, string version) { - fstream elf; - Elf32_Ehdr ehdr; - vector shdr; - stringstream pattern; - - // Accumulate sizes - // src asm - // data _____|_____ - // text | - unsigned sizes[2][2] = {{0, 0}, {0, 0}}; - char * shstrtab = NULL; - size_t shstrsz = 0; - stringstream builddir; - builddir << subdir << "/build/" << version; - pattern << basedir << "/" << subdir << "/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}"; - for (char const * & fname : Glob(pattern.str())) - { - string fname_s(fname); - string ext = fname_s.substr(fname_s.rfind('.'), 4); - bool is_asm = ext == ".s"; - fname_s = fname_s.replace(fname_s.find(subdir), 4, builddir.str()); - fname_s = fname_s.replace(fname_s.rfind('.'), 4, ".o"); - elf.open(fname_s, ios_base::in | ios_base::binary); - if (!elf.good()) { - cerr << "Error: file not found: " << fname_s << endl; - return; - } - elf.read((char *)&ehdr, sizeof(ehdr)); - if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0 - || ehdr.e_ehsize != sizeof(Elf32_Ehdr) - || ehdr.e_shentsize != sizeof(Elf32_Shdr)) - { - elf.close(); - stringstream ss; - ss << "Error validating " << fname_s << " as an ELF file" << endl; - throw runtime_error(ss.str()); - } - // Read ELF sections - elf.seekg(ehdr.e_shoff); - shdr.resize(ehdr.e_shnum); - elf.read((char *)shdr.data(), ehdr.e_shnum * ehdr.e_shentsize); - - // Read .shstrtab - if (shstrsz < shdr[ehdr.e_shstrndx].sh_size) { - shstrtab = (char *)realloc(shstrtab, shdr[ehdr.e_shstrndx].sh_size); - shstrsz = shdr[ehdr.e_shstrndx].sh_size; - } - elf.seekg(shdr[ehdr.e_shstrndx].sh_offset); - elf.read(shstrtab, shdr[ehdr.e_shstrndx].sh_size); - elf.close(); - - // Analyze sections - for (Elf32_Shdr & hdr : shdr) { - string shname = shstrtab + hdr.sh_name; - bool is_text = (shname == ".text" || shname == ".init" || shname == ".itcm"); - bool is_data = (shname == ".data" || shname == ".rodata" || shname == ".sdata" || shname == ".dtcm"); - size_t size = hdr.sh_size + (hdr.sh_size & 3 ? 4 - (hdr.sh_size & 3) : 0); - if (is_text || is_data) - { - sizes[is_text][is_asm] += size; - } - } - } - free(shstrtab); - - cout << "Analysis of " << (version.empty() ? subdir : version) << " binary:" << endl; - // Report code - unsigned total_text = sizes[1][0] + sizes[1][1]; - double total_text_d = total_text; - double src_text_d = sizes[1][0]; - double asm_text_d = sizes[1][1]; - cout << " " << total_text << " total bytes of code" << endl; - cout << " " << sizes[1][0] << " bytes of code in src (" << (src_text_d / total_text_d * 100.0) << "%)" << endl; - cout << " " << sizes[1][1] << " bytes of code in asm (" << (asm_text_d / total_text_d * 100.0) << "%)" << endl; - cout << endl; - // Report data - unsigned total_data = sizes[0][0] + sizes[0][1]; - double total_data_d = total_data; - double src_data_d = sizes[0][0]; - double asm_data_d = sizes[0][1]; - cout << " " << total_data << " total bytes of data" << endl; - cout << " " << sizes[0][0] << " bytes of data in src (" << (src_data_d / total_data_d * 100.0) << "%)" << endl; - cout << " " << sizes[0][1] << " bytes of data in asm (" << (asm_data_d / total_data_d * 100.0) << "%)" << endl; - // Let vectors fall to gc -} - -int main(int argc, char ** argv) -{ - if (argc < 2) { - cout << "usage: calcrom PROJECT_DIR" << endl; - throw invalid_argument("missing required argument: PROJECT_DIR\n"); - } - - analyze(argv[1], "arm9", "diamond.us"); - cout << endl; - analyze(argv[1], "arm9", "pearl.us"); - cout << endl; - analyze(argv[1], "arm7", ""); - - return 0; -} diff --git a/.travis/calcrom/webhook.sh b/.travis/calcrom/webhook.sh deleted file mode 100755 index 66f141b6d..000000000 --- a/.travis/calcrom/webhook.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -ex - -# Only run this script if it's the master branch build. -if [[ "$TRAVIS_BRANCH" != "master" || "$TRAVIS_PULL_REQUEST" != "false" ]]; then - exit 0 -fi - -build_name=$1 -map_file=$(dirname "$0")/../../arm9/build/diamond.us/arm9.elf.xMAP -if [ ! -f $map_file ]; then - echo "$map_file does not exist!" - exit 1 -fi - -make -C ${TRAVIS_BUILD_DIR}/.travis/calcrom -output=$(${TRAVIS_BUILD_DIR}/.travis/calcrom/calcrom ${TRAVIS_BUILD_DIR} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') -curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL -popd From 6063c0d5ae8a436edae37979217b27135e6bfc5f Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 20:37:57 +0000 Subject: [PATCH 36/59] fix webhook url --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6d6aec4a..4b91dccb7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ env: CXX: g++-8 CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png" CALCROM_DISCORD_WEBHOOK_USERNAME: OK - CALCROM_WEBHOOK_URL: ${{ secrets.WebhookUrl }} + CALCROM_WEBHOOK_URL: ${{ secrets.WEBHOOKURL }} jobs: From a13ce0a41c77dfc31bbbf5478d6443b73c1387a5 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 20:54:28 +0000 Subject: [PATCH 37/59] chmod 755 --- .github/workflows/build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4b91dccb7..9666cbddf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,5 +48,7 @@ jobs: - name: Build run: make ${{ matrix.version }} - name: Webhook - run: $GITHUB_WORKSPACE/.github/calcrom/webhook.sh pokediamond "$CALCROM_WEBHOOK_URL" + run: | + sudo chmod 755 $GITHUB_WORKSPACE/.github/calcrom/webhook.sh + $GITHUB_WORKSPACE/.github/calcrom/webhook.sh pokediamond "$CALCROM_WEBHOOK_URL" continue-on-error: true From 67c105b921816cdeced156d7a832dbbb336be828 Mon Sep 17 00:00:00 2001 From: tgsm Date: Wed, 23 Dec 2020 15:45:29 -0500 Subject: [PATCH 38/59] options: add a missing SaveBlock2 forward-declaration Fixes compiler warnings. Also adds a missing forward-declaration to OverlayManager. --- include/options.h | 2 ++ include/overlay_manager.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/include/options.h b/include/options.h index 0f8c89ae1..fbddbffc7 100644 --- a/include/options.h +++ b/include/options.h @@ -1,6 +1,8 @@ #ifndef POKEDIAMOND_OPTIONS_H #define POKEDIAMOND_OPTIONS_H +struct SaveBlock2; + struct Options { u16 textSpeed:4; u16 soundMethod:2; diff --git a/include/overlay_manager.h b/include/overlay_manager.h index c189ed3c5..193bc7e8a 100644 --- a/include/overlay_manager.h +++ b/include/overlay_manager.h @@ -3,6 +3,8 @@ #include "nitro/types.h" +struct Unk21DBE18; + struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id); void OverlayManager_delete(struct UnkStruct_02006234 * a0); void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id); From 402e915ff5045ba1983973b1dd3a323c2dfcc567 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 21:09:38 +0000 Subject: [PATCH 39/59] fix reference --- .github/calcrom/webhook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/calcrom/webhook.sh b/.github/calcrom/webhook.sh index fd12b64fa..8ebb0e206 100644 --- a/.github/calcrom/webhook.sh +++ b/.github/calcrom/webhook.sh @@ -1,7 +1,7 @@ #!/bin/bash -ex # Only run this script if it's the master branch build. -if [[ "$GITHUB_REF" != "refs/head/master" || "$GITHUB_EVENT_NAME" != "push" ]]; then +if [[ "$GITHUB_REF" != "refs/heads/master" || "$GITHUB_EVENT_NAME" != "push" ]]; then exit 0 fi From b4c99c0d1158e25e729fecab5d85a5602fe18a5d Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 21:40:52 +0000 Subject: [PATCH 40/59] build diamond and pearl in the same job --- .github/workflows/build.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9666cbddf..ba9767268 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,10 +15,6 @@ jobs: build: runs-on: ubuntu-18.04 - strategy: - matrix: - version: [diamond, pearl] - steps: - name: Update and Install Software run: | @@ -45,8 +41,10 @@ jobs: mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7 mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9 working-directory: ~ - - name: Build - run: make ${{ matrix.version }} + - name: Build Diamond + run: make diamond + - name: Build Pearl + run: make pearl - name: Webhook run: | sudo chmod 755 $GITHUB_WORKSPACE/.github/calcrom/webhook.sh From ca68abf106bd1a5638904e5afee47aafee3e4a66 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 23 Dec 2020 22:31:05 +0000 Subject: [PATCH 41/59] fix webhook --- .github/calcrom/webhook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/calcrom/webhook.sh b/.github/calcrom/webhook.sh index 8ebb0e206..279f795d6 100644 --- a/.github/calcrom/webhook.sh +++ b/.github/calcrom/webhook.sh @@ -15,5 +15,5 @@ fi make -C ${GITHUB_WORKSPACE}/.github/calcrom output=$(${GITHUB_WORKSPACE}/.github/calcrom/calcrom ${GITHUB_WORKSPACE} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') -curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$url\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL +curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $url popd From 71e8d0c889d9758201a16f08b08626af5c504919 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 27 Dec 2020 16:06:10 +0000 Subject: [PATCH 42/59] split a bit more of mod 5 --- arm9/arm9.lsf | 2 + arm9/global.inc | 6 + arm9/modules/05/asm/mod05_021E779C.s | 621 ++++++++++++ arm9/modules/05/asm/mod05_021E7C00.s | 708 ++++++++++++++ arm9/modules/05/asm/module_05.s | 1317 -------------------------- 5 files changed, 1337 insertions(+), 1317 deletions(-) create mode 100644 arm9/modules/05/asm/mod05_021E779C.s create mode 100644 arm9/modules/05/asm/mod05_021E7C00.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d77a4c21e..84d10f58c 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -556,6 +556,8 @@ Overlay MODULE_05 Object mod05_021E5FD8.o Object mod05_021E72FC.o Object mod05_021E7504.o + Object mod05_021E779C.o + Object mod05_021E7C00.o Object module_05.o } diff --git a/arm9/global.inc b/arm9/global.inc index 0a00bc9b2..65781a0ce 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -6511,12 +6511,16 @@ .extern MOD05_021E72FC .extern MOD05_021E7358 .extern MOD05_021E7750 +.extern MOD05_021E779C +.extern MOD05_021E77B0 .extern MOD05_021E799C .extern MOD05_021E7AC0 .extern MOD05_021E7C00 .extern MOD05_021E7C14 .extern MOD05_021E7C1C .extern MOD05_021E7C80 +.extern MOD05_021E7CD8 +.extern MOD05_021E7DD8 .extern MOD05_021E7E9C .extern MOD05_021E7EA0 .extern MOD05_021E7EB0 @@ -6677,8 +6681,10 @@ .extern MOD05_021F4BF8 .extern MOD05_021F4C74 .extern MOD05_021F4C88 +.extern MOD05_021F4C9C .extern MOD05_021F4CBC .extern MOD05_021F4CD4 +.extern MOD05_021F4CE4 .extern MOD05_021F4CF8 .extern MOD05_021F4D1C .extern MOD05_021F4D2C diff --git a/arm9/modules/05/asm/mod05_021E779C.s b/arm9/modules/05/asm/mod05_021E779C.s new file mode 100644 index 000000000..ad4118ff1 --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E779C.s @@ -0,0 +1,621 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E779C +MOD05_021E779C: ; 0x021E779C + push {r4, lr} + mov r2, #0 + mov r1, #0x14 + add r3, r2, #0 + add r4, r0, #0 + bl MOD05_021E4BE8 + str r4, [r0, #0x10] + pop {r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E77B0 +MOD05_021E77B0: ; 0x021E77B0 + push {r4, lr} + add r4, r0, #0 + bl MOD05_021E78B4 + add r0, r4, #0 + bl MOD05_021E4C00 + pop {r4, pc} + + thumb_func_start MOD05_021E77C0 +MOD05_021E77C0: ; 0x021E77C0 + ldr r1, [r0] + add r1, r1, #1 + str r1, [r0] + bx lr + + thumb_func_start MOD05_021E77C8 +MOD05_021E77C8: ; 0x021E77C8 + push {r3, lr} + ldr r1, [r0] + sub r1, r1, #1 + str r1, [r0] + bpl _021E77D6 + bl ErrorHandling +_021E77D6: + pop {r3, pc} + + thumb_func_start MOD05_021E77D8 +MOD05_021E77D8: ; 0x021E77D8 + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + bx lr + + thumb_func_start MOD05_021E77E0 +MOD05_021E77E0: ; 0x021E77E0 + push {r3, lr} + ldr r1, [r0, #4] + sub r1, r1, #1 + str r1, [r0, #4] + bpl _021E77EE + bl ErrorHandling +_021E77EE: + pop {r3, pc} + + thumb_func_start MOD05_021E77F0 +MOD05_021E77F0: ; 0x021E77F0 + push {r3, lr} + cmp r1, #0 + bne _021E77FC + bl MOD05_021E77C0 + pop {r3, pc} +_021E77FC: + bl MOD05_021E77D8 + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7804 +MOD05_021E7804: ; 0x021E7804 + push {r3, lr} + cmp r1, #0 + bne _021E7810 + bl MOD05_021E77C8 + pop {r3, pc} +_021E7810: + bl MOD05_021E77E0 + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7818 +MOD05_021E7818: ; 0x021E7818 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + ldr r0, [r4, #8] + cmp r0, #0 + bne _021E785C + mov r1, #1 + str r1, [r4, #8] + ldr r0, [r4, #0x10] + mov r2, #0x55 + bl MOD05_021E5078 + ldr r0, [r4, #0x10] + mov r1, #1 + mov r2, #0x75 + bl MOD05_021E50AC + mov r1, #1 + ldr r0, [r4, #0x10] + mov r2, #4 + add r3, r1, #0 + bl MOD05_021E50D4 + mov r1, #1 + str r1, [sp] + mov r0, #0 + str r0, [sp, #4] + ldr r0, _021E7860 ; =UNK05_021F7854 + add r2, r1, #0 + str r0, [sp, #8] + ldr r0, [r4, #0x10] + add r3, r1, #0 + bl MOD05_021E4EFC +_021E785C: + add sp, #0xc + pop {r3, r4, pc} + .balign 4, 0 +_021E7860: .word UNK05_021F7854 + + thumb_func_start MOD05_021E7864 +MOD05_021E7864: ; 0x021E7864 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + ldr r0, [r4, #0xc] + cmp r0, #0 + bne _021E78AC + mov r0, #1 + str r0, [r4, #0xc] + ldr r0, [r4, #0x10] + mov r1, #0xa + mov r2, #0x6c + bl MOD05_021E5078 + ldr r0, [r4, #0x10] + mov r1, #0xa + mov r2, #0x75 + bl MOD05_021E50AC + ldr r0, [r4, #0x10] + mov r1, #0xb + mov r2, #0xd + mov r3, #1 + bl MOD05_021E50D4 + mov r0, #0xb + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + ldr r0, _021E78B0 ; =UNK05_021F7854 + mov r2, #0xa + str r0, [sp, #8] + ldr r0, [r4, #0x10] + mov r1, #0xc + add r3, r2, #0 + bl MOD05_021E4EFC +_021E78AC: + add sp, #0xc + pop {r3, r4, pc} + .balign 4, 0 +_021E78B0: .word UNK05_021F7854 + + thumb_func_start MOD05_021E78B4 +MOD05_021E78B4: ; 0x021E78B4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + cmp r0, #1 + bne _021E78E2 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r4, #0x10] + mov r1, #1 + bl MOD05_021E50A0 + ldr r0, [r4, #0x10] + mov r1, #1 + bl MOD05_021E50C8 + ldr r0, [r4, #0x10] + mov r1, #1 + bl MOD05_021E5114 + ldr r0, [r4, #0x10] + mov r1, #1 + bl MOD05_021E506C +_021E78E2: + pop {r4, pc} + + thumb_func_start MOD05_021E78E4 +MOD05_021E78E4: ; 0x021E78E4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0xc] + cmp r0, #1 + bne _021E7912 + mov r0, #0 + str r0, [r4, #0xc] + ldr r0, [r4, #0x10] + mov r1, #0xa + bl MOD05_021E50A0 + ldr r0, [r4, #0x10] + mov r1, #0xa + bl MOD05_021E50C8 + ldr r0, [r4, #0x10] + mov r1, #0xb + bl MOD05_021E5114 + ldr r0, [r4, #0x10] + mov r1, #0xc + bl MOD05_021E506C +_021E7912: + pop {r4, pc} + + thumb_func_start MOD05_021E7914 +MOD05_021E7914: ; 0x021E7914 + push {r3, lr} + ldr r1, [r0] + cmp r1, #0 + bne _021E7920 + bl MOD05_021E7818 +_021E7920: + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7924 +MOD05_021E7924: ; 0x021E7924 + push {r3, lr} + ldr r1, [r0, #4] + cmp r1, #0 + bne _021E7930 + bl MOD05_021E7864 +_021E7930: + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7934 +MOD05_021E7934: ; 0x021E7934 + push {r3, lr} + ldr r1, [r0] + cmp r1, #0 + bne _021E7940 + bl MOD05_021E78B4 +_021E7940: + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7944 +MOD05_021E7944: ; 0x021E7944 + push {r3, lr} + ldr r1, [r0, #4] + cmp r1, #0 + bne _021E7950 + bl MOD05_021E78E4 +_021E7950: + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7954 +MOD05_021E7954: ; 0x021E7954 + push {r3, lr} + cmp r1, #0 + bne _021E7960 + bl MOD05_021E7914 + pop {r3, pc} +_021E7960: + bl MOD05_021E7924 + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7968 +MOD05_021E7968: ; 0x021E7968 + push {r3, lr} + cmp r1, #0 + bne _021E7974 + bl MOD05_021E7934 + pop {r3, pc} +_021E7974: + bl MOD05_021E7944 + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E797C +MOD05_021E797C: ; 0x021E797C + push {r3, r4, r5, lr} + sub sp, #8 + ldr r3, _021E7998 ; =UNK05_021F7824 + add r4, sp, #0 + ldr r5, [r3] + ldr r3, [r3, #4] + str r5, [sp] + str r3, [sp, #4] + lsl r1, r1, #2 + ldr r1, [r4, r1] + bl MOD05_021E4EE4 + add sp, #8 + pop {r3, r4, r5, pc} + .balign 4, 0 +_021E7998: .word UNK05_021F7824 + + thumb_func_start MOD05_021E799C +MOD05_021E799C: ; 0x021E799C + push {r3, lr} + bl FUN_02064738 + ldr r0, [r0, #0x14] + pop {r3, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E79A8 +MOD05_021E79A8: ; 0x021E79A8 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + bl FUN_0206475C + add r2, r4, #0 + add r3, r0, #0 + add r2, #0x30 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + mov r0, #6 + lsl r0, r0, #0xc + str r0, [r4, #0x28] + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E7954 + add r0, r5, #0 + add r1, sp, #0 + bl FUN_0206477C + ldr r0, [r4, #0x34] + ldr r1, [r4, #0x30] + add r2, sp, #0 + bl MOD05_021E797C + str r0, [r4, #0x40] + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E77F0 + add r0, r5, #0 + bl FUN_02064754 + cmp r0, #1 + bne _021E79FC + ldr r0, _021E7A04 ; =0x000005DD + bl FUN_020054C8 +_021E79FC: + mov r0, #1 + add sp, #0xc + pop {r4, r5, pc} + nop +_021E7A04: .word 0x000005DD + + thumb_func_start MOD05_021E7A08 +MOD05_021E7A08: ; 0x021E7A08 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r1, sp, #0 + add r5, r0, #0 + bl FUN_0206477C + ldr r0, [r4] + cmp r0, #0 + beq _021E7A24 + cmp r0, #1 + beq _021E7A46 + cmp r0, #2 + b _021E7A5E +_021E7A24: + ldr r1, [r4, #0x1c] + ldr r0, [r4, #0x28] + add r0, r1, r0 + str r0, [r4, #0x1c] + beq _021E7A3A + mov r0, #2 + ldr r1, [r4, #0x28] + lsl r0, r0, #0xc + sub r0, r1, r0 + str r0, [r4, #0x28] + b _021E7A5E +_021E7A3A: + mov r0, #0 + str r0, [r4, #0x28] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _021E7A5E +_021E7A46: + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + cmp r0, #0x1e + blt _021E7A5E + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r4, #4] + mov r0, #1 + str r0, [r4, #0x14] +_021E7A5E: + add r0, r5, #0 + add r1, sp, #0 + bl FUN_0206476C + add sp, #0xc + pop {r4, r5, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7A6C +MOD05_021E7A6C: ; 0x021E7A6C + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0x40] + bl FUN_0201F744 + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E7804 + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E7968 + pop {r4, pc} + + thumb_func_start MOD05_021E7A88 +MOD05_021E7A88: ; 0x021E7A88 + push {r3, r4, lr} + sub sp, #0xc + add r4, r1, #0 + ldr r1, [r4, #0x10] + cmp r1, #1 + beq _021E7ABA + add r1, sp, #0 + bl FUN_0206477C + ldr r1, [sp] + ldr r0, [r4, #0x18] + add r0, r1, r0 + str r0, [sp] + ldr r1, [sp, #4] + ldr r0, [r4, #0x1c] + add r0, r1, r0 + str r0, [sp, #4] + ldr r1, [sp, #8] + ldr r0, [r4, #0x20] + add r0, r1, r0 + str r0, [sp, #8] + ldr r0, [r4, #0x40] + add r1, sp, #0 + bl FUN_0201F7C8 +_021E7ABA: + add sp, #0xc + pop {r3, r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7AC0 +MOD05_021E7AC0: ; 0x021E7AC0 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r0, #0 + add r6, r1, #0 + add r7, r2, #0 + bl MOD05_021E4C24 + add r4, r0, #0 + mov r1, #0x16 + str r6, [sp, #0x14] + str r4, [sp, #0x18] + bl MOD05_021E4C08 + str r0, [sp, #0x1c] + add r0, r5, #0 + add r1, sp, #8 + str r5, [sp, #0x20] + bl FUN_02058B5C + add r0, r5, #0 + bl FUN_02058744 + add r1, r0, #1 + add r0, sp, #0x14 + str r0, [sp] + str r1, [sp, #4] + ldr r1, _021E7B04 ; =UNK05_021F7840 + add r0, r4, #0 + add r2, sp, #8 + add r3, r7, #0 + bl MOD05_021E4DC4 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + .balign 4, 0 +_021E7B04: .word UNK05_021F7840 + + thumb_func_start MOD05_021E7B08 +MOD05_021E7B08: ; 0x021E7B08 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + bl FUN_0206475C + add r2, r4, #0 + add r3, r0, #0 + add r2, #0x30 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r4, #0x3c] + bl FUN_02058448 + str r0, [r4, #8] + ldr r0, [r4, #0x3c] + bl FUN_02058450 + str r0, [r4, #0xc] + mov r0, #6 + lsl r0, r0, #0xc + str r0, [r4, #0x28] + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E7954 + add r0, r5, #0 + add r1, sp, #0 + bl FUN_0206477C + ldr r0, [r4, #0x34] + ldr r1, [r4, #0x30] + add r2, sp, #0 + bl MOD05_021E797C + str r0, [r4, #0x40] + ldr r0, [r4, #0x38] + ldr r1, [r4, #0x30] + bl MOD05_021E77F0 + add r0, r5, #0 + bl FUN_02064754 + cmp r0, #1 + bne _021E7B6C + ldr r0, _021E7B74 ; =0x000005DD + bl FUN_020054C8 +_021E7B6C: + mov r0, #1 + add sp, #0xc + pop {r4, r5, pc} + nop +_021E7B74: .word 0x000005DD + + thumb_func_start MOD05_021E7B78 +MOD05_021E7B78: ; 0x021E7B78 + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r4, r1, #0 + ldr r6, [r4, #0x3c] + ldr r1, [r4, #8] + add r5, r0, #0 + ldr r2, [r4, #0xc] + add r0, r6, #0 + bl FUN_020582A8 + cmp r0, #0 + bne _021E7B94 + bl ErrorHandling +_021E7B94: + add r0, r6, #0 + add r1, sp, #0 + bl MOD05_021F1E64 + mov r0, #2 + ldr r1, [sp, #4] + lsl r0, r0, #0x10 + add r1, r1, r0 + str r1, [sp, #4] + ldr r2, [sp, #8] + lsr r1, r0, #5 + add r1, r2, r1 + str r1, [sp, #8] + ldr r1, [r4] + cmp r1, #0 + beq _021E7BBC + cmp r1, #1 + beq _021E7BDC + cmp r1, #2 + b _021E7BF4 +_021E7BBC: + ldr r2, [r4, #0x1c] + ldr r1, [r4, #0x28] + add r1, r2, r1 + str r1, [r4, #0x1c] + beq _021E7BD0 + ldr r1, [r4, #0x28] + lsr r0, r0, #4 + sub r0, r1, r0 + str r0, [r4, #0x28] + b _021E7BF4 +_021E7BD0: + mov r0, #0 + str r0, [r4, #0x28] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _021E7BF4 +_021E7BDC: + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + cmp r0, #0x1e + blt _021E7BF4 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r4, #4] + mov r0, #1 + str r0, [r4, #0x14] +_021E7BF4: + add r0, r5, #0 + add r1, sp, #0 + bl FUN_0206476C + add sp, #0xc + pop {r3, r4, r5, r6, pc} + + .section .rodata + + .global UNK05_021F7824 +UNK05_021F7824: ; 0x021F7824 + .word 0x00000001, 0x0000000C, 0x00000044, MOD05_021E79A8 + .word MOD05_021E7A6C, MOD05_021E7A08, MOD05_021E7A88 + + .global UNK05_021F7840 +UNK05_021F7840: ; 0x021F7840 + .word 0x00000044, MOD05_021E7B08, MOD05_021E7A6C, MOD05_021E7B78 + .word MOD05_021E7A88 + + .global UNK05_021F7854 +UNK05_021F7854: ; 0x021F7854 + .word 0x00000000, 0x00000001, 0x00000000, 0x00000000 + .word 0x00000000, 0x00000002 diff --git a/arm9/modules/05/asm/mod05_021E7C00.s b/arm9/modules/05/asm/mod05_021E7C00.s new file mode 100644 index 000000000..2e968e4fb --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E7C00.s @@ -0,0 +1,708 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E7C00 +MOD05_021E7C00: ; 0x021E7C00 + push {r4, lr} + mov r1, #0x46 + lsl r1, r1, #6 + bl AllocFromHeap + add r4, r0, #0 + bl MOD05_021E7C1C + add r0, r4, #0 + pop {r4, pc} + + thumb_func_start MOD05_021E7C14 +MOD05_021E7C14: ; 0x021E7C14 + ldr r3, _021E7C18 ; =FreeToHeap + bx r3 + .balign 4, 0 +_021E7C18: .word FreeToHeap + + thumb_func_start MOD05_021E7C1C +MOD05_021E7C1C: ; 0x021E7C1C + push {r3, r4, r5, r6, r7} + sub sp, #0xc + mov r4, #0 + mov ip, r0 + add r7, sp, #0 + add r3, r4, #0 +_021E7C28: + str r3, [r7] + str r3, [r7, #4] + mov r0, #0x8c + add r1, r4, #0 + mul r1, r0 + mov r0, ip + add r2, r0, r1 + add r5, r2, #0 + str r3, [r7, #8] + mov r0, ip + str r3, [r0, r1] + str r3, [r2, #4] + str r3, [r2, #8] + str r3, [r2, #0xc] + add r6, r7, #0 + ldmia r6!, {r0, r1} + add r5, #0x68 + stmia r5!, {r0, r1} + ldr r0, [r6] + add r6, r7, #0 + str r0, [r5] + add r5, r2, #0 + ldmia r6!, {r0, r1} + add r5, #0x74 + stmia r5!, {r0, r1} + ldr r0, [r6] + add r6, r7, #0 + str r0, [r5] + add r5, r2, #0 + ldmia r6!, {r0, r1} + add r5, #0x80 + stmia r5!, {r0, r1} + ldr r0, [r6] + str r0, [r5] + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + str r3, [r2, #0x64] + cmp r4, #0x20 + blo _021E7C28 + add sp, #0xc + pop {r3, r4, r5, r6, r7} + bx lr + .balign 4, 0 + + thumb_func_start MOD05_021E7C80 +MOD05_021E7C80: ; 0x021E7C80 + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + add r4, r1, #0 + cmp r5, #0x20 + blt _021E7C90 + bl ErrorHandling +_021E7C90: + add r6, sp, #0 + mov r3, #0 + str r3, [r6] + str r3, [r6, #4] + mov r0, #0x8c + mul r0, r5 + str r3, [r6, #8] + str r3, [r4, r0] + add r2, r4, r0 + str r3, [r2, #4] + str r3, [r2, #8] + add r4, r2, #0 + str r3, [r2, #0xc] + add r5, r6, #0 + ldmia r5!, {r0, r1} + add r4, #0x68 + stmia r4!, {r0, r1} + ldr r0, [r5] + add r5, r6, #0 + str r0, [r4] + add r4, r2, #0 + ldmia r5!, {r0, r1} + add r4, #0x74 + stmia r4!, {r0, r1} + ldr r0, [r5] + str r0, [r4] + add r4, r2, #0 + ldmia r6!, {r0, r1} + add r4, #0x80 + stmia r4!, {r0, r1} + ldr r0, [r6] + str r0, [r4] + str r3, [r2, #0x64] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7CD8 +MOD05_021E7CD8: ; 0x021E7CD8 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + ldr r0, [sp, #0x28] + add r4, r1, #0 + str r0, [sp, #0x28] + mov r0, #0 + add r7, r2, #0 + add r5, r3, #0 + str r0, [sp, #4] + cmp r4, #0 + beq _021E7D0E + mov r0, #4 + bl AllocFromHeapAtEnd + str r0, [sp, #4] + ldr r2, [sp, #4] + add r0, r6, #0 + add r1, r4, #0 + bl NARC_ReadFile + add r0, r4, #0 + mov r1, #0x30 + bl _u32_div_f + str r0, [sp] + b _021E7D10 +_021E7D0E: + str r0, [sp] +_021E7D10: + ldr r4, [sp, #4] + mov r6, #0 +_021E7D14: + ldr r0, [sp] + cmp r6, r0 + bhs _021E7D82 + ldr r0, [r4] + add r2, r5, #0 + str r0, [r5] + mov r0, #1 + str r0, [r5, #4] + mov r0, #0 + add r3, r4, #4 + str r0, [r5, #0xc] + ldmia r3!, {r0, r1} + add r2, #0x68 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r3, r4, #0 + str r0, [r2] + add r3, #0x10 + add r2, r5, #0 + ldmia r3!, {r0, r1} + add r2, #0x74 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r3, r4, #0 + str r0, [r2] + add r3, #0x1c + add r2, r5, #0 + ldmia r3!, {r0, r1} + add r2, #0x80 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r3, r5, #0 + str r0, [r2] + add r2, r5, #0 + ldr r0, [r5] + add r1, r7, #0 + add r2, #0x10 + add r3, #0x64 + bl MOD05_021E7F10 + ldr r1, [r5] + add r0, r7, #0 + bl MOD05_021F4CE4 + cmp r0, #0 + bne _021E7D74 + mov r0, #0 + str r0, [r5] +_021E7D74: + add r1, r5, #0 + ldr r0, [r5] + ldr r2, [sp, #0x28] + add r1, #0x10 + bl MOD05_021D9E80 + b _021E7DBE +_021E7D82: + mov r1, #0 + add r0, sp, #8 + str r1, [r0] + str r1, [r0, #4] + str r1, [r0, #8] + add r0, r1, #0 + str r0, [r5] + str r0, [r5, #4] + add r2, r5, #0 + add r3, sp, #8 + str r0, [r5, #0xc] + ldmia r3!, {r0, r1} + add r2, #0x68 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r3, sp, #8 + str r0, [r2] + add r2, r5, #0 + ldmia r3!, {r0, r1} + add r2, #0x74 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r3, sp, #8 + str r0, [r2] + add r2, r5, #0 + ldmia r3!, {r0, r1} + add r2, #0x80 + stmia r2!, {r0, r1} + ldr r0, [r3] + str r0, [r2] +_021E7DBE: + add r6, r6, #1 + add r5, #0x8c + add r4, #0x30 + cmp r6, #0x20 + blt _021E7D14 + ldr r0, [sp, #4] + cmp r0, #0 + beq _021E7DD2 + bl FreeToHeap +_021E7DD2: + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7DD8 +MOD05_021E7DD8: ; 0x021E7DD8 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x48 + ldr r4, _021E7E94 ; =UNK05_021F7878 + str r2, [sp, #0xc] + str r3, [sp, #0x10] + add r6, r0, #0 + str r1, [sp, #8] + add r3, sp, #0x18 + mov r2, #4 +_021E7DEA: + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _021E7DEA + ldr r0, [r4] + ldr r5, [sp, #0x60] + str r0, [r3] + mov r7, #0 +_021E7DFA: + ldr r0, [r5, #4] + cmp r0, #0 + beq _021E7E86 + ldr r0, [r5, #8] + cmp r0, #0 + bne _021E7E86 + add r4, r5, #0 + add r4, #0x68 + ldmia r4!, {r0, r1} + add r3, sp, #0x3c + add r2, r3, #0 + stmia r3!, {r0, r1} + ldr r0, [r4] + str r0, [r3] + ldr r1, [sp, #0x3c] + ldr r0, [r6] + add r3, r5, #0 + add r0, r1, r0 + str r0, [sp, #0x3c] + ldr r1, [sp, #0x44] + ldr r0, [r6, #8] + add r3, #0x80 + add r0, r1, r0 + str r0, [sp, #0x44] + add r1, r2, #0 + ldr r0, [r5, #0x64] + add r2, sp, #0x18 + bl FUN_0201B6D0 + cmp r0, #0 + beq _021E7E86 + ldr r0, [sp, #8] + bl MOD05_021F4C9C + add r4, r0, #0 + ldr r0, [sp, #0xc] + cmp r0, #1 + bne _021E7E50 + ldr r0, [sp, #0x10] + ldr r1, [r5, #0x64] + ldr r2, _021E7E98 ; =0x00000F33 + bl MOD05_021DBB8C +_021E7E50: + ldr r0, [r5] + add r1, r4, #0 + add r2, sp, #0x14 + bl MOD05_021DB9D4 + add r0, sp, #0x14 + ldrh r0, [r0] + add r1, sp, #0x3c + cmp r0, #0 + bne _021E7E74 + add r0, r5, #0 + add r3, r5, #0 + add r0, #0x10 + add r2, sp, #0x18 + add r3, #0x80 + bl FUN_0201B26C + b _021E7E86 +_021E7E74: + str r4, [sp] + ldr r0, [r5] + add r3, r5, #0 + str r0, [sp, #4] + ldr r0, [r5, #0x64] + add r2, sp, #0x18 + add r3, #0x80 + bl MOD05_021E7F34 +_021E7E86: + add r7, r7, #1 + add r5, #0x8c + cmp r7, #0x20 + blt _021E7DFA + add sp, #0x48 + pop {r3, r4, r5, r6, r7, pc} + nop +_021E7E94: .word UNK05_021F7878 +_021E7E98: .word 0x00000F33 + + thumb_func_start MOD05_021E7E9C +MOD05_021E7E9C: ; 0x021E7E9C + add r0, #0x74 + bx lr + + thumb_func_start MOD05_021E7EA0 +MOD05_021E7EA0: ; 0x021E7EA0 + add r2, r1, #0 + add r2, #0x68 + add r3, r0, #0 + ldmia r2!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r2] + str r0, [r3] + bx lr + + thumb_func_start MOD05_021E7EB0 +MOD05_021E7EB0: ; 0x021E7EB0 + add r3, r1, #0 + add r2, r0, #0 + ldmia r3!, {r0, r1} + add r2, #0x68 + stmia r2!, {r0, r1} + ldr r0, [r3] + str r0, [r2] + bx lr + + thumb_func_start MOD05_021E7EC0 +MOD05_021E7EC0: ; 0x021E7EC0 + str r1, [r0, #8] + bx lr + + thumb_func_start MOD05_021E7EC4 +MOD05_021E7EC4: ; 0x021E7EC4 + ldr r0, [r0] + bx lr + + thumb_func_start MOD05_021E7EC8 +MOD05_021E7EC8: ; 0x021E7EC8 + add r0, #0x10 + bx lr + + thumb_func_start MOD05_021E7ECC +MOD05_021E7ECC: ; 0x021E7ECC + ldr r0, [r0, #0x64] + bx lr + + thumb_func_start MOD05_021E7ED0 +MOD05_021E7ED0: ; 0x021E7ED0 + mov r2, #0x8c + mul r2, r1 + add r0, r0, r2 + bx lr + + thumb_func_start MOD05_021E7ED8 +MOD05_021E7ED8: ; 0x021E7ED8 + mov r3, #0 +_021E7EDA: + ldr r2, [r0] + cmp r2, r1 + beq _021E7EEA + add r3, r3, #1 + add r0, #0x8c + cmp r3, #0x20 + blt _021E7EDA + mov r0, #0 +_021E7EEA: + bx lr + + thumb_func_start MOD05_021E7EEC +MOD05_021E7EEC: ; 0x021E7EEC + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + cmp r4, #0x20 + blt _021E7EFA + bl ErrorHandling +_021E7EFA: + mov r0, #0x8c + mul r0, r4 + add r4, r5, r0 + ldr r0, [r4, #4] + cmp r0, #0 + bne _021E7F0A + bl ErrorHandling +_021E7F0A: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7F10 +MOD05_021E7F10: ; 0x021E7F10 + push {r3, r4, r5, lr} + add r5, r2, #0 + add r4, r3, #0 + bl MOD05_021F4BD0 + ldr r0, [r0] + bl FUN_020BC13C + ldrh r1, [r0, #0xe] + add r1, r0, r1 + ldr r1, [r1, #0xc] + add r1, r0, r1 + add r0, r5, #0 + str r1, [r4] + bl FUN_020B80B4 + pop {r3, r4, r5, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E7F34 +MOD05_021E7F34: ; 0x021E7F34 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r0, r1, #0 + add r4, r2, #0 + add r5, r3, #0 + bl FUN_020B8474 + ldr r1, _021E7FB4 ; =UNK_021CEDD4 + add r0, r4, #0 + bl MI_Copy36B + ldr r1, _021E7FB8 ; =UNK_021CED98 + mov r0, #0xa4 + ldr r2, [r1, #0x7c] + bic r2, r0 + add r0, r5, #0 + str r2, [r1, #0x7c] + bl FUN_020B844C + bl FUN_020B849C + add r2, sp, #0 + ldr r0, [sp, #0x1c] + ldr r1, [sp, #0x18] + add r2, #2 + add r3, sp, #0 + bl MOD05_021DB9E0 + add r0, sp, #0 + ldrh r0, [r0] + ldr r1, [sp, #0x18] + bl MOD05_021DB9F8 + add r6, r0, #0 + add r0, sp, #0 + ldrh r0, [r0, #2] + mov r5, #0xff + mov r4, #0 + cmp r0, #0 + ble _021E7FB0 +_021E7F84: + lsl r0, r4, #2 + add r2, r6, r0 + ldrh r0, [r6, r0] + cmp r5, r0 + beq _021E7F96 + lsl r0, r0, #0x18 + lsr r5, r0, #0x18 + mov r3, #1 + b _021E7F98 +_021E7F96: + mov r3, #0 +_021E7F98: + ldrh r2, [r2, #2] + add r0, r7, #0 + add r1, r5, #0 + bl FUN_020BAFB8 + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + add r0, sp, #0 + ldrh r0, [r0, #2] + cmp r4, r0 + blt _021E7F84 +_021E7FB0: + pop {r3, r4, r5, r6, r7, pc} + nop +_021E7FB4: .word UNK_021CEDD4 +_021E7FB8: .word UNK_021CED98 + + thumb_func_start MOD05_021E7FBC +MOD05_021E7FBC: ; 0x021E7FBC + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + ldr r5, _021E8058 ; =UNK05_021F786C + add r6, r0, #0 + add r7, r1, #0 + ldmia r5!, {r0, r1} + add r4, sp, #4 + stmia r4!, {r0, r1} + ldr r0, [r5] + str r0, [r4] + mov r4, #0 + mov r0, #0x8c +_021E7FD4: + add r1, r4, #0 + mul r1, r0 + add r5, r6, r1 + ldr r1, [r5, #4] + cmp r1, #0 + bne _021E8044 + mov r0, #1 + str r0, [r5, #4] + add r6, r5, #0 + ldmia r3!, {r0, r1} + add r6, #0x68 + stmia r6!, {r0, r1} + ldr r0, [r3] + str r0, [r6] + ldr r6, [sp, #0x28] + cmp r6, #0 + beq _021E8008 + mov r0, #1 + str r0, [r5, #0xc] + add r3, r5, #0 + ldmia r6!, {r0, r1} + add r3, #0x74 + stmia r3!, {r0, r1} + ldr r0, [r6] + str r0, [r3] + b _021E800C +_021E8008: + mov r0, #0 + str r0, [r5, #0xc] +_021E800C: + add r6, sp, #4 + add r3, r5, #0 + ldmia r6!, {r0, r1} + add r3, #0x80 + stmia r3!, {r0, r1} + ldr r0, [r6] + add r1, r7, #0 + str r0, [r3] + add r3, r5, #0 + str r2, [r5] + add r0, r2, #0 + add r2, r5, #0 + add r2, #0x10 + add r3, #0x64 + bl MOD05_021E7F10 + ldr r0, [sp, #0x2c] + mov r1, #0 + str r0, [sp] + ldr r0, [r5] + add r5, #0x10 + add r2, r1, #0 + add r3, r5, #0 + bl MOD05_021D9DC0 + add sp, #0x10 + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} +_021E8044: + add r1, r4, #1 + lsl r1, r1, #0x18 + lsr r4, r1, #0x18 + cmp r4, #0x20 + blo _021E7FD4 + bl ErrorHandling + mov r0, #0x20 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E8058: .word UNK05_021F786C + + thumb_func_start MOD05_021E805C +MOD05_021E805C: ; 0x021E805C + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x38 + ldr r4, _021E80F4 ; =UNK05_021F789C + str r0, [sp, #8] + str r1, [sp, #0xc] + add r3, sp, #0x14 + mov r2, #4 +_021E806A: + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _021E806A + ldr r0, [r4] + mov r4, #0 + str r0, [r3] + add r7, sp, #0x14 +_021E807A: + mov r0, #0x8c + add r1, r4, #0 + mul r1, r0 + ldr r0, [sp, #8] + add r5, r0, r1 + ldr r0, [r5, #4] + cmp r0, #0 + beq _021E80E4 + ldr r0, [r5, #8] + cmp r0, #0 + bne _021E80E4 + ldr r0, [sp, #0xc] + bl MOD05_021F4C9C + add r6, r0, #0 + ldr r0, [r5] + add r1, r6, #0 + add r2, sp, #0x10 + bl MOD05_021DB9D4 + ldr r0, [r5, #0xc] + cmp r0, #0 + beq _021E80B2 + add r1, r5, #0 + add r0, r7, #0 + add r1, #0x74 + bl FUN_0201CAA8 +_021E80B2: + add r0, sp, #0x10 + ldrh r0, [r0] + cmp r0, #0 + bne _021E80CE + add r0, r5, #0 + add r1, r5, #0 + add r5, #0x80 + add r0, #0x10 + add r1, #0x68 + add r2, r7, #0 + add r3, r5, #0 + bl FUN_0201B26C + b _021E80E4 +_021E80CE: + str r6, [sp] + ldr r0, [r5] + add r1, r5, #0 + str r0, [sp, #4] + ldr r0, [r5, #0x64] + add r5, #0x80 + add r1, #0x68 + add r2, r7, #0 + add r3, r5, #0 + bl MOD05_021E7F34 +_021E80E4: + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + cmp r4, #0x20 + blo _021E807A + add sp, #0x38 + pop {r3, r4, r5, r6, r7, pc} + nop +_021E80F4: .word UNK05_021F789C + + .section .rodata + + .global UNK05_021F786C +UNK05_021F786C: ; 0x021F786C + .word 0x00001000, 0x00001000, 0x00001000 + + .global UNK05_021F7878 +UNK05_021F7878: ; 0x021F7878 + .byte 0x00, 0x10, 0x00, 0x00 ;word + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 + + .global UNK05_021F789C +UNK05_021F789C: ; 0x021F789C + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ;word + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 38ca97a9d..966730233 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -3,1292 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD05_021E779C -MOD05_021E779C: ; 0x021E779C - push {r4, lr} - mov r2, #0 - mov r1, #0x14 - add r3, r2, #0 - add r4, r0, #0 - bl MOD05_021E4BE8 - str r4, [r0, #0x10] - pop {r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E77B0 -MOD05_021E77B0: ; 0x021E77B0 - push {r4, lr} - add r4, r0, #0 - bl MOD05_021E78B4 - add r0, r4, #0 - bl MOD05_021E4C00 - pop {r4, pc} - - thumb_func_start MOD05_021E77C0 -MOD05_021E77C0: ; 0x021E77C0 - ldr r1, [r0] - add r1, r1, #1 - str r1, [r0] - bx lr - - thumb_func_start MOD05_021E77C8 -MOD05_021E77C8: ; 0x021E77C8 - push {r3, lr} - ldr r1, [r0] - sub r1, r1, #1 - str r1, [r0] - bpl _021E77D6 - bl ErrorHandling -_021E77D6: - pop {r3, pc} - - thumb_func_start MOD05_021E77D8 -MOD05_021E77D8: ; 0x021E77D8 - ldr r1, [r0, #4] - add r1, r1, #1 - str r1, [r0, #4] - bx lr - - thumb_func_start MOD05_021E77E0 -MOD05_021E77E0: ; 0x021E77E0 - push {r3, lr} - ldr r1, [r0, #4] - sub r1, r1, #1 - str r1, [r0, #4] - bpl _021E77EE - bl ErrorHandling -_021E77EE: - pop {r3, pc} - - thumb_func_start MOD05_021E77F0 -MOD05_021E77F0: ; 0x021E77F0 - push {r3, lr} - cmp r1, #0 - bne _021E77FC - bl MOD05_021E77C0 - pop {r3, pc} -_021E77FC: - bl MOD05_021E77D8 - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7804 -MOD05_021E7804: ; 0x021E7804 - push {r3, lr} - cmp r1, #0 - bne _021E7810 - bl MOD05_021E77C8 - pop {r3, pc} -_021E7810: - bl MOD05_021E77E0 - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7818 -MOD05_021E7818: ; 0x021E7818 - push {r3, r4, lr} - sub sp, #0xc - add r4, r0, #0 - ldr r0, [r4, #8] - cmp r0, #0 - bne _021E785C - mov r1, #1 - str r1, [r4, #8] - ldr r0, [r4, #0x10] - mov r2, #0x55 - bl MOD05_021E5078 - ldr r0, [r4, #0x10] - mov r1, #1 - mov r2, #0x75 - bl MOD05_021E50AC - mov r1, #1 - ldr r0, [r4, #0x10] - mov r2, #4 - add r3, r1, #0 - bl MOD05_021E50D4 - mov r1, #1 - str r1, [sp] - mov r0, #0 - str r0, [sp, #4] - ldr r0, _021E7860 ; =UNK05_021F7854 - add r2, r1, #0 - str r0, [sp, #8] - ldr r0, [r4, #0x10] - add r3, r1, #0 - bl MOD05_021E4EFC -_021E785C: - add sp, #0xc - pop {r3, r4, pc} - .balign 4, 0 -_021E7860: .word UNK05_021F7854 - - thumb_func_start MOD05_021E7864 -MOD05_021E7864: ; 0x021E7864 - push {r3, r4, lr} - sub sp, #0xc - add r4, r0, #0 - ldr r0, [r4, #0xc] - cmp r0, #0 - bne _021E78AC - mov r0, #1 - str r0, [r4, #0xc] - ldr r0, [r4, #0x10] - mov r1, #0xa - mov r2, #0x6c - bl MOD05_021E5078 - ldr r0, [r4, #0x10] - mov r1, #0xa - mov r2, #0x75 - bl MOD05_021E50AC - ldr r0, [r4, #0x10] - mov r1, #0xb - mov r2, #0xd - mov r3, #1 - bl MOD05_021E50D4 - mov r0, #0xb - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - ldr r0, _021E78B0 ; =UNK05_021F7854 - mov r2, #0xa - str r0, [sp, #8] - ldr r0, [r4, #0x10] - mov r1, #0xc - add r3, r2, #0 - bl MOD05_021E4EFC -_021E78AC: - add sp, #0xc - pop {r3, r4, pc} - .balign 4, 0 -_021E78B0: .word UNK05_021F7854 - - thumb_func_start MOD05_021E78B4 -MOD05_021E78B4: ; 0x021E78B4 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - cmp r0, #1 - bne _021E78E2 - mov r0, #0 - str r0, [r4, #8] - ldr r0, [r4, #0x10] - mov r1, #1 - bl MOD05_021E50A0 - ldr r0, [r4, #0x10] - mov r1, #1 - bl MOD05_021E50C8 - ldr r0, [r4, #0x10] - mov r1, #1 - bl MOD05_021E5114 - ldr r0, [r4, #0x10] - mov r1, #1 - bl MOD05_021E506C -_021E78E2: - pop {r4, pc} - - thumb_func_start MOD05_021E78E4 -MOD05_021E78E4: ; 0x021E78E4 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0xc] - cmp r0, #1 - bne _021E7912 - mov r0, #0 - str r0, [r4, #0xc] - ldr r0, [r4, #0x10] - mov r1, #0xa - bl MOD05_021E50A0 - ldr r0, [r4, #0x10] - mov r1, #0xa - bl MOD05_021E50C8 - ldr r0, [r4, #0x10] - mov r1, #0xb - bl MOD05_021E5114 - ldr r0, [r4, #0x10] - mov r1, #0xc - bl MOD05_021E506C -_021E7912: - pop {r4, pc} - - thumb_func_start MOD05_021E7914 -MOD05_021E7914: ; 0x021E7914 - push {r3, lr} - ldr r1, [r0] - cmp r1, #0 - bne _021E7920 - bl MOD05_021E7818 -_021E7920: - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7924 -MOD05_021E7924: ; 0x021E7924 - push {r3, lr} - ldr r1, [r0, #4] - cmp r1, #0 - bne _021E7930 - bl MOD05_021E7864 -_021E7930: - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7934 -MOD05_021E7934: ; 0x021E7934 - push {r3, lr} - ldr r1, [r0] - cmp r1, #0 - bne _021E7940 - bl MOD05_021E78B4 -_021E7940: - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7944 -MOD05_021E7944: ; 0x021E7944 - push {r3, lr} - ldr r1, [r0, #4] - cmp r1, #0 - bne _021E7950 - bl MOD05_021E78E4 -_021E7950: - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7954 -MOD05_021E7954: ; 0x021E7954 - push {r3, lr} - cmp r1, #0 - bne _021E7960 - bl MOD05_021E7914 - pop {r3, pc} -_021E7960: - bl MOD05_021E7924 - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7968 -MOD05_021E7968: ; 0x021E7968 - push {r3, lr} - cmp r1, #0 - bne _021E7974 - bl MOD05_021E7934 - pop {r3, pc} -_021E7974: - bl MOD05_021E7944 - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E797C -MOD05_021E797C: ; 0x021E797C - push {r3, r4, r5, lr} - sub sp, #8 - ldr r3, _021E7998 ; =UNK05_021F7824 - add r4, sp, #0 - ldr r5, [r3] - ldr r3, [r3, #4] - str r5, [sp] - str r3, [sp, #4] - lsl r1, r1, #2 - ldr r1, [r4, r1] - bl MOD05_021E4EE4 - add sp, #8 - pop {r3, r4, r5, pc} - .balign 4, 0 -_021E7998: .word UNK05_021F7824 - - thumb_func_start MOD05_021E799C -MOD05_021E799C: ; 0x021E799C - push {r3, lr} - bl FUN_02064738 - ldr r0, [r0, #0x14] - pop {r3, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E79A8 -MOD05_021E79A8: ; 0x021E79A8 - push {r4, r5, lr} - sub sp, #0xc - add r4, r1, #0 - add r5, r0, #0 - bl FUN_0206475C - add r2, r4, #0 - add r3, r0, #0 - add r2, #0x30 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - mov r0, #6 - lsl r0, r0, #0xc - str r0, [r4, #0x28] - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E7954 - add r0, r5, #0 - add r1, sp, #0 - bl FUN_0206477C - ldr r0, [r4, #0x34] - ldr r1, [r4, #0x30] - add r2, sp, #0 - bl MOD05_021E797C - str r0, [r4, #0x40] - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E77F0 - add r0, r5, #0 - bl FUN_02064754 - cmp r0, #1 - bne _021E79FC - ldr r0, _021E7A04 ; =0x000005DD - bl FUN_020054C8 -_021E79FC: - mov r0, #1 - add sp, #0xc - pop {r4, r5, pc} - nop -_021E7A04: .word 0x000005DD - - thumb_func_start MOD05_021E7A08 -MOD05_021E7A08: ; 0x021E7A08 - push {r4, r5, lr} - sub sp, #0xc - add r4, r1, #0 - add r1, sp, #0 - add r5, r0, #0 - bl FUN_0206477C - ldr r0, [r4] - cmp r0, #0 - beq _021E7A24 - cmp r0, #1 - beq _021E7A46 - cmp r0, #2 - b _021E7A5E -_021E7A24: - ldr r1, [r4, #0x1c] - ldr r0, [r4, #0x28] - add r0, r1, r0 - str r0, [r4, #0x1c] - beq _021E7A3A - mov r0, #2 - ldr r1, [r4, #0x28] - lsl r0, r0, #0xc - sub r0, r1, r0 - str r0, [r4, #0x28] - b _021E7A5E -_021E7A3A: - mov r0, #0 - str r0, [r4, #0x28] - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _021E7A5E -_021E7A46: - ldr r0, [r4, #4] - add r0, r0, #1 - str r0, [r4, #4] - cmp r0, #0x1e - blt _021E7A5E - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - mov r0, #0 - str r0, [r4, #4] - mov r0, #1 - str r0, [r4, #0x14] -_021E7A5E: - add r0, r5, #0 - add r1, sp, #0 - bl FUN_0206476C - add sp, #0xc - pop {r4, r5, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7A6C -MOD05_021E7A6C: ; 0x021E7A6C - push {r4, lr} - add r4, r1, #0 - ldr r0, [r4, #0x40] - bl FUN_0201F744 - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E7804 - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E7968 - pop {r4, pc} - - thumb_func_start MOD05_021E7A88 -MOD05_021E7A88: ; 0x021E7A88 - push {r3, r4, lr} - sub sp, #0xc - add r4, r1, #0 - ldr r1, [r4, #0x10] - cmp r1, #1 - beq _021E7ABA - add r1, sp, #0 - bl FUN_0206477C - ldr r1, [sp] - ldr r0, [r4, #0x18] - add r0, r1, r0 - str r0, [sp] - ldr r1, [sp, #4] - ldr r0, [r4, #0x1c] - add r0, r1, r0 - str r0, [sp, #4] - ldr r1, [sp, #8] - ldr r0, [r4, #0x20] - add r0, r1, r0 - str r0, [sp, #8] - ldr r0, [r4, #0x40] - add r1, sp, #0 - bl FUN_0201F7C8 -_021E7ABA: - add sp, #0xc - pop {r3, r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7AC0 -MOD05_021E7AC0: ; 0x021E7AC0 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r0, #0 - add r6, r1, #0 - add r7, r2, #0 - bl MOD05_021E4C24 - add r4, r0, #0 - mov r1, #0x16 - str r6, [sp, #0x14] - str r4, [sp, #0x18] - bl MOD05_021E4C08 - str r0, [sp, #0x1c] - add r0, r5, #0 - add r1, sp, #8 - str r5, [sp, #0x20] - bl FUN_02058B5C - add r0, r5, #0 - bl FUN_02058744 - add r1, r0, #1 - add r0, sp, #0x14 - str r0, [sp] - str r1, [sp, #4] - ldr r1, _021E7B04 ; =UNK05_021F7840 - add r0, r4, #0 - add r2, sp, #8 - add r3, r7, #0 - bl MOD05_021E4DC4 - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - .balign 4, 0 -_021E7B04: .word UNK05_021F7840 - - thumb_func_start MOD05_021E7B08 -MOD05_021E7B08: ; 0x021E7B08 - push {r4, r5, lr} - sub sp, #0xc - add r4, r1, #0 - add r5, r0, #0 - bl FUN_0206475C - add r2, r4, #0 - add r3, r0, #0 - add r2, #0x30 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldr r0, [r4, #0x3c] - bl FUN_02058448 - str r0, [r4, #8] - ldr r0, [r4, #0x3c] - bl FUN_02058450 - str r0, [r4, #0xc] - mov r0, #6 - lsl r0, r0, #0xc - str r0, [r4, #0x28] - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E7954 - add r0, r5, #0 - add r1, sp, #0 - bl FUN_0206477C - ldr r0, [r4, #0x34] - ldr r1, [r4, #0x30] - add r2, sp, #0 - bl MOD05_021E797C - str r0, [r4, #0x40] - ldr r0, [r4, #0x38] - ldr r1, [r4, #0x30] - bl MOD05_021E77F0 - add r0, r5, #0 - bl FUN_02064754 - cmp r0, #1 - bne _021E7B6C - ldr r0, _021E7B74 ; =0x000005DD - bl FUN_020054C8 -_021E7B6C: - mov r0, #1 - add sp, #0xc - pop {r4, r5, pc} - nop -_021E7B74: .word 0x000005DD - - thumb_func_start MOD05_021E7B78 -MOD05_021E7B78: ; 0x021E7B78 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r4, r1, #0 - ldr r6, [r4, #0x3c] - ldr r1, [r4, #8] - add r5, r0, #0 - ldr r2, [r4, #0xc] - add r0, r6, #0 - bl FUN_020582A8 - cmp r0, #0 - bne _021E7B94 - bl ErrorHandling -_021E7B94: - add r0, r6, #0 - add r1, sp, #0 - bl MOD05_021F1E64 - mov r0, #2 - ldr r1, [sp, #4] - lsl r0, r0, #0x10 - add r1, r1, r0 - str r1, [sp, #4] - ldr r2, [sp, #8] - lsr r1, r0, #5 - add r1, r2, r1 - str r1, [sp, #8] - ldr r1, [r4] - cmp r1, #0 - beq _021E7BBC - cmp r1, #1 - beq _021E7BDC - cmp r1, #2 - b _021E7BF4 -_021E7BBC: - ldr r2, [r4, #0x1c] - ldr r1, [r4, #0x28] - add r1, r2, r1 - str r1, [r4, #0x1c] - beq _021E7BD0 - ldr r1, [r4, #0x28] - lsr r0, r0, #4 - sub r0, r1, r0 - str r0, [r4, #0x28] - b _021E7BF4 -_021E7BD0: - mov r0, #0 - str r0, [r4, #0x28] - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _021E7BF4 -_021E7BDC: - ldr r0, [r4, #4] - add r0, r0, #1 - str r0, [r4, #4] - cmp r0, #0x1e - blt _021E7BF4 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - mov r0, #0 - str r0, [r4, #4] - mov r0, #1 - str r0, [r4, #0x14] -_021E7BF4: - add r0, r5, #0 - add r1, sp, #0 - bl FUN_0206476C - add sp, #0xc - pop {r3, r4, r5, r6, pc} - - thumb_func_start MOD05_021E7C00 -MOD05_021E7C00: ; 0x021E7C00 - push {r4, lr} - mov r1, #0x46 - lsl r1, r1, #6 - bl AllocFromHeap - add r4, r0, #0 - bl MOD05_021E7C1C - add r0, r4, #0 - pop {r4, pc} - - thumb_func_start MOD05_021E7C14 -MOD05_021E7C14: ; 0x021E7C14 - ldr r3, _021E7C18 ; =FreeToHeap - bx r3 - .balign 4, 0 -_021E7C18: .word FreeToHeap - - thumb_func_start MOD05_021E7C1C -MOD05_021E7C1C: ; 0x021E7C1C - push {r3, r4, r5, r6, r7} - sub sp, #0xc - mov r4, #0 - mov ip, r0 - add r7, sp, #0 - add r3, r4, #0 -_021E7C28: - str r3, [r7] - str r3, [r7, #4] - mov r0, #0x8c - add r1, r4, #0 - mul r1, r0 - mov r0, ip - add r2, r0, r1 - add r5, r2, #0 - str r3, [r7, #8] - mov r0, ip - str r3, [r0, r1] - str r3, [r2, #4] - str r3, [r2, #8] - str r3, [r2, #0xc] - add r6, r7, #0 - ldmia r6!, {r0, r1} - add r5, #0x68 - stmia r5!, {r0, r1} - ldr r0, [r6] - add r6, r7, #0 - str r0, [r5] - add r5, r2, #0 - ldmia r6!, {r0, r1} - add r5, #0x74 - stmia r5!, {r0, r1} - ldr r0, [r6] - add r6, r7, #0 - str r0, [r5] - add r5, r2, #0 - ldmia r6!, {r0, r1} - add r5, #0x80 - stmia r5!, {r0, r1} - ldr r0, [r6] - str r0, [r5] - add r0, r4, #1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - str r3, [r2, #0x64] - cmp r4, #0x20 - blo _021E7C28 - add sp, #0xc - pop {r3, r4, r5, r6, r7} - bx lr - .balign 4, 0 - - thumb_func_start MOD05_021E7C80 -MOD05_021E7C80: ; 0x021E7C80 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - add r4, r1, #0 - cmp r5, #0x20 - blt _021E7C90 - bl ErrorHandling -_021E7C90: - add r6, sp, #0 - mov r3, #0 - str r3, [r6] - str r3, [r6, #4] - mov r0, #0x8c - mul r0, r5 - str r3, [r6, #8] - str r3, [r4, r0] - add r2, r4, r0 - str r3, [r2, #4] - str r3, [r2, #8] - add r4, r2, #0 - str r3, [r2, #0xc] - add r5, r6, #0 - ldmia r5!, {r0, r1} - add r4, #0x68 - stmia r4!, {r0, r1} - ldr r0, [r5] - add r5, r6, #0 - str r0, [r4] - add r4, r2, #0 - ldmia r5!, {r0, r1} - add r4, #0x74 - stmia r4!, {r0, r1} - ldr r0, [r5] - str r0, [r4] - add r4, r2, #0 - ldmia r6!, {r0, r1} - add r4, #0x80 - stmia r4!, {r0, r1} - ldr r0, [r6] - str r0, [r4] - str r3, [r2, #0x64] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7CD8 -MOD05_021E7CD8: ; 0x021E7CD8 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r6, r0, #0 - ldr r0, [sp, #0x28] - add r4, r1, #0 - str r0, [sp, #0x28] - mov r0, #0 - add r7, r2, #0 - add r5, r3, #0 - str r0, [sp, #4] - cmp r4, #0 - beq _021E7D0E - mov r0, #4 - bl AllocFromHeapAtEnd - str r0, [sp, #4] - ldr r2, [sp, #4] - add r0, r6, #0 - add r1, r4, #0 - bl NARC_ReadFile - add r0, r4, #0 - mov r1, #0x30 - bl _u32_div_f - str r0, [sp] - b _021E7D10 -_021E7D0E: - str r0, [sp] -_021E7D10: - ldr r4, [sp, #4] - mov r6, #0 -_021E7D14: - ldr r0, [sp] - cmp r6, r0 - bhs _021E7D82 - ldr r0, [r4] - add r2, r5, #0 - str r0, [r5] - mov r0, #1 - str r0, [r5, #4] - mov r0, #0 - add r3, r4, #4 - str r0, [r5, #0xc] - ldmia r3!, {r0, r1} - add r2, #0x68 - stmia r2!, {r0, r1} - ldr r0, [r3] - add r3, r4, #0 - str r0, [r2] - add r3, #0x10 - add r2, r5, #0 - ldmia r3!, {r0, r1} - add r2, #0x74 - stmia r2!, {r0, r1} - ldr r0, [r3] - add r3, r4, #0 - str r0, [r2] - add r3, #0x1c - add r2, r5, #0 - ldmia r3!, {r0, r1} - add r2, #0x80 - stmia r2!, {r0, r1} - ldr r0, [r3] - add r3, r5, #0 - str r0, [r2] - add r2, r5, #0 - ldr r0, [r5] - add r1, r7, #0 - add r2, #0x10 - add r3, #0x64 - bl MOD05_021E7F10 - ldr r1, [r5] - add r0, r7, #0 - bl MOD05_021F4CE4 - cmp r0, #0 - bne _021E7D74 - mov r0, #0 - str r0, [r5] -_021E7D74: - add r1, r5, #0 - ldr r0, [r5] - ldr r2, [sp, #0x28] - add r1, #0x10 - bl MOD05_021D9E80 - b _021E7DBE -_021E7D82: - mov r1, #0 - add r0, sp, #8 - str r1, [r0] - str r1, [r0, #4] - str r1, [r0, #8] - add r0, r1, #0 - str r0, [r5] - str r0, [r5, #4] - add r2, r5, #0 - add r3, sp, #8 - str r0, [r5, #0xc] - ldmia r3!, {r0, r1} - add r2, #0x68 - stmia r2!, {r0, r1} - ldr r0, [r3] - add r3, sp, #8 - str r0, [r2] - add r2, r5, #0 - ldmia r3!, {r0, r1} - add r2, #0x74 - stmia r2!, {r0, r1} - ldr r0, [r3] - add r3, sp, #8 - str r0, [r2] - add r2, r5, #0 - ldmia r3!, {r0, r1} - add r2, #0x80 - stmia r2!, {r0, r1} - ldr r0, [r3] - str r0, [r2] -_021E7DBE: - add r6, r6, #1 - add r5, #0x8c - add r4, #0x30 - cmp r6, #0x20 - blt _021E7D14 - ldr r0, [sp, #4] - cmp r0, #0 - beq _021E7DD2 - bl FreeToHeap -_021E7DD2: - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7DD8 -MOD05_021E7DD8: ; 0x021E7DD8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x48 - ldr r4, _021E7E94 ; =UNK05_021F7878 - str r2, [sp, #0xc] - str r3, [sp, #0x10] - add r6, r0, #0 - str r1, [sp, #8] - add r3, sp, #0x18 - mov r2, #4 -_021E7DEA: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _021E7DEA - ldr r0, [r4] - ldr r5, [sp, #0x60] - str r0, [r3] - mov r7, #0 -_021E7DFA: - ldr r0, [r5, #4] - cmp r0, #0 - beq _021E7E86 - ldr r0, [r5, #8] - cmp r0, #0 - bne _021E7E86 - add r4, r5, #0 - add r4, #0x68 - ldmia r4!, {r0, r1} - add r3, sp, #0x3c - add r2, r3, #0 - stmia r3!, {r0, r1} - ldr r0, [r4] - str r0, [r3] - ldr r1, [sp, #0x3c] - ldr r0, [r6] - add r3, r5, #0 - add r0, r1, r0 - str r0, [sp, #0x3c] - ldr r1, [sp, #0x44] - ldr r0, [r6, #8] - add r3, #0x80 - add r0, r1, r0 - str r0, [sp, #0x44] - add r1, r2, #0 - ldr r0, [r5, #0x64] - add r2, sp, #0x18 - bl FUN_0201B6D0 - cmp r0, #0 - beq _021E7E86 - ldr r0, [sp, #8] - bl MOD05_021F4C9C - add r4, r0, #0 - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _021E7E50 - ldr r0, [sp, #0x10] - ldr r1, [r5, #0x64] - ldr r2, _021E7E98 ; =0x00000F33 - bl MOD05_021DBB8C -_021E7E50: - ldr r0, [r5] - add r1, r4, #0 - add r2, sp, #0x14 - bl MOD05_021DB9D4 - add r0, sp, #0x14 - ldrh r0, [r0] - add r1, sp, #0x3c - cmp r0, #0 - bne _021E7E74 - add r0, r5, #0 - add r3, r5, #0 - add r0, #0x10 - add r2, sp, #0x18 - add r3, #0x80 - bl FUN_0201B26C - b _021E7E86 -_021E7E74: - str r4, [sp] - ldr r0, [r5] - add r3, r5, #0 - str r0, [sp, #4] - ldr r0, [r5, #0x64] - add r2, sp, #0x18 - add r3, #0x80 - bl MOD05_021E7F34 -_021E7E86: - add r7, r7, #1 - add r5, #0x8c - cmp r7, #0x20 - blt _021E7DFA - add sp, #0x48 - pop {r3, r4, r5, r6, r7, pc} - nop -_021E7E94: .word UNK05_021F7878 -_021E7E98: .word 0x00000F33 - - thumb_func_start MOD05_021E7E9C -MOD05_021E7E9C: ; 0x021E7E9C - add r0, #0x74 - bx lr - - thumb_func_start MOD05_021E7EA0 -MOD05_021E7EA0: ; 0x021E7EA0 - add r2, r1, #0 - add r2, #0x68 - add r3, r0, #0 - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r2] - str r0, [r3] - bx lr - - thumb_func_start MOD05_021E7EB0 -MOD05_021E7EB0: ; 0x021E7EB0 - add r3, r1, #0 - add r2, r0, #0 - ldmia r3!, {r0, r1} - add r2, #0x68 - stmia r2!, {r0, r1} - ldr r0, [r3] - str r0, [r2] - bx lr - - thumb_func_start MOD05_021E7EC0 -MOD05_021E7EC0: ; 0x021E7EC0 - str r1, [r0, #8] - bx lr - - thumb_func_start MOD05_021E7EC4 -MOD05_021E7EC4: ; 0x021E7EC4 - ldr r0, [r0] - bx lr - - thumb_func_start MOD05_021E7EC8 -MOD05_021E7EC8: ; 0x021E7EC8 - add r0, #0x10 - bx lr - - thumb_func_start MOD05_021E7ECC -MOD05_021E7ECC: ; 0x021E7ECC - ldr r0, [r0, #0x64] - bx lr - - thumb_func_start MOD05_021E7ED0 -MOD05_021E7ED0: ; 0x021E7ED0 - mov r2, #0x8c - mul r2, r1 - add r0, r0, r2 - bx lr - - thumb_func_start MOD05_021E7ED8 -MOD05_021E7ED8: ; 0x021E7ED8 - mov r3, #0 -_021E7EDA: - ldr r2, [r0] - cmp r2, r1 - beq _021E7EEA - add r3, r3, #1 - add r0, #0x8c - cmp r3, #0x20 - blt _021E7EDA - mov r0, #0 -_021E7EEA: - bx lr - - thumb_func_start MOD05_021E7EEC -MOD05_021E7EEC: ; 0x021E7EEC - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - cmp r4, #0x20 - blt _021E7EFA - bl ErrorHandling -_021E7EFA: - mov r0, #0x8c - mul r0, r4 - add r4, r5, r0 - ldr r0, [r4, #4] - cmp r0, #0 - bne _021E7F0A - bl ErrorHandling -_021E7F0A: - add r0, r4, #0 - pop {r3, r4, r5, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7F10 -MOD05_021E7F10: ; 0x021E7F10 - push {r3, r4, r5, lr} - add r5, r2, #0 - add r4, r3, #0 - bl MOD05_021F4BD0 - ldr r0, [r0] - bl FUN_020BC13C - ldrh r1, [r0, #0xe] - add r1, r0, r1 - ldr r1, [r1, #0xc] - add r1, r0, r1 - add r0, r5, #0 - str r1, [r4] - bl FUN_020B80B4 - pop {r3, r4, r5, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E7F34 -MOD05_021E7F34: ; 0x021E7F34 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r0, r1, #0 - add r4, r2, #0 - add r5, r3, #0 - bl FUN_020B8474 - ldr r1, _021E7FB4 ; =UNK_021CEDD4 - add r0, r4, #0 - bl MI_Copy36B - ldr r1, _021E7FB8 ; =UNK_021CED98 - mov r0, #0xa4 - ldr r2, [r1, #0x7c] - bic r2, r0 - add r0, r5, #0 - str r2, [r1, #0x7c] - bl FUN_020B844C - bl FUN_020B849C - add r2, sp, #0 - ldr r0, [sp, #0x1c] - ldr r1, [sp, #0x18] - add r2, #2 - add r3, sp, #0 - bl MOD05_021DB9E0 - add r0, sp, #0 - ldrh r0, [r0] - ldr r1, [sp, #0x18] - bl MOD05_021DB9F8 - add r6, r0, #0 - add r0, sp, #0 - ldrh r0, [r0, #2] - mov r5, #0xff - mov r4, #0 - cmp r0, #0 - ble _021E7FB0 -_021E7F84: - lsl r0, r4, #2 - add r2, r6, r0 - ldrh r0, [r6, r0] - cmp r5, r0 - beq _021E7F96 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - mov r3, #1 - b _021E7F98 -_021E7F96: - mov r3, #0 -_021E7F98: - ldrh r2, [r2, #2] - add r0, r7, #0 - add r1, r5, #0 - bl FUN_020BAFB8 - add r0, r4, #1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - add r0, sp, #0 - ldrh r0, [r0, #2] - cmp r4, r0 - blt _021E7F84 -_021E7FB0: - pop {r3, r4, r5, r6, r7, pc} - nop -_021E7FB4: .word UNK_021CEDD4 -_021E7FB8: .word UNK_021CED98 - - thumb_func_start MOD05_021E7FBC -MOD05_021E7FBC: ; 0x021E7FBC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - ldr r5, _021E8058 ; =UNK05_021F786C - add r6, r0, #0 - add r7, r1, #0 - ldmia r5!, {r0, r1} - add r4, sp, #4 - stmia r4!, {r0, r1} - ldr r0, [r5] - str r0, [r4] - mov r4, #0 - mov r0, #0x8c -_021E7FD4: - add r1, r4, #0 - mul r1, r0 - add r5, r6, r1 - ldr r1, [r5, #4] - cmp r1, #0 - bne _021E8044 - mov r0, #1 - str r0, [r5, #4] - add r6, r5, #0 - ldmia r3!, {r0, r1} - add r6, #0x68 - stmia r6!, {r0, r1} - ldr r0, [r3] - str r0, [r6] - ldr r6, [sp, #0x28] - cmp r6, #0 - beq _021E8008 - mov r0, #1 - str r0, [r5, #0xc] - add r3, r5, #0 - ldmia r6!, {r0, r1} - add r3, #0x74 - stmia r3!, {r0, r1} - ldr r0, [r6] - str r0, [r3] - b _021E800C -_021E8008: - mov r0, #0 - str r0, [r5, #0xc] -_021E800C: - add r6, sp, #4 - add r3, r5, #0 - ldmia r6!, {r0, r1} - add r3, #0x80 - stmia r3!, {r0, r1} - ldr r0, [r6] - add r1, r7, #0 - str r0, [r3] - add r3, r5, #0 - str r2, [r5] - add r0, r2, #0 - add r2, r5, #0 - add r2, #0x10 - add r3, #0x64 - bl MOD05_021E7F10 - ldr r0, [sp, #0x2c] - mov r1, #0 - str r0, [sp] - ldr r0, [r5] - add r5, #0x10 - add r2, r1, #0 - add r3, r5, #0 - bl MOD05_021D9DC0 - add sp, #0x10 - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} -_021E8044: - add r1, r4, #1 - lsl r1, r1, #0x18 - lsr r4, r1, #0x18 - cmp r4, #0x20 - blo _021E7FD4 - bl ErrorHandling - mov r0, #0x20 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E8058: .word UNK05_021F786C - - thumb_func_start MOD05_021E805C -MOD05_021E805C: ; 0x021E805C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x38 - ldr r4, _021E80F4 ; =UNK05_021F789C - str r0, [sp, #8] - str r1, [sp, #0xc] - add r3, sp, #0x14 - mov r2, #4 -_021E806A: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _021E806A - ldr r0, [r4] - mov r4, #0 - str r0, [r3] - add r7, sp, #0x14 -_021E807A: - mov r0, #0x8c - add r1, r4, #0 - mul r1, r0 - ldr r0, [sp, #8] - add r5, r0, r1 - ldr r0, [r5, #4] - cmp r0, #0 - beq _021E80E4 - ldr r0, [r5, #8] - cmp r0, #0 - bne _021E80E4 - ldr r0, [sp, #0xc] - bl MOD05_021F4C9C - add r6, r0, #0 - ldr r0, [r5] - add r1, r6, #0 - add r2, sp, #0x10 - bl MOD05_021DB9D4 - ldr r0, [r5, #0xc] - cmp r0, #0 - beq _021E80B2 - add r1, r5, #0 - add r0, r7, #0 - add r1, #0x74 - bl FUN_0201CAA8 -_021E80B2: - add r0, sp, #0x10 - ldrh r0, [r0] - cmp r0, #0 - bne _021E80CE - add r0, r5, #0 - add r1, r5, #0 - add r5, #0x80 - add r0, #0x10 - add r1, #0x68 - add r2, r7, #0 - add r3, r5, #0 - bl FUN_0201B26C - b _021E80E4 -_021E80CE: - str r6, [sp] - ldr r0, [r5] - add r1, r5, #0 - str r0, [sp, #4] - ldr r0, [r5, #0x64] - add r5, #0x80 - add r1, #0x68 - add r2, r7, #0 - add r3, r5, #0 - bl MOD05_021E7F34 -_021E80E4: - add r0, r4, #1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x20 - blo _021E807A - add sp, #0x38 - pop {r3, r4, r5, r6, r7, pc} - nop -_021E80F4: .word UNK05_021F789C - thumb_func_start MOD05_021E80F8 MOD05_021E80F8: ; 0x021E80F8 push {r3, lr} @@ -30518,37 +29232,6 @@ _021F6428: .word MOD05_021F57F0 .section .rodata - .global UNK05_021F7824 -UNK05_021F7824: ; 0x021F7824 - .word 0x00000001, 0x0000000C, 0x00000044, MOD05_021E79A8 - .word MOD05_021E7A6C, MOD05_021E7A08, MOD05_021E7A88 - - .global UNK05_021F7840 -UNK05_021F7840: ; 0x021F7840 - .word 0x00000044, MOD05_021E7B08, MOD05_021E7A6C, MOD05_021E7B78 - .word MOD05_021E7A88 - - .global UNK05_021F7854 -UNK05_021F7854: ; 0x021F7854 - .word 0x00000000, 0x00000001, 0x00000000, 0x00000000 - .word 0x00000000, 0x00000002 - - .global UNK05_021F786C -UNK05_021F786C: ; 0x021F786C - .word 0x00001000, 0x00001000, 0x00001000 - - .global UNK05_021F7878 -UNK05_021F7878: ; 0x021F7878 - .byte 0x00, 0x10, 0x00, 0x00 ;word - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 - - .global UNK05_021F789C -UNK05_021F789C: ; 0x021F789C - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ;word - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00 - .global UNK05_021F78C4 UNK05_021F78C4: ; 0x021F78C4 .byte 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 From 2d7c631f635359cbf82d22ecb50882300f67bfb5 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 27 Dec 2020 16:30:16 +0000 Subject: [PATCH 43/59] re-extract trfgra to include transparency --- files/poketool/trgra/trfgra/narc_0000.png | Bin 760 -> 773 bytes files/poketool/trgra/trfgra/narc_0002.png | Bin 817 -> 830 bytes files/poketool/trgra/trfgra/narc_0004.png | Bin 662 -> 675 bytes files/poketool/trgra/trfgra/narc_0006.png | Bin 728 -> 741 bytes files/poketool/trgra/trfgra/narc_0008.png | Bin 677 -> 690 bytes files/poketool/trgra/trfgra/narc_0010.png | Bin 621 -> 634 bytes files/poketool/trgra/trfgra/narc_0012.png | Bin 922 -> 935 bytes files/poketool/trgra/trfgra/narc_0014.png | Bin 790 -> 803 bytes files/poketool/trgra/trfgra/narc_0016.png | Bin 869 -> 882 bytes files/poketool/trgra/trfgra/narc_0018.png | Bin 1120 -> 1133 bytes files/poketool/trgra/trfgra/narc_0020.png | Bin 776 -> 789 bytes files/poketool/trgra/trfgra/narc_0022.png | Bin 1147 -> 1160 bytes files/poketool/trgra/trfgra/narc_0024.png | Bin 1021 -> 1034 bytes files/poketool/trgra/trfgra/narc_0026.png | Bin 1062 -> 1075 bytes files/poketool/trgra/trfgra/narc_0028.png | Bin 1015 -> 1028 bytes files/poketool/trgra/trfgra/narc_0030.png | Bin 953 -> 966 bytes files/poketool/trgra/trfgra/narc_0032.png | Bin 866 -> 879 bytes files/poketool/trgra/trfgra/narc_0034.png | Bin 760 -> 773 bytes files/poketool/trgra/trfgra/narc_0036.png | Bin 848 -> 861 bytes files/poketool/trgra/trfgra/narc_0038.png | Bin 754 -> 767 bytes files/poketool/trgra/trfgra/narc_0040.png | Bin 842 -> 855 bytes files/poketool/trgra/trfgra/narc_0042.png | Bin 881 -> 894 bytes files/poketool/trgra/trfgra/narc_0044.png | Bin 641 -> 654 bytes files/poketool/trgra/trfgra/narc_0046.png | Bin 1063 -> 1076 bytes files/poketool/trgra/trfgra/narc_0048.png | Bin 723 -> 736 bytes files/poketool/trgra/trfgra/narc_0050.png | Bin 752 -> 765 bytes files/poketool/trgra/trfgra/narc_0052.png | Bin 802 -> 815 bytes files/poketool/trgra/trfgra/narc_0054.png | Bin 818 -> 831 bytes files/poketool/trgra/trfgra/narc_0056.png | Bin 652 -> 665 bytes files/poketool/trgra/trfgra/narc_0058.png | Bin 808 -> 821 bytes files/poketool/trgra/trfgra/narc_0060.png | Bin 872 -> 885 bytes files/poketool/trgra/trfgra/narc_0062.png | Bin 1239 -> 1252 bytes files/poketool/trgra/trfgra/narc_0064.png | Bin 641 -> 654 bytes files/poketool/trgra/trfgra/narc_0066.png | Bin 898 -> 911 bytes files/poketool/trgra/trfgra/narc_0068.png | Bin 1039 -> 1052 bytes files/poketool/trgra/trfgra/narc_0070.png | Bin 684 -> 697 bytes files/poketool/trgra/trfgra/narc_0072.png | Bin 879 -> 892 bytes files/poketool/trgra/trfgra/narc_0074.png | Bin 916 -> 929 bytes files/poketool/trgra/trfgra/narc_0076.png | Bin 754 -> 767 bytes files/poketool/trgra/trfgra/narc_0078.png | Bin 772 -> 785 bytes files/poketool/trgra/trfgra/narc_0080.png | Bin 788 -> 801 bytes files/poketool/trgra/trfgra/narc_0082.png | Bin 898 -> 911 bytes files/poketool/trgra/trfgra/narc_0084.png | Bin 670 -> 683 bytes files/poketool/trgra/trfgra/narc_0086.png | Bin 719 -> 732 bytes files/poketool/trgra/trfgra/narc_0088.png | Bin 602 -> 615 bytes files/poketool/trgra/trfgra/narc_0090.png | Bin 614 -> 627 bytes files/poketool/trgra/trfgra/narc_0092.png | Bin 771 -> 784 bytes files/poketool/trgra/trfgra/narc_0094.png | Bin 1079 -> 1092 bytes files/poketool/trgra/trfgra/narc_0096.png | Bin 957 -> 970 bytes files/poketool/trgra/trfgra/narc_0098.png | Bin 922 -> 935 bytes files/poketool/trgra/trfgra/narc_0100.png | Bin 916 -> 929 bytes files/poketool/trgra/trfgra/narc_0102.png | Bin 796 -> 809 bytes files/poketool/trgra/trfgra/narc_0104.png | Bin 1041 -> 1054 bytes files/poketool/trgra/trfgra/narc_0106.png | Bin 816 -> 829 bytes files/poketool/trgra/trfgra/narc_0108.png | Bin 855 -> 868 bytes files/poketool/trgra/trfgra/narc_0110.png | Bin 934 -> 947 bytes files/poketool/trgra/trfgra/narc_0112.png | Bin 956 -> 969 bytes files/poketool/trgra/trfgra/narc_0114.png | Bin 1052 -> 1065 bytes files/poketool/trgra/trfgra/narc_0116.png | Bin 995 -> 1008 bytes files/poketool/trgra/trfgra/narc_0118.png | Bin 790 -> 803 bytes files/poketool/trgra/trfgra/narc_0120.png | Bin 611 -> 624 bytes files/poketool/trgra/trfgra/narc_0122.png | Bin 594 -> 607 bytes files/poketool/trgra/trfgra/narc_0124.png | Bin 920 -> 933 bytes files/poketool/trgra/trfgra/narc_0126.png | Bin 822 -> 835 bytes files/poketool/trgra/trfgra/narc_0128.png | Bin 916 -> 929 bytes files/poketool/trgra/trfgra/narc_0130.png | Bin 757 -> 770 bytes files/poketool/trgra/trfgra/narc_0132.png | Bin 676 -> 689 bytes files/poketool/trgra/trfgra/narc_0134.png | Bin 822 -> 835 bytes files/poketool/trgra/trfgra/narc_0136.png | Bin 598 -> 611 bytes files/poketool/trgra/trfgra/narc_0138.png | Bin 810 -> 823 bytes files/poketool/trgra/trfgra/narc_0140.png | Bin 1399 -> 1412 bytes files/poketool/trgra/trfgra/narc_0142.png | Bin 904 -> 917 bytes files/poketool/trgra/trfgra/narc_0144.png | Bin 739 -> 752 bytes files/poketool/trgra/trfgra/narc_0146.png | Bin 799 -> 812 bytes files/poketool/trgra/trfgra/narc_0148.png | Bin 863 -> 876 bytes files/poketool/trgra/trfgra/narc_0150.png | Bin 1142 -> 1155 bytes files/poketool/trgra/trfgra/narc_0152.png | Bin 776 -> 789 bytes files/poketool/trgra/trfgra/narc_0154.png | Bin 1017 -> 1030 bytes files/poketool/trgra/trfgra/narc_0156.png | Bin 990 -> 1003 bytes files/poketool/trgra/trfgra/narc_0158.png | Bin 751 -> 764 bytes files/poketool/trgra/trfgra/narc_0160.png | Bin 834 -> 847 bytes files/poketool/trgra/trfgra/narc_0162.png | Bin 750 -> 763 bytes files/poketool/trgra/trfgra/narc_0164.png | Bin 1390 -> 1403 bytes files/poketool/trgra/trfgra/narc_0166.png | Bin 908 -> 921 bytes files/poketool/trgra/trfgra/narc_0168.png | Bin 707 -> 720 bytes files/poketool/trgra/trfgra/narc_0170.png | Bin 831 -> 844 bytes files/poketool/trgra/trfgra/narc_0172.png | Bin 891 -> 904 bytes files/poketool/trgra/trfgra/narc_0174.png | Bin 762 -> 775 bytes files/poketool/trgra/trfgra/narc_0176.png | Bin 802 -> 815 bytes files/poketool/trgra/trfgra/narc_0178.png | Bin 835 -> 848 bytes files/poketool/trgra/trfgra/narc_0180.png | Bin 779 -> 792 bytes files/poketool/trgra/trfgra/narc_0182.png | Bin 642 -> 655 bytes files/poketool/trgra/trfgra/narc_0184.png | Bin 634 -> 647 bytes files/poketool/trgra/trfgra/narc_0186.png | Bin 656 -> 669 bytes files/poketool/trgra/trfgra/narc_0188.png | Bin 628 -> 641 bytes files/poketool/trgra/trfgra/narc_0190.png | Bin 760 -> 773 bytes files/poketool/trgra/trfgra/narc_0192.png | Bin 817 -> 830 bytes files/poketool/trgra/trfgra/narc_0194.png | Bin 1000 -> 1013 bytes 98 files changed, 0 insertions(+), 0 deletions(-) diff --git a/files/poketool/trgra/trfgra/narc_0000.png b/files/poketool/trgra/trfgra/narc_0000.png index a3697191fad3369d487c9294d9aac8cbcad7d9ca..aa5642f795a1efebd123128c7a371a7a1d7ad8c6 100644 GIT binary patch delta 22 dcmeyt+R8Q|o|}QOB*-tA!Qt7Bw2iT|nE+Oi2l@a2 delta 10 RcmZo=`@uRPeq+u|CIA=A1TX*q diff --git a/files/poketool/trgra/trfgra/narc_0002.png b/files/poketool/trgra/trfgra/narc_0002.png index d388414743c1b0fe273cf3162c225483d7885fbc..327459ca50b03c68f1bba95d613052b71bdc7912 100644 GIT binary patch delta 22 ecmdnUwvTN>JU0VlNswPKgTu2MX&Ym&FaZEnatI~> delta 10 RcmdnTwvlZ@{KlM1OaK^11Y7_B diff --git a/files/poketool/trgra/trfgra/narc_0004.png b/files/poketool/trgra/trfgra/narc_0004.png index 384e427b321f86dd44d6f49d79226f99c27db34c..cb49c3236e6f72f9cd18778178294b11c879d50d 100644 GIT binary patch delta 22 dcmbQnx|nrBJU0VlNswPKgTu2MX&YlLnE+3w2U7q5 delta 10 RcmZ3?I*oNg{Kgz}CIA&11Bn0t diff --git a/files/poketool/trgra/trfgra/narc_0006.png b/files/poketool/trgra/trfgra/narc_0006.png index 4e85a9d8d349bce3f506c364e5dae35350b2409b..0d70fe281c1b89f3fe0664a80abf395607bf7781 100644 GIT binary patch delta 22 dcmcb?`jmA-JU0VlNswPKgTu2MX&Ym!nE+b;2pIqX delta 10 RcmaFLdV_UB{KlM0CIA{k1Wy0} diff --git a/files/poketool/trgra/trfgra/narc_0008.png b/files/poketool/trgra/trfgra/narc_0008.png index 89692564a0d4543e124e703759bf9a2159c33751..86499bf9dbb799904650e6486bf20b4f465f543e 100644 GIT binary patch delta 22 dcmZ3=x`}l{JU0VlNswPKgTu2MX&Ylbm;h2b2Y>(o delta 10 RcmdnQx|DT7{KgzNCIA*k1GWGF diff --git a/files/poketool/trgra/trfgra/narc_0010.png b/files/poketool/trgra/trfgra/narc_0010.png index 677d27e199a8791f317d5d21efa3a986a34f39c5..8485cd64a957afddeb4f9d7e3c79e90ed258f109 100644 GIT binary patch delta 22 dcmaFM@{46cJU0VlNswPKgTu2MX&Yk&m;haJ2i5=p delta 10 Rcmeyx@|I;n{KgzUCIA}O1PlNG diff --git a/files/poketool/trgra/trfgra/narc_0012.png b/files/poketool/trgra/trfgra/narc_0012.png index 64a754c97717098573e6b1dbe15ca852c6479fab..f4c3b167f398bbd47a2ebb0ef59d7df2bd5bcf61 100644 GIT binary patch delta 22 dcmbQmzMOqRJU0VlNswPKgTu2MX&Ym0nE_Cz2V?*M delta 10 RcmZ3^K8t-q{Kgz>W&jn81DXH; diff --git a/files/poketool/trgra/trfgra/narc_0014.png b/files/poketool/trgra/trfgra/narc_0014.png index 44776c8034c9aec132727472b085717e5839682e..dfadbd12f7426028059fbff98b326ce762a23a1c 100644 GIT binary patch delta 22 ecmbQnwwP@~JU0VlNswPKgTu2MX&YmAG64Wk&Ii>1 delta 10 RcmZ3?HjQmU{KlN^OaK-u1PcHF diff --git a/files/poketool/trgra/trfgra/narc_0016.png b/files/poketool/trgra/trfgra/narc_0016.png index 00d4d11442698012c72d0ceb276e6ba0d83ad8d1..71693ec1e7e85774c147c6c44c2826abec77ef2c 100644 GIT binary patch delta 22 dcmaFL_K9smJU0VlNswPKgTu2MX&YlXm;qd42g3jW delta 10 Rcmeyw_LOZx{KgzMW&j#k1Ni^| diff --git a/files/poketool/trgra/trfgra/narc_0018.png b/files/poketool/trgra/trfgra/narc_0018.png index 08d15ae19abdc617316b71e7c20dc7f057e9a6cd..1601c4ea73341b04dfe25eba5b3cff208b4f7890 100644 GIT binary patch delta 22 dcmaFB@s?vkJU0VlNswPKgTu2MX&YmiSpZwu2e|+M delta 10 RcmaFM@qlAO{Kgzc762L*1MdI; diff --git a/files/poketool/trgra/trfgra/narc_0020.png b/files/poketool/trgra/trfgra/narc_0020.png index 959dc41795363ae5c3e6e41ed852b662da3b007d..4a70d6be51863b84a1465145b2d71d450e341489 100644 GIT binary patch delta 22 dcmeBRo60sJo|}QOB*-tA!Qt7Bw2iT=nE*~^2de-8 delta 10 RcmbQr*1m;qJ$2f+XU delta 10 RcmX@czLR}I{KlLpW&juX1NQ&` diff --git a/files/poketool/trgra/trfgra/narc_0032.png b/files/poketool/trgra/trfgra/narc_0032.png index 0befdd006000d29de3e71e56113cf44bc43e45c3..35e9c4f91f59698a5ea636a196bba0db4bbd3290 100644 GIT binary patch delta 22 dcmaFF_MUA*JU0VlNswPKgTu2MX&Yl%nE_kh2f6?N delta 10 RcmaFQ_K0ml{Kgz+W&j!-1MmO< diff --git a/files/poketool/trgra/trfgra/narc_0034.png b/files/poketool/trgra/trfgra/narc_0034.png index 4e047065fc8fa1aa7c3d0c920a6bc258b7d53aaf..80d4e7e6a21794e46b99a40c96de9f97cc748b2b 100644 GIT binary patch delta 22 dcmeyt+R8Q|o|}QOB*-tA!Qt7Bw2iT|nE+Oi2l@a2 delta 10 RcmZo=`@uRPeq+u|CIA=A1TX*q diff --git a/files/poketool/trgra/trfgra/narc_0036.png b/files/poketool/trgra/trfgra/narc_0036.png index 6ad459203fa690de7bbf08973e6f3ff4c9b9c648..c6871ed89f23569765b7e7b1248d95343a8a8be7 100644 GIT binary patch delta 22 ecmcb>c9(5JJU0VlNswPKgTu2MX&YldGXVfv#t4G| delta 10 Rcmcc1c7bg|{KlM*OaL0Q1i1hJ diff --git a/files/poketool/trgra/trfgra/narc_0038.png b/files/poketool/trgra/trfgra/narc_0038.png index d6b7af72331fad4d27c1d55be4b61398909b809a..b0034c891b300f29dcd6f2b8d8d0d1aab1497337 100644 GIT binary patch delta 22 ecmeyw`k!?|JU0VlNswPKgTu2MX&YmwG64Wzb_izx delta 10 Rcmey*`iXTy{KlNgOaL591f2i? diff --git a/files/poketool/trgra/trfgra/narc_0040.png b/files/poketool/trgra/trfgra/narc_0040.png index 4d3412bdfdc6a800332ff4cd7032267b7374f584..5c64c4f50d29c293b6cce13448831b094e1e3a44 100644 GIT binary patch delta 22 ecmX@bcAafPJU0VlNswPKgTu2MX&YnTG64Wtz6fyu delta 10 Rcmcc4c8YC6{KlNuOaK}?1g8K1 diff --git a/files/poketool/trgra/trfgra/narc_0042.png b/files/poketool/trgra/trfgra/narc_0042.png index 06b3f610519926e90caab986ed7fdc982c6302ff..81b7af4096e85243d61767671dfa16703d990ba8 100644 GIT binary patch delta 22 dcmey!_K$5sJU0VlNswPKgTu2MX&Yljm;qjM2j>6) delta 10 Rcmeyz_K|Hu{Kgz1W&j&V1RVeX diff --git a/files/poketool/trgra/trfgra/narc_0044.png b/files/poketool/trgra/trfgra/narc_0044.png index b0a032e27532bf123518cae40d6c168f17b2c906..232d87319fae4cb4d98dc1c3e910a66d559728af 100644 GIT binary patch delta 22 dcmZo=s!14;k@ diff --git a/files/poketool/trgra/trfgra/narc_0046.png b/files/poketool/trgra/trfgra/narc_0046.png index 06b42835999fefb6bac0977fd1885658320d6cc3..9d957414d26a788dde8cd51115212bfa29d3f86a 100644 GIT binary patch delta 22 ecmZ3^v4vwoJU0VlNswPKgTu2MX&YltF#`Zp3kVGW delta 10 RcmdnOv7BQ<{KlLU%m5dl1VaD- diff --git a/files/poketool/trgra/trfgra/narc_0048.png b/files/poketool/trgra/trfgra/narc_0048.png index da0956dd4cb93ef5cea582a55299d81db7539c7b..e18ec78ba2cd2e360c1689133e4b9fe88b8a6dee 100644 GIT binary patch delta 22 dcmcc2`haypJU0VlNswPKgTu2MX&Yn9m;hQL2nqlI delta 10 RcmaFBdYN@X{KlLTCIA`V1V8`) diff --git a/files/poketool/trgra/trfgra/narc_0050.png b/files/poketool/trgra/trfgra/narc_0050.png index e982ba429138dbeec615d98acec6eeff5de47600..81f6ba274c9819eb87061257c75fd1b29b61a527 100644 GIT binary patch delta 22 ecmeys`j>S=JU0VlNswPKgTu2MX&YlFGXVf!9tdFo delta 10 Rcmey%`hj&q{KlM#OaL4s1eX8+ diff --git a/files/poketool/trgra/trfgra/narc_0052.png b/files/poketool/trgra/trfgra/narc_0052.png index c2ec98028f4adce521042c6fcf884f42bad04d1e..f3fdd12fc18b452bc4501ed25e19e6624bacca6c 100644 GIT binary patch delta 22 ecmZ3)ww`T5JU0VlNswPKgTu2MX&YmYG64Wm-Us;r delta 10 RcmZ3_wuo&){KlNaOaK=f1TO#p diff --git a/files/poketool/trgra/trfgra/narc_0054.png b/files/poketool/trgra/trfgra/narc_0054.png index 4ddb1e0fa82127a04165d7de79885c5ac08ac6a1..e8e3cb7f4088f73d91c61065c4603d6d1ac5b6ab 100644 GIT binary patch delta 22 ecmdnQwx4Z6JU0VlNswPKgTu2MX&Ym&G64Wpo(L%b delta 10 Rcmdnbwux;*{KlNiOaK^L1YZCE diff --git a/files/poketool/trgra/trfgra/narc_0056.png b/files/poketool/trgra/trfgra/narc_0056.png index 600b10fb3b36976f0f1ff89bf464d6f5beeef820..358e325b9253ad710d9c21cc6a8e878581d8ad36 100644 GIT binary patch delta 22 dcmeBSoyj^Oo|}QOB*-tA!Qt7Bw2iU)OaM*p2Q>fy delta 10 RcmbQq+QT{_eq)X<695!b18V>P diff --git a/files/poketool/trgra/trfgra/narc_0058.png b/files/poketool/trgra/trfgra/narc_0058.png index 809a5f3a7211b57e123a4d74dec63db001051624..95a196ee307221d1d73721bbbef1725345db76c4 100644 GIT binary patch delta 22 ecmZ3%wv}x{JU0VlNswPKgTu2MX&YltGXVfo<_HS_ delta 10 RcmdnWwt{U!{KlM?1VI1* diff --git a/files/poketool/trgra/trfgra/narc_0060.png b/files/poketool/trgra/trfgra/narc_0060.png index ab4a395528c98f57f64a28d45d8bfbf411a443e2..6d1b164e568601919f33d5eabbf2f1501dba92e3 100644 GIT binary patch delta 22 dcmaFC_LXfyJU0VlNswPKgTu2MX&Ym?nE_nq2h0Ef delta 10 Rcmey$_JVCf{KgzkW&j$L1Ofm6 diff --git a/files/poketool/trgra/trfgra/narc_0062.png b/files/poketool/trgra/trfgra/narc_0062.png index 99b03a4521ebdd98a266bf179361e0a2dc8eaea7..e6d663571a54a567c76e97235dde08a60ea246b7 100644 GIT binary patch delta 22 dcmcc4`Gj*qJU0VlNswPKgTu2MX&Ym!SO8me2p|9e delta 10 RcmaFDd7X1Y{KlLL762M?1Xch5 diff --git a/files/poketool/trgra/trfgra/narc_0064.png b/files/poketool/trgra/trfgra/narc_0064.png index a3c15ec4c1bae70fb9eab6316eb8af0676210588..ea8acae8aabb9d5ffd153e92be4b062b90eb8c0f 100644 GIT binary patch delta 22 dcmZo=s!14;k@ diff --git a/files/poketool/trgra/trfgra/narc_0066.png b/files/poketool/trgra/trfgra/narc_0066.png index 65fd1a5e81a45deb5124fc08750a92598533811d..3b8ec7c380298854d36f029c2527312a96e64877 100644 GIT binary patch delta 22 dcmZo-?`NM7&&|MC666=m;PC85+QwK_W&liw2OIzZ delta 10 RcmeBYZ(^SizcELd82}Tk15yA0 diff --git a/files/poketool/trgra/trfgra/narc_0068.png b/files/poketool/trgra/trfgra/narc_0068.png index 51e71a5ad89db9e95fe6216bf8bd65a87f34e2b2..6699e5f139e5d846b95c11a06a0d0eb37260d890 100644 GIT binary patch delta 22 dcmeC@n8Pt4o|}QOB*-tA!Qt7Bw2iTwm;q1g2gLvY delta 10 RcmbQk(a$jo4__9o|}QOB*-tA!Qt7Bw2iULm;gW&jn81DXH; diff --git a/files/poketool/trgra/trfgra/narc_0100.png b/files/poketool/trgra/trfgra/narc_0100.png index 89793875d23e281b6970b9d6da7134fe8c7418c4..db9621d23ab2e1928a56aecb352ccb1069fc5a4e 100644 GIT binary patch delta 22 dcmbQjzL0%FJU0VlNswPKgTu2MX&YnBnE_9q2T}k4 delta 10 RcmZ3;K81Zk{KgzpW&jlw1Bd_s diff --git a/files/poketool/trgra/trfgra/narc_0102.png b/files/poketool/trgra/trfgra/narc_0102.png index f8519a316ee6caf94c69608d41f1c2d8a12fc5a9..6e73707b313d76c64ba3e43aee706b3943d08167 100644 GIT binary patch delta 22 ecmbQkwvuf^JU0VlNswPKgTu2MX&YnrGXVfm)(7VR delta 10 RcmZ31 delta 10 RcmZ3?HjQmU{KlN^OaK-u1PcHF diff --git a/files/poketool/trgra/trfgra/narc_0120.png b/files/poketool/trgra/trfgra/narc_0120.png index 17b3978085444878c0bcee8c0e8714e0eeaf078f..986cd84178834eee2790fa3e5dcb2cbd776d0952 100644 GIT binary patch delta 22 dcmaFN@_}VSJU0VlNswPKgTu2MX&YnNm;hV42e<$L delta 10 Rcmeys@|a~p{Kgy>CIA`_1MUC- diff --git a/files/poketool/trgra/trfgra/narc_0122.png b/files/poketool/trgra/trfgra/narc_0122.png index 2d479c0a962dc18e15dc4095b0d2e0cb82c0a5a9..6b8c479d14b278a3d577c0f837f51b070aba33eb 100644 GIT binary patch delta 22 ecmcb_a-U^FJU0VlNswPKgTu2MX&Ym|G6Dcv%?N}5 delta 10 Rcmcc5a*1U^{KlNmi~t(C1iAnK diff --git a/files/poketool/trgra/trfgra/narc_0124.png b/files/poketool/trgra/trfgra/narc_0124.png index debfab773732af106def8007dad38c8ffe6507d0..cb4110dfb6b9facd4cefefd21e3f7b8ac130e992 100644 GIT binary patch delta 22 dcmbQizLb4JJU0VlNswPKgTu2MX&Ym$nE_Bw2VMXG delta 10 RcmZ3=K7)Ni{KgzhW&jmr1C#&& diff --git a/files/poketool/trgra/trfgra/narc_0126.png b/files/poketool/trgra/trfgra/narc_0126.png index d623f26dd82c8cc62ed9589a03d6e03ad93ec161..0d2810d3590d69c573eac434f84d9b51975387bb 100644 GIT binary patch delta 22 ecmdnSc9?BKJU0VlNswPKgTu2MX&Ym2G64WqP6#ys delta 10 RcmX@iwvBB<{KlN?OaK_G1Zw~Q diff --git a/files/poketool/trgra/trfgra/narc_0128.png b/files/poketool/trgra/trfgra/narc_0128.png index db2cd7b1e41a922be5672cca3c859ce41035bc18..4c16bc97e77d7da3bd6812d3a75d29cda0e37eaf 100644 GIT binary patch delta 22 dcmbQjzL0%FJU0VlNswPKgTu2MX&YnBnE_9q2T}k4 delta 10 RcmZ3;K81Zk{KgzpW&jlw1Bd_s diff --git a/files/poketool/trgra/trfgra/narc_0130.png b/files/poketool/trgra/trfgra/narc_0130.png index dcd5c7df7dc7a8a468b149e9557d6684a4ef6e44..2e3fbb0f8beab20cde070f1a620e2d37a8abcae6 100644 GIT binary patch delta 22 dcmey$+Qc>?o|}QOB*-tA!Qt7Bw2iSdm;hD{2k`&^ delta 10 RcmZo-`^q{Yeq+uwCIA diff --git a/files/poketool/trgra/trfgra/narc_0140.png b/files/poketool/trgra/trfgra/narc_0140.png index fb71ab7af0e94569957011cebfcd3445a385d9c1..6195eb752653c9595b3c37f5be8c222d83ca4ca6 100644 GIT binary patch delta 22 dcmey))xtd?o|}QOB*-tA!Qt7Bw2iS+tN>Op2ZR6s delta 10 RcmZqS{?0Waeq)XVD*zV@1G)eJ diff --git a/files/poketool/trgra/trfgra/narc_0142.png b/files/poketool/trgra/trfgra/narc_0142.png index a7c23e6d5d6e20f636454a4503b53ce916a6ecdd..d6226a7a25b3e1f6cea076ea9200124a8e55510d 100644 GIT binary patch delta 22 dcmeBRpUOTVo|}QOB*-tA!Qt7Bw2iUa%m7V~2QB~r delta 10 RcmbQr-oZX0eq)X%GXNAM17rXI diff --git a/files/poketool/trgra/trfgra/narc_0144.png b/files/poketool/trgra/trfgra/narc_0144.png index 300b779d2e02ff215f089ec9b1858fa64799c9a5..c51be8ea55cbab5465fc341af025ec67f23bc5b4 100644 GIT binary patch delta 22 dcmaFN`hj&qJU0VlNswPKgTu2MX&YnPm;hYj2s!`& delta 10 Rcmeys`j~Y>{KlLXCIA~B1aJTV diff --git a/files/poketool/trgra/trfgra/narc_0146.png b/files/poketool/trgra/trfgra/narc_0146.png index 10f6e2b1d1e6210ebc1636aa75bda66bfcc3e348..063fa903906a05033724ef506258d2a647c7e9c7 100644 GIT binary patch delta 22 ecmbQwwuWs&JU0VlNswPKgTu2MX&Yk?F#!NlS_kj| delta 10 RcmZ3(HlJ-m{KlLEOaK<&1SS9g diff --git a/files/poketool/trgra/trfgra/narc_0148.png b/files/poketool/trgra/trfgra/narc_0148.png index 1b889c10a8c02a1064e9607b045dee4e07ebc37b..6f3c9b1cee8fa9461c036650d5f111f4d3cdeb87 100644 GIT binary patch delta 22 dcmcc5_J(ajJU0VlNswPKgTu2MX&Ymim;qZ`2eAME delta 9 QcmaFEcAsrR{K6b&02Ryw*8l(j diff --git a/files/poketool/trgra/trfgra/narc_0150.png b/files/poketool/trgra/trfgra/narc_0150.png index a438f3767fd865b23d69f739886a345765ad1281..cbdad2d704ffef9cbca7fa1e13a33bb6bb8697bb 100644 GIT binary patch delta 22 dcmeyy(abp^o|}QOB*-tA!Qt7Bw2iTnEC5xr2Ydhk delta 10 RcmZqX{KhdMeq)X}3jh|@1F`@B diff --git a/files/poketool/trgra/trfgra/narc_0152.png b/files/poketool/trgra/trfgra/narc_0152.png index 09bf1b13717159fd29b5e52560e11f9d81aa6e68..214ea36604463908be59e070182d0043ae0d41ac 100644 GIT binary patch delta 22 dcmeBRo60sJo|}QOB*-tA!Qt7Bw2iT=nE*~^2de-8 delta 10 RcmbQr*1( diff --git a/files/poketool/trgra/trfgra/narc_0160.png b/files/poketool/trgra/trfgra/narc_0160.png index 1f7c390ccf3c5476d3d3a5c3adc1e17ee2d91af2..9bc12f17e59a006129a358495dead9f067af3528 100644 GIT binary patch delta 22 ecmX@acAjlQJU0VlNswPKgTu2MX&YmoG64WsUIdYE-W{KlLVCIA?p1P}lK diff --git a/files/poketool/trgra/trfgra/narc_0170.png b/files/poketool/trgra/trfgra/narc_0170.png index bcdb5ccba2e105179a518a4953e2527ff2bc027f..1ba2e7ac5fc5af9095c14ea3cb77757594d6bf3f 100644 GIT binary patch delta 22 ecmdnbc7|<2JU0VlNswPKgTu2MX&Yl7F#!Nq+6Yhp delta 10 RcmX@Zwx4Z6{KlLIOaK{Q1cm?r diff --git a/files/poketool/trgra/trfgra/narc_0172.png b/files/poketool/trgra/trfgra/narc_0172.png index a4fae35fdeef4eeb1828f83237e75e50972bf705..cb00b2e97bf2e841049d42d3b4761adb6f3cfcb5 100644 GIT binary patch delta 22 dcmey(*1c9?BK{KlLoOaK|L1d;#% diff --git a/files/poketool/trgra/trfgra/narc_0180.png b/files/poketool/trgra/trfgra/narc_0180.png index 2cfeb08860d5c1dc6674dbcf8ca768999430bb6b..5c0a01f73a014801c5219abac93ddfae32ed01ec 100644 GIT binary patch delta 22 dcmeBXo540Ao|}QOB*-tA!Qt7Bw2iUrm;g@d2ebeH delta 10 RcmbQi*3C8{eq+uWCIA&r1L^<( diff --git a/files/poketool/trgra/trfgra/narc_0182.png b/files/poketool/trgra/trfgra/narc_0182.png index 95ab4f4d927744fa15e26c6cf7c1d15cec99d3ba..dd04fcbbfaea1363c8b3bb85c155c20d47f317fe 100644 GIT binary patch delta 22 dcmZo-?Pr}3&&|MC666=m;PC85+QwK_CICz}2NwVU delta 10 RcmeBYZDO4ezcELd2>=s|15E$` diff --git a/files/poketool/trgra/trfgra/narc_0184.png b/files/poketool/trgra/trfgra/narc_0184.png index 5510418baf7cbf3578d62109f67d963d0acfa9a7..c5134e311d65108340c238d69bbfc762326227be 100644 GIT binary patch delta 22 dcmeyx(#|>|o|}QOB*-tA!Qt7Bw2iT{OaN8E2Yvtm delta 10 RcmZo?{lzjNeq)X_695+E1GE4D diff --git a/files/poketool/trgra/trfgra/narc_0186.png b/files/poketool/trgra/trfgra/narc_0186.png index eff5735d14e039532d91fcd7c269670d3b60ca58..3795119960079124ed088f539a290d48d2e32fd0 100644 GIT binary patch delta 22 dcmbQhI+t}qJU0VlNswPKgTu2MX&YmWnE+0n2SES; delta 10 RcmbQsI)QaU{KgzZCIA$p19t!b diff --git a/files/poketool/trgra/trfgra/narc_0188.png b/files/poketool/trgra/trfgra/narc_0188.png index adcaf3cb5f6fdde1aeec35fac5b23994b2bb7302..20fd19fa381bc059257fa8b99816b548eb91050f 100644 GIT binary patch delta 22 dcmeyu(#Sd?o|}QOB*-tA!Qt7Bw2iUiOaN552W$WU delta 10 RcmZo<{lYRKeq)X(695)$1EK%` diff --git a/files/poketool/trgra/trfgra/narc_0190.png b/files/poketool/trgra/trfgra/narc_0190.png index a3697191fad3369d487c9294d9aac8cbcad7d9ca..aa5642f795a1efebd123128c7a371a7a1d7ad8c6 100644 GIT binary patch delta 22 dcmeyt+R8Q|o|}QOB*-tA!Qt7Bw2iT|nE+Oi2l@a2 delta 10 RcmZo=`@uRPeq+u|CIA=A1TX*q diff --git a/files/poketool/trgra/trfgra/narc_0192.png b/files/poketool/trgra/trfgra/narc_0192.png index d388414743c1b0fe273cf3162c225483d7885fbc..327459ca50b03c68f1bba95d613052b71bdc7912 100644 GIT binary patch delta 22 ecmdnUwvTN>JU0VlNswPKgTu2MX&Ym&FaZEnatI~> delta 10 RcmdnTwvlZ@{KlM1OaK^11Y7_B diff --git a/files/poketool/trgra/trfgra/narc_0194.png b/files/poketool/trgra/trfgra/narc_0194.png index cc7c2d7f0f426d0967c97998cbad24be7a29d250..149cc08c920bdd42f97f148a7ed4da892bbbc810 100644 GIT binary patch delta 22 dcmaFC{*`?~JU0VlNswPKgTu2MX&Ym^nE_r82u=V1 delta 10 Rcmey${(^l%{KlM4W&j(c1cU$p From 66c84ded7ac7a706934ba9e0fdbe986c450858af Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 27 Dec 2020 22:20:15 +0000 Subject: [PATCH 44/59] some more mod 5 --- arm9/arm9.lsf | 2 + arm9/modules/05/asm/mod05_021E80F8.s | 303 ++++++++++++ arm9/modules/05/asm/mod05_021E8310.s | 409 ++++++++++++++++ arm9/modules/05/asm/module_05.s | 702 --------------------------- 4 files changed, 714 insertions(+), 702 deletions(-) create mode 100644 arm9/modules/05/asm/mod05_021E80F8.s create mode 100644 arm9/modules/05/asm/mod05_021E8310.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 84d10f58c..5468430ad 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -558,6 +558,8 @@ Overlay MODULE_05 Object mod05_021E7504.o Object mod05_021E779C.o Object mod05_021E7C00.o + Object mod05_021E80F8.o + Object mod05_021E8310.o Object module_05.o } diff --git a/arm9/modules/05/asm/mod05_021E80F8.s b/arm9/modules/05/asm/mod05_021E80F8.s new file mode 100644 index 000000000..82fd7a02b --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E80F8.s @@ -0,0 +1,303 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E80F8 +MOD05_021E80F8: ; 0x021E80F8 + push {r3, lr} + mov r1, #0x14 + bl AllocFromHeap + add r3, r0, #0 + mov r2, #0x14 + mov r1, #0 +_021E8106: + strb r1, [r3] + add r3, r3, #1 + sub r2, r2, #1 + bne _021E8106 + pop {r3, pc} + + thumb_func_start MOD05_021E8110 +MOD05_021E8110: ; 0x021E8110 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #0x13] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1f + beq _021E8120 + bl FUN_02019178 +_021E8120: + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + + thumb_func_start MOD05_021E8128 +MOD05_021E8128: ; 0x021E8128 + strb r1, [r0, #0x12] + strh r2, [r0, #0x10] + bx lr + .balign 4, 0 + + thumb_func_start MOD05_021E8130 +MOD05_021E8130: ; 0x021E8130 + ldrb r3, [r0, #0x13] + mov r2, #0x7f + bic r3, r2 + mov r2, #0x7f + and r1, r2 + orr r1, r3 + strb r1, [r0, #0x13] + bx lr + + thumb_func_start MOD05_021E8140 +MOD05_021E8140: ; 0x021E8140 + bx lr + .balign 4, 0 + + thumb_func_start MOD05_021E8144 +MOD05_021E8144: ; 0x021E8144 + ldrb r0, [r0, #0x12] + bx lr + + thumb_func_start MOD05_021E8148 +MOD05_021E8148: ; 0x021E8148 + ldrb r0, [r0, #0x13] + lsl r0, r0, #0x19 + lsr r0, r0, #0x19 + bne _021E8154 + mov r0, #1 + bx lr +_021E8154: + mov r0, #0 + bx lr + + thumb_func_start MOD05_021E8158 +MOD05_021E8158: ; 0x021E8158 + push {r4, lr} + ldr r4, [r0, #0x60] + ldrb r1, [r4, #0x13] + lsl r1, r1, #0x19 + lsr r1, r1, #0x19 + cmp r1, #4 + bhi _021E81BA + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_021E8172: ; jump table + .short _021E81BA - _021E8172 - 2 ; case 0 + .short _021E817C - _021E8172 - 2 ; case 1 + .short _021E818A - _021E8172 - 2 ; case 2 + .short _021E819C - _021E8172 - 2 ; case 3 + .short _021E81AE - _021E8172 - 2 ; case 4 +_021E817C: + bl MOD05_021E81D0 + ldrb r1, [r4, #0x13] + mov r0, #0x7f + bic r1, r0 + strb r1, [r4, #0x13] + pop {r4, pc} +_021E818A: + bl MOD05_021E82A0 + cmp r0, #1 + bne _021E81BA + ldrb r1, [r4, #0x13] + mov r0, #0x7f + bic r1, r0 + strb r1, [r4, #0x13] + pop {r4, pc} +_021E819C: + bl MOD05_021E8260 + cmp r0, #1 + bne _021E81BA + ldrb r1, [r4, #0x13] + mov r0, #0x7f + bic r1, r0 + strb r1, [r4, #0x13] + pop {r4, pc} +_021E81AE: + bl MOD05_021E820C + ldrb r1, [r4, #0x13] + mov r0, #0x7f + bic r1, r0 + strb r1, [r4, #0x13] +_021E81BA: + pop {r4, pc} + + thumb_func_start MOD05_021E81BC +MOD05_021E81BC: ; 0x021E81BC + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x60] + bl MOD05_021E8130 + add r0, r4, #0 + bl MOD05_021E8158 + pop {r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E81D0 +MOD05_021E81D0: ; 0x021E81D0 + push {r4, lr} + mov r1, #3 + add r4, r0, #0 + add r3, r1, #0 + ldr r0, [r4, #8] + add r2, r1, #0 + sub r3, #0x33 + bl FUN_020179E0 + ldr r1, [r4, #0x60] + ldrb r0, [r1, #0x13] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1f + bne _021E8200 + ldrb r2, [r1, #0x12] + ldr r0, [r4, #8] + mov r3, #3 + bl FUN_020546E0 + ldr r2, [r4, #0x60] + mov r0, #0x80 + ldrb r1, [r2, #0x13] + orr r0, r1 + strb r0, [r2, #0x13] +_021E8200: + ldr r0, [r4, #0x60] + ldrb r1, [r0, #0x12] + ldrh r2, [r0, #0x10] + bl FUN_02054744 + pop {r4, pc} + + thumb_func_start MOD05_021E820C +MOD05_021E820C: ; 0x021E820C + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, [r4, #0x60] + ldrb r1, [r0, #0x13] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1f + beq _021E825A + bl FUN_02019178 + mov r0, #0x12 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #6 + str r0, [sp, #8] + mov r0, #0x10 + str r0, [sp, #0xc] + mov r2, #0 + ldr r0, [r4, #8] + mov r1, #3 + add r3, r2, #0 + bl FUN_02018540 + ldr r0, [r4, #8] + mov r1, #3 + bl FUN_02017CD0 + mov r1, #3 + ldr r0, [r4, #8] + add r2, r1, #0 + mov r3, #0 + bl FUN_020179E0 + ldr r2, [r4, #0x60] + mov r0, #0x80 + ldrb r1, [r2, #0x13] + bic r1, r0 + strb r1, [r2, #0x13] +_021E825A: + add sp, #0x10 + pop {r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E8260 +MOD05_021E8260: ; 0x021E8260 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + mov r1, #3 + bl FUN_02017B54 + cmp r0, #0 + bne _021E8274 + mov r0, #1 + pop {r4, pc} +_021E8274: + mov r1, #0x2f + mvn r1, r1 + cmp r0, r1 + ble _021E8280 + cmp r0, #0 + blt _021E828E +_021E8280: + mov r1, #3 + add r3, r1, #0 + ldr r0, [r4, #8] + add r2, r1, #0 + sub r3, #0x33 + bl FUN_020179E0 +_021E828E: + ldr r0, [r4, #8] + mov r1, #3 + mov r2, #4 + mov r3, #0x10 + bl FUN_020179E0 + mov r0, #0 + pop {r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E82A0 +MOD05_021E82A0: ; 0x021E82A0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, [r4, #8] + mov r1, #3 + bl FUN_02017B54 + mov r1, #0x2f + mvn r1, r1 + cmp r0, r1 + bne _021E82EC + mov r0, #0x12 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #6 + str r0, [sp, #8] + mov r0, #0x10 + str r0, [sp, #0xc] + mov r2, #0 + ldr r0, [r4, #8] + mov r1, #3 + add r3, r2, #0 + bl FUN_02018540 + ldr r0, [r4, #8] + mov r1, #3 + bl FUN_02017CD0 + mov r1, #3 + ldr r0, [r4, #8] + add r2, r1, #0 + mov r3, #0 + bl FUN_020179E0 + add sp, #0x10 + mov r0, #1 + pop {r4, pc} +_021E82EC: + ble _021E82F2 + cmp r0, #0 + blt _021E82FE +_021E82F2: + mov r1, #3 + ldr r0, [r4, #8] + add r2, r1, #0 + mov r3, #0 + bl FUN_020179E0 +_021E82FE: + ldr r0, [r4, #8] + mov r1, #3 + mov r2, #5 + mov r3, #0x10 + bl FUN_020179E0 + mov r0, #0 + add sp, #0x10 + pop {r4, pc} diff --git a/arm9/modules/05/asm/mod05_021E8310.s b/arm9/modules/05/asm/mod05_021E8310.s new file mode 100644 index 000000000..e3a28a978 --- /dev/null +++ b/arm9/modules/05/asm/mod05_021E8310.s @@ -0,0 +1,409 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD05_021E8310 +MOD05_021E8310: ; 0x021E8310 + push {r3, r4, r5, r6, r7, lr} + ldr r4, [r1, #0xc] + add r5, r0, #0 + add r0, r4, #0 + bl FUN_02034E30 + bl FUN_02034DC0 + add r6, r0, #0 + add r0, r4, #0 + bl Sav2_Pokedex_get + add r7, r0, #0 + ldr r0, [r6] + bl FUN_02034824 + str r0, [r5, #4] + add r0, r7, #0 + bl Pokedex_GetSinnohDexFlag + cmp r0, #0 + beq _021E8344 + add r0, r7, #0 + bl Pokedex_CountSeenMons + b _021E8346 +_021E8344: + mov r0, #0 +_021E8346: + str r0, [r5] + add r0, r4, #0 + bl Sav2_PlayerData_GetProfileAddr + str r0, [r5, #8] + add r0, r4, #0 + bl Sav2_PlayerData_GetIGTAddr + str r0, [r5, #0xc] + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E835C +MOD05_021E835C: ; 0x021E835C + push {r3, r4, r5, lr} + sub sp, #8 + add r4, r1, #0 + ldr r2, [r4, #4] + mov r1, #0 + add r5, r0, #0 + bl BufferLandmarkName + ldr r2, [r4, #8] + add r0, r5, #0 + mov r1, #1 + bl BufferPlayersName + ldr r0, [r4, #8] + bl PlayerProfile_CountBadges + add r2, r0, #0 + mov r0, #0 + str r0, [sp] + mov r3, #1 + str r3, [sp, #4] + add r0, r5, #0 + mov r1, #2 + bl BufferIntegerAsString + ldr r2, [r4] + cmp r2, #0x64 + blt _021E839A + mov r3, #3 + mov r0, #0 + b _021E83A8 +_021E839A: + cmp r2, #0xa + blt _021E83A4 + mov r3, #3 + mov r0, #1 + b _021E83A8 +_021E83A4: + mov r3, #2 + mov r0, #1 +_021E83A8: + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + add r0, r5, #0 + mov r1, #3 + bl BufferIntegerAsString + ldr r0, [r4, #0xc] + bl GetIGTHours + add r2, r0, #0 + cmp r2, #0x64 + blt _021E83C8 + mov r3, #3 + mov r0, #0 + b _021E83D6 +_021E83C8: + cmp r2, #0xa + blt _021E83D2 + mov r3, #3 + mov r0, #1 + b _021E83D6 +_021E83D2: + mov r3, #2 + mov r0, #1 +_021E83D6: + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + add r0, r5, #0 + mov r1, #4 + bl BufferIntegerAsString + ldr r0, [r4, #0xc] + bl GetIGTMinutes + mov r3, #2 + add r2, r0, #0 + str r3, [sp] + mov r0, #1 + str r0, [sp, #4] + add r0, r5, #0 + mov r1, #5 + bl BufferIntegerAsString + add sp, #8 + pop {r3, r4, r5, pc} + + thumb_func_start MOD05_021E8400 +MOD05_021E8400: ; 0x021E8400 + ldr r0, [r0] + cmp r0, #0 + beq _021E840A + mov r0, #0xa + bx lr +_021E840A: + mov r0, #8 + bx lr + .balign 4, 0 + + thumb_func_start MOD05_021E8410 +MOD05_021E8410: ; 0x021E8410 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + mov r0, #0 + mov r1, #1 + bl FUN_02002E4C + add r4, r0, #0 + mov r0, #0 + mov r1, #3 + bl FUN_02002E4C + add r0, r4, r0 + str r0, [sp, #0x14] + mov r4, #0 + ldr r0, [r5, #0x14] + ldr r1, [r5, #0x18] + ldr r3, [r5, #4] + add r2, r4, #0 + bl ReadMsgData_ExpandPlaceholders + add r1, r4, #0 + add r6, r0, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r1, [sp, #8] + ldr r0, [r5, #0x10] + add r2, r6, #0 + add r3, r1, #0 + bl AddTextPrinterParameterized + add r0, r6, #0 + bl String_dtor + mov r0, #1 + str r0, [sp, #0x10] + ldr r0, _021E84EC ; =UNK05_021F78D4 + ldr r7, _021E84F0 ; =UNK05_021F78C4 + str r0, [sp, #0xc] +_021E8460: + ldr r0, [sp, #0xc] + ldr r1, [r0] + cmp r1, #3 + bne _021E846E + ldr r0, [r5, #0x1c] + cmp r0, #0 + beq _021E84D6 +_021E846E: + ldr r0, [sp, #0x14] + add r4, r4, r0 + ldr r0, [r5, #0x18] + bl NewString_ReadMsgData + add r6, r0, #0 + mov r1, #0 + str r4, [sp] + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r5, #0x10] + add r2, r6, #0 + add r3, r1, #0 + bl AddTextPrinterParameterized + add r0, r6, #0 + bl String_dtor + sub r2, r7, #4 + ldr r0, [r5, #0x14] + ldr r1, [r5, #0x18] + ldr r2, [r2] + ldr r3, [r5, #4] + bl ReadMsgData_ExpandPlaceholders + add r6, r0, #0 + mov r0, #0 + mov r1, #2 + bl FUN_02002E4C + add r2, r0, #0 + mov r0, #0 + add r1, r6, #0 + bl FUN_02002E14 + mov r1, #0x68 + sub r3, r1, r0 + str r4, [sp] + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r5, #0x10] + mov r1, #0 + add r2, r6, #0 + bl AddTextPrinterParameterized + add r0, r6, #0 + bl String_dtor +_021E84D6: + ldr r0, [sp, #0xc] + add r7, r7, #4 + add r0, r0, #4 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + add r0, r0, #1 + str r0, [sp, #0x10] + cmp r0, #5 + blo _021E8460 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E84EC: .word UNK05_021F78D4 +_021E84F0: .word UNK05_021F78C4 + + thumb_func_start MOD05_021E84F4 +MOD05_021E84F4: ; 0x021E84F4 + push {r3, r4, lr} + sub sp, #0x14 + add r4, r0, #0 + ldr r0, [r4, #4] + mov r1, #0x10 + bl AllocFromHeap + str r0, [r4, #0x10] + mov r3, #1 + str r3, [sp] + ldr r0, [r4, #0x2c] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + ldr r0, [r4, #0x30] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xd + str r0, [sp, #0xc] + ldr r0, _021E8564 ; =0x0000027F + str r0, [sp, #0x10] + ldrb r2, [r4, #8] + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x10] + bl FUN_02019064 + mov r0, #0 + str r0, [sp] + ldr r0, [r4, #4] + ldr r2, _021E8568 ; =0x000003D9 + str r0, [sp, #4] + ldrb r1, [r4, #8] + ldr r0, [r4, #0xc] + mov r3, #0xb + bl FUN_0200CB00 + mov r0, #0 + mov r1, #6 + bl FUN_02002E4C + add r1, r0, #0 + ldr r0, [r4, #0x10] + bl FUN_02019620 + add r0, r4, #0 + bl MOD05_021E8410 + ldr r0, [r4, #0x10] + ldr r2, _021E8568 ; =0x000003D9 + mov r1, #0 + mov r3, #0xb + bl FUN_0200CCA4 + add sp, #0x14 + pop {r3, r4, pc} + .balign 4, 0 +_021E8564: .word 0x0000027F +_021E8568: .word 0x000003D9 + + thumb_func_start MOD05_021E856C +MOD05_021E856C: ; 0x021E856C + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x10] + mov r1, #0 + bl FUN_0200CCF8 + ldr r0, [r4, #0x10] + bl FUN_02019178 + ldr r0, [r4, #0x10] + bl FreeToHeap + pop {r4, pc} + .balign 4, 0 + + thumb_func_start MOD05_021E8588 +MOD05_021E8588: ; 0x021E8588 + push {r3, r4, r5, r6, r7, lr} + add r5, r1, #0 + add r6, r0, #0 + add r0, r5, #0 + mov r1, #0x34 + add r7, r2, #0 + bl AllocFromHeap + add r4, r0, #0 + str r6, [r4] + str r5, [r4, #4] + strb r7, [r4, #8] + ldr r0, [r6, #8] + str r0, [r4, #0xc] + add r0, r5, #0 + bl ScrStrBufs_new + str r0, [r4, #0x14] + ldr r2, _021E85E0 ; =0x000001E3 + mov r0, #1 + mov r1, #0x1a + add r3, r5, #0 + bl NewMsgDataFromNarc + str r0, [r4, #0x18] + add r0, r4, #0 + ldr r1, [r4] + add r0, #0x1c + bl MOD05_021E8310 + add r1, r4, #0 + ldr r0, [r4, #0x14] + add r1, #0x1c + bl MOD05_021E835C + mov r0, #0xd + str r0, [r4, #0x2c] + add r0, r4, #0 + add r0, #0x1c + bl MOD05_021E8400 + str r0, [r4, #0x30] + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 +_021E85E0: .word 0x000001E3 + + thumb_func_start MOD05_021E85E4 +MOD05_021E85E4: ; 0x021E85E4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x18] + bl DestroyMsgData + ldr r0, [r4, #0x14] + bl ScrStrBufs_delete + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + + thumb_func_start MOD05_021E85FC +MOD05_021E85FC: ; 0x021E85FC + push {r4, lr} + add r4, r0, #0 + bl FUN_02034E48 + add r0, r4, #0 + mov r1, #4 + mov r2, #0 + bl MOD05_021EFA9C + ldr r0, [r4, #0x38] + bl FUN_02055320 + ldr r1, [r4, #0x1c] + str r0, [r1, #8] + ldr r0, [r4, #0x38] + bl FUN_0205532C + ldr r1, [r4, #0x1c] + str r0, [r1, #0xc] + mov r1, #0 + ldr r0, [r4, #0x1c] + mvn r1, r1 + str r1, [r0, #4] + ldr r0, [r4, #0x38] + bl FUN_020552F8 + ldr r1, [r4, #0x1c] + str r0, [r1, #0x10] + ldr r0, [r4, #0xc] + bl FUN_02022720 + cmp r0, #2 + bne _021E8642 + mov r0, #1 + pop {r4, pc} +_021E8642: + mov r0, #0 + pop {r4, pc} + .balign 4, 0 + + .section .rodata + + .global UNK05_021F78C4 +UNK05_021F78C4: ; 0x021F78C4 + .word 0x00000006, 0x00000007, 0x00000008, 0x00000000 + + .global UNK05_021F78D4 +UNK05_021F78D4: ; 0x021F78D4 + .word 0x00000001, 0x00000002, 0x00000003, 0x00000004 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 966730233..597bd0833 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -3,700 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD05_021E80F8 -MOD05_021E80F8: ; 0x021E80F8 - push {r3, lr} - mov r1, #0x14 - bl AllocFromHeap - add r3, r0, #0 - mov r2, #0x14 - mov r1, #0 -_021E8106: - strb r1, [r3] - add r3, r3, #1 - sub r2, r2, #1 - bne _021E8106 - pop {r3, pc} - - thumb_func_start MOD05_021E8110 -MOD05_021E8110: ; 0x021E8110 - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #0x13] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1f - beq _021E8120 - bl FUN_02019178 -_021E8120: - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - - thumb_func_start MOD05_021E8128 -MOD05_021E8128: ; 0x021E8128 - strb r1, [r0, #0x12] - strh r2, [r0, #0x10] - bx lr - .balign 4, 0 - - thumb_func_start MOD05_021E8130 -MOD05_021E8130: ; 0x021E8130 - ldrb r3, [r0, #0x13] - mov r2, #0x7f - bic r3, r2 - mov r2, #0x7f - and r1, r2 - orr r1, r3 - strb r1, [r0, #0x13] - bx lr - - thumb_func_start MOD05_021E8140 -MOD05_021E8140: ; 0x021E8140 - bx lr - .balign 4, 0 - - thumb_func_start MOD05_021E8144 -MOD05_021E8144: ; 0x021E8144 - ldrb r0, [r0, #0x12] - bx lr - - thumb_func_start MOD05_021E8148 -MOD05_021E8148: ; 0x021E8148 - ldrb r0, [r0, #0x13] - lsl r0, r0, #0x19 - lsr r0, r0, #0x19 - bne _021E8154 - mov r0, #1 - bx lr -_021E8154: - mov r0, #0 - bx lr - - thumb_func_start MOD05_021E8158 -MOD05_021E8158: ; 0x021E8158 - push {r4, lr} - ldr r4, [r0, #0x60] - ldrb r1, [r4, #0x13] - lsl r1, r1, #0x19 - lsr r1, r1, #0x19 - cmp r1, #4 - bhi _021E81BA - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_021E8172: ; jump table - .short _021E81BA - _021E8172 - 2 ; case 0 - .short _021E817C - _021E8172 - 2 ; case 1 - .short _021E818A - _021E8172 - 2 ; case 2 - .short _021E819C - _021E8172 - 2 ; case 3 - .short _021E81AE - _021E8172 - 2 ; case 4 -_021E817C: - bl MOD05_021E81D0 - ldrb r1, [r4, #0x13] - mov r0, #0x7f - bic r1, r0 - strb r1, [r4, #0x13] - pop {r4, pc} -_021E818A: - bl MOD05_021E82A0 - cmp r0, #1 - bne _021E81BA - ldrb r1, [r4, #0x13] - mov r0, #0x7f - bic r1, r0 - strb r1, [r4, #0x13] - pop {r4, pc} -_021E819C: - bl MOD05_021E8260 - cmp r0, #1 - bne _021E81BA - ldrb r1, [r4, #0x13] - mov r0, #0x7f - bic r1, r0 - strb r1, [r4, #0x13] - pop {r4, pc} -_021E81AE: - bl MOD05_021E820C - ldrb r1, [r4, #0x13] - mov r0, #0x7f - bic r1, r0 - strb r1, [r4, #0x13] -_021E81BA: - pop {r4, pc} - - thumb_func_start MOD05_021E81BC -MOD05_021E81BC: ; 0x021E81BC - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x60] - bl MOD05_021E8130 - add r0, r4, #0 - bl MOD05_021E8158 - pop {r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E81D0 -MOD05_021E81D0: ; 0x021E81D0 - push {r4, lr} - mov r1, #3 - add r4, r0, #0 - add r3, r1, #0 - ldr r0, [r4, #8] - add r2, r1, #0 - sub r3, #0x33 - bl FUN_020179E0 - ldr r1, [r4, #0x60] - ldrb r0, [r1, #0x13] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1f - bne _021E8200 - ldrb r2, [r1, #0x12] - ldr r0, [r4, #8] - mov r3, #3 - bl FUN_020546E0 - ldr r2, [r4, #0x60] - mov r0, #0x80 - ldrb r1, [r2, #0x13] - orr r0, r1 - strb r0, [r2, #0x13] -_021E8200: - ldr r0, [r4, #0x60] - ldrb r1, [r0, #0x12] - ldrh r2, [r0, #0x10] - bl FUN_02054744 - pop {r4, pc} - - thumb_func_start MOD05_021E820C -MOD05_021E820C: ; 0x021E820C - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - ldr r0, [r4, #0x60] - ldrb r1, [r0, #0x13] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1f - beq _021E825A - bl FUN_02019178 - mov r0, #0x12 - str r0, [sp] - mov r0, #0x20 - str r0, [sp, #4] - mov r0, #6 - str r0, [sp, #8] - mov r0, #0x10 - str r0, [sp, #0xc] - mov r2, #0 - ldr r0, [r4, #8] - mov r1, #3 - add r3, r2, #0 - bl FUN_02018540 - ldr r0, [r4, #8] - mov r1, #3 - bl FUN_02017CD0 - mov r1, #3 - ldr r0, [r4, #8] - add r2, r1, #0 - mov r3, #0 - bl FUN_020179E0 - ldr r2, [r4, #0x60] - mov r0, #0x80 - ldrb r1, [r2, #0x13] - bic r1, r0 - strb r1, [r2, #0x13] -_021E825A: - add sp, #0x10 - pop {r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E8260 -MOD05_021E8260: ; 0x021E8260 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - mov r1, #3 - bl FUN_02017B54 - cmp r0, #0 - bne _021E8274 - mov r0, #1 - pop {r4, pc} -_021E8274: - mov r1, #0x2f - mvn r1, r1 - cmp r0, r1 - ble _021E8280 - cmp r0, #0 - blt _021E828E -_021E8280: - mov r1, #3 - add r3, r1, #0 - ldr r0, [r4, #8] - add r2, r1, #0 - sub r3, #0x33 - bl FUN_020179E0 -_021E828E: - ldr r0, [r4, #8] - mov r1, #3 - mov r2, #4 - mov r3, #0x10 - bl FUN_020179E0 - mov r0, #0 - pop {r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E82A0 -MOD05_021E82A0: ; 0x021E82A0 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - ldr r0, [r4, #8] - mov r1, #3 - bl FUN_02017B54 - mov r1, #0x2f - mvn r1, r1 - cmp r0, r1 - bne _021E82EC - mov r0, #0x12 - str r0, [sp] - mov r0, #0x20 - str r0, [sp, #4] - mov r0, #6 - str r0, [sp, #8] - mov r0, #0x10 - str r0, [sp, #0xc] - mov r2, #0 - ldr r0, [r4, #8] - mov r1, #3 - add r3, r2, #0 - bl FUN_02018540 - ldr r0, [r4, #8] - mov r1, #3 - bl FUN_02017CD0 - mov r1, #3 - ldr r0, [r4, #8] - add r2, r1, #0 - mov r3, #0 - bl FUN_020179E0 - add sp, #0x10 - mov r0, #1 - pop {r4, pc} -_021E82EC: - ble _021E82F2 - cmp r0, #0 - blt _021E82FE -_021E82F2: - mov r1, #3 - ldr r0, [r4, #8] - add r2, r1, #0 - mov r3, #0 - bl FUN_020179E0 -_021E82FE: - ldr r0, [r4, #8] - mov r1, #3 - mov r2, #5 - mov r3, #0x10 - bl FUN_020179E0 - mov r0, #0 - add sp, #0x10 - pop {r4, pc} - - thumb_func_start MOD05_021E8310 -MOD05_021E8310: ; 0x021E8310 - push {r3, r4, r5, r6, r7, lr} - ldr r4, [r1, #0xc] - add r5, r0, #0 - add r0, r4, #0 - bl FUN_02034E30 - bl FUN_02034DC0 - add r6, r0, #0 - add r0, r4, #0 - bl Sav2_Pokedex_get - add r7, r0, #0 - ldr r0, [r6] - bl FUN_02034824 - str r0, [r5, #4] - add r0, r7, #0 - bl Pokedex_GetSinnohDexFlag - cmp r0, #0 - beq _021E8344 - add r0, r7, #0 - bl Pokedex_CountSeenMons - b _021E8346 -_021E8344: - mov r0, #0 -_021E8346: - str r0, [r5] - add r0, r4, #0 - bl Sav2_PlayerData_GetProfileAddr - str r0, [r5, #8] - add r0, r4, #0 - bl Sav2_PlayerData_GetIGTAddr - str r0, [r5, #0xc] - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E835C -MOD05_021E835C: ; 0x021E835C - push {r3, r4, r5, lr} - sub sp, #8 - add r4, r1, #0 - ldr r2, [r4, #4] - mov r1, #0 - add r5, r0, #0 - bl BufferLandmarkName - ldr r2, [r4, #8] - add r0, r5, #0 - mov r1, #1 - bl BufferPlayersName - ldr r0, [r4, #8] - bl PlayerProfile_CountBadges - add r2, r0, #0 - mov r0, #0 - str r0, [sp] - mov r3, #1 - str r3, [sp, #4] - add r0, r5, #0 - mov r1, #2 - bl BufferIntegerAsString - ldr r2, [r4] - cmp r2, #0x64 - blt _021E839A - mov r3, #3 - mov r0, #0 - b _021E83A8 -_021E839A: - cmp r2, #0xa - blt _021E83A4 - mov r3, #3 - mov r0, #1 - b _021E83A8 -_021E83A4: - mov r3, #2 - mov r0, #1 -_021E83A8: - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - add r0, r5, #0 - mov r1, #3 - bl BufferIntegerAsString - ldr r0, [r4, #0xc] - bl GetIGTHours - add r2, r0, #0 - cmp r2, #0x64 - blt _021E83C8 - mov r3, #3 - mov r0, #0 - b _021E83D6 -_021E83C8: - cmp r2, #0xa - blt _021E83D2 - mov r3, #3 - mov r0, #1 - b _021E83D6 -_021E83D2: - mov r3, #2 - mov r0, #1 -_021E83D6: - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - add r0, r5, #0 - mov r1, #4 - bl BufferIntegerAsString - ldr r0, [r4, #0xc] - bl GetIGTMinutes - mov r3, #2 - add r2, r0, #0 - str r3, [sp] - mov r0, #1 - str r0, [sp, #4] - add r0, r5, #0 - mov r1, #5 - bl BufferIntegerAsString - add sp, #8 - pop {r3, r4, r5, pc} - - thumb_func_start MOD05_021E8400 -MOD05_021E8400: ; 0x021E8400 - ldr r0, [r0] - cmp r0, #0 - beq _021E840A - mov r0, #0xa - bx lr -_021E840A: - mov r0, #8 - bx lr - .balign 4, 0 - - thumb_func_start MOD05_021E8410 -MOD05_021E8410: ; 0x021E8410 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r5, r0, #0 - mov r0, #0 - mov r1, #1 - bl FUN_02002E4C - add r4, r0, #0 - mov r0, #0 - mov r1, #3 - bl FUN_02002E4C - add r0, r4, r0 - str r0, [sp, #0x14] - mov r4, #0 - ldr r0, [r5, #0x14] - ldr r1, [r5, #0x18] - ldr r3, [r5, #4] - add r2, r4, #0 - bl ReadMsgData_ExpandPlaceholders - add r1, r4, #0 - add r6, r0, #0 - str r1, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r1, [sp, #8] - ldr r0, [r5, #0x10] - add r2, r6, #0 - add r3, r1, #0 - bl AddTextPrinterParameterized - add r0, r6, #0 - bl String_dtor - mov r0, #1 - str r0, [sp, #0x10] - ldr r0, _021E84EC ; =UNK05_021F78D4 - ldr r7, _021E84F0 ; =UNK05_021F78C4 - str r0, [sp, #0xc] -_021E8460: - ldr r0, [sp, #0xc] - ldr r1, [r0] - cmp r1, #3 - bne _021E846E - ldr r0, [r5, #0x1c] - cmp r0, #0 - beq _021E84D6 -_021E846E: - ldr r0, [sp, #0x14] - add r4, r4, r0 - ldr r0, [r5, #0x18] - bl NewString_ReadMsgData - add r6, r0, #0 - mov r1, #0 - str r4, [sp] - mov r0, #0xff - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r5, #0x10] - add r2, r6, #0 - add r3, r1, #0 - bl AddTextPrinterParameterized - add r0, r6, #0 - bl String_dtor - sub r2, r7, #4 - ldr r0, [r5, #0x14] - ldr r1, [r5, #0x18] - ldr r2, [r2] - ldr r3, [r5, #4] - bl ReadMsgData_ExpandPlaceholders - add r6, r0, #0 - mov r0, #0 - mov r1, #2 - bl FUN_02002E4C - add r2, r0, #0 - mov r0, #0 - add r1, r6, #0 - bl FUN_02002E14 - mov r1, #0x68 - sub r3, r1, r0 - str r4, [sp] - mov r0, #0xff - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r5, #0x10] - mov r1, #0 - add r2, r6, #0 - bl AddTextPrinterParameterized - add r0, r6, #0 - bl String_dtor -_021E84D6: - ldr r0, [sp, #0xc] - add r7, r7, #4 - add r0, r0, #4 - str r0, [sp, #0xc] - ldr r0, [sp, #0x10] - add r0, r0, #1 - str r0, [sp, #0x10] - cmp r0, #5 - blo _021E8460 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E84EC: .word UNK05_021F78D4 -_021E84F0: .word UNK05_021F78C4 - - thumb_func_start MOD05_021E84F4 -MOD05_021E84F4: ; 0x021E84F4 - push {r3, r4, lr} - sub sp, #0x14 - add r4, r0, #0 - ldr r0, [r4, #4] - mov r1, #0x10 - bl AllocFromHeap - str r0, [r4, #0x10] - mov r3, #1 - str r3, [sp] - ldr r0, [r4, #0x2c] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #4] - ldr r0, [r4, #0x30] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xd - str r0, [sp, #0xc] - ldr r0, _021E8564 ; =0x0000027F - str r0, [sp, #0x10] - ldrb r2, [r4, #8] - ldr r0, [r4, #0xc] - ldr r1, [r4, #0x10] - bl FUN_02019064 - mov r0, #0 - str r0, [sp] - ldr r0, [r4, #4] - ldr r2, _021E8568 ; =0x000003D9 - str r0, [sp, #4] - ldrb r1, [r4, #8] - ldr r0, [r4, #0xc] - mov r3, #0xb - bl FUN_0200CB00 - mov r0, #0 - mov r1, #6 - bl FUN_02002E4C - add r1, r0, #0 - ldr r0, [r4, #0x10] - bl FUN_02019620 - add r0, r4, #0 - bl MOD05_021E8410 - ldr r0, [r4, #0x10] - ldr r2, _021E8568 ; =0x000003D9 - mov r1, #0 - mov r3, #0xb - bl FUN_0200CCA4 - add sp, #0x14 - pop {r3, r4, pc} - .balign 4, 0 -_021E8564: .word 0x0000027F -_021E8568: .word 0x000003D9 - - thumb_func_start MOD05_021E856C -MOD05_021E856C: ; 0x021E856C - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x10] - mov r1, #0 - bl FUN_0200CCF8 - ldr r0, [r4, #0x10] - bl FUN_02019178 - ldr r0, [r4, #0x10] - bl FreeToHeap - pop {r4, pc} - .balign 4, 0 - - thumb_func_start MOD05_021E8588 -MOD05_021E8588: ; 0x021E8588 - push {r3, r4, r5, r6, r7, lr} - add r5, r1, #0 - add r6, r0, #0 - add r0, r5, #0 - mov r1, #0x34 - add r7, r2, #0 - bl AllocFromHeap - add r4, r0, #0 - str r6, [r4] - str r5, [r4, #4] - strb r7, [r4, #8] - ldr r0, [r6, #8] - str r0, [r4, #0xc] - add r0, r5, #0 - bl ScrStrBufs_new - str r0, [r4, #0x14] - ldr r2, _021E85E0 ; =0x000001E3 - mov r0, #1 - mov r1, #0x1a - add r3, r5, #0 - bl NewMsgDataFromNarc - str r0, [r4, #0x18] - add r0, r4, #0 - ldr r1, [r4] - add r0, #0x1c - bl MOD05_021E8310 - add r1, r4, #0 - ldr r0, [r4, #0x14] - add r1, #0x1c - bl MOD05_021E835C - mov r0, #0xd - str r0, [r4, #0x2c] - add r0, r4, #0 - add r0, #0x1c - bl MOD05_021E8400 - str r0, [r4, #0x30] - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_021E85E0: .word 0x000001E3 - - thumb_func_start MOD05_021E85E4 -MOD05_021E85E4: ; 0x021E85E4 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x18] - bl DestroyMsgData - ldr r0, [r4, #0x14] - bl ScrStrBufs_delete - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - - thumb_func_start MOD05_021E85FC -MOD05_021E85FC: ; 0x021E85FC - push {r4, lr} - add r4, r0, #0 - bl FUN_02034E48 - add r0, r4, #0 - mov r1, #4 - mov r2, #0 - bl MOD05_021EFA9C - ldr r0, [r4, #0x38] - bl FUN_02055320 - ldr r1, [r4, #0x1c] - str r0, [r1, #8] - ldr r0, [r4, #0x38] - bl FUN_0205532C - ldr r1, [r4, #0x1c] - str r0, [r1, #0xc] - mov r1, #0 - ldr r0, [r4, #0x1c] - mvn r1, r1 - str r1, [r0, #4] - ldr r0, [r4, #0x38] - bl FUN_020552F8 - ldr r1, [r4, #0x1c] - str r0, [r1, #0x10] - ldr r0, [r4, #0xc] - bl FUN_02022720 - cmp r0, #2 - bne _021E8642 - mov r0, #1 - pop {r4, pc} -_021E8642: - mov r0, #0 - pop {r4, pc} - .balign 4, 0 - thumb_func_start MOD05_021E8648 MOD05_021E8648: ; 0x021E8648 push {r4, r5, r6, lr} @@ -29232,14 +28538,6 @@ _021F6428: .word MOD05_021F57F0 .section .rodata - .global UNK05_021F78C4 -UNK05_021F78C4: ; 0x021F78C4 - .byte 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK05_021F78D4 -UNK05_021F78D4: ; 0x021F78D4 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 - .global UNK05_021F78E4 UNK05_021F78E4: ; 0x021F78E4 .byte 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 From a5e3d1c760ca07f9d9cc7536445c772ebfd6fe17 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 27 Dec 2020 23:10:18 +0000 Subject: [PATCH 45/59] finish kanto starters pokegra and icongra extraction --- files/poketool/icongra/poke_icon/.gitignore | 4 ++ .../poketool/icongra/poke_icon/narc_0013.NCGR | Bin 1072 -> 0 bytes .../poketool/icongra/poke_icon/narc_0013.png | Bin 0 -> 462 bytes .../poketool/icongra/poke_icon/narc_0014.NCGR | Bin 1072 -> 0 bytes .../poketool/icongra/poke_icon/narc_0014.png | Bin 0 -> 344 bytes .../poketool/icongra/poke_icon/narc_0015.NCGR | Bin 1072 -> 0 bytes .../poketool/icongra/poke_icon/narc_0015.png | Bin 0 -> 371 bytes .../poketool/icongra/poke_icon/narc_0016.NCGR | Bin 1072 -> 0 bytes .../poketool/icongra/poke_icon/narc_0016.png | Bin 0 -> 397 bytes files/poketool/pokegra/pokegra/.gitignore | 24 ++++++++ files/poketool/pokegra/pokegra/narc_0036.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0036.png | Bin 0 -> 1031 bytes .../pokegra/pokegra/narc_0036.png.key | 1 + files/poketool/pokegra/pokegra/narc_0037.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0037.png | Bin 0 -> 1031 bytes .../pokegra/pokegra/narc_0037.png.key | 1 + files/poketool/pokegra/pokegra/narc_0038.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0038.png | Bin 0 -> 2048 bytes .../pokegra/pokegra/narc_0038.png.key | 1 + files/poketool/pokegra/pokegra/narc_0039.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0039.png | Bin 0 -> 2048 bytes .../pokegra/pokegra/narc_0039.png.key | 1 + files/poketool/pokegra/pokegra/narc_0040.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0040.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0041.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0041.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0042.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0042.png | Bin 0 -> 734 bytes .../pokegra/pokegra/narc_0042.png.key | 1 + files/poketool/pokegra/pokegra/narc_0043.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0043.png | Bin 0 -> 734 bytes .../pokegra/pokegra/narc_0043.png.key | 1 + files/poketool/pokegra/pokegra/narc_0044.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0044.png | Bin 0 -> 910 bytes .../pokegra/pokegra/narc_0044.png.key | 1 + files/poketool/pokegra/pokegra/narc_0045.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0045.png | Bin 0 -> 910 bytes .../pokegra/pokegra/narc_0045.png.key | 1 + files/poketool/pokegra/pokegra/narc_0046.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0046.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0047.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0047.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0048.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0048.png | Bin 0 -> 982 bytes .../pokegra/pokegra/narc_0048.png.key | 1 + files/poketool/pokegra/pokegra/narc_0049.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0049.png | Bin 0 -> 982 bytes .../pokegra/pokegra/narc_0049.png.key | 1 + files/poketool/pokegra/pokegra/narc_0050.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0050.png | Bin 0 -> 1531 bytes .../pokegra/pokegra/narc_0050.png.key | 1 + files/poketool/pokegra/pokegra/narc_0051.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0051.png | Bin 0 -> 1531 bytes .../pokegra/pokegra/narc_0051.png.key | 1 + files/poketool/pokegra/pokegra/narc_0052.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0052.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0053.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0053.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0054.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0054.png | Bin 0 -> 1022 bytes .../pokegra/pokegra/narc_0054.png.key | 1 + files/poketool/pokegra/pokegra/narc_0055.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0055.png | Bin 0 -> 1022 bytes .../pokegra/pokegra/narc_0055.png.key | 1 + files/poketool/pokegra/pokegra/narc_0056.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0056.png | Bin 0 -> 1988 bytes .../pokegra/pokegra/narc_0056.png.key | 1 + files/poketool/pokegra/pokegra/narc_0057.NCGR | Bin 6448 -> 0 bytes files/poketool/pokegra/pokegra/narc_0057.png | Bin 0 -> 1988 bytes .../pokegra/pokegra/narc_0057.png.key | 1 + files/poketool/pokegra/pokegra/narc_0058.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0058.pal | 19 ++++++ files/poketool/pokegra/pokegra/narc_0059.NCLR | Bin 72 -> 0 bytes files/poketool/pokegra/pokegra/narc_0059.pal | 19 ++++++ filesystem.mk | 28 +++++++++ graphics_rules.mk | 56 ++++++++++++++++++ 76 files changed, 280 insertions(+) delete mode 100644 files/poketool/icongra/poke_icon/narc_0013.NCGR create mode 100644 files/poketool/icongra/poke_icon/narc_0013.png delete mode 100644 files/poketool/icongra/poke_icon/narc_0014.NCGR create mode 100644 files/poketool/icongra/poke_icon/narc_0014.png delete mode 100644 files/poketool/icongra/poke_icon/narc_0015.NCGR create mode 100644 files/poketool/icongra/poke_icon/narc_0015.png delete mode 100644 files/poketool/icongra/poke_icon/narc_0016.NCGR create mode 100644 files/poketool/icongra/poke_icon/narc_0016.png delete mode 100644 files/poketool/pokegra/pokegra/narc_0036.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0036.png create mode 100644 files/poketool/pokegra/pokegra/narc_0036.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0037.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0037.png create mode 100644 files/poketool/pokegra/pokegra/narc_0037.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0038.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0038.png create mode 100644 files/poketool/pokegra/pokegra/narc_0038.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0039.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0039.png create mode 100644 files/poketool/pokegra/pokegra/narc_0039.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0040.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0040.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0041.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0041.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0042.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0042.png create mode 100644 files/poketool/pokegra/pokegra/narc_0042.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0043.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0043.png create mode 100644 files/poketool/pokegra/pokegra/narc_0043.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0044.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0044.png create mode 100644 files/poketool/pokegra/pokegra/narc_0044.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0045.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0045.png create mode 100644 files/poketool/pokegra/pokegra/narc_0045.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0046.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0046.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0047.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0047.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0048.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0048.png create mode 100644 files/poketool/pokegra/pokegra/narc_0048.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0049.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0049.png create mode 100644 files/poketool/pokegra/pokegra/narc_0049.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0050.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0050.png create mode 100644 files/poketool/pokegra/pokegra/narc_0050.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0051.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0051.png create mode 100644 files/poketool/pokegra/pokegra/narc_0051.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0052.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0052.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0053.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0053.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0054.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0054.png create mode 100644 files/poketool/pokegra/pokegra/narc_0054.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0055.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0055.png create mode 100644 files/poketool/pokegra/pokegra/narc_0055.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0056.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0056.png create mode 100644 files/poketool/pokegra/pokegra/narc_0056.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0057.NCGR create mode 100644 files/poketool/pokegra/pokegra/narc_0057.png create mode 100644 files/poketool/pokegra/pokegra/narc_0057.png.key delete mode 100644 files/poketool/pokegra/pokegra/narc_0058.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0058.pal delete mode 100644 files/poketool/pokegra/pokegra/narc_0059.NCLR create mode 100644 files/poketool/pokegra/pokegra/narc_0059.pal diff --git a/files/poketool/icongra/poke_icon/.gitignore b/files/poketool/icongra/poke_icon/.gitignore index c51d63330..ce0121131 100644 --- a/files/poketool/icongra/poke_icon/.gitignore +++ b/files/poketool/icongra/poke_icon/.gitignore @@ -5,4 +5,8 @@ narc_0009.NCGR narc_0010.NCGR narc_0011.NCGR narc_0012.NCGR +narc_0013.NCGR +narc_0014.NCGR +narc_0015.NCGR +narc_0016.NCGR narc_0402.NCGR diff --git a/files/poketool/icongra/poke_icon/narc_0013.NCGR b/files/poketool/icongra/poke_icon/narc_0013.NCGR deleted file mode 100644 index 2e4e896e348b4657ca4913e7f9922d9cf276597b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmd6lv2NQi5QfiaXR%|(JVK|835pEO8|jW&S-)aL6i z*+Gre*>k`zo_I&{$ornZKd$|_T7CU2@6m)xcSTaY-hMMyn_aK5Q^5bU^+XO*Bi4RqxgOPNk zq7>tvXK6PTgBOeN721I6BU6}vfA^XTu3E&S zK=F4G-H&V+9Q#bpT*`E20u22g@bO>h?9d8V>4&h zIUr{P0gy8XP7Xj0I;{?Jph(eMHv;G6P3iqUF)-PLhg8FWz|=sJ8sZa_V}+7|0~t6F jxf5saaj*@;$g+9Q>;115wQeicez@L$GIq(p+y4IrwQUMm diff --git a/files/poketool/icongra/poke_icon/narc_0013.png b/files/poketool/icongra/poke_icon/narc_0013.png new file mode 100644 index 0000000000000000000000000000000000000000..3c64196819b671a4a7a81cff3e202386a49e0ccf GIT binary patch literal 462 zcmV;<0WtoGP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUI?rcD00001 zbW%=J06^y0W&i*IOi4sRR5*>@lEG@jFbqKT1@_wO{(+(8Q$ z&c~VS85>xZ^Bi}ev0X)r&zB#-EhqRlq581(HiQQvHmlJ6@NMyeJA=Ufg_q%Y+JH{s zqF#3fIV@4LYr-^xOc-X`8)U-Nq1Kl)gA_@u5zL!G$o!fFS7Blm$S|RtR)fsqkw=s} zYz7Hl3pLOUa)HQ+{R%#Q=D!gPbeS?|0v=y(120*j;s0=5HXRsaA107*qoM6N<$ Ef{E?V)&Kwi literal 0 HcmV?d00001 diff --git a/files/poketool/icongra/poke_icon/narc_0014.NCGR b/files/poketool/icongra/poke_icon/narc_0014.NCGR deleted file mode 100644 index 23175ce89a650ba77dc2e5653ced3fddc56c8c47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmdUtu}%Xq42FFwbJMXSPk?v;B!t=urW-0cBf-Fk1XBBgh{=$RDd9S?QL>QfQuCYM zN%Tr90ZVJ?SDe_66ZspS_HvnL+2I~hhcX(Tob~qM3#>(YRvFH^wZENfz_V0K7Q~R{ zWSBWYx+Jscld$K`|f<+B&>#fosa_+Sbn z8OO(TdtIcvNg>CRX!t6UgA(+9`TEr-;o?OrIKQ=*d_>b(jGf;D;>z_E7 Tp9|*S#~Xi~zcSYU$NWD5Jh-mB diff --git a/files/poketool/icongra/poke_icon/narc_0014.png b/files/poketool/icongra/poke_icon/narc_0014.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4b4616a93d80302675dec0f71134f38b1986f7 GIT binary patch literal 344 zcmV-e0jK_nP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUI?rcD00001 zbW%=J06^y0W&i*H)=5M`R5*?8l0OQ+S`eHZ#NUvFk4N6)@gekM!KSfSciJcr?HdF01pt;P;7tUKG>U2m9xb3N zauB{k!CukvP7C4w(7@JwTI$dRbGG5Pl7z0vaBg5i;$X@cpeexjC5RLtT$tx*n}ADQ zEKXGdGFi`i03msn{S9RNIM|7-&_C~jqbglGVWL4!n7%<)m|&0-CK?ok@fBW}V2~F^ qgyv3|ILrsaTxSDeGMVRJ_2UIrVyD4bFp#ML00001p=5FC-zR?3ulK?t~WBZBTosu(P7lOlq+@jIMGoohA8*HoC0N;$A3oF}v0BXVJ{$A%3#IL2!2oTp_^Z{xQB`Z5bDEy-l!p?d$W(hU<8Y{c6Sn z(J(~P0I{_u)hZIH6Mycr4T0ebkPwE5e7~Q&JDk%HjEr>8gb*pe9jE7qDV$FbqX`0`nF@cSlCIEc9wE;;b9Qw+KA7v!@I} z?`0Io&_xKK7-*I-E=)Ozmm&o^6xGHD{x1#>;7>i28HoAee!+MExnZ~z!F+XvSUQS) z0L=Xej?C5!AbJJ;7w`i(+A;CQp5*ftjU79XITAf>gh@f^cSO%k@3_-a+69VDT{;Cg zB!r8at8|zZYg|!RT{>0TE!(1=W`I*G=f(OuXVpjh@_w@bAvF6tFrev+lyWlwp@V<& zelEVR~0~+W9NOWOHF4%!PsMdtn~%;{wXSnnt-D RPmcfq002ovPDHLkV1g&*o{9hf literal 0 HcmV?d00001 diff --git a/files/poketool/icongra/poke_icon/narc_0016.NCGR b/files/poketool/icongra/poke_icon/narc_0016.NCGR deleted file mode 100644 index a65abf8d1bb8d22d91e13ca987c97f11c783ff89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmdT?Jx{|h5WNcK8ZohfT!}SE-HA|b(W#Nz-oR3eB4y2=U?@vFA;H97i$v$ha!izo z<1Eq&=m&G3^yKsToXh#W;cag~pRLx_F~AA5V0hE-U2sf{BM7+$oI6{^hp<|~LpXp~ z64{5;P?{P|)!$ziKv0nsX-qEbh713~az(;402UjLc>l(QR*ayK6jL>^0*kd#HK+XEkw&`!i To<`azQ%-c9jMYBvL diff --git a/files/poketool/icongra/poke_icon/narc_0016.png b/files/poketool/icongra/poke_icon/narc_0016.png new file mode 100644 index 0000000000000000000000000000000000000000..253d4f8da3e46b5803c815b8a052f40435438761 GIT binary patch literal 397 zcmV;80doF{P)DV$@lCe(1Fc60Q1og&_hpv%Y%19PhV#3Saz=Xu$H7~&s zCQp^%?J5CMr>G=$RHmcEq~~~r1#a`F`%h>46XI``+-HD_40MY2f|3S#X)98k3uLYB zl3W0)`XvL2sC~cSh(`q7-xt*>f#8igKdU%lF7!LKmS_Y752VdJm$`ry32yw5&rErsQB0CIy2q>UV@Wfl-(^B@reXGzfDj@J`W~ISNyU rwV4RxRuCqB)S=A$aDJV1{LGI}$9Jc09+F|h00000NkvXXu0mjfOZBs8 literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/.gitignore b/files/poketool/pokegra/pokegra/.gitignore index 0d0e68a88..2db06bd5f 100644 --- a/files/poketool/pokegra/pokegra/.gitignore +++ b/files/poketool/pokegra/pokegra/.gitignore @@ -28,6 +28,30 @@ narc_0032.NCGR narc_0033.NCGR narc_0034.NCLR narc_0035.NCLR +narc_0036.NCGR +narc_0037.NCGR +narc_0038.NCGR +narc_0039.NCGR +narc_0040.NCLR +narc_0041.NCLR +narc_0042.NCGR +narc_0043.NCGR +narc_0044.NCGR +narc_0045.NCGR +narc_0046.NCLR +narc_0047.NCLR +narc_0048.NCGR +narc_0049.NCGR +narc_0050.NCGR +narc_0051.NCGR +narc_0052.NCLR +narc_0053.NCLR +narc_0054.NCGR +narc_0055.NCGR +narc_0056.NCGR +narc_0057.NCGR +narc_0058.NCLR +narc_0059.NCLR narc_2370.NCGR narc_2371.NCGR narc_2372.NCGR diff --git a/files/poketool/pokegra/pokegra/narc_0036.NCGR b/files/poketool/pokegra/pokegra/narc_0036.NCGR deleted file mode 100644 index bb9466f2c0c015cf47edd5d62ee023f700ad1499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 KlB=s26&bw9ZH-F+ diff --git a/files/poketool/pokegra/pokegra/narc_0036.png b/files/poketool/pokegra/pokegra/narc_0036.png new file mode 100644 index 0000000000000000000000000000000000000000..1651dd8767fa873aa322db4020f4a3541eab1f15 GIT binary patch literal 1031 zcmV+i1o-=jP)002+~0{{R3Y;$7=0000mP)t-sgT0gh z00960|IN+KVq#+M-h1w}TJD1>%~C;wF&H46#UOK(2tiW+)e!ci5avM;*`UpY00001 zbW%=J06^y0W&i*Kg-Jv~R9J<@n7wWkF%ZXhC5pH^6Qtd%5LC2*7l1&;gIww~u~Tlf zW9f=4px72jJOeci)Z}II1jqPmKa#t`<3o&;J6)vv=|A%y&-k{g{zEW(WZhNe3=sttWvu)rSJoiJ$gt;$a1!yeI$~H>V=cdV!pupA`T#PSVI* zdx69A`_nUe8JQHTz*9W5VYl1uIC<1mAmPS1e}|wi0Pnw$kFu7kGEQEbJW&YTJ)_#f z1h#Pt!^8vlj==L5#FYX9+qmW{9@X(Ud)`Z;En0?iRtI1s#sf_Q`ix!J1Wc(DZPqd> zi554|#?+|-r3&9{=fHte=a)_y&w&F`T@aXR6^C^XoU9I`5y?yzfSo8B)-?)@C1j9* z1;dp&fpMKPSq@}=B>WB^PDUVo%(Q-FMWBvANncR4yB)!nFMtM%N(DB4MsH&Yr!I!W%Ap&*uM7e)jLn&i32cE=hlJ!8ND81M?go3Xg81lywI-n)(6XugN@aN8b zijJc;8E>80y;yq$0#`v`@B|R3LPHh-b)bvT%h&O7Z#ne%sAJTrUwr^WJxx#bs0+s?D&3x z`3hASh>aNb3e4;qROqKYUXFwu+C2jETyeKc<4tbd=o;F`0`q|GH;F4_2ing<{#anT zh-Lus&vgC))pE{ITuDIOazY&7QGf~yIX<^|6giKHlR{|wgS;$P9L(ow4&w5Goq0G@ zAB4(S_8tiP&c{45T=^%!1XX*Qx(GO*+GOCd<1bf+v;+p?N)iA7002ovPDHLkV1oPp B$(H~C literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0036.png.key b/files/poketool/pokegra/pokegra/narc_0036.png.key new file mode 100644 index 000000000..b52d8e8a9 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0036.png.key @@ -0,0 +1 @@ +™Òè) \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0037.NCGR b/files/poketool/pokegra/pokegra/narc_0037.NCGR deleted file mode 100644 index bb9466f2c0c015cf47edd5d62ee023f700ad1499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 KlB=s26&bw9ZH-F+ diff --git a/files/poketool/pokegra/pokegra/narc_0037.png b/files/poketool/pokegra/pokegra/narc_0037.png new file mode 100644 index 0000000000000000000000000000000000000000..1651dd8767fa873aa322db4020f4a3541eab1f15 GIT binary patch literal 1031 zcmV+i1o-=jP)002+~0{{R3Y;$7=0000mP)t-sgT0gh z00960|IN+KVq#+M-h1w}TJD1>%~C;wF&H46#UOK(2tiW+)e!ci5avM;*`UpY00001 zbW%=J06^y0W&i*Kg-Jv~R9J<@n7wWkF%ZXhC5pH^6Qtd%5LC2*7l1&;gIww~u~Tlf zW9f=4px72jJOeci)Z}II1jqPmKa#t`<3o&;J6)vv=|A%y&-k{g{zEW(WZhNe3=sttWvu)rSJoiJ$gt;$a1!yeI$~H>V=cdV!pupA`T#PSVI* zdx69A`_nUe8JQHTz*9W5VYl1uIC<1mAmPS1e}|wi0Pnw$kFu7kGEQEbJW&YTJ)_#f z1h#Pt!^8vlj==L5#FYX9+qmW{9@X(Ud)`Z;En0?iRtI1s#sf_Q`ix!J1Wc(DZPqd> zi554|#?+|-r3&9{=fHte=a)_y&w&F`T@aXR6^C^XoU9I`5y?yzfSo8B)-?)@C1j9* z1;dp&fpMKPSq@}=B>WB^PDUVo%(Q-FMWBvANncR4yB)!nFMtM%N(DB4MsH&Yr!I!W%Ap&*uM7e)jLn&i32cE=hlJ!8ND81M?go3Xg81lywI-n)(6XugN@aN8b zijJc;8E>80y;yq$0#`v`@B|R3LPHh-b)bvT%h&O7Z#ne%sAJTrUwr^WJxx#bs0+s?D&3x z`3hASh>aNb3e4;qROqKYUXFwu+C2jETyeKc<4tbd=o;F`0`q|GH;F4_2ing<{#anT zh-Lus&vgC))pE{ITuDIOazY&7QGf~yIX<^|6giKHlR{|wgS;$P9L(ow4&w5Goq0G@ zAB4(S_8tiP&c{45T=^%!1XX*Qx(GO*+GOCd<1bf+v;+p?N)iA7002ovPDHLkV1oPp B$(H~C literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0037.png.key b/files/poketool/pokegra/pokegra/narc_0037.png.key new file mode 100644 index 000000000..b52d8e8a9 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0037.png.key @@ -0,0 +1 @@ +™Òè) \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0038.NCGR b/files/poketool/pokegra/pokegra/narc_0038.NCGR deleted file mode 100644 index c9146e9fe9cb195c04075b9165df9c82b74cba02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 KxV`!^&09R|P=vw& diff --git a/files/poketool/pokegra/pokegra/narc_0038.png b/files/poketool/pokegra/pokegra/narc_0038.png new file mode 100644 index 0000000000000000000000000000000000000000..08d8504c511c3dd67011dd9a1d9c32624eebb0c7 GIT binary patch literal 2048 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 KxV`!^&09R|P=vw& diff --git a/files/poketool/pokegra/pokegra/narc_0039.png b/files/poketool/pokegra/pokegra/narc_0039.png new file mode 100644 index 0000000000000000000000000000000000000000..08d8504c511c3dd67011dd9a1d9c32624eebb0c7 GIT binary patch literal 2048 zcmV+b2>002+~0{{R3Y;$7=0000mP)t-sgT0gh z00960|IN+KVq#+M-h1w}TJD1>%~C;wF&H46#UOK(2tiW+)e!ci5avM;*`UpY00001 zbW%=J06^y0W&i*Oen~_@R9J-661}dw8z^WRktcDs71rE(*bTibNjfTnYs)59z5#C>2-(uGK zG2x)nXwWT}H=y-r^T&V~;^<*#q>QeYR|J%gINxK4)x*vT{#e~Du`gbh95G+(el=3= zDkx3$uyc{H(cRs$!oG|}tP3HMULrU{gfL;F2b}fX7XZAzzO3#67z%U6M;n~0tGgR4 z<0faI6(VP&C6w?Qb4HlfO2pliwASFvDpW#KHaPnQzDYf~td>x30P;y$mP&{=(HANe zxj(P2q1Z;)=S(~Rvb*c$5`nCU0C#+Ra(*~FYC8jPUPKiZ`(~4~FCrci5JH3)5ja5} z5@!c3=R~GLi}cz8`<;uQ;mr_%V0?LXYk>b86ETZh&f9V<3bC_#lBot{mypRU3fH0?WS*FsEQZXN$e64G70Hv5S%0y{@w=T_96(j@TX`IG>qC zOZblMUXQac%ktt60wxBS&zT>WjjpVVt?B?_E7Bd)y&h)-s+6FKc@4yn%0RlZw6#Iu zSiJo)fxbwYn(p;DV+j!mJ0t@WqRdr4@Jz(B_!~SAWJXiQ)}1}fSf=HLNP%lZOl9fl zY_YL~N{aLa0Y!xG`s>c#I|K%00mZnGoE9QAz9yBjG_^tJGR(zapJ7*|5aHau*><)- zSo^2&QS31D#zs~HO>IzEdMejhyeP1a(VTfb&Zx8d34f6|gk#A5#5&VYsx1mnnL<)1 zBRE0hpw}6Lru_`q)AEdOoG{DbVv1 z5*(i}HmQNoWIEd8P|C>#g8Q9Sy`LVZyA3DcKM*badkP?{Lm>gVl$?Ty`knoEc0YM$ z?q3`Wb8>Pn`2>L=tbvqqBy(;~ojB}u_EWo`QrbIWh-E&-aV+N!(0>;cqJV_AvD)Y! zlJhC+I5+z#O^5<-J0&aulqzon$FX=5!t?_W-P6*<2Enlwu-;D##C^vUBwRQLR>xG} z3CR)2$_1svA=?}uz$OmRTkYo}G|Y&T07AsMY=B|FJm?73DMw%e-se(k`%GtrUbCN? zdD}!Ra0^x;PAu>VzQ=JpwIX0fm50kbEY;4xl@GzTnY8K2Ika^7B8>!$OQZnsX9dK zO#4|?VY(8EIET*#HfOKH1KsQClw=yq&rOJdb*BAf5MgR&fhrC6Qm+QKpLT(#)UVU2 zCBkCMV4Hxc9Ru9Y0D-|1l})Gn!U{c5_(s_7uzoV0PHUo+3u#J2ZNUro6M!F7z(`mV z!y1^kfjRSjHNbrWhIJ;=_73+m@ZLX5=2p1B0)lhg1}e<#^|T2wPGtkEYvXaI^UrnE z2r0zv0)ZmS8fOcHxtw-^Cg)Xc;Ecw5N-e|?7dV^HuQ+Z2eS9^ZI>L}Rs$CnUBI3A)D?#LSjdIxW8ek|?XOD+&XfoO+qHoS(J;TS9bmMV z#aIZ@N?BoQ3kOJv1n}_Psg24RXRb5Mwn)O1cyCuaN@eT0o z@d-L}9c1-E(yfg-x09}LYt{|WoX559l>%;~W!e#L zt?}Ti6Mji)beTD1v)Nj06m@>9EnMf>vy|65nbjZb*2dfm)2)`UD{6qbA?ncF@ZeMH zwK2lQmMcs*0vQmsp4GZ_UUOUU`0QXMTnCy|=J-ECCKb~4)W$v~z@=f#UWJbWjc~Kh zJPn#>U#&I0lF@@Y6fQRE%mZuCdX;58T^X$VXzyz`b_^trdxS%E?A!0Y`m!yA`%aH= zsE+YZp6&6#6-xQ0M>tdm^WwS9_rhP)7jJg|yKX&_7rQS$-TVJ^j6DmU@AeJsf7LNB e@cK&gi0)sf-z^}+>@r6H0000S0+I|23P3CX#2>sE82;B=ruP`u+TYca W6^m57z>|`6#FJ4oo_ijb3?~2)LJ!&i diff --git a/files/poketool/pokegra/pokegra/narc_0040.pal b/files/poketool/pokegra/pokegra/narc_0040.pal new file mode 100644 index 000000000..d10b3496b --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0040.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 189 148 +0 0 0 +255 255 255 +205 205 205 +98 98 98 +238 222 123 +238 180 90 +238 131 41 +205 82 65 +131 49 24 +32 156 197 +32 115 148 +8 65 82 +255 213 16 +246 164 16 +230 65 16 diff --git a/files/poketool/pokegra/pokegra/narc_0041.NCLR b/files/poketool/pokegra/pokegra/narc_0041.NCLR deleted file mode 100644 index 0d402b94da7353d92db5d5c487cc96fb3c862e92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 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 KyHn<1ae+KYaAdCl diff --git a/files/poketool/pokegra/pokegra/narc_0042.png b/files/poketool/pokegra/pokegra/narc_0042.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa3f5fe8945460c5cce2da0c0db6916937f3a8d GIT binary patch literal 734 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 KyHn<1ae+KYaAdCl diff --git a/files/poketool/pokegra/pokegra/narc_0043.png b/files/poketool/pokegra/pokegra/narc_0043.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa3f5fe8945460c5cce2da0c0db6916937f3a8d GIT binary patch literal 734 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 KVqur&C0}>@cY^}} diff --git a/files/poketool/pokegra/pokegra/narc_0044.png b/files/poketool/pokegra/pokegra/narc_0044.png new file mode 100644 index 0000000000000000000000000000000000000000..e2cc9cfee1f4edf06fb7b1dc6a8fddfef3b914c9 GIT binary patch literal 910 zcmV;919AL`P)002+~0{{R3Y;$7=0000mP)t-s&CRU; z|Nqs^&DE4ry=nkrDFFZGod4Bo=B!%Hdntn{0JQe*l-12ztein}Vh|7zvBWBI00001 zbW%=J06^y0W&i*K3`s;mR9J=Wmcee*KoExg0Kk-CcUQY*nwl~wWF#?ZHcqYI)D(WcMa;%|1HX|Z)SF9W^EX? zYSpS$tJXiM0nzkEd7t+WM%9P_X$2SZ2pLu4?e7yk(L@(&s^>Kdr`DLr1S_R@S~#`F z1Wl|8(EL=CqD#?47^Og{#)nRX(F(wK=!u&QW;!63r2r$52DpMgamMw)6Pe-J8jUr; zp#<(#0Di&48H;MpQtyT9ON;_8@X5` z>WWi3@w{%xbyLq}F9>nrB}948CZRzPZn<2y!Av}u!1KaBqpAxuF`nPqY&#s+i27kk zVbbje&Ni04fxk))2os#xu5CMg0LIlVD=yoC?Q}Stw~VxGe`5X<`-yG4-s3z{U!Gz3 z?M=Jgc_CI?aw}gy2?>ub?M>Sb+~;?NQ1c8Qoo&y1wA$jOZ;Kht!l%C7ah|2khq_@Y zfIA3W2R2IR_4cXZcSA39Sav2hG{9wO@4@OffMiqxG*aL8ZTAfk<8vKw8QOh$rv(us zCCy`!9a%_kL}8q!Tn&_=cidOab%;y1Sdtt%TL{bm7nAzarBQ_L_M)!}pfw&JhN0(e zBQ3{PRE-}iLU-{Uy)VtzS3HN91USn5C9tf!iUdg!x`#6@mqbaA;a}_+m&0ya02hjR z#syY{Mqpmb!|jTkK^TUD#~iaw%D+f(fyvMkn2GY1&ErfM0~``DTL3R@1{oX26hrSa z_4=~@0OYyyHI@HjXs&RqH?W1MQ%DFF}{+rT_o{07*qoM6N<$f;{1;I{*Lx literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0044.png.key b/files/poketool/pokegra/pokegra/narc_0044.png.key new file mode 100644 index 000000000..68e9e799f --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0044.png.key @@ -0,0 +1 @@ +ßÐã \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0045.NCGR b/files/poketool/pokegra/pokegra/narc_0045.NCGR deleted file mode 100644 index 161bc36111ab086cf359483ed095211549e05d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 KVqur&C0}>@cY^}} diff --git a/files/poketool/pokegra/pokegra/narc_0045.png b/files/poketool/pokegra/pokegra/narc_0045.png new file mode 100644 index 0000000000000000000000000000000000000000..e2cc9cfee1f4edf06fb7b1dc6a8fddfef3b914c9 GIT binary patch literal 910 zcmV;919AL`P)002+~0{{R3Y;$7=0000mP)t-s&CRU; z|Nqs^&DE4ry=nkrDFFZGod4Bo=B!%Hdntn{0JQe*l-12ztein}Vh|7zvBWBI00001 zbW%=J06^y0W&i*K3`s;mR9J=Wmcee*KoExg0Kk-CcUQY*nwl~wWF#?ZHcqYI)D(WcMa;%|1HX|Z)SF9W^EX? zYSpS$tJXiM0nzkEd7t+WM%9P_X$2SZ2pLu4?e7yk(L@(&s^>Kdr`DLr1S_R@S~#`F z1Wl|8(EL=CqD#?47^Og{#)nRX(F(wK=!u&QW;!63r2r$52DpMgamMw)6Pe-J8jUr; zp#<(#0Di&48H;MpQtyT9ON;_8@X5` z>WWi3@w{%xbyLq}F9>nrB}948CZRzPZn<2y!Av}u!1KaBqpAxuF`nPqY&#s+i27kk zVbbje&Ni04fxk))2os#xu5CMg0LIlVD=yoC?Q}Stw~VxGe`5X<`-yG4-s3z{U!Gz3 z?M=Jgc_CI?aw}gy2?>ub?M>Sb+~;?NQ1c8Qoo&y1wA$jOZ;Kht!l%C7ah|2khq_@Y zfIA3W2R2IR_4cXZcSA39Sav2hG{9wO@4@OffMiqxG*aL8ZTAfk<8vKw8QOh$rv(us zCCy`!9a%_kL}8q!Tn&_=cidOab%;y1Sdtt%TL{bm7nAzarBQ_L_M)!}pfw&JhN0(e zBQ3{PRE-}iLU-{Uy)VtzS3HN91USn5C9tf!iUdg!x`#6@mqbaA;a}_+m&0ya02hjR z#syY{Mqpmb!|jTkK^TUD#~iaw%D+f(fyvMkn2GY1&ErfM0~``DTL3R@1{oX26hrSa z_4=~@0OYyyHI@HjXs&RqH?W1MQ%DFF}{+rT_o{07*qoM6N<$f;{1;I{*Lx literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0045.png.key b/files/poketool/pokegra/pokegra/narc_0045.png.key new file mode 100644 index 000000000..68e9e799f --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0045.png.key @@ -0,0 +1 @@ +ßÐã \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0046.NCLR b/files/poketool/pokegra/pokegra/narc_0046.NCLR deleted file mode 100644 index 544d175e940007cffd64b8627264b753bc78b4ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmWIYarXQFkAcyHfq_AQfsr93#3#T4$Yx>S0+I|23P3CX#FpXz>#fqGw6-&@VVLh9 XZ@x$Gr|1TTYvn=dtNl(GI&lC1B%KmQ diff --git a/files/poketool/pokegra/pokegra/narc_0046.pal b/files/poketool/pokegra/pokegra/narc_0046.pal new file mode 100644 index 000000000..051fc4a20 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0046.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 205 205 +213 148 82 +189 106 0 +98 41 0 +255 230 156 +255 213 106 +230 172 90 +205 123 41 +131 41 0 +180 246 238 +148 213 205 +90 172 156 +65 115 98 +16 16 16 diff --git a/files/poketool/pokegra/pokegra/narc_0047.NCLR b/files/poketool/pokegra/pokegra/narc_0047.NCLR deleted file mode 100644 index bf1924a29deb558cee9b1e5e78cd3e7b1c111e2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmWIYarXQFkAcyHfq_AQfsr93#3#T4$Yx>S0+I|23P3CX#FpXz>#fp@?N^H>ao+cy WZ~RBgQs@K2oqDtS{-O>?Ck_B8?GjG_ diff --git a/files/poketool/pokegra/pokegra/narc_0047.pal b/files/poketool/pokegra/pokegra/narc_0047.pal new file mode 100644 index 000000000..392cf6ede --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0047.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 205 205 +156 222 123 +90 172 41 +16 90 16 +255 246 148 +255 230 98 +230 189 82 +205 139 32 +131 57 0 +230 246 255 +180 205 255 +123 164 230 +65 98 131 +16 16 16 diff --git a/files/poketool/pokegra/pokegra/narc_0048.NCGR b/files/poketool/pokegra/pokegra/narc_0048.NCGR deleted file mode 100644 index 1b5aa7f47422b09ed178e5f942ef90456b40747b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 Ef&z-bX#fBK literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0048.png.key b/files/poketool/pokegra/pokegra/narc_0048.png.key new file mode 100644 index 000000000..290d2bda9 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0048.png.key @@ -0,0 +1 @@ +Íaõ® \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0049.NCGR b/files/poketool/pokegra/pokegra/narc_0049.NCGR deleted file mode 100644 index 1b5aa7f47422b09ed178e5f942ef90456b40747b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 Ef&z-bX#fBK literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0049.png.key b/files/poketool/pokegra/pokegra/narc_0049.png.key new file mode 100644 index 000000000..290d2bda9 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0049.png.key @@ -0,0 +1 @@ +Íaõ® \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0050.NCGR b/files/poketool/pokegra/pokegra/narc_0050.NCGR deleted file mode 100644 index b277cef706bc9872d3aa8aa2ad6f9cea7a95d2bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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

(d{_bgqrsM&YY-%8`sofc&Rn`h%`=etLiXz7g zDELNs30^U`CDcDfEZQ%lVDKVQdY1mrgtEe&L4CHfpf!r+)HBM|rS}pBkV<6J;NZmp z69&xxVLTvBEdnmKH3hNR`aX;optPr@$GV&Y_0Y_*A9h_YlPsA1&T>kdX2>Op;jSM? zo21cIqbk|Va~!|7h>2O-?9h;zU7pjml@NLT~MXD2B&> z8@$iW>Vh-t30MSK;J%lasWj&$RXXs4W>6F{)%JL=?5t;fEb^@zD3>7Ax*$u(L?kiQ z(5g(cu0WsR^=9th5u76}qGGH|S~%Ld;hsYGvlJhN02;01iZG6miqsqXb8#43GTp$`Q*Tr$7<$tmjJV&048jo?p%BAfFjNd>j>zkxS`0m zxYRyH$J$n-!|*XtWtO$iw@mAu`jTKff#`-Qlg<<8OT=LHdP>XFgWwbaJ_f`8)I5Jp zr~-FuE7-f)#Xh4Kv$Q6q;<`fv*wCawb#|05Ml3h|iEB!WH?5=i4?xc`a{wlyT zz`zD!OXewG3mg-zpW-jeySULg2Of@h{gj>s&YD1DJg^lJfL4Q#Bn%T>=~B}Bp{TOy z6^`kr;Dk`MQ3}PAOrVItD8`__k^D9dXTta^oS1i+82*UYmvp9OiF!@L@Q`0|MK*%( zQtW=c7&4<;{-V)~%y_N&`QDQ^f>b`m z6k2K{^>8`S+7^*d(ad@s7!riL0%#to*iQdvwM2k*Xv+RmRbV`UQ-;2Oj=V0-WrDiv zOjvVStG=$6yfkJda5|TRNl>FPK=!Y%pR5Lb=kjzLt4OQ~axS9Bmn87jE2=ZI(LiqD zpk`&?1e^jbono^~9XQFkES}l-Mid@}n;O*P?J%8@b=KYwzKkN>hSGI=qbSO0+YVJH z$^`H=zlwMho**zmzD68B%Y0^yq(Z!_Js7VUetr~JA@pVCmiiz=;t(hCdbS;JENsp_ z_OgcC>j-$s6z&&?Oyqx+B5KWZx&VTqt0v>0;apnndm_~fuJ|N*pI%?LOVm9@V%mM9 zCh$N}P?l`Z>P!lqHIk=0gy^*?9?t6L9>kyZRZ23`Cg5WMX$HFgM?Bt5BLe zkUqK>#)iI`7GA`L~_`hY{-L&_pZ%HL8MPrSt_S9@1WPgQ^uFS1pJi^;=+F`-Ljn#hN>E~^gun~OJ>~P_nhG^ Km}0t1;5fK~c!rYz diff --git a/files/poketool/pokegra/pokegra/narc_0050.png b/files/poketool/pokegra/pokegra/narc_0050.png new file mode 100644 index 0000000000000000000000000000000000000000..98fee5cd166182f05ce8ad46b2d9b88800b6eb08 GIT binary patch literal 1531 zcmV002+~0{{R3Y;$7=0000mP)t-sw6wJU z|NrLh=Ec?C#W4WQgCLY*Vrohl-o=Z(i#dy0AjQ4^l#A|SYQ;f8dk_#1^#{i(00001 zbW%=J06^y0W&i*Mc}YY;R9J=WmO)P&M-<1mmqv=rTC=G10&P8(asnbe61k9YiPTSE zbF3=l;X-9O2>Vji$8LJy8q!10q=$Y1IK=iLhm75l94s{++d!rCV6RP46H>)&-F!(wn1VL)qggj1Y^`-bi2wdmhEOgeo+;|px0!Z7xXS(UmF z6$qgrfFbM|6Wc-v$e6|#NAW`06WKlmE{v{87<-;>?;wzdsYxh%UZ6k((vca5vS$oK zq}WZ+_{fYy*)s+aRn``ajTRWn9#e>V_pn`Ici^3^5x_9^MC+o_JZy_b7u0@wJ};C# zA3)i5vvnaGEyJ`<@J|sDFjI!?F@qI~=5nM+S{PKw?5^d}|dm2t#2uwqW$7g~}#2wzfN9L2M9AD`fWilC?CbJseJ9}gU zcmm2OVr23x(Q!}i-u*l_kxV96IL{bGQX*4&;Hf=QB2Sb)gKP-#-3tBR9QPhc0}v$g zUXkoVl(umP_S9tqdGc8c>qp30zfDJo>_^F@CvkO->=U9NpPoH{LV;MBA|aDv80Z*d zXiRoO0SkG)8Y2fV-&;B$+JhRgB4A_}8$yucP>=0(kXOmxK;9DP`Bg$@S^P*3H2SJ4 z4JEMo1zNaAibHALm?^5kp&Hikg!ec<7gBw$C4r1R^^^)x742H$-0CJ%yA`$E<_+u71^s+FQ0dSpuIyR@vjTJ8COnDwjG1(%DYH z?s5vepPfjp@IwUd`s}`LXU7qUZO9XpmSgeQa5MOT-*09=<_M(48Nc1vA3hjQCpm}F zz*pf$D_L*gNU6r|wpe4FuRu)-eb@@<^jwgIj@UW{ zk{kldl=@>~%+&y>Y61#N6h0^IP3}PC@c{U(2P|3Be!I=5J5ShrCZ&K0nuwS6tA@D) zbMW}SvJgIhOd0%M@Y~&n6=?0&E9CKIXd6~e=vR$446k2R-*kl7o5*E6zkLeZu(GVN z6$LzClr02oVkT^xl_ml=VCWSm3NH8!z_T?maU|B5M?7GRJ!gyhD@95egpZ&JVa#t= z$*YX#x34C+<;pc6!o3W@+bn3^RfFV>{YU|K_8?{D_u1&E#2crUV{AVE4e*{bSI>i4 zhjY-je}Fmvbm!%(BiLkF!qlPj5PoN002ovPDHLkV1iTK*n9v0 literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0050.png.key b/files/poketool/pokegra/pokegra/narc_0050.png.key new file mode 100644 index 000000000..1eed73a42 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0050.png.key @@ -0,0 +1 @@ +¸Œ#Q \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0051.NCGR b/files/poketool/pokegra/pokegra/narc_0051.NCGR deleted file mode 100644 index b277cef706bc9872d3aa8aa2ad6f9cea7a95d2bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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

(d{_bgqrsM&YY-%8`sofc&Rn`h%`=etLiXz7g zDELNs30^U`CDcDfEZQ%lVDKVQdY1mrgtEe&L4CHfpf!r+)HBM|rS}pBkV<6J;NZmp z69&xxVLTvBEdnmKH3hNR`aX;optPr@$GV&Y_0Y_*A9h_YlPsA1&T>kdX2>Op;jSM? zo21cIqbk|Va~!|7h>2O-?9h;zU7pjml@NLT~MXD2B&> z8@$iW>Vh-t30MSK;J%lasWj&$RXXs4W>6F{)%JL=?5t;fEb^@zD3>7Ax*$u(L?kiQ z(5g(cu0WsR^=9th5u76}qGGH|S~%Ld;hsYGvlJhN02;01iZG6miqsqXb8#43GTp$`Q*Tr$7<$tmjJV&048jo?p%BAfFjNd>j>zkxS`0m zxYRyH$J$n-!|*XtWtO$iw@mAu`jTKff#`-Qlg<<8OT=LHdP>XFgWwbaJ_f`8)I5Jp zr~-FuE7-f)#Xh4Kv$Q6q;<`fv*wCawb#|05Ml3h|iEB!WH?5=i4?xc`a{wlyT zz`zD!OXewG3mg-zpW-jeySULg2Of@h{gj>s&YD1DJg^lJfL4Q#Bn%T>=~B}Bp{TOy z6^`kr;Dk`MQ3}PAOrVItD8`__k^D9dXTta^oS1i+82*UYmvp9OiF!@L@Q`0|MK*%( zQtW=c7&4<;{-V)~%y_N&`QDQ^f>b`m z6k2K{^>8`S+7^*d(ad@s7!riL0%#to*iQdvwM2k*Xv+RmRbV`UQ-;2Oj=V0-WrDiv zOjvVStG=$6yfkJda5|TRNl>FPK=!Y%pR5Lb=kjzLt4OQ~axS9Bmn87jE2=ZI(LiqD zpk`&?1e^jbono^~9XQFkES}l-Mid@}n;O*P?J%8@b=KYwzKkN>hSGI=qbSO0+YVJH z$^`H=zlwMho**zmzD68B%Y0^yq(Z!_Js7VUetr~JA@pVCmiiz=;t(hCdbS;JENsp_ z_OgcC>j-$s6z&&?Oyqx+B5KWZx&VTqt0v>0;apnndm_~fuJ|N*pI%?LOVm9@V%mM9 zCh$N}P?l`Z>P!lqHIk=0gy^*?9?t6L9>kyZRZ23`Cg5WMX$HFgM?Bt5BLe zkUqK>#)iI`7GA`L~_`hY{-L&_pZ%HL8MPrSt_S9@1WPgQ^uFS1pJi^;=+F`-Ljn#hN>E~^gun~OJ>~P_nhG^ Km}0t1;5fK~c!rYz diff --git a/files/poketool/pokegra/pokegra/narc_0051.png b/files/poketool/pokegra/pokegra/narc_0051.png new file mode 100644 index 0000000000000000000000000000000000000000..98fee5cd166182f05ce8ad46b2d9b88800b6eb08 GIT binary patch literal 1531 zcmV002+~0{{R3Y;$7=0000mP)t-sw6wJU z|NrLh=Ec?C#W4WQgCLY*Vrohl-o=Z(i#dy0AjQ4^l#A|SYQ;f8dk_#1^#{i(00001 zbW%=J06^y0W&i*Mc}YY;R9J=WmO)P&M-<1mmqv=rTC=G10&P8(asnbe61k9YiPTSE zbF3=l;X-9O2>Vji$8LJy8q!10q=$Y1IK=iLhm75l94s{++d!rCV6RP46H>)&-F!(wn1VL)qggj1Y^`-bi2wdmhEOgeo+;|px0!Z7xXS(UmF z6$qgrfFbM|6Wc-v$e6|#NAW`06WKlmE{v{87<-;>?;wzdsYxh%UZ6k((vca5vS$oK zq}WZ+_{fYy*)s+aRn``ajTRWn9#e>V_pn`Ici^3^5x_9^MC+o_JZy_b7u0@wJ};C# zA3)i5vvnaGEyJ`<@J|sDFjI!?F@qI~=5nM+S{PKw?5^d}|dm2t#2uwqW$7g~}#2wzfN9L2M9AD`fWilC?CbJseJ9}gU zcmm2OVr23x(Q!}i-u*l_kxV96IL{bGQX*4&;Hf=QB2Sb)gKP-#-3tBR9QPhc0}v$g zUXkoVl(umP_S9tqdGc8c>qp30zfDJo>_^F@CvkO->=U9NpPoH{LV;MBA|aDv80Z*d zXiRoO0SkG)8Y2fV-&;B$+JhRgB4A_}8$yucP>=0(kXOmxK;9DP`Bg$@S^P*3H2SJ4 z4JEMo1zNaAibHALm?^5kp&Hikg!ec<7gBw$C4r1R^^^)x742H$-0CJ%yA`$E<_+u71^s+FQ0dSpuIyR@vjTJ8COnDwjG1(%DYH z?s5vepPfjp@IwUd`s}`LXU7qUZO9XpmSgeQa5MOT-*09=<_M(48Nc1vA3hjQCpm}F zz*pf$D_L*gNU6r|wpe4FuRu)-eb@@<^jwgIj@UW{ zk{kldl=@>~%+&y>Y61#N6h0^IP3}PC@c{U(2P|3Be!I=5J5ShrCZ&K0nuwS6tA@D) zbMW}SvJgIhOd0%M@Y~&n6=?0&E9CKIXd6~e=vR$446k2R-*kl7o5*E6zkLeZu(GVN z6$LzClr02oVkT^xl_ml=VCWSm3NH8!z_T?maU|B5M?7GRJ!gyhD@95egpZ&JVa#t= z$*YX#x34C+<;pc6!o3W@+bn3^RfFV>{YU|K_8?{D_u1&E#2crUV{AVE4e*{bSI>i4 zhjY-je}Fmvbm!%(BiLkF!qlPj5PoN002ovPDHLkV1iTK*n9v0 literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0051.png.key b/files/poketool/pokegra/pokegra/narc_0051.png.key new file mode 100644 index 000000000..1eed73a42 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0051.png.key @@ -0,0 +1 @@ +¸Œ#Q \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0052.NCLR b/files/poketool/pokegra/pokegra/narc_0052.NCLR deleted file mode 100644 index 200cb6dab6b0d6c95d94b37a4815cd863c91ac04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmWIYarXQFkAcyHfq_AQfsr93#3#T4$Yx>S0+I|23P3CX#Mh$!*Y7Eg$iKlLDKyDY Wmsi@|T&_^?N1ajGnnVs;Ck_B6co5hC diff --git a/files/poketool/pokegra/pokegra/narc_0052.pal b/files/poketool/pokegra/pokegra/narc_0052.pal new file mode 100644 index 000000000..758092a53 --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0052.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 180 180 +255 255 255 +230 238 230 +197 213 222 +197 49 0 +205 131 32 +148 98 98 +106 74 24 +222 197 139 +189 139 57 +139 90 32 +197 189 255 +148 139 238 +98 106 197 +65 65 123 +16 16 16 diff --git a/files/poketool/pokegra/pokegra/narc_0053.NCLR b/files/poketool/pokegra/pokegra/narc_0053.NCLR deleted file mode 100644 index 3b53b2ea1960a20502d9ed7bf31aeb1cf9de5e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 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 K{7MzmwcySQ%z3N; diff --git a/files/poketool/pokegra/pokegra/narc_0054.png b/files/poketool/pokegra/pokegra/narc_0054.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebe14031a47da60b442d63b09b8b1e47645ea9e GIT binary patch literal 1022 zcmV002+~0{{R3Y;$7=0000mP)t-sL9{sl z00960|IN+Sl$4Z8N=lTh=30x*AY!ZtIb!zJoaV)I)vQX@tV)YwL0UN&-%pAA00001 zbW%=J06^y0W&i*Kd`Uz>R9J=W*FS69P!IrcYw(b%Jt9#Bj79nZ3c=3MQTS=Eumt%U zo#c)pgP&+fLTPwV;=T7UZVb zPt(TxJ+ffx8c=3Tus z2{6G&T!}1~az1MTZfRkS z6YJUiDsR>ZvTHWrgj!JN=UVXd`a9Ol+S*P+XNVxqU8KKHP`kDbf2~oR^F9M^h>MlL z$ymfL?V9=-c)yf9&(s(J*b0<4w1l= zJ|;REu>8UNk_HBZlssW0)R(-zFMsenr>=u~sAm~GJ1PdeL9eXZgPtAc1}rhy6(d+Z z+cp~X4alr`A3UW57ho=i_ScuP+%OZwiV?(`w>rTys5S64jO|5C_Yh+&J@D}hx|L0#2&guVqSMOO?T_#l`g#DO-Tv|!!} z3=~Evf)`8m!kkfS6FAtm0?DJY&7IK8U;WA5!G?b;fld%pY(Vp50O=06dqIJqyt=Yr zt}jMPAJ~hAK$9S*Xzs+fy`AS}S#v!nFbQIc69wi^y^R@e*dPS|flVu-J!k{gd*H=B sIBN$s3F60{Kvl7wz82syj`0%XAMzByca!|N!2kdN07*qoM6N<$f@N3TmjD0& literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0054.png.key b/files/poketool/pokegra/pokegra/narc_0054.png.key new file mode 100644 index 000000000..2a23ccc4f --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0054.png.key @@ -0,0 +1 @@ +`ó,‚ \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0055.NCGR b/files/poketool/pokegra/pokegra/narc_0055.NCGR deleted file mode 100644 index 3811bd02e0ff23a75196f0e60f9885b138b30d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 K{7MzmwcySQ%z3N; diff --git a/files/poketool/pokegra/pokegra/narc_0055.png b/files/poketool/pokegra/pokegra/narc_0055.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebe14031a47da60b442d63b09b8b1e47645ea9e GIT binary patch literal 1022 zcmV002+~0{{R3Y;$7=0000mP)t-sL9{sl z00960|IN+Sl$4Z8N=lTh=30x*AY!ZtIb!zJoaV)I)vQX@tV)YwL0UN&-%pAA00001 zbW%=J06^y0W&i*Kd`Uz>R9J=W*FS69P!IrcYw(b%Jt9#Bj79nZ3c=3MQTS=Eumt%U zo#c)pgP&+fLTPwV;=T7UZVb zPt(TxJ+ffx8c=3Tus z2{6G&T!}1~az1MTZfRkS z6YJUiDsR>ZvTHWrgj!JN=UVXd`a9Ol+S*P+XNVxqU8KKHP`kDbf2~oR^F9M^h>MlL z$ymfL?V9=-c)yf9&(s(J*b0<4w1l= zJ|;REu>8UNk_HBZlssW0)R(-zFMsenr>=u~sAm~GJ1PdeL9eXZgPtAc1}rhy6(d+Z z+cp~X4alr`A3UW57ho=i_ScuP+%OZwiV?(`w>rTys5S64jO|5C_Yh+&J@D}hx|L0#2&guVqSMOO?T_#l`g#DO-Tv|!!} z3=~Evf)`8m!kkfS6FAtm0?DJY&7IK8U;WA5!G?b;fld%pY(Vp50O=06dqIJqyt=Yr zt}jMPAJ~hAK$9S*Xzs+fy`AS}S#v!nFbQIc69wi^y^R@e*dPS|flVu-J!k{gd*H=B sIBN$s3F60{Kvl7wz82syj`0%XAMzByca!|N!2kdN07*qoM6N<$f@N3TmjD0& literal 0 HcmV?d00001 diff --git a/files/poketool/pokegra/pokegra/narc_0055.png.key b/files/poketool/pokegra/pokegra/narc_0055.png.key new file mode 100644 index 000000000..2a23ccc4f --- /dev/null +++ b/files/poketool/pokegra/pokegra/narc_0055.png.key @@ -0,0 +1 @@ +`ó,‚ \ No newline at end of file diff --git a/files/poketool/pokegra/pokegra/narc_0056.NCGR b/files/poketool/pokegra/pokegra/narc_0056.NCGR deleted file mode 100644 index 18e2ee436e3cd1eb14e141bc93c282b85c50afad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6448 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 KfxFXalc@pw)NyeD diff --git a/files/poketool/pokegra/pokegra/narc_0056.png b/files/poketool/pokegra/pokegra/narc_0056.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1aa71bdb74cae19242d42a643fc1051fe6c3fa GIT binary patch literal 1988 zcmV;#2RrzQP)002+~0{{R3Y;$7=0000mP)t-sL9{sl z00960|IN+Sl$4Z8N=lTh=30x*AY!ZtIb!zJoaV)I)vQX@tV)YwL0UN&-%pAA00001 zbW%=J06^y0W&i*OLP5*U(qaldcTM}F?lV1ZO4FmTrJAeP|o{@&qz-fG4d_Wa1-%_~ZAeev-*eoi0Be;2+~Lca9ej1&? z3MpO2*;xk5tkYbZUEp(C=ywZyw2H#!_XR0LyK=z-U*tzG4q<_}HDK@kbcaLf^cT{z zlX`X5-(!1}bf!gP{yAQFJem-QqDLt~;U99;v4oJ1W+r`Zkd0EmwGKi^N`G1k7c7vF z{OIsCT~b1xqZLPp)J$tK>IFS5aaFXcbS&u>q4LQ=Fsm%-O>+$)g-G)mM*3URJb163iNrnDk^g{t<+;IYJFw0T=t zLJ|eNOGtW!?ZFBi>>A`22nX&HLZk@aDszyC675R@dL_j^0i&>q5SmQgRKgk| zjA8Df^-D%@&)>Q*vJqh&(2W9v1wMcS+|p}{IQbL!s<4IBB=dy^Ni(LwS%b8E+AWjC zZuhr}*wEZlm%IQ^B-RcX>1MijxLo_}kFhM)CXV^_`l@;GB_`;U{ z5&7FU=yQpbwx1K|;~R`sa~o$ucSs0XbTuimp(Q3+ZIhMKE6ckeG^MS7G|VgC1cl@j zgYSsLh7e7X&?(4IURQ(!rNy=ffpKVSP+K8kBJWL5$W0Z+roWvb ziDGGn)ns*1=o=w%PCHVHdCw!P=nGBD4$!aum<$y2`y_0t! ziVt?o&y;Zz6;8a3k}i9zZ2K>sZ#?=%WyN|J76Qt$ypK_A@D^<6ski^nu#n`vpLHAt zxI8ufu@6E`*rAJnAX-|7w(dvqOV2wQxRJh;1jEmPFBtofX4te=iIV@?)H6y5c`hGd zd}4)p!#L;r7IUW&xhkXN!rErl;ho)`mi!~zhNJg1R=A)qp8393xl8IK{7C1M=}p`; z-=kX$O3@ugo}K}ll=MaS;Jon1n~7dA6%|gH{^57T?sKt6%R~w77$H31y>#94Lg*ez z_!me172Bm**n00>6`VsE*>fJS3ejG==Y=vdF_II;Z1RQcensdODXWr=ApxsEP~>#e zFzr)laWT(xK*AN?`ut$SlDr7GR5%zGNpUEzzLk~7-2G1QIEHu4F+G`IwQkr zNwSLn2#}llydiej7@?Y(o9*$XWPky8bb>d^Qx6+#oRCz4r;o)MGJNK>)KuuYM^I`n zvDt`dKTIU0HWi+c*r;ar3~364$OY{XZ>>nIrIdlN9e}PDof<*`nY&pP$eKNggfs2;cRA>q-|1!8hCBpHc2CO~CHyS`B zcCTfLC9*zvTB3k57Jd{# zPS|*YPTRpn9D2r(7p3>Qj02_6Jh4x9 zO)o<%2>t$YI-3^Am5C9q4@XO+K~>W#$umvBr(w|MqF=}yq^;EA7|W=*QaS7%=XV;E z4+UeI31f+{b`ix^ypN#_WL@4;d;3nP^Xa;d0;j!%fwiUzPLo-nslhGAnZM5bM-3dp zVJiukc$t0vVb?Ttmt~%MmczY}KyeB-JMT~IPrZ#Y%v;xp;Yl=Z1qXm+Q58z+;`6nD zJ0V-9pdTgNdu=nKx{JAZF8SWx>^GlOuf?faGb2K9n$aH?%1=(r%N-38ExWI1U#Wdg z7-y11v30%5hf`u;U4dAJw|~pLKg}9~BkQ?XbXgF-hnHD2S0#ly;DZ)WgfRv7Xs?{C z*L_^_og3IlZ3&kyJIC}Sq16DYJhNUv58)+d-rvETlP%I>oJ$HgO1Tl9GWTN?kA*NA zo#Q$%{*k)Y7Y{p(bKQH=9(zzI3u%B3ZYQS%AvF|=0TZhrQ9;8-6+Z}kca2#>C9A3! zuo>fi?N`3^R^_YuX+y6N2=PC*)^90npFL}`uiF?1ImtQhu!pJSFqQXe)^kSyBcU)R zT%Vp?>+P^2z6+c9rFn#2xVLE3u0{9SMx%4^p;48VrO#(fTb(MBP&+Z`_9?^81Lyn1 z(DkZHyVEn^gaK{_v;TxV?@ibOXKUNoE7|ovlNV#OmZcK9GXsdw%dxt4gfI3ir~SEd z0h^h~M2Q@(W=Ec+097t3urqMLc42$w8DF~`gRRfvAIodFK{+=bes`^u4h8<2xMS?F zg%Pk;gIyU?!uwIEBI!kr*{6_%z_o!2wUhjy_`z7lkiS9vrVW?E=qpT^=b1?U zc-KdC7G=45J;R`o&vA7&a_<7{?!8E&^}<>R7{NFGC6Lx+5EZ5B$@AEN3Lyrj7athh zT5T?(!Hax&9r-EVgEul%uEj)JS|g=!snH4+flqK#ZDbi1->j;RPv?`LI1@O7Bl ziPVf3+x7$>+30P&p3Rkls_Xn%<5}Cjo|kMi)+L}ihlBZ06ESf1pRZ3Wetj46WE)#Z zg$bfAlE+6RVAWfyBeQ`(-r>+@Ro}FnaxKkr)IGFMPR=Xou=*dLx2Z#LR@0C(&y>n^+@}b)%)1Q$oymcd0 zvV6vY<3RjdPq+KjtwoaBZKKxkuu*`PT+fQeHW^t=^5$5A}sgBGcC3 z(*c{n%TfUsuy;}axz-Yt#lkm-GCNlyDzCMM*Vbh$eSF<^NA;} zy+;9CQLCm~hD7AIG8R#h=f~;@Vy(*JCd)3kFgb!A6?Z_C4F#E+S7T4Glo6X&DvuXi z)ha9{evBjE+1lfsu%}~$|Fv8S9Fw1*N5P!emOxt)>mmTUeq0ytG4EuF_`n`um1Wd= zo$ApacP7;FRj~@%%Ic+JT$csOC z3<;?t^wul7L+8yc_Ee7v&$ohMPdM<+2_1tHySue$y{VH<#%DN0FLiUur9!!3`+h-a zT3n;6jJjv_Mx015)nMZKw3mN0RVBMRE`!`qqV5JOIkD?PI$u+TTx{lBynfYLZm^Fe zAJw+13bUj@t>JrS%-^S+Q7y<~b(Vi7*H=kkL)8ca`~n|sjg)ssYtYn^gb$&NvEA{~ ztb0}{nY6>x;kn=Hy(hB$xRetOmo{KAlqla&5%H7O zelCvGtVJ!_l%qNDzfo(J6VJ^|nVq0b1Lf)mtH(F&lXcm%IdW4w{!|W^S{9H8q5o<; ztxe7Xb!%ZL)P$)FxGuY$wy`kH_HbzVm<^3;mkDH&!qKPuD6h}m)epM9r zgTiY)3XlH8Mb6f1Hia8tT3m+DW_X+)tasCt366PKD9RrgOfs_mcg#Ze!nODWDQau={gNXDrWrLw?-NRV?qvC0$c7FbSO(U z;O}VcEWN%mAzP5uyI5c?bCB&#tOVMf;EHMY-&QNpa)|!i7;Pk?&x-j+aje%TuO zKa%w?wk`(AyWpBM)FswB)q}rKF)>E=4X?GVw4&JO<4$y^ge;moQP!GMsiJ1xhQzSQ zLwGM{5{jCfFfGGku^w?6HH&K*e}HR~uE!9P+IbX5T;>d+OL*Lj(A_N3^Ltq+m}wyn z^Cut#j$nt$XI8<{U}9zj>n<4!1Nyx+&D;cUiVoc83Pq;$)8+j74qyJyky{KqAQT!SY^o z_SXz$Mumg(m|-3g#GsIt%kTe`3kA=brDGMavJr7sn2$X^^=RmDrK$^xje38_Y_ph5 z*Ds55o#bM%e{Fr z=v(86ok?JBVF#RcTm+TKOy*>w^;vK}HC*6*UB|UPuKcp_^XP(B*{<4EtHl)xoi^WL z<>FYMF2|F!FoenjSP>Dz&}C(UxaL+(t#v8NBUA2RnSlg`lYg?Qs@yZM47%rfSU*e2 zbknf)`Hx$W;0h|(NGLgP)iztLQ+-IH>rV9<8ah&^A798^>bzC?$#PMPhbsa>8Qf(zCoIgBVGBR3;NWbns5uLq< z7)HBP-klbbY&$*ZvMKM*U*{K=ncyOMME8w|re}O{_-GXQdhvhGPp2ys_CUBNb_TDs zlBIsS-!>=X6HrqR=%-4gyNaA4w^zB@5txZ$Q{G}FWL26fOf&qzvSBCY^gb4} zYUt(Pn_mT)LvFoM7WAf80I#&K(1^uPUXP#*|6K)A-s?=c&j&;uvM*E&HO6XTW%Fc!x4?}xYL{$9UiB{VcR@t76*ZX>!>(uCBE+y-_9HQH<*a^-q?#GiPTqHQP;eehuZDtw(SE%=kMB#O=bBDz# z^|^?iCHF!UiiI~CVB;w;xNZRDBZsmCmgJFlE7A4hI;H!gq1QXgI+(DW~ z=s!n%QhYzX*_i5Yte(6W2GE7=doTVrV2=V2)A3fe>2IiPx;+xIlG~>URW@PW@D9Ly zqNeS|^VwXggl$XeQ;x*NUu6#>;R|Z`P0|3-$3zzSCmh{vNtB#k*Q{{(hSH^}&F0{Bt0{sS8^zkSzhTb_4g& zma)-xmoIfJ!VI5n8?GBk*zh#SaUomNEdO8N-^|s|fnn0-Y+rgD-mSLcLd!b1{m4;4 zH8aT2O;E2eS)3$KFYdVb%#%u$kJVYhCHr8g4e9)j45zPz`=r_XN6ct6^tf0-1=;3{ z_VfWgWPw+i5}7~#>({1qk!3)7fWr@vijH&1+N;H=To*-{-0?#qQRCdC!yD^$QjGn1 zO!J3;6(L=wY9H6!wSDSc8^jJgxq#PM5K(6%-j?U^x9?bS^wFUf6iKohy+_O=D~=XjI4>P3uco4q4K^5tqv}Q8n1bHNrd<%DC{3 z)!A7!)=nEpi`NE8hY8s(MaSkO8`UDJrn4|W`5xGr>6@}PXNMlhY~ePNP6HoOaO>3s z&6MFAhvSSeSdl!|VGnJLEzKe=H##PHVEwgs4^Xfs4hEM%r{7^ID?!CZ-#@y1v5h-I zPpdo_TIO0|G!yYS{7>gl`RS{=$V&}+?D1M`5H9?)S=%ZIQ^|Yox`&(Os)gp2UqD^8 zp|C4oQ5SiBcKkEwB*!t~KY2!8Lbuw~s70CDFr&rr>#pdh+}u}y**7LQP?70Ex|7KQ z!FKe;TJ+pYCDR4qUIB0heg8H*DP2YVpjdu02^D+4nk7Jx!VeyC(a*$5B(Xep&Mzn| zVf`C&tDCFHUU;FOL)3vaw3+&Vu$ky;`rEN8FV6G@y{)n0Nz47X+d26j2zMWp2nA7v zDNrY&Hr@VAtgVwBZuilipf~a{CFzHbdBN3axPf#s zD^kWX?nWT(5oKF?C&TiPDRK8UyzeyZsJ&Y)4#FG%J%BC5{5D|Do4*Yv{~tRUeIN*? z;UCJ}lx+~A>x&L}x9QsLbU@Q1FI+0{?ulL6xg9{-)Yd9Qr5&mg9=pV7sHsX$`Da%| zYIUmn%Os!|@fj>E(q&N=a(BB<81xsx^-!I@D3{(e&?Q1Taf3@xZ6U#Bp4j%=NA;Lk zq_M~H`o$>GfL^ey!qt7Mjk8lgxZ%=fAKzx2tS!G$v^*$Jq&^04`CY=kGD)G`F9%icyB{5r^*NX_a(pCv!Xi%rNX<>gY5p zb840DBlQml(YIYfNG|1EFGMujSEDHK3Q+=u*ZHcT;}NM0BZC@VfYb_!{R zkU}A7C5e&-bpNS5h)p#D7;CWDr9hiULtvl7cp^u82+wgGcztVX9JW%Vi2T-aa+@y5 z4T)*4$4BF&Da}lXcnOUmXoZ|P+?#$!CF}`La{|2pLep92L(HtL1UqycZdWb z1NcsRE80Gje>bXRrzPGWqdv?G@w9#lhLdriA;E>lQNL#Vu9R)F?p#*yhwfeG)f)h~ zL#euESK3S&F!^IP^Y7>EN4;e-1Y7Tzz|fT$%5ZNJK9Z{Q);|GEf9Q^@7zh;0Kt+0+v?m>uAVv8nrjBT>)+Ajz7=tcQ{4rhjAg?s6-{h@>qHKphl8$G# z0trCqRT;@M?JDQl9{7D`mfu;Ni!G{R)Jq~b(jfThoq&vE01c1=I~=XgX#k5)R+hpQ z^4(L?R(ohDgK5|fCMQ1x8Km{|PGq!KzR8o%EWuxckesO7#4_87u>d=MrB_z;PUVC8 zp+mZYhdK%#h?mKz##J9X(p%{E%Ot z@@9pl{!Op~pKJ5jquEV9OBegJj-~oD6Li<7%Q*`E-NBGOpX~_ipaLjSC5Uvc9!EB$ z_*Dif=rf4G?qS1kSt!($^EEH?M%se7xhWQhukPFp9{|>xXk!Gh{SgROE01gpdtKqm za*Q4z5^)>`fVL@wxbVP}bPA0*>6Nv{NWaJHgvvvb@f9WMM%Ug1Y2uYW26bEZ$2o-H|iFr+2JH0LKK^9gp)n-NCQ}_?B!Sz8W`EYa zmd$MoYh#?y%F(;OR+j`c&NXSPCK@P2!gbvCSFh)+Zhi0aoEvjUlnMH$(oa{l&|NF4 zTeF!!R`EIalty)kBWbZ>+e_s*vAMLKf%lFShJ~Y>WNSU44H}&6 z;V*Lxe?2S;RFk)$zrowaKfg@;{SE5Erz@wJ&Y5feN7wRnjb-^somvwZPx&A=Ved`s zg}vJ{l3VqNw@IRIYX`n$#}(M>=<^eRQ6XHF$A&9ZsO1@=0E<_6g!#s*7a;0RerM1`Cv{88jZ?s2bAbkiU4Kcu_08ylY3o;5 z%305i__dC#Z>*9!W`p!l8Zk5Wj<1@m4SlNeV;lBJLkR^gp~o^L7uBA-VUdn$2lLZr zgx^1$NiCpa;!CJFpt=8^822F*g@ryEBjXq_l#%$y9xV%{i_gi@IicPr0-qdQq3wPm1PeL%`+0I+p0_5{q(ueV{gFWM zVpPMH%g<#@k)3#w7CTSq%qcO>Y3Dh_M)f#K!PAl8ngJXJXw4Hm@JOZtt!sJMf!X6e zc^4tHjHMvDxdUdoulKYRgoW7}O5=Mlqmk3r^bc%|$lV0eD|>M$5NUZ1t0%Yw)-`>KZWF8^ zwn3amvOoEJjE$l~@~ev&bs3y~>Q|5S%jMMimP2q5E%Dg4GjG~#bUk#kJlnYlzR9xg zZHGGKWtHG+!*j?02%(84d7lqlfbDrA3k&@C>Uq6hHMhCcqeYbOuQ2%v21Wh3VG;6%r@Y$|DkQX$x3#B`{ zU;|0e@Uc^N;V-8weEq_5j+;8j$%&P&BS$Z!HB}cXoip*kTVd4ZHeW0p7_FG%Y|G5J zhB%%+*j=Jh&--$yC+R+p7N?jKONB$ KfxFXalc@pw)NyeD diff --git a/files/poketool/pokegra/pokegra/narc_0057.png b/files/poketool/pokegra/pokegra/narc_0057.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1aa71bdb74cae19242d42a643fc1051fe6c3fa GIT binary patch literal 1988 zcmV;#2RrzQP)002+~0{{R3Y;$7=0000mP)t-sL9{sl z00960|IN+Sl$4Z8N=lTh=30x*AY!ZtIb!zJoaV)I)vQX@tV)YwL0UN&-%pAA00001 zbW%=J06^y0W&i*OLP5*U(qaldcTM}F?lV1ZO4FmTrJAeP|o{@&qz-fG4d_Wa1-%_~ZAeev-*eoi0Be;2+~Lca9ej1&? z3MpO2*;xk5tkYbZUEp(C=ywZyw2H#!_XR0LyK=z-U*tzG4q<_}HDK@kbcaLf^cT{z zlX`X5-(!1}bf!gP{yAQFJem-QqDLt~;U99;v4oJ1W+r`Zkd0EmwGKi^N`G1k7c7vF z{OIsCT~b1xqZLPp)J$tK>IFS5aaFXcbS&u>q4LQ=Fsm%-O>+$)g-G)mM*3URJb163iNrnDk^g{t<+;IYJFw0T=t zLJ|eNOGtW!?ZFBi>>A`22nX&HLZk@aDszyC675R@dL_j^0i&>q5SmQgRKgk| zjA8Df^-D%@&)>Q*vJqh&(2W9v1wMcS+|p}{IQbL!s<4IBB=dy^Ni(LwS%b8E+AWjC zZuhr}*wEZlm%IQ^B-RcX>1MijxLo_}kFhM)CXV^_`l@;GB_`;U{ z5&7FU=yQpbwx1K|;~R`sa~o$ucSs0XbTuimp(Q3+ZIhMKE6ckeG^MS7G|VgC1cl@j zgYSsLh7e7X&?(4IURQ(!rNy=ffpKVSP+K8kBJWL5$W0Z+roWvb ziDGGn)ns*1=o=w%PCHVHdCw!P=nGBD4$!aum<$y2`y_0t! ziVt?o&y;Zz6;8a3k}i9zZ2K>sZ#?=%WyN|J76Qt$ypK_A@D^<6ski^nu#n`vpLHAt zxI8ufu@6E`*rAJnAX-|7w(dvqOV2wQxRJh;1jEmPFBtofX4te=iIV@?)H6y5c`hGd zd}4)p!#L;r7IUW&xhkXN!rErl;ho)`mi!~zhNJg1R=A)qp8393xl8IK{7C1M=}p`; z-=kX$O3@ugo}K}ll=MaS;Jon1n~7dA6%|gH{^57T?sKt6%R~w77$H31y>#94Lg*ez z_!me172Bm**n00>6`VsE*>fJS3ejG==Y=vdF_II;Z1RQcensdODXWr=ApxsEP~>#e zFzr)laWT(xK*AN?`ut$SlDr7GR5%zGNpUEzzLk~7-2G1QIEHu4F+G`IwQkr zNwSLn2#}llydiej7@?Y(o9*$XWPky8bb>d^Qx6+#oRCz4r;o)MGJNK>)KuuYM^I`n zvDt`dKTIU0HWi+c*r;ar3~364$OY{XZ>>nIrIdlN9e}PDof<*`nY&pP$eKNggfs2;cRA>q-|1!8hCBpHc2CO~CHyS`B zcCTfLC9*zvTB3k57Jd{# zPS|*YPTRpn9DS0+I|23P3CX#3$q!82;B=W(Rp`s%|RM WPHPE$Xb|TwW4%jlm)bS0+I|23P3CX#3$q!82;B=W(Rp`s@B%u Ws`?V^=Na!TXS_$LNZ&^(g% Date: Fri, 8 Jan 2021 14:52:37 +0000 Subject: [PATCH 46/59] decompile CTRDG_common --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 2 +- arm9/asm/CTRDG.s | 670 ------------------------- arm9/asm/CTRDG_proc.s | 14 +- arm9/lib/include/CTRDG_common.h | 137 ++++- arm9/lib/include/MI_dma.h | 3 + arm9/lib/include/MI_exMemory.h | 40 +- arm9/lib/include/MI_memory.h | 5 + arm9/lib/include/OS_protectionRegion.h | 4 + arm9/lib/include/OS_spinLock.h | 6 +- arm9/lib/include/consts.h | 7 + arm9/lib/include/mmap.h | 3 + arm9/lib/include/syscall.h | 13 + arm9/lib/src/CTRDG_common.c | 349 +++++++++++++ 14 files changed, 568 insertions(+), 687 deletions(-) delete mode 100644 arm9/asm/CTRDG.s create mode 100644 arm9/lib/src/CTRDG_common.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ef6e9299..e21a731a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include) -add_executable(calcrom .travis/calcrom/calcrom.cpp) +add_executable(calcrom .github/calcrom/calcrom.cpp) target_include_directories(calcrom PRIVATE /usr/local/include) add_executable(knarc tools/knarc/Source.cpp tools/knarc/Narc.cpp tools/knarc/fnmatch.c) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 5468430ad..33661a6b1 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -452,7 +452,7 @@ Static arm9 Object WM_ds.o Object WM_ks.o Object WM_etc.o - Object CTRDG.o + Object CTRDG_common.o Object CTRDG_proc.o Object CTRDG_backup.o Object CTRDG_flash_common.o diff --git a/arm9/asm/CTRDG.s b/arm9/asm/CTRDG.s deleted file mode 100644 index dc60582b8..000000000 --- a/arm9/asm/CTRDG.s +++ /dev/null @@ -1,670 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global UNK_021D6940 -UNK_021D6940: ; 0x021D6940 - .space 0x4 - - .global UNK_021D6944 -UNK_021D6944: ; 0x021D6944 - .space 0x4 - - .text - - arm_func_start CTRDG_CheckEnabled -CTRDG_CheckEnabled: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsOptionCartridge - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - bl CTRDG_IsEnabled - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_Enable -CTRDG_Enable: ; 0x020DB15C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DB1AC ; =UNK_021D6940 - mov r4, r0 - str r5, [r1, #0x0] - bl CTRDG_IsOptionCartridge - cmp r0, #0x0 - bne _020DB198 - cmp r5, #0x0 - movne r1, #0x1000 - moveq r1, #0x5000 - mov r0, #0xf000 - bl OS_SetDPermissionsForProtectionRegion -_020DB198: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DB1AC: .word UNK_021D6940 - - arm_func_start CTRDG_IsEnabled -CTRDG_IsEnabled: - ldr r0, _020DB1BC ; =UNK_021D6940 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020DB1BC: .word UNK_021D6940 - - arm_func_start CTRDGi_AccessCommon -CTRDGi_AccessCommon: ; 0x020DB1C0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - bl CTRDG_CheckEnabled - ldr r0, _020DB2BC ; =UNK_021D6944 - ldrh r0, [r0, #0x2] - bl OS_LockCartridge - cmp r4, #0x21 - bhi _020DB240 - cmp r4, #0x21 - bhs _020DB270 - cmp r4, #0x11 - bhi _020DB234 - cmp r4, #0x10 - blo _020DB294 - cmp r4, #0x10 - beq _020DB290 - cmp r4, #0x11 - beq _020DB260 - b _020DB294 -_020DB234: - cmp r4, #0x20 - streqh r6, [r7, #0x0] - b _020DB294 -_020DB240: - cmp r4, #0x40 - bhi _020DB254 - cmp r4, #0x40 - streq r6, [r7, #0x0] - b _020DB294 -_020DB254: - cmp r4, #0x41 - beq _020DB280 - b _020DB294 -_020DB260: - cmp r5, #0x0 - ldrneb r0, [r7, #0x0] - strneb r0, [r5, #0x0] - b _020DB294 -_020DB270: - cmp r5, #0x0 - ldrneh r0, [r7, #0x0] - strneh r0, [r5, #0x0] - b _020DB294 -_020DB280: - cmp r5, #0x0 - ldrne r0, [r7, #0x0] - strne r0, [r5, #0x0] - b _020DB294 -_020DB290: - strb r6, [r7, #0x0] -_020DB294: - ldr r0, _020DB2BC ; =UNK_021D6944 - ldrh r0, [r0, #0x2] - bl OS_UnLockCartridge - bl CTRDG_IsExisting - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB2BC: .word UNK_021D6944 - - arm_func_start CTRDG_Read32 -CTRDG_Read32: ; 0x020DB2C0 - ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon - mov r2, r1 - mov r1, #0x0 - mov r3, #0x41 - bx r12 - .balign 4 -_020DB2D4: .word CTRDGi_AccessCommon - - arm_func_start CTRDGi_CopyCommon -CTRDGi_CopyCommon: ; 0x020DB2D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - bl CTRDG_CheckEnabled - ldr r0, _020DB42C ; =UNK_021D6944 - ldrh r0, [r0, #0x2] - bl OS_LockCartridge - ldr r0, [sp, #0x18] - ands r0, r0, #0x1 - bne _020DB338 - mov r0, r7 - bl MI_StopDma - mov r0, r5 - mov r1, r4 - bl DC_FlushRange -_020DB338: - ldr r0, [sp, #0x18] - cmp r0, #0x11 - bhi _020DB36C - cmp r0, #0x10 - blo _020DB360 - cmp r0, #0x10 - beq _020DB38C - cmp r0, #0x11 - beq _020DB3BC - b _020DB404 -_020DB360: - cmp r0, #0x1 - beq _020DB3E4 - b _020DB404 -_020DB36C: - cmp r0, #0x20 - bhi _020DB380 - cmp r0, #0x20 - beq _020DB3A4 - b _020DB404 -_020DB380: - cmp r0, #0x21 - beq _020DB3D0 - b _020DB404 -_020DB38C: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - bl MI_DmaCopy16 - b _020DB404 -_020DB3A4: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - bl MI_DmaCopy32 - b _020DB404 -_020DB3BC: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MIi_CpuCopy16 - b _020DB404 -_020DB3D0: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MIi_CpuCopy32 - b _020DB404 -_020DB3E4: - cmp r4, #0x0 - mov r1, #0x0 - bls _020DB404 -_020DB3F0: - ldrb r0, [r6], #0x1 - add r1, r1, #0x1 - cmp r1, r4 - strb r0, [r5], #0x1 - blo _020DB3F0 -_020DB404: - ldr r0, _020DB42C ; =UNK_021D6944 - ldrh r0, [r0, #0x2] - bl OS_UnLockCartridge - bl CTRDG_IsExisting - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB42C: .word UNK_021D6944 - - arm_func_start CTRDG_CpuCopy32 -CTRDG_CpuCopy32: ; 0x020DB430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x21 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy16 -CTRDG_CpuCopy16: ; 0x020DB464 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x11 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy8 -CTRDG_CpuCopy8: ; 0x020DB498 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - cmp lr, #0x8000000 - blo _020DB4DC - ldr r2, _020DB500 ; =0x0A010000 - cmp lr, r2 - bhs _020DB4DC - mov r12, #0x1 - mov r2, r0 - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DB4DC: - mov r12, #0x1 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB500: .word 0x0A010000 - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ; 0x020DB504 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r1, r7 - mov r0, #0xd - mov r2, #0x0 - bl PXI_SendWordByFifo - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r6, #0x1 - mov r5, #0xd - mov r4, #0x0 -_020DB53C: - mov r0, r6 - bl SVC_WaitByLoop - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0x0 - bne _020DB53C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ; 0x020DB568 - stmdb sp!, {r4,lr} - mov r4, r1 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - bne _020DB580 - bl OS_UnLockCartridge -_020DB580: - ldr r0, [r4, #0x4] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ; 0x020DB590 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - ldr r5, _020DB60C ; =0x027FFFE8 - mov r4, #0x1 -_020DB5A8: - bl OS_DisableInterrupts - str r0, [r6, #0x4] - mov r0, r5 - bl OS_ReadOwnerOfLockWord - and r0, r0, #0x40 - str r0, [r6, #0x0] - ldr r0, [r6, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r0, r7 - bl OS_TryLockCartridge - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldr r0, [r6, #0x4] - bl OS_RestoreInterrupts - mov r0, r4 - bl SVC_WaitByLoop - b _020DB5A8 -_020DB600: ; 0x020DB600 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB60C: .word 0x027FFFE8 - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ; 0x020DB610 - ldr r3, _020DB640 ; =0x04000204 - ldr r2, [r0, #0x0] - ldrh r1, [r3, #0x0] - bic r1, r1, #0xc - orr r1, r1, r2, lsl #0x2 - strh r1, [r3, #0x0] - ldrh r1, [r3, #0x0] - ldr r2, [r0, #0x4] - bic r0, r1, #0x10 - orr r0, r0, r2, lsl #0x4 - strh r0, [r3, #0x0] - bx lr - .balign 4 -_020DB640: .word 0x04000204 - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 - ldr r2, _020DB688 ; =0x04000204 - ldrh r1, [r2, #0x0] - and r1, r1, #0xc - mov r1, r1, asr #0x2 - str r1, [r0, #0x0] - ldrh r1, [r2, #0x0] - and r1, r1, #0x10 - mov r1, r1, asr #0x4 - str r1, [r0, #0x4] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xc - orr r0, r0, #0xc - strh r0, [r2, #0x0] - ldrh r0, [r2, #0x0] - bic r0, r0, #0x10 - strh r0, [r2, #0x0] - bx lr - .balign 4 -_020DB688: .word 0x04000204 - - arm_func_start CTRDG_IsExisting -CTRDG_IsExisting: - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - ldr r2, _020DB798 ; =0x027FFC30 - ldr r0, _020DB79C ; =0x0000FFFF - ldrh r1, [r2, #0x0] - mov r4, #0x1 - cmp r1, r0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - cmp r0, #0x1 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020DB7A0 ; =UNK_021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_LockByProcessor - add r0, sp, #0x8 - bl CTRDGi_ChangeLatestAccessCycle - mov r0, #0x8000000 - ldrb r2, [r0, #0xb2] - cmp r2, #0x96 - bne _020DB714 - ldr r1, _020DB798 ; =0x027FFC30 - ldrh r0, [r0, #0xbe] - ldrh r1, [r1, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB714: - cmp r2, #0x96 - beq _020DB734 - ldr r1, _020DB798 ; =0x027FFC30 - ldr r0, _020DB7A4 ; =0x0801FFFE - ldrh r1, [r1, #0x0] - ldrh r0, [r0, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB734: - ldr r2, _020DB798 ; =0x027FFC30 - mov r0, #0x8000000 - ldr r1, [r2, #0x8] - ldr r0, [r0, #0xac] - cmp r1, r0 - beq _020DB770 - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1f - movs r0, r0, lsr #0x1f - beq _020DB770 -_020DB75C: - ldr r1, _020DB798 ; =0x027FFC30 - mov r4, #0x0 - ldrb r0, [r1, #0x5] - orr r0, r0, #0x2 - strb r0, [r1, #0x5] -_020DB770: - add r0, sp, #0x8 - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DB7A0 ; =UNK_021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - mov r0, r4 - add sp, sp, #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB798: .word 0x027FFC30 -_020DB79C: .word 0x0000FFFF -_020DB7A0: .word UNK_021D6944 -_020DB7A4: .word 0x0801FFFE - - arm_func_start CTRDG_IsPulledOut -CTRDG_IsPulledOut: ; 0x020DB7A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DB800 ; =0x027FFC30 - ldr r0, _020DB804 ; =0x0000FFFF - ldrh r1, [r2, #0x0] - cmp r1, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - movs r0, r0, lsr #0x1f - bne _020DB7E4 - bl CTRDG_IsExisting -_020DB7E4: - ldr r0, _020DB800 ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB800: .word 0x027FFC30 -_020DB804: .word 0x0000FFFF - - arm_func_start CTRDGi_GetAgbMakerCodeAtInit -CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit - cmp r0, #0x0 - ldrne r0, _020DB82C ; =0x027FFC30 - ldrneh r4, [r0, #0x6] - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB82C: .word 0x027FFC30 - - arm_func_start CTRDG_GetAgbMakerCode -CTRDG_GetAgbMakerCode: ; 0x020DB830 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting - cmp r0, #0x0 - beq _020DB84C - bl CTRDGi_GetAgbMakerCodeAtInit - mov r4, r0 -_020DB84C: - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_GetAgbGameCodeAtInit -CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit - cmp r0, #0x0 - ldrne r0, _020DB87C ; =0x027FFC30 - ldrne r4, [r0, #0x8] - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB87C: .word 0x027FFC30 - - arm_func_start CTRDG_GetAgbGameCode -CTRDG_GetAgbGameCode: ; 0x020DB880 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting - cmp r0, #0x0 - beq _020DB89C - bl CTRDGi_GetAgbGameCodeAtInit - mov r4, r0 -_020DB89C: - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_IsAgbCartridgeAtInit -CTRDGi_IsAgbCartridgeAtInit: - ldr r0, _020DB8BC ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1f - mov r0, r0, lsr #0x1f - bx lr - .balign 4 -_020DB8BC: .word 0x027FFC30 - - arm_func_start CTRDG_IsOptionCartridge -CTRDG_IsOptionCartridge: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting - cmp r0, #0x0 - beq _020DB8EC - bl CTRDGi_IsAgbCartridgeAtInit - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x1 - ldmeqia sp!, {lr} - bxeq lr -_020DB8EC: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_IsAgbCartridge -CTRDG_IsAgbCartridge: ; 0x020DB8FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting - cmp r0, #0x0 - beq _020DB928 - bl CTRDGi_IsAgbCartridgeAtInit - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x1 - ldmneia sp!, {lr} - bxne lr -_020DB928: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ; 0x020DB938 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DB970 ; =UNK_021D6944 - mov r3, #0x0 - ldr r2, _020DB974 ; =0x05000001 - add r0, sp, #0x0 - str r3, [sp, #0x0] - bl SVC_CpuSet - bl OS_GetLockID - ldr r1, _020DB970 ; =UNK_021D6944 - strh r0, [r1, #0x2] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB970: .word UNK_021D6944 -_020DB974: .word 0x05000001 diff --git a/arm9/asm/CTRDG_proc.s b/arm9/asm/CTRDG_proc.s index 3351aa2b9..f9e981d09 100644 --- a/arm9/asm/CTRDG_proc.s +++ b/arm9/asm/CTRDG_proc.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021D6944 + .extern CTRDGi_Work .section .bss @@ -104,7 +104,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C sub sp, sp, #0x4 and r0, r1, #0x3f cmp r0, #0x1 - ldreq r0, _020DBA64 ; =UNK_021D6944 + ldreq r0, _020DBA64 ; =CTRDGi_Work moveq r1, #0x1 streqh r1, [r0, #0x0] addeq sp, sp, #0x4 @@ -115,7 +115,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C ldmia sp!, {lr} bx lr .balign 4 -_020DBA64: .word UNK_021D6944 +_020DBA64: .word CTRDGi_Work arm_func_start CTRDGi_InitModuleInfo CTRDGi_InitModuleInfo: ; 0x020DBA68 @@ -140,7 +140,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68 ldr r3, _020DBC58 ; =0x04000208 mov r2, #0x1 ldrh r4, [r3, #0x0] - ldr r1, _020DBC5C ; =UNK_021D6944 + ldr r1, _020DBC5C ; =CTRDGi_Work mov r6, r0 strh r2, [r3, #0x0] ldrh r0, [r1, #0x2] @@ -173,7 +173,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68 orr r1, r1, r5, lsl #0xf strh r1, [r2, #0x0] bl CTRDGi_RestoreAccessCycle - ldr r0, _020DBC5C ; =UNK_021D6944 + ldr r0, _020DBC5C ; =CTRDGi_Work add r1, sp, #0x0 ldrh r0, [r0, #0x2] bl CTRDGi_UnlockByProcessor @@ -227,7 +227,7 @@ _020DBBDC: mov r0, r0, lsl #0x6 orr r0, r0, #0x1 bl CTRDGi_SendtoPxi - ldr r5, _020DBC5C ; =UNK_021D6944 + ldr r5, _020DBC5C ; =CTRDGi_Work ldrh r0, [r5, #0x0] cmp r0, #0x1 beq _020DBC30 @@ -251,7 +251,7 @@ _020DBC30: _020DBC50: .word UNK_021D6948 _020DBC54: .word 0x04000300 _020DBC58: .word 0x04000208 -_020DBC5C: .word UNK_021D6944 +_020DBC5C: .word CTRDGi_Work _020DBC60: .word 0x04000204 _020DBC64: .word UNK_021D6960 _020DBC68: .word 0x08000080 diff --git a/arm9/lib/include/CTRDG_common.h b/arm9/lib/include/CTRDG_common.h index 32049f3cb..2d37c6f8b 100644 --- a/arm9/lib/include/CTRDG_common.h +++ b/arm9/lib/include/CTRDG_common.h @@ -1,8 +1,137 @@ -#ifndef NITRO_CTRDG_COMMON_H_ -#define NITRO_CTRDG_COMMON_H_ +#ifndef POKEDIAMOND_CTRDG_COMMON_H +#define POKEDIAMOND_CTRDG_COMMON_H -#include "nitro/types.h" +#include "consts.h" +#include "OS_spinLock.h" +#include "OS_system.h" +#include "MI_exMemory.h" +typedef struct CTRDGWork +{ + vu16 subpInitialized; + u16 lockID; + +} CTRDGWork; + +typedef struct CTRDGModuleID +{ + union + { + struct + { + u8 bitID; + u8 numberID:5; + u8 :2; + u8 disableExLsiID:1; + }; + u16 raw; + }; +} CTRDGModuleID; + +typedef struct CTRDGModuleInfo +{ + CTRDGModuleID moduleID; + u8 exLsiID[3]; + u8 isAgbCartridge:1; + u8 detectPullOut:1; + u8 :0; //?? + u16 makerCode; + u32 gameCode; +} CTRDGModuleInfo; + +typedef struct CTRDGLockByProc +{ + BOOL locked; + OSIntrMode irq; +} CTRDGLockByProc; + +typedef struct CTRDGHeader +{ + u32 startAddress; + u8 nintendoLogo[0x9c]; + + u8 titleName[12]; + u32 gameCode; + u16 makerCode; + + u8 isRomCode; + + u8 machineCode; + u8 deviceType; + + u8 exLsiID[3]; + + u8 reserved[4]; + u8 softVersion; + u8 complement; + + u16 moduleID; +} CTRDGHeader; + +typedef struct CTRDGRomCycle +{ + MICartridgeRomCycle1st c1; + MICartridgeRomCycle2nd c2; +} CTRDGRomCycle; + +#define CTRDGi_GetModuleInfoAddr() ((CTRDGModuleInfo *)HW_CTRDG_MODULE_INFO_BUF) +#define CTRDGi_GetHeaderAddr() ((CTRDGHeader *)HW_CTRDG_ROM) +#define CTRDGi_GetModuleIDImageAddr() ((u16 *)(HW_CTRDG_ROM + 0x0001fffe)) + +#define CTRDG_IS_ROM_CODE 0x96 +#define CTRDG_LOCKED_BY_MYPROC_FLAG OS_MAINP_LOCKED_FLAG + +#define CTRDGi_FORWARD_TYPE_DMA 0x00000000 +#define CTRDGi_FORWARD_TYPE_CPU 0x00000001 +#define CTRDGi_FORWARD_TYPE_MASK 0x00000001 + +#define CTRDGi_FORWARD_WIDTH_8 0x00000000 +#define CTRDGi_FORWARD_WIDTH_16 0x00000010 +#define CTRDGi_FORWARD_WIDTH_32 0x00000020 + +#define CTRDGi_FORWARD_DMA16 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_16) +#define CTRDGi_FORWARD_DMA32 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_32) +#define CTRDGi_FORWARD_CPU8 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_8) +#define CTRDGi_FORWARD_CPU16 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_16) +#define CTRDGi_FORWARD_CPU32 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_32) + +#define CTRDGi_ACCESS_DIR_WRITE 0x00000000 +#define CTRDGi_ACCESS_DIR_READ 0x00000001 + +#define CTRDGi_ACCESS_WIDTH_8 0x00000010 +#define CTRDGi_ACCESS_WIDTH_16 0x00000020 +#define CTRDGi_ACCESS_WIDTH_32 0x00000040 + +#define CTRDGi_ACCESS_WRITE8 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_8) +#define CTRDGi_ACCESS_WRITE16 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_16) +#define CTRDGi_ACCESS_WRITE32 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_32) +#define CTRDGi_ACCESS_READ8 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_8) +#define CTRDGi_ACCESS_READ16 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_16) +#define CTRDGi_ACCESS_READ32 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_32) + +void CTRDGi_InitCommon(void); +BOOL CTRDG_IsAgbCartridge(void); +BOOL CTRDG_IsOptionCartridge(void); +BOOL CTRDGi_IsAgbCartridgeAtInit(void); +u32 CTRDG_GetAgbGameCode(void); +u32 CTRDGi_GetAgbGameCodeAtInit(void); +u16 CTRDG_GetAgbMakerCode(void); +u16 CTRDGi_GetAgbMakerCodeAtInit(void); BOOL CTRDG_IsPulledOut(void); +BOOL CTRDG_IsExisting(void); +void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r); +void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r); +void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info); +void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info); +void CTRDGi_SendtoPxi(u32 data); +BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size); +BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size); +BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size); +BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType); +BOOL CTRDG_Read32(const u32 *address, u32 *rdata); +BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType); +BOOL CTRDG_IsEnabled(void); +void CTRDG_Enable(BOOL enable); +void CTRDG_CheckEnabled(void); -#endif //NITRO_CTRDG_COMMON_H_ +#endif //POKEDIAMOND_CTRDG_COMMON_H diff --git a/arm9/lib/include/MI_dma.h b/arm9/lib/include/MI_dma.h index 8ce3f417d..99d1cb846 100644 --- a/arm9/lib/include/MI_dma.h +++ b/arm9/lib/include/MI_dma.h @@ -21,6 +21,9 @@ typedef void (*MIDmaCallback)(void *); #define MI_DMA_SRC_FIX (2UL << 23) #define MI_DMA_SRC_INC (0UL << 23) +#define MI_DMA_16BIT_BUS (0UL << 26) +#define MI_DMA_32BIT_BUS (1UL << 26) + #define MIi_DMA_TIMING_ANY (u32)(~0) #define MI_DMA_TIMING_H_BLANK (2UL << 27) diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h index 8bd355ac9..df46b008e 100644 --- a/arm9/lib/include/MI_exMemory.h +++ b/arm9/lib/include/MI_exMemory.h @@ -1,5 +1,5 @@ -#ifndef NITRO_MI_EXMEMORY_H_ -#define NITRO_MI_EXMEMORY_H_ +#ifndef POKEDIAMOND_MI_EXMEMORY_H +#define POKEDIAMOND_MI_EXMEMORY_H #include "consts.h" @@ -8,6 +8,20 @@ typedef enum { MI_PROCESSOR_ARM7 = 1 } MIProcessor; +typedef enum +{ + MI_CTRDG_ROMCYCLE1_10 = 0, + MI_CTRDG_ROMCYCLE1_8 = 1, + MI_CTRDG_ROMCYCLE1_6 = 2, + MI_CTRDG_ROMCYCLE1_18 = 3 +} MICartridgeRomCycle1st; + +typedef enum +{ + MI_CTRDG_ROMCYCLE2_6 = 0, + MI_CTRDG_ROMCYCLE2_4 = 1 +} MICartridgeRomCycle2nd; + static inline void MIi_SetCardProcessor(MIProcessor proc) { reg_MI_EXMEMCNT = @@ -20,4 +34,24 @@ static inline void MIi_SetCartridgeProcessor(MIProcessor proc) (u16)((reg_MI_EXMEMCNT & ~0x0080) | (proc << 7)); } -#endif //NITRO_MI_EXMEMORY_H_ +static inline MICartridgeRomCycle1st MI_GetCartridgeRomCycle1st(void) +{ + return (MICartridgeRomCycle1st)((reg_MI_EXMEMCNT & 0xc) >> 2); +} + +static inline MICartridgeRomCycle2nd MI_GetCartridgeRomCycle2nd(void) +{ + return (MICartridgeRomCycle2nd)((reg_MI_EXMEMCNT & 0x10) >> 4); +} + +static inline void MI_SetCartridgeRomCycle1st(MICartridgeRomCycle1st c1) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0xc) | (c1 << 2)); +} + +static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4)); +} + +#endif //POKEDIAMOND_MI_EXMEMORY_H diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h index 450e5e587..339ff9b84 100644 --- a/arm9/lib/include/MI_memory.h +++ b/arm9/lib/include/MI_memory.h @@ -45,6 +45,11 @@ static inline void MI_CpuCopy16(const void *src, void *dest, u32 size) MIi_CpuCopy16(src, dest, size); } +static inline void MI_CpuCopy32(const void *src, void *dest, u32 size) +{ + MIi_CpuCopy32(src, dest, size); +} + static inline void MI_CpuFillFast(void *dest, u32 data, u32 size) { MIi_CpuClearFast(data, dest, size); diff --git a/arm9/lib/include/OS_protectionRegion.h b/arm9/lib/include/OS_protectionRegion.h index 9b65258df..00b7ae630 100644 --- a/arm9/lib/include/OS_protectionRegion.h +++ b/arm9/lib/include/OS_protectionRegion.h @@ -41,4 +41,8 @@ static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBase OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \ | 1) +#define OS_PR3_ACCESS_MASK (HW_C5_PERMIT_MASK << HW_C5_PR3_SFT) +#define OS_PR3_ACCESS_RW (HW_C5_PERMIT_RW << HW_C5_PR3_SFT) +#define OS_PR3_ACCESS_RO (HW_C5_PERMIT_RO << HW_C5_PR3_SFT) + #endif //POKEDIAMOND_OS_PROTECTIONREGION_H diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h index c26e3b9f2..09c2cf2c5 100644 --- a/arm9/lib/include/OS_spinLock.h +++ b/arm9/lib/include/OS_spinLock.h @@ -5,7 +5,11 @@ #include "nitro/OS_spinLock_shared.h" #include "syscall.h" -#define OS_LOCK_ID_ERROR (-3) +#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord( (OSLockWord *)HW_CTRDG_LOCK_BUF ) +#define OS_MAINP_LOCKED_FLAG 0x40 +#define OS_LOCK_SUCCESS 0 + +#define OS_LOCK_ID_ERROR (-3) static inline void OSi_WaitByLoop(void) { diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 095a15df8..a41f22ae2 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -6,6 +6,13 @@ #include "registers.h" #include "systemWork.h" +#define HW_C5_PERMIT_MASK 0xf + +#define HW_C5_PERMIT_RO 5 +#define HW_C5_PERMIT_RW 1 + +#define HW_C5_PR3_SFT 12 + #define HW_C6_PR_4KB 0x16 #define HW_C6_PR_8KB 0x18 #define HW_C6_PR_16KB 0x1a diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index de5a80572..69e9c6960 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -34,6 +34,7 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM + 0x007ffc00) #define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20) #define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c) +#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM + 0x007ffc30) #define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer #define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory #define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) @@ -93,6 +94,8 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_DB_OAM_END 0x07000800 #define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM) +#define HW_CTRDG_RAM_END 0x0a010000 + #define HW_DTCM_SYSRV_OFS_INTR_VECTOR 0x3c #define HW_RESET_VECTOR 0xffff0000 diff --git a/arm9/lib/include/syscall.h b/arm9/lib/include/syscall.h index 427134a7e..8e7962dff 100644 --- a/arm9/lib/include/syscall.h +++ b/arm9/lib/include/syscall.h @@ -1,6 +1,19 @@ #ifndef POKEDIAMOND_ARM9_SYSCALL_H #define POKEDIAMOND_ARM9_SYSCALL_H +#include "consts.h" +#include "MI_dma.h" + +void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData); + +#define SVC_CpuClear( data, destp, size, bit ) \ +do{ \ + vu##bit tmp = (vu##bit )(data); \ + SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ + MI_DMA_SRC_FIX | \ + MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \ +} while(0) + void SVC_WaitByLoop(u32 ct); #endif //POKEDIAMOND_ARM9_SYSCALL_H diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c new file mode 100644 index 000000000..3d80cf24b --- /dev/null +++ b/arm9/lib/src/CTRDG_common.c @@ -0,0 +1,349 @@ +#include "CTRDG_common.h" +#include "function_target.h" +#include "syscall.h" +#include "OS_cache.h" +#include "OS_protectionRegion.h" +#include "OS_terminate_proc.h" +#include "PXI_fifo.h" +#include "MI_dma.h" +#include "MI_memory.h" + +CTRDGWork CTRDGi_Work; + +static BOOL CTRDGi_EnableFlag = FALSE; + +ARM_FUNC void CTRDGi_InitCommon(void) +{ + SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32); + + CTRDGi_Work.lockID = (u16)OS_GetLockID(); +} + +ARM_FUNC BOOL CTRDG_IsAgbCartridge(void) +{ + return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit()); +} + +ARM_FUNC BOOL CTRDG_IsOptionCartridge(void) +{ + return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit()); +} + +ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + return cip->isAgbCartridge; +} + +ARM_FUNC u32 CTRDG_GetAgbGameCode(void) +{ + u32 ret = 0; + + if (CTRDG_IsExisting()) + { + ret = CTRDGi_GetAgbGameCodeAtInit(); + } + + return ret; +} + +ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + u32 ret = 0; + + if (CTRDGi_IsAgbCartridgeAtInit()) + { + ret = cip->gameCode; + } + + return ret; +} + +ARM_FUNC u16 CTRDG_GetAgbMakerCode(void) +{ + u16 ret = 0; + + if (CTRDG_IsExisting()) + { + ret = CTRDGi_GetAgbMakerCodeAtInit(); + } + + return ret; +} + +ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + u16 ret = 0; + + if (CTRDGi_IsAgbCartridgeAtInit()) + { + ret = cip->makerCode; + } + + return ret; +} + +ARM_FUNC BOOL CTRDG_IsPulledOut(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + if (cip->moduleID.raw == 0xffff) + { + return FALSE; + } + + if (!cip->detectPullOut) + { + (void)CTRDG_IsExisting(); + } + + return cip->detectPullOut; +} + +ARM_FUNC BOOL CTRDG_IsExisting(void) +{ + BOOL ret = TRUE; + CTRDGLockByProc lockInfo; + + CTRDGHeader *chp = CTRDGi_GetHeaderAddr(); + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + if (cip->moduleID.raw == 0xffff) + { + return FALSE; + } + + if (cip->detectPullOut == TRUE) + { + return FALSE; + } + + CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo); + + CTRDGRomCycle rc; + + CTRDGi_ChangeLatestAccessCycle(&rc); + u8 isRomCode = chp->isRomCode; + + if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID) + || (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr()) + || ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge)) + { + cip->detectPullOut = TRUE; + ret = FALSE; + } + + CTRDGi_RestoreAccessCycle(&rc); + + CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo); + + return ret; +} + +ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r) +{ + r->c1 = MI_GetCartridgeRomCycle1st(); + r->c2 = MI_GetCartridgeRomCycle2nd(); + + MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18); + MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6); +} + +ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r) +{ + MI_SetCartridgeRomCycle1st(r->c1); + MI_SetCartridgeRomCycle2nd(r->c2); +} + +ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info) +{ + while (TRUE) + { + info->irq = OS_DisableInterrupts(); + if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0) + || (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS)) + { + break; + } + (void)OS_RestoreInterrupts(info->irq); + + SVC_WaitByLoop(1); + } +} + +ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info) +{ + if (!info->locked) + { + (void)OS_UnLockCartridge(lockID); + } + + (void)OS_RestoreInterrupts(info->irq); +} + +ARM_FUNC void CTRDGi_SendtoPxi(u32 data) +{ + while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS) + { + SVC_WaitByLoop(1); + } +} + +ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size) +{ + if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END) + { + return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8); + } + else + { + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8); + } +} + +ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size) +{ + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16); +} + +ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size) +{ + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32); +} + +ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType) +{ + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + CTRDG_CheckEnabled(); + + (void)OS_LockCartridge(CTRDGi_Work.lockID); + + if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA) + { + MI_StopDma(dmaNo); + DC_FlushRange(dest, size); + } + + switch (forwardType) + { + case CTRDGi_FORWARD_DMA16: + MI_DmaCopy16(dmaNo, src, dest, size); + break; + case CTRDGi_FORWARD_DMA32: + MI_DmaCopy32(dmaNo, src, dest, size); + break; + case CTRDGi_FORWARD_CPU16: + MI_CpuCopy16(src, dest, size); + break; + case CTRDGi_FORWARD_CPU32: + MI_CpuCopy32(src, dest, size); + break; + + case CTRDGi_FORWARD_CPU8: + u8 *dest8 = (u8 *)dest; + u8 *src8 = (u8 *)src; + for (s32 n = 0; n < size; n++) + { + *dest8++ = *src8++; + } + break; + } + + (void)OS_UnLockCartridge(CTRDGi_Work.lockID); + + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + return TRUE; +} + +ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata) +{ + return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32); +} + +ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType) +{ + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + CTRDG_CheckEnabled(); + + (void)OS_LockCartridge(CTRDGi_Work.lockID); + + switch (accessType) + { + case CTRDGi_ACCESS_READ8: + if (rdata) + { + *(u8 *)rdata = *(u8 *)address; + } + break; + case CTRDGi_ACCESS_READ16: + if (rdata) + { + *(u16 *)rdata = *(u16 *)address; + } + break; + case CTRDGi_ACCESS_READ32: + if (rdata) + { + *(u32 *)rdata = *(u32 *)address; + } + break; + case CTRDGi_ACCESS_WRITE8: + *(u8 *)address = (u8)data; + break; + case CTRDGi_ACCESS_WRITE16: + *(u16 *)address = (u16)data; + break; + case CTRDGi_ACCESS_WRITE32: + *(u32 *)address = (u32)data; + break; + } + + (void)OS_UnLockCartridge(CTRDGi_Work.lockID); + + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + return TRUE; +} + +ARM_FUNC BOOL CTRDG_IsEnabled(void) +{ + return CTRDGi_EnableFlag; +} + +ARM_FUNC void CTRDG_Enable(BOOL enable) +{ + OSIntrMode bak_cpsr = OS_DisableInterrupts(); + CTRDGi_EnableFlag = enable; + if (!CTRDG_IsOptionCartridge()) + { + u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO); + (void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc); + } + (void)OS_RestoreInterrupts(bak_cpsr); +} + +ARM_FUNC void CTRDG_CheckEnabled(void) +{ + if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled()) + { + OS_Terminate(); + } +} From ce4bb1eaea10d79a3b66e45d9621cf8d87e9492d Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 12 Jan 2021 22:06:18 +0000 Subject: [PATCH 47/59] properly split data for cartridge flash files --- arm9/arm9.lsf | 1 + arm9/asm/CTRDG_backup.s | 145 +++---------------------- arm9/asm/CTRDG_flash_AT29LV512.s | 53 +++++++-- arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s | 29 +++++ arm9/asm/CTRDG_flash_LE39FW512.s | 33 ++++++ arm9/asm/CTRDG_flash_MX29L010.s | 33 ++++++ arm9/asm/CTRDG_flash_MX29L512.s | 23 ++++ 7 files changed, 175 insertions(+), 142 deletions(-) create mode 100644 arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 33661a6b1..fac2074d3 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -457,6 +457,7 @@ Static arm9 Object CTRDG_backup.o Object CTRDG_flash_common.o Object CTRDG_flash_AT29LV512.o + Object CTRDG_flash_LE26FV10N1TS-10.o Object CTRDG_flash_LE39FW512.o Object CTRDG_flash_MX29L010.o Object CTRDG_flash_MX29L512.o diff --git a/arm9/asm/CTRDG_backup.s b/arm9/asm/CTRDG_backup.s index e04344b40..e4c4baa48 100644 --- a/arm9/asm/CTRDG_backup.s +++ b/arm9/asm/CTRDG_backup.s @@ -1,6 +1,7 @@ .include "asm/macros.inc" .include "global.inc" + .extern AT29LV512_lib .extern CTRDGi_EraseFlash4KBAT .extern CTRDGi_EraseFlash4KBAsyncAT .extern CTRDGi_EraseFlashChipAT @@ -26,6 +27,12 @@ .extern CTRDGi_WriteFlashSectorMX .extern CTRDGi_WriteFlashSectorAsyncMX5 .extern CTRDGi_WriteFlashSectorMX5 + .extern defaultFlash1M + .extern defaultFlash512 + .extern LE26FV10N1TS_10 + .extern LE39FW512 + .extern MN63F805MNP + .extern MX29L010 .extern UNK_021D6B14 .extern UNK_021D6B30 .extern UNK_021D6B28 @@ -46,140 +53,16 @@ UNK_02103FE4: ; 0x02103FE4 .global UNK_02103FE8 UNK_02103FE8: ; 0x02103FE8 - .word UNK_02104150 - .word UNK_0210408C - .word UNK_0210418C + .word MX29L010 + .word LE26FV10N1TS_10 + .word defaultFlash1M .global UNK_02103FF4 UNK_02103FF4: ; 0x02103FF4 - .word UNK_0210410C - .word UNK_0210400C - .word UNK_021041D0 - .word UNK_021040D0 - - .global UNK_02104004 -UNK_02104004: ; 0x02104004 - .byte 0x0A, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00 - - .global UNK_0210400C -UNK_0210400C: ; 0x0210400C - .word CTRDGi_WriteFlash4KBAT - .word CTRDGi_EraseFlashChipAT - .word CTRDGi_EraseFlash4KBAT - .word CTRDGi_WriteFlash4KBAsyncAT - .word CTRDGi_EraseFlashChipAsyncAT - .word CTRDGi_EraseFlash4KBAsyncAT - .word CTRDGi_PollingSR512kCOMMON - .word UNK_02104004 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 - - .global UNK_02104048 -UNK_02104048: ; 0x02104048 - .word CTRDGi_WriteFlashSectorAT - .word CTRDGi_EraseFlashChipAT - .word CTRDGi_EraseFlashSectorAT - .word CTRDGi_WriteFlashSectorAsyncAT - .word CTRDGi_EraseFlashChipAsyncAT - .word CTRDGi_EraseFlashSectorAsyncAT - .word CTRDGi_PollingSR512kCOMMON - .word UNK_02104004 - .byte 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 - - .global UNK_02104084 -UNK_02104084: ; 0x02104084 - .byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0x88, 0x13 - - .global UNK_0210408C -UNK_0210408C: ; 0x0210408C - .word CTRDGi_WriteFlashSectorMX - .word CTRDGi_EraseFlashChipMX - .word CTRDGi_EraseFlashSectorMX - .word CTRDGi_WriteFlashSectorAsyncMX - .word CTRDGi_EraseFlashChipAsyncMX - .word CTRDGi_EraseFlashSectorAsyncMX - .word CTRDGi_PollingSR1MCOMMON - .word UNK_02104084 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00 - - .global UNK_021040C8 -UNK_021040C8: ; 0x021040C8 - .byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00 - - .global UNK_021040D0 -UNK_021040D0: ; 0x021040D0 - .word CTRDGi_WriteFlashSectorLE - .word CTRDGi_EraseFlashChipLE - .word CTRDGi_EraseFlashSectorLE - .word CTRDGi_WriteFlashSectorAsyncLE - .word CTRDGi_EraseFlashChipAsyncLE - .word CTRDGi_EraseFlashSectorAsyncLE - .word CTRDGi_PollingSR512kCOMMON - .word UNK_021040C8 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_0210410C -UNK_0210410C: ; 0x0210410C - .word CTRDGi_WriteFlashSectorLE - .word CTRDGi_EraseFlashChipLE - .word CTRDGi_EraseFlashSectorLE - .word CTRDGi_WriteFlashSectorAsyncLE - .word CTRDGi_EraseFlashChipAsyncLE - .word CTRDGi_EraseFlashSectorAsyncLE - .word CTRDGi_PollingSR512kCOMMON - .word UNK_021040C8 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00 - - .global UNK_02104148 -UNK_02104148: ; 0x02104148 - .byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0xD0, 0x07 - - .global UNK_02104150 -UNK_02104150: ; 0x02104150 - .word CTRDGi_WriteFlashSectorMX - .word CTRDGi_EraseFlashChipMX - .word CTRDGi_EraseFlashSectorMX - .word CTRDGi_WriteFlashSectorAsyncMX - .word CTRDGi_EraseFlashChipAsyncMX - .word CTRDGi_EraseFlashSectorAsyncMX - .word CTRDGi_PollingSR1MCOMMON - .word UNK_02104148 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00 - - .global UNK_0210418C -UNK_0210418C: ; 0x0210418C - .word CTRDGi_WriteFlashSectorMX - .word CTRDGi_EraseFlashChipMX - .word CTRDGi_EraseFlashSectorMX - .word CTRDGi_WriteFlashSectorAsyncMX - .word CTRDGi_EraseFlashChipAsyncMX - .word CTRDGi_EraseFlashSectorAsyncMX - .word CTRDGi_PollingSR1MCOMMON - .word UNK_02104148 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021041C8 -UNK_021041C8: ; 0x021041C8 - .byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01 - - .global UNK_021041D0 -UNK_021041D0: ; 0x021041D0 - .word CTRDGi_WriteFlashSectorMX5 - .word CTRDGi_EraseFlashChipLE - .word CTRDGi_EraseFlashSectorLE - .word CTRDGi_WriteFlashSectorAsyncMX5 - .word CTRDGi_EraseFlashChipAsyncLE - .word CTRDGi_EraseFlashSectorAsyncLE - .word CTRDGi_PollingSR512kCOMMON - .word UNK_021041C8 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00 + .word LE39FW512 + .word AT29LV512_lib + .word MN63F805MNP + .word defaultFlash512 .section .bss diff --git a/arm9/asm/CTRDG_flash_AT29LV512.s b/arm9/asm/CTRDG_flash_AT29LV512.s index 33298e6ce..ff80e9474 100644 --- a/arm9/asm/CTRDG_flash_AT29LV512.s +++ b/arm9/asm/CTRDG_flash_AT29LV512.s @@ -1,14 +1,45 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_0210400C + .extern CTRDGi_PollingSR512kCOMMON .extern UNK_021D6B20 .extern UNK_021D6B24 .extern UNK_021D6B0C .extern UNK_021D6B38 - .extern UNK_02104048 .extern UNK_021D6B08 + .section .rodata + + .global atMaxTime +atMaxTime: ; 0x02104004 + .short 10, 40, 0, 40 + + .global AT29LV512_lib +AT29LV512_lib: ; 0x0210400C + .word CTRDGi_WriteFlash4KBAT + .word CTRDGi_EraseFlashChipAT + .word CTRDGi_EraseFlash4KBAT + .word CTRDGi_WriteFlash4KBAsyncAT + .word CTRDGi_EraseFlashChipAsyncAT + .word CTRDGi_EraseFlash4KBAsyncAT + .word CTRDGi_PollingSR512kCOMMON + .word atMaxTime + .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 + + .global AT29LV512_org +AT29LV512_org: ; 0x02104048 + .word CTRDGi_WriteFlashSectorAT + .word CTRDGi_EraseFlashChipAT + .word CTRDGi_EraseFlashSectorAT + .word CTRDGi_WriteFlashSectorAsyncAT + .word CTRDGi_EraseFlashChipAsyncAT + .word CTRDGi_EraseFlashSectorAsyncAT + .word CTRDGi_PollingSR512kCOMMON + .word atMaxTime + .byte 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 + .text arm_func_start CTRDGi_WriteFlashSectorAsyncAT @@ -170,7 +201,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 ldrhs r0, _020DC85C ; =0x000080FF ldmcsia sp!, {r4-r9,lr} bxcs lr - ldr r1, _020DC860 ; =UNK_0210400C + ldr r1, _020DC860 ; =AT29LV512_lib mov r0, r0, lsl #0x15 ldr r1, [r1, #0x24] ldr r4, _020DC864 ; =UNK_021D6B08 @@ -179,7 +210,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 ldrh r0, [r4, #0x0] cmp r0, #0x0 beq _020DC84C - ldr r0, _020DC868 ; =UNK_02104048 + ldr r0, _020DC868 ; =AT29LV512_org ldr r6, [r0, #0x24] mov r5, #0x2 _020DC7F4: @@ -214,9 +245,9 @@ _020DC84C: bx lr .balign 4 _020DC85C: .word 0x000080FF -_020DC860: .word UNK_0210400C +_020DC860: .word AT29LV512_lib _020DC864: .word UNK_021D6B08 -_020DC868: .word UNK_02104048 +_020DC868: .word AT29LV512_org arm_func_start CTRDGi_WriteFlashSectorCoreAT CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C @@ -240,7 +271,7 @@ CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C ldr r1, [r1, #0x0] ldrh r2, [r5, #0x0] ldr r3, [r1, #0x10] - ldr r1, _020DC990 ; =UNK_02104048 + ldr r1, _020DC990 ; =AT29LV512_org bic r2, r2, #0x3 orr r2, r2, r3 strh r2, [r5, #0x0] @@ -296,7 +327,7 @@ _020DC92C: _020DC984: .word UNK_021D6B0C _020DC988: .word 0x04000204 _020DC98C: .word UNK_021D6B20 -_020DC990: .word UNK_02104048 +_020DC990: .word AT29LV512_org _020DC994: .word 0x04000208 _020DC998: .word 0x0A005555 _020DC99C: .word 0x0A002AAA @@ -366,7 +397,7 @@ CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 ldmia r5!, {r0-r3} stmia r4!, {r0-r3} ldr r0, [r5, #0x0] - ldr r1, _020DCB80 ; =UNK_02104048 + ldr r1, _020DCB80 ; =AT29LV512_org str r0, [r4, #0x0] ldr r0, _020DCB84 ; =UNK_021D6B0C ldrh r2, [sp, #0x20] @@ -396,7 +427,7 @@ CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 strb r3, [r1, #0x0] mov r3, #0xa0 strb r3, [r4, #0x0] - ldr r1, _020DCB80 ; =UNK_02104048 + ldr r1, _020DCB80 ; =AT29LV512_org and r4, r0, #0x3 ldr r1, [r1, #0x24] cmp r1, #0x0 @@ -434,7 +465,7 @@ _020DCB18: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020DCB80: .word UNK_02104048 +_020DCB80: .word AT29LV512_org _020DCB84: .word UNK_021D6B0C _020DCB88: .word 0x04000204 _020DCB8C: .word UNK_021D6B20 diff --git a/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s b/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s new file mode 100644 index 000000000..518ac3d72 --- /dev/null +++ b/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s @@ -0,0 +1,29 @@ + .include "asm/macros.inc" + .include "global.inc" + + .extern CTRDGi_EraseFlashChipAsyncMX + .extern CTRDGi_EraseFlashChipMX + .extern CTRDGi_EraseFlashSectorAsyncMX + .extern CTRDGi_EraseFlashSectorMX + .extern CTRDGi_PollingSR1MCOMMON + .extern CTRDGi_WriteFlashSectorAsyncMX + .extern CTRDGi_WriteFlashSectorMX + + .section .rodata + + .global LeMaxTime +LeMaxTime: ; 0x02104084 + .short 10, 10, 2000, 5000 + + .global LE26FV10N1TS_10 +LE26FV10N1TS_10: ; 0x0210408C + .word CTRDGi_WriteFlashSectorMX + .word CTRDGi_EraseFlashChipMX + .word CTRDGi_EraseFlashSectorMX + .word CTRDGi_WriteFlashSectorAsyncMX + .word CTRDGi_EraseFlashChipAsyncMX + .word CTRDGi_EraseFlashSectorAsyncMX + .word CTRDGi_PollingSR1MCOMMON + .word LeMaxTime + .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00 diff --git a/arm9/asm/CTRDG_flash_LE39FW512.s b/arm9/asm/CTRDG_flash_LE39FW512.s index 77071a6d0..b3f4b8a3e 100644 --- a/arm9/asm/CTRDG_flash_LE39FW512.s +++ b/arm9/asm/CTRDG_flash_LE39FW512.s @@ -1,12 +1,45 @@ .include "asm/macros.inc" .include "global.inc" + .extern CTRDGi_PollingSR512kCOMMON .extern UNK_021D6B20 .extern UNK_021D6B24 .extern UNK_021D6B0C .extern UNK_021D6B38 .extern UNK_021D6B08 + .section .rodata + + .global leMaxTime +leMaxTime: ; 0x021040C8 + .byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00 + + .global defaultFlash512 +defaultFlash512: ; 0x021040D0 + .word CTRDGi_WriteFlashSectorLE + .word CTRDGi_EraseFlashChipLE + .word CTRDGi_EraseFlashSectorLE + .word CTRDGi_WriteFlashSectorAsyncLE + .word CTRDGi_EraseFlashChipAsyncLE + .word CTRDGi_EraseFlashSectorAsyncLE + .word CTRDGi_PollingSR512kCOMMON + .word leMaxTime + .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global LE39FW512 +LE39FW512: ; 0x0210410C + .word CTRDGi_WriteFlashSectorLE + .word CTRDGi_EraseFlashChipLE + .word CTRDGi_EraseFlashSectorLE + .word CTRDGi_WriteFlashSectorAsyncLE + .word CTRDGi_EraseFlashChipAsyncLE + .word CTRDGi_EraseFlashSectorAsyncLE + .word CTRDGi_PollingSR512kCOMMON + .word leMaxTime + .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00 + .text arm_func_start CTRDGi_WriteFlashSectorAsyncLE diff --git a/arm9/asm/CTRDG_flash_MX29L010.s b/arm9/asm/CTRDG_flash_MX29L010.s index 646121f3a..5ac28935e 100644 --- a/arm9/asm/CTRDG_flash_MX29L010.s +++ b/arm9/asm/CTRDG_flash_MX29L010.s @@ -1,12 +1,45 @@ .include "asm/macros.inc" .include "global.inc" + .extern CTRDGi_PollingSR1MCOMMON .extern UNK_021D6B20 .extern UNK_021D6B24 .extern UNK_021D6B0C .extern UNK_021D6B38 .extern UNK_021D6B08 + .section .rodata + + .global MxMaxTime +MxMaxTime: ; 0x02104148 + .short 10, 10, 2000, 2000 + + .global MX29L010 +MX29L010: ; 0x02104150 + .word CTRDGi_WriteFlashSectorMX + .word CTRDGi_EraseFlashChipMX + .word CTRDGi_EraseFlashSectorMX + .word CTRDGi_WriteFlashSectorAsyncMX + .word CTRDGi_EraseFlashChipAsyncMX + .word CTRDGi_EraseFlashSectorAsyncMX + .word CTRDGi_PollingSR1MCOMMON + .word MxMaxTime + .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00 + + .global defaultFlash1M +defaultFlash1M: ; 0x0210418C + .word CTRDGi_WriteFlashSectorMX + .word CTRDGi_EraseFlashChipMX + .word CTRDGi_EraseFlashSectorMX + .word CTRDGi_WriteFlashSectorAsyncMX + .word CTRDGi_EraseFlashChipAsyncMX + .word CTRDGi_EraseFlashSectorAsyncMX + .word CTRDGi_PollingSR1MCOMMON + .word MxMaxTime + .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .text arm_func_start CTRDGi_WriteFlashSectorAsyncMX diff --git a/arm9/asm/CTRDG_flash_MX29L512.s b/arm9/asm/CTRDG_flash_MX29L512.s index f075c9f0a..17b501252 100644 --- a/arm9/asm/CTRDG_flash_MX29L512.s +++ b/arm9/asm/CTRDG_flash_MX29L512.s @@ -1,10 +1,33 @@ .include "asm/macros.inc" .include "global.inc" + .extern CTRDGi_EraseFlashChipAsyncLE + .extern CTRDGi_EraseFlashChipLE + .extern CTRDGi_EraseFlashSectorAsyncLE + .extern CTRDGi_PollingSR512kCOMMON .extern UNK_021D6B08 .extern UNK_021D6B20 .extern UNK_021D6B0C + .section .rodata + + .global PaMaxTime +PaMaxTime: ; 0x021041C8 + .byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01 + + .global MN63F805MNP +MN63F805MNP: ; 0x021041D0 + .word CTRDGi_WriteFlashSectorMX5 + .word CTRDGi_EraseFlashChipLE + .word CTRDGi_EraseFlashSectorLE + .word CTRDGi_WriteFlashSectorAsyncMX5 + .word CTRDGi_EraseFlashChipAsyncLE + .word CTRDGi_EraseFlashSectorAsyncLE + .word CTRDGi_PollingSR512kCOMMON + .word PaMaxTime + .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00 + .text arm_func_start CTRDGi_WriteFlashSectorAsyncMX5 From 935da757da3ae35ef3c42ef432bd666d9c78f4fd Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 14 Jan 2021 19:37:51 +0000 Subject: [PATCH 48/59] name some script and text functions --- arm9/asm/scrcmd.s | 2 +- arm9/asm/scrcmd_7.s | 6 +-- arm9/asm/unk_02001B80.s | 14 +++---- arm9/asm/unk_02038C78.s | 36 ++++++++--------- arm9/asm/unk_02048904.s | 4 +- arm9/asm/unk_02054590.s | 4 +- arm9/asm/unk_0205C598.s | 2 +- arm9/asm/unk_020625EC.s | 2 +- arm9/asm/unk_020653EC.s | 2 +- arm9/asm/unk_0206C700.s | 4 +- arm9/asm/unk_02072548.s | 2 +- arm9/asm/unk_02089498.s | 4 +- arm9/global.inc | 10 ++--- arm9/modules/05/asm/mod05_021E1374.s | 2 +- arm9/modules/05/asm/mod05_021E2B80.s | 60 ++++++++++++++-------------- arm9/modules/05/asm/module_05.s | 8 ++-- arm9/modules/06/asm/module_06.s | 14 +++---- arm9/modules/18/asm/module_18.s | 28 ++++++------- arm9/modules/54/asm/module_54.s | 6 +-- arm9/modules/55/asm/module_55.s | 4 +- arm9/modules/56/asm/module_56.s | 24 +++++------ arm9/modules/61/asm/module_61.s | 2 +- arm9/modules/64/asm/module_64.s | 2 +- arm9/modules/65/asm/module_65.s | 2 +- arm9/modules/71/asm/module_71.s | 2 +- arm9/modules/75/asm/module_75.s | 2 +- arm9/modules/76/asm/module_76.s | 2 +- arm9/modules/77/asm/module_77.s | 4 +- arm9/modules/80/asm/module_80.s | 2 +- arm9/modules/82/asm/module_82.s | 2 +- 30 files changed, 129 insertions(+), 129 deletions(-) diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s index 2f0cb3ef9..c5ae760bd 100644 --- a/arm9/asm/scrcmd.s +++ b/arm9/asm/scrcmd.s @@ -2248,7 +2248,7 @@ FUN_0203AAA0: ; 0x0203AAA0 ldr r1, _0203AAF8 ; =UNK_020F34E0 ldr r2, _0203AAF4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r6, #0x0] ldr r1, _0203AAFC ; =FUN_0203AB00 add r0, r5, #0x0 diff --git a/arm9/asm/scrcmd_7.s b/arm9/asm/scrcmd_7.s index 7ae38f491..01c0425f8 100644 --- a/arm9/asm/scrcmd_7.s +++ b/arm9/asm/scrcmd_7.s @@ -366,7 +366,7 @@ FUN_02041970: ; 0x02041970 add r5, r0, #0x0 ldrh r0, [r4, #0x0] bl FUN_020395F4 - bl FUN_0203962C + bl Field_TrainerIsDoubleBattle lsl r0, r0, #0x10 lsr r0, r0, #0x10 bne _020419D2 @@ -430,7 +430,7 @@ FUN_020419F8: ; 0x020419F8 add r5, r0, #0x0 ldrh r0, [r4, #0x0] bl FUN_020395F4 - bl FUN_0203962C + bl Field_TrainerIsDoubleBattle lsl r0, r0, #0x10 lsr r0, r0, #0x10 bne _02041A5A @@ -478,7 +478,7 @@ FUN_02041A80: ; 0x02041A80 add r5, r0, #0x0 ldrh r0, [r4, #0x0] bl FUN_020395F4 - bl FUN_0203962C + bl Field_TrainerIsDoubleBattle strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} diff --git a/arm9/asm/unk_02001B80.s b/arm9/asm/unk_02001B80.s index ff804a2f5..3ad4b3b71 100644 --- a/arm9/asm/unk_02001B80.s +++ b/arm9/asm/unk_02001B80.s @@ -755,8 +755,8 @@ FUN_020020B0: ; 0x020020B0 pop {r3-r7, pc} .balign 4 - thumb_func_start FUN_020020EC -FUN_020020EC: ; 0x020020EC + thumb_func_start CreateYesNoMenu +CreateYesNoMenu: ; 0x020020EC push {r3-r7, lr} sub sp, #0x20 ldr r5, [sp, #0x3c] @@ -777,13 +777,13 @@ FUN_020020EC: ; 0x020020EC mov r2, #0x29 mov r3, #0x0 add r6, r0, #0x0 - bl ListMenu_ItemFromMsgData + bl ListMenu_ItemFromMsgData ; YES mov r3, #0x2a add r2, r3, #0x0 add r0, r6, #0x0 add r1, r4, #0x0 sub r3, #0x2c - bl ListMenu_ItemFromMsgData + bl ListMenu_ItemFromMsgData ; NO add r0, r4, #0x0 bl DestroyMsgData add r0, r5, #0x0 @@ -834,15 +834,15 @@ FUN_020020EC: ; 0x020020EC nop _02002194: .word 0x00000141 - thumb_func_start FUN_02002198 -FUN_02002198: ; 0x02002198 + thumb_func_start Std_CreateYesNoMenu +Std_CreateYesNoMenu: ; 0x02002198 push {r4, lr} sub sp, #0x8 mov r4, #0x0 str r4, [sp, #0x0] ldr r4, [sp, #0x10] str r4, [sp, #0x4] - bl FUN_020020EC + bl CreateYesNoMenu add sp, #0x8 pop {r4, pc} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index d16d93f23..f35fd58eb 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -879,7 +879,7 @@ FUN_02038C78: ; 0x02038C78 add r5, r0, #0x0 add r6, r1, #0x0 add r7, r2, #0x0 - bl FUN_02038E20 + bl CreateFieldContext add r4, r0, #0x0 mov r0, #0x0 str r0, [sp, #0x0] @@ -932,7 +932,7 @@ FUN_02038CD8: ; 0x02038CD8 add r5, r3, #0x0 bl FUN_02046528 str r0, [sp, #0x8] - bl FUN_02038E20 + bl CreateFieldContext add r4, r0, #0x0 ldr r0, [sp, #0x8] ldr r3, [sp, #0x4] @@ -958,7 +958,7 @@ FUN_02038D10: ; 0x02038D10 add r7, r2, #0x0 bl FUN_02046528 str r0, [sp, #0x4] - bl FUN_02038E20 + bl CreateFieldContext add r4, r0, #0x0 mov r0, #0x0 str r0, [sp, #0x0] @@ -1031,7 +1031,7 @@ _02038DA8: cmp r0, #0x0 bne _02038DD2 add r0, r6, #0x0 - bl FUN_02038E48 + bl DeleteScriptContext ldrb r0, [r4, #0x9] cmp r0, #0x0 bne _02038DC8 @@ -1081,8 +1081,8 @@ _02038E1A: add sp, #0x8 pop {r3-r7, pc} - thumb_func_start FUN_02038E20 -FUN_02038E20: ; 0x02038E20 + thumb_func_start CreateFieldContext +CreateFieldContext: ; 0x02038E20 push {r4, lr} mov r0, #0xb mov r1, #0xdc @@ -1102,8 +1102,8 @@ _02038E32: .balign 4 _02038E44: .word 0x0003643F - thumb_func_start FUN_02038E48 -FUN_02038E48: ; 0x02038E48 + thumb_func_start DeleteScriptContext +DeleteScriptContext: ; 0x02038E48 push {r4, lr} add r4, r0, #0x0 ldr r0, [r4, #0x78] @@ -2139,8 +2139,8 @@ _02039622: nop _02039628: .word 0x00001388 - thumb_func_start FUN_0203962C -FUN_0203962C: ; 0x0203962C + thumb_func_start Field_TrainerIsDoubleBattle +Field_TrainerIsDoubleBattle: ; 0x0203962C push {r3, lr} mov r1, #0x9 bl TrainerData_GetAttr @@ -2443,17 +2443,17 @@ _02039856: nop _02039870: .word 0x0000FFFF - thumb_func_start FUN_02039874 -FUN_02039874: ; 0x02039874 - ldr r3, _0203987C ; =FUN_02039880 + thumb_func_start RunPokemonCenterScriptsInNewContext +RunPokemonCenterScriptsInNewContext: ; 0x02039874 + ldr r3, _0203987C ; =RunScriptInNewContext mov r1, #0x96 lsl r1, r1, #0x6 bx r3 .balign 4 -_0203987C: .word FUN_02039880 +_0203987C: .word RunScriptInNewContext - thumb_func_start FUN_02039880 -FUN_02039880: ; 0x02039880 + thumb_func_start RunScriptInNewContext +RunScriptInNewContext: ; 0x02039880 push {r4, lr} bl CreateScriptContext add r4, r0, #0x0 @@ -2463,7 +2463,7 @@ _02039888: cmp r0, #0x1 beq _02039888 add r0, r4, #0x0 - bl FUN_02038E48 + bl DeleteScriptContext pop {r4, pc} .balign 4 @@ -2503,7 +2503,7 @@ _020398CE: b _020398E2 _020398DC: add r0, r5, #0x0 - bl FUN_02039880 + bl RunScriptInNewContext _020398E2: mov r0, #0x1 pop {r3-r5, pc} diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index 4ca213506..d9259556c 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -599,7 +599,7 @@ FUN_02048D90: ; 0x02048D90 add r4, r0, #0x0 mov r1, #0x0 str r1, [r4, #0x6c] - bl FUN_02039874 + bl RunPokemonCenterScriptsInNewContext ldr r1, _02048DA8 ; =FUN_02048D34 add r0, r4, #0x0 mov r2, #0x0 @@ -2040,7 +2040,7 @@ _020498DC: ldr r0, [r5, #0x8] ldr r1, _02049ABC ; =UNK_020F46D8 ldr r2, _02049AB8 ; =0x000003D9 - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x3c] mov r0, #0x2 str r0, [r4, #0x0] diff --git a/arm9/asm/unk_02054590.s b/arm9/asm/unk_02054590.s index c4969083c..6f52c9678 100644 --- a/arm9/asm/unk_02054590.s +++ b/arm9/asm/unk_02054590.s @@ -131,8 +131,8 @@ FUN_02054658: ; 0x02054658 add sp, #0xc pop {r3-r6, pc} - thumb_func_start FUN_02054690 -FUN_02054690: ; 0x02054690 + thumb_func_start DrawFieldMessage +DrawFieldMessage: ; 0x02054690 push {r4-r7, lr} sub sp, #0xc add r5, r0, #0x0 diff --git a/arm9/asm/unk_0205C598.s b/arm9/asm/unk_0205C598.s index 8429979f7..ac7a6808d 100644 --- a/arm9/asm/unk_0205C598.s +++ b/arm9/asm/unk_0205C598.s @@ -241,7 +241,7 @@ FUN_0205C73C: ; 0x0205C73C str r0, [r5, #0xc] lsl r0, r0, #0x10 lsr r0, r0, #0x10 - bl FUN_0203962C + bl Field_TrainerIsDoubleBattle str r0, [r5, #0x10] str r4, [r5, #0x14] pop {r3-r5, pc} diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s index e60a5b4f7..8383e9bba 100644 --- a/arm9/asm/unk_020625EC.s +++ b/arm9/asm/unk_020625EC.s @@ -430,7 +430,7 @@ FUN_020628BC: ; 0x020628BC ldr r0, [r0, #0x0] ldr r2, _020628E4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu add r4, #0xc8 str r0, [r4, #0x0] add sp, #0x4 diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s index 74da05c09..45f5de1da 100644 --- a/arm9/asm/unk_020653EC.s +++ b/arm9/asm/unk_020653EC.s @@ -2192,7 +2192,7 @@ FUN_02066520: ; 0x02066520 ldr r0, [r4, r0] ldr r2, _02066548 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5a lsl r1, r1, #0x2 str r0, [r4, r1] diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index 7fa07ac06..8e89581ca 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -1314,7 +1314,7 @@ _0206D1F0: ldr r0, [r4, #0x0] mov r2, #0x1 mov r3, #0x8 - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x40] add r0, r4, #0x0 add r0, #0x64 @@ -1537,7 +1537,7 @@ _0206D3CC: ldr r0, [r4, #0x0] mov r2, #0x1 mov r3, #0x8 - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x40] add r0, r4, #0x0 add r0, #0x64 diff --git a/arm9/asm/unk_02072548.s b/arm9/asm/unk_02072548.s index f35f769c5..5b3ed0a35 100644 --- a/arm9/asm/unk_02072548.s +++ b/arm9/asm/unk_02072548.s @@ -1741,7 +1741,7 @@ FUN_020732CC: ; 0x020732CC ldr r1, _020732EC ; =UNK_020F96EC mov r2, #0x1 mov r3, #0xe - bl FUN_02002198 + bl Std_CreateYesNoMenu ldr r1, _020732F0 ; =0x000006FC str r0, [r4, r1] add sp, #0x4 diff --git a/arm9/asm/unk_02089498.s b/arm9/asm/unk_02089498.s index 82d06472c..e4ce48cff 100644 --- a/arm9/asm/unk_02089498.s +++ b/arm9/asm/unk_02089498.s @@ -415,7 +415,7 @@ _020897B8: ldr r0, [r4, #0x14] ldr r2, _02089894 ; =0x000001D9 mov r3, #0x3 - bl FUN_020020EC + bl CreateYesNoMenu str r0, [r4, #0x2c] mov r0, #0x1 str r0, [r4, #0x4] @@ -453,7 +453,7 @@ _02089802: ldr r0, [r4, #0x14] ldr r2, _02089894 ; =0x000001D9 mov r3, #0x3 - bl FUN_020020EC + bl CreateYesNoMenu str r0, [r4, #0x2c] mov r0, #0x3 str r0, [r4, #0x4] diff --git a/arm9/global.inc b/arm9/global.inc index 65781a0ce..d703c8eb6 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -212,8 +212,8 @@ .extern FUN_02001DDC .extern FUN_02001E5C .extern FUN_02001E60 -.extern FUN_020020EC -.extern FUN_02002198 +.extern CreateYesNoMenu +.extern Std_CreateYesNoMenu .extern FUN_020021AC .extern FUN_020021CC .extern FUN_020021EC @@ -2691,13 +2691,13 @@ .extern FUN_020395BC .extern FUN_020395F4 .extern FUN_02039618 -.extern FUN_0203962C +.extern Field_TrainerIsDoubleBattle .extern TrainerFlagCheck .extern TrainerFlagSet .extern TrainerFlagClear .extern FUN_02039694 .extern FUN_02039754 -.extern FUN_02039874 +.extern RunPokemonCenterScriptsInNewContext .extern FUN_0203989C .extern ScrCmd_nop .extern ScrCmd_nop2 @@ -3804,7 +3804,7 @@ .extern FUN_02054608 .extern FUN_0205464C .extern FUN_02054658 -.extern FUN_02054690 +.extern DrawFieldMessage .extern FUN_020546C8 .extern FUN_020546E0 .extern FUN_02054744 diff --git a/arm9/modules/05/asm/mod05_021E1374.s b/arm9/modules/05/asm/mod05_021E1374.s index e3bb69a4e..df43ddb97 100644 --- a/arm9/modules/05/asm/mod05_021E1374.s +++ b/arm9/modules/05/asm/mod05_021E1374.s @@ -915,7 +915,7 @@ MOD05_021E1A30: ; 0x021E1A30 str r0, [sp, #0xc] bl FUN_020395F4 str r0, [sp, #8] - bl FUN_0203962C + bl Field_TrainerIsDoubleBattle cmp r0, #0 bne _021E1A60 add sp, #0x10 diff --git a/arm9/modules/05/asm/mod05_021E2B80.s b/arm9/modules/05/asm/mod05_021E2B80.s index 2722d1770..16e19ae01 100644 --- a/arm9/modules/05/asm/mod05_021E2B80.s +++ b/arm9/modules/05/asm/mod05_021E2B80.s @@ -42,7 +42,7 @@ MOD05_021E2BB8: ; 0x021E2BB8 push {r4, lr} add r4, r0, #0 add r0, r1, #0 - bl MOD05_021E2D00 + bl MOD05_ScriptContext_GetTextFrameDelay strb r0, [r4] mov r0, #0 strb r0, [r4, #1] @@ -68,15 +68,15 @@ MOD05_021E2BD0: ; 0x021E2BD0 add r0, #0x80 ldr r0, [r0] add r1, sp, #8 - bl MOD05_021E2D9C + bl MOD05_CreateMessageBox add r0, sp, #8 add r1, r6, #0 add r2, r7, #0 - bl MOD05_021E2DD4 + bl MOD05_ReadAndExpandMsgDataViaBuffer cmp r4, #0 bne _021E2C10 add r0, r5, #0 - bl MOD05_021E2D00 + bl MOD05_ScriptContext_GetTextFrameDelay add r2, r0, #0 mov r0, #0 mov r1, #1 @@ -89,7 +89,7 @@ _021E2C16: str r0, [sp] ldr r3, [sp, #4] add r0, sp, #8 - bl MOD05_021E2E40 + bl MOD05_DrawFieldMessage add sp, #0x20 pop {r3, r4, r5, r6, r7, pc} @@ -107,14 +107,14 @@ MOD05_ShowMessageInField: ; 0x021E2C24 add r5, #0x80 ldr r0, [r5] add r1, sp, #0 - bl MOD05_021E2D9C + bl MOD05_CreateMessageBox add r0, sp, #0 add r1, r4, #0 add r2, r6, #0 - bl MOD05_021E2DD4 + bl MOD05_ReadAndExpandMsgDataViaBuffer add r0, sp, #0 mov r1, #1 - bl MOD05_021E2E68 + bl MOD05_AddTextPrinterParameterized add sp, #0x18 pop {r4, r5, r6, pc} @@ -134,7 +134,7 @@ MOD05_021E2C58: ; 0x021E2C58 add r0, #0x80 ldr r0, [r0] add r1, sp, #4 - bl MOD05_021E2D9C + bl MOD05_CreateMessageBox add r0, sp, #0x20 ldrh r0, [r0, #0x10] add r1, r4, #0 @@ -142,13 +142,13 @@ MOD05_021E2C58: ; 0x021E2C58 str r0, [sp] add r0, sp, #4 add r3, r7, #0 - bl MOD05_021E2DF0 + bl MOD05_ExpandEasyChatMessage add r0, sp, #0x20 ldrb r0, [r0, #0x14] cmp r0, #0xff beq _021E2CB0 add r0, r5, #0 - bl MOD05_021E2D00 + bl MOD05_ScriptContext_GetTextFrameDelay add r2, r0, #0 mov r0, #0 str r0, [sp] @@ -156,13 +156,13 @@ MOD05_021E2C58: ; 0x021E2C58 ldrb r3, [r3, #0x14] add r0, sp, #4 mov r1, #1 - bl MOD05_021E2E40 + bl MOD05_DrawFieldMessage add sp, #0x1c pop {r4, r5, r6, r7, pc} _021E2CB0: add r0, sp, #4 mov r1, #1 - bl MOD05_021E2E68 + bl MOD05_AddTextPrinterParameterized add sp, #0x1c pop {r4, r5, r6, r7, pc} @@ -181,25 +181,25 @@ MOD05_021E2CBC: ; 0x021E2CBC add r0, #0x80 ldr r0, [r0] add r1, sp, #4 - bl MOD05_021E2D9C + bl MOD05_CreateMessageBox ldr r1, [r5, #0x78] add r0, sp, #4 add r2, r4, #0 - bl MOD05_021E2DD4 + bl MOD05_ReadAndExpandMsgDataViaBuffer add r0, r5, #0 - bl MOD05_021E2D00 + bl MOD05_ScriptContext_GetTextFrameDelay add r2, r0, #0 mov r0, #0 str r0, [sp] add r0, sp, #4 mov r1, #1 add r3, r6, #0 - bl MOD05_021E2E40 + bl MOD05_DrawFieldMessage add sp, #0x1c pop {r3, r4, r5, r6, pc} - thumb_func_start MOD05_021E2D00 -MOD05_021E2D00: ; 0x021E2D00 + thumb_func_start MOD05_ScriptContext_GetTextFrameDelay +MOD05_ScriptContext_GetTextFrameDelay: ; 0x021E2D00 push {r3, lr} add r0, #0x80 ldr r0, [r0] @@ -272,8 +272,8 @@ MOD05_021E2D5C: ; 0x021E2D5C str r0, [r4, #0x14] pop {r4, r5, r6, pc} - thumb_func_start MOD05_021E2D9C -MOD05_021E2D9C: ; 0x021E2D9C + thumb_func_start MOD05_CreateMessageBox +MOD05_CreateMessageBox: ; 0x021E2D9C push {r3, r4, r5, lr} add r4, r1, #0 add r5, r0, #0 @@ -300,8 +300,8 @@ _021E2DC8: pop {r3, r4, r5, pc} .balign 4, 0 - thumb_func_start MOD05_021E2DD4 -MOD05_021E2DD4: ; 0x021E2DD4 + thumb_func_start MOD05_ReadAndExpandMsgDataViaBuffer +MOD05_ReadAndExpandMsgDataViaBuffer: ; 0x021E2DD4 push {r4, lr} add r4, r0, #0 add r0, r1, #0 @@ -315,8 +315,8 @@ MOD05_021E2DD4: ; 0x021E2DD4 pop {r4, pc} .balign 4, 0 - thumb_func_start MOD05_021E2DF0 -MOD05_021E2DF0: ; 0x021E2DF0 + thumb_func_start MOD05_ExpandEasyChatMessage +MOD05_ExpandEasyChatMessage: ; 0x021E2DF0 push {r3, r4, r5, r6, r7, lr} sub sp, #8 add r5, r0, #0 @@ -351,8 +351,8 @@ MOD05_021E2DF0: ; 0x021E2DF0 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 - thumb_func_start MOD05_021E2E40 -MOD05_021E2E40: ; 0x021E2E40 + thumb_func_start MOD05_DrawFieldMessage +MOD05_DrawFieldMessage: ; 0x021E2E40 push {r4, r5, r6, lr} sub sp, #8 add r4, r0, #0 @@ -367,14 +367,14 @@ MOD05_021E2E40: ; 0x021E2E40 ldr r1, [r4] add r2, r6, #0 add r3, r5, #0 - bl FUN_02054690 + bl DrawFieldMessage ldr r1, [r4, #0x14] strb r0, [r1] add sp, #8 pop {r4, r5, r6, pc} - thumb_func_start MOD05_021E2E68 -MOD05_021E2E68: ; 0x021E2E68 + thumb_func_start MOD05_AddTextPrinterParameterized +MOD05_AddTextPrinterParameterized: ; 0x021E2E68 push {r3, r4, lr} sub sp, #0xc mov r3, #0 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 597bd0833..23f6ea7bb 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -14988,7 +14988,7 @@ MOD05_021EFD40: ; 0x021EFD40 ldr r0, [r0, #8] ldr r2, _021EFD78 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x44] mov r0, #3 str r0, [r4, #0x48] @@ -15079,7 +15079,7 @@ MOD05_021EFDF0: ; 0x021EFDF0 ldr r0, [r0, #8] ldr r2, _021EFE28 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x44] mov r0, #5 str r0, [r4, #0x48] @@ -15145,7 +15145,7 @@ MOD05_021EFE70: ; 0x021EFE70 ldr r0, [r0, #8] ldr r2, _021EFEA8 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x44] mov r0, #7 str r0, [r4, #0x48] @@ -15392,7 +15392,7 @@ MOD05_021F0080: ; 0x021F0080 ldr r0, [r0, #8] ldr r2, _021F00B8 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x44] mov r0, #0xb str r0, [r4, #0x48] diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index ac0c3eeb1..d39eedbdb 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -10293,7 +10293,7 @@ _0223E5FE: ldr r0, [r4] ldr r1, _0223E618 ; =0x0224F348 mov r2, #0x1f - bl FUN_02002198 + bl Std_CreateYesNoMenu add r4, #0x80 str r0, [r4] mov r0, #8 @@ -12384,7 +12384,7 @@ MOD06_0223F720: ; 0x0223F720 ldr r0, [r0, #0x68] mov r3, #0xb ldr r0, [r0, #8] - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x60] ldr r0, _0223F76C ; =MOD06_0223F770 bl MOD06_0223F8BC @@ -13438,7 +13438,7 @@ MOD06_0223FFD4: ; 0x0223FFD4 ldr r0, [r0, #0x68] mov r3, #0xb ldr r0, [r0, #8] - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x60] ldr r0, _0224002C ; =MOD06_02240030 bl MOD06_0223F8BC @@ -13698,7 +13698,7 @@ MOD06_02240204: ; 0x02240204 ldr r0, [r0, #0x68] mov r3, #0xb ldr r0, [r0, #8] - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x60] ldr r0, _02240254 ; =MOD06_02240258 bl MOD06_0223F8BC @@ -13821,7 +13821,7 @@ MOD06_02240310: ; 0x02240310 ldr r0, [r0, #0x68] mov r3, #0xb ldr r0, [r0, #8] - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x60] ldr r0, _02240360 ; =MOD06_0223FD08 bl MOD06_0223F8BC @@ -19372,7 +19372,7 @@ _02242FA6: ldr r0, [r0, #8] ldr r2, _02242FE8 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x64] add r0, r4, #0 mov r1, #0x24 @@ -42800,7 +42800,7 @@ MOD06_0224E470: ; 0x0224E470 mov r2, #0x1f mov r3, #0xb str r4, [sp] - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r5, #4] str r4, [r5, #8] mov r0, #1 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index d09c0d20c..6581e6797 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -1223,7 +1223,7 @@ MOD18_02239F98: ; 0x02239F98 ldr r0, [r0] mov r3, #0xb ldr r0, [r0, #8] - bl FUN_02002198 + bl Std_CreateYesNoMenu ldr r2, _0223A044 ; =0x02251380 ldr r1, _0223A050 ; =0x000007E4 ldr r3, [r2] @@ -25227,7 +25227,7 @@ _02245898: ldr r1, _022459E0 ; =0x022504F8 ldr r2, _022459E4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #4] mov r0, #2 str r0, [r4, #0xc] @@ -25262,7 +25262,7 @@ _022458D4: ldr r1, _022459E0 ; =0x022504F8 ldr r2, _022459E4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #4] mov r0, #4 str r0, [r4, #0xc] @@ -25302,7 +25302,7 @@ _0224592A: ldr r1, _022459E0 ; =0x022504F8 ldr r2, _022459E4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #4] mov r0, #6 str r0, [r4, #0xc] @@ -25669,7 +25669,7 @@ _02245C14: ldr r1, _02245E08 ; =0x022504F8 ldr r2, _02245E0C ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #4] mov r0, #2 str r0, [r4, #0xc] @@ -25715,7 +25715,7 @@ _02245C7C: ldr r1, _02245E08 ; =0x022504F8 ldr r2, _02245E0C ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #4] mov r0, #5 str r0, [r4, #0xc] @@ -27379,7 +27379,7 @@ _022469E0: ldr r1, _02246AD8 ; =0x022504F8 ldr r2, _02246ADC ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #8] mov r0, #6 str r0, [r4, #0xc] @@ -30583,7 +30583,7 @@ _0224830C: ldr r0, [r0, #8] ldr r2, _022484D4 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x24] add r0, r4, #0 mov r1, #0x14 @@ -31535,7 +31535,7 @@ _02248AAE: ldr r0, [r0, #8] ldr r2, _02248D94 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x20] b _02248DB6 _02248AD8: @@ -31664,7 +31664,7 @@ _02248BC2: ldr r0, [r0, #8] ldr r2, _02248D94 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x20] b _02248DB6 _02248BEC: @@ -35073,7 +35073,7 @@ MOD18_0224A710: ; 0x0224A710 ldr r0, [r0, #8] ldr r2, _0224A744 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x5c] ldr r0, _0224A748 ; =0x00000246 mov r1, #0xc @@ -35224,7 +35224,7 @@ MOD18_0224A844: ; 0x0224A844 ldr r0, [r0, #8] ldr r2, _0224A878 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x5c] ldr r0, _0224A87C ; =0x00000246 mov r1, #1 @@ -37895,7 +37895,7 @@ _0224BE0A: ldr r0, [r0, #8] ldr r2, _0224BE80 ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #8] mov r0, #1 str r0, [r4] @@ -40208,7 +40208,7 @@ _0224D0DA: ldr r0, [r0, #8] ldr r2, _0224D1EC ; =0x000003D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r4, #0x5c] ldr r0, _0224D1D8 ; =0x00000246 mov r1, #0xe diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index 11026c327..49c51d112 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -1502,7 +1502,7 @@ MOD54_021D8120: ; 0x021D8120 ldr r1, _021D814C ; =0x021D9678 mov r2, #0x1f mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x32 lsl r1, r1, #4 str r0, [r5, r1] @@ -1767,7 +1767,7 @@ MOD54_021D8340: ; 0x021D8340 ldr r1, _021D836C ; =0x021D9678 mov r2, #0x1f mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x32 lsl r1, r1, #4 str r0, [r5, r1] @@ -2128,7 +2128,7 @@ MOD54_021D8600: ; 0x021D8600 ldr r1, _021D862C ; =0x021D9678 mov r2, #0x1f mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x32 lsl r1, r1, #4 str r0, [r5, r1] diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index 8c06cc76e..b6f57d67e 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -2031,7 +2031,7 @@ MOD55_021D8544: ; 0x021D8544 ldr r1, _021D857C ; =0x021DA2AC ldr r2, _021D8580 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu add r1, r5, #0 add r1, #0xe8 str r0, [r1] @@ -5253,7 +5253,7 @@ MOD55_021D9FDC: ; 0x021D9FDC ldr r1, _021DA014 ; =0x021DA2AC ldr r2, _021DA018 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu add r1, r5, #0 add r1, #0xe8 str r0, [r1] diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 309d4cc02..97d746da8 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -1565,7 +1565,7 @@ _02212A9A: ldr r1, _02212B34 ; =0x02216310 ldr r2, _02212B38 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -1627,7 +1627,7 @@ MOD56_02212B3C: ; 0x02212B3C ldr r1, _02212B7C ; =0x022162F8 ldr r2, _02212B80 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -1727,7 +1727,7 @@ MOD56_02212BE8: ; 0x02212BE8 ldr r1, _02212C48 ; =0x02216310 ldr r2, _02212C4C ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -1786,7 +1786,7 @@ _02212C74: ldr r1, _02212CC4 ; =0x02216310 ldr r2, _02212CC8 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -2378,7 +2378,7 @@ MOD56_022130F4: ; 0x022130F4 ldr r1, _02213134 ; =0x02216308 ldr r2, _02213138 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -4575,7 +4575,7 @@ MOD56_02214238: ; 0x02214238 ldr r1, _02214284 ; =0x02216308 ldr r2, _02214288 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -4968,7 +4968,7 @@ MOD56_02214520: ; 0x02214520 ldr r1, _02214560 ; =0x02216308 ldr r2, _02214564 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -6212,7 +6212,7 @@ MOD56_02214F0C: ; 0x02214F0C ldr r1, _02214F4C ; =0x02216308 ldr r2, _02214F50 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -6317,7 +6317,7 @@ MOD56_02214FD8: ; 0x02214FD8 ldr r1, _02215018 ; =0x02216308 ldr r2, _0221501C ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -7646,7 +7646,7 @@ MOD56_02215A8C: ; 0x02215A8C ldr r1, _02215ACC ; =0x02216308 ldr r2, _02215AD0 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -7831,7 +7831,7 @@ _02215BF0: ldr r1, _02215C28 ; =0x02216308 ldr r2, _02215C2C ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] @@ -7985,7 +7985,7 @@ MOD56_02215D20: ; 0x02215D20 ldr r1, _02215D60 ; =0x02216308 ldr r2, _02215D64 ; =0x000001D9 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x5f lsl r1, r1, #2 str r0, [r5, r1] diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index 861757e80..ed38301bd 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -374,7 +374,7 @@ MOD61_021D7790: ; 0x021D7790 ldr r0, [r4, #0x18] mov r2, #1 mov r3, #5 - bl FUN_02002198 + bl Std_CreateYesNoMenu add r4, #0xa4 str r0, [r4] add sp, #4 diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s index 71dc63ea3..645c9569a 100644 --- a/arm9/modules/64/asm/module_64.s +++ b/arm9/modules/64/asm/module_64.s @@ -2212,7 +2212,7 @@ _021D8604: ldr r2, _021D86D8 ; =0x0000029E add r1, #0xb0 mov r3, #1 - bl FUN_02002198 + bl Std_CreateYesNoMenu add r1, r4, #0 add r1, #0xb8 str r0, [r1] diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s index 25ca7a888..4ff5aca1a 100644 --- a/arm9/modules/65/asm/module_65.s +++ b/arm9/modules/65/asm/module_65.s @@ -2418,7 +2418,7 @@ MOD65_021D87B0: ; 0x021D87B0 ldr r0, [r4, #0x24] mov r2, #0x1f mov r3, #0xf - bl FUN_02002198 + bl Std_CreateYesNoMenu add r4, #0xd4 str r0, [r4] add sp, #4 diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index 21cf712a8..e7f0b24d5 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -7038,7 +7038,7 @@ _02230FC8: ldr r1, _02230FFC ; =0x022313CC ldr r2, _02231000 ; =0x000001F7 mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu str r0, [r5] ldr r0, [r4] add r0, r0, #1 diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s index 214736ee5..87c9c55a5 100644 --- a/arm9/modules/75/asm/module_75.s +++ b/arm9/modules/75/asm/module_75.s @@ -9515,7 +9515,7 @@ MOD75_021EB6E0: ; 0x021EB6E0 ldr r1, _021EB700 ; =0x021EC6AC ldr r2, _021EB704 ; =0x000003F7 mov r3, #0xe - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x56 lsl r1, r1, #2 str r0, [r4, r1] diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s index 7f49e675c..d81a76974 100644 --- a/arm9/modules/76/asm/module_76.s +++ b/arm9/modules/76/asm/module_76.s @@ -735,7 +735,7 @@ MOD76_021D7AB4: ; 0x021D7AB4 ldr r1, _021D7AD8 ; =0x021D9034 mov r2, #1 mov r3, #0xc - bl FUN_02002198 + bl Std_CreateYesNoMenu mov r1, #0x43 lsl r1, r1, #2 str r0, [r4, r1] diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s index 678242227..4536decb5 100644 --- a/arm9/modules/77/asm/module_77.s +++ b/arm9/modules/77/asm/module_77.s @@ -291,7 +291,7 @@ _021D7744: ldr r2, _021D7998 ; =0x000001D9 ldr r0, [r4, r0] mov r3, #7 - bl FUN_02002198 + bl Std_CreateYesNoMenu ldr r1, _021D799C ; =0x0000C05C str r0, [r4, r1] mov r0, #6 @@ -499,7 +499,7 @@ _021D78EE: ldr r2, _021D7998 ; =0x000001D9 ldr r0, [r4, r0] mov r3, #7 - bl FUN_02002198 + bl Std_CreateYesNoMenu ldr r1, _021D799C ; =0x0000C05C str r0, [r4, r1] mov r0, #0xd diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index ef7fab2d5..9e91c64e7 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -2192,7 +2192,7 @@ MOD80_0222E6A8: ; 0x0222E6A8 add r1, r3, #0 mov r2, #0x1f mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu add sp, #0xc pop {r3, r4, r5, r6, pc} .align 2, 0 diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 89f24d967..f1cd74ed0 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -1230,7 +1230,7 @@ MOD82_0222DF38: ; 0x0222DF38 add r1, r3, #0 mov r2, #0x1f mov r3, #0xb - bl FUN_02002198 + bl Std_CreateYesNoMenu add sp, #0xc pop {r3, r4, r5, r6, pc} .align 2, 0 From 1fc2021e29935b1b4930203ba7ec1a2b0380d9cb Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 14 Jan 2021 21:28:45 +0000 Subject: [PATCH 49/59] decompile CTRDG_backup --- arm9/asm/CTRDG_backup.s | 189 ------------------------------- arm9/asm/CTRDG_flash_AT29LV512.s | 48 ++++---- arm9/asm/CTRDG_flash_LE39FW512.s | 64 +++++------ arm9/asm/CTRDG_flash_MX29L010.s | 56 ++++----- arm9/asm/CTRDG_flash_MX29L512.s | 16 +-- arm9/asm/CTRDG_flash_common.s | 80 ++++++------- arm9/lib/include/CTRDG_backup.h | 41 +++++++ arm9/lib/include/CTRDG_flash.h | 25 ++++ arm9/lib/include/CTRDG_task.h | 25 ++++ arm9/lib/include/MI_exMemory.h | 18 +++ arm9/lib/src/CTRDG_backup.c | 94 +++++++++++++++ 11 files changed, 335 insertions(+), 321 deletions(-) delete mode 100644 arm9/asm/CTRDG_backup.s create mode 100644 arm9/lib/include/CTRDG_backup.h create mode 100644 arm9/lib/include/CTRDG_flash.h create mode 100644 arm9/lib/include/CTRDG_task.h create mode 100644 arm9/lib/src/CTRDG_backup.c diff --git a/arm9/asm/CTRDG_backup.s b/arm9/asm/CTRDG_backup.s deleted file mode 100644 index e4c4baa48..000000000 --- a/arm9/asm/CTRDG_backup.s +++ /dev/null @@ -1,189 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern AT29LV512_lib - .extern CTRDGi_EraseFlash4KBAT - .extern CTRDGi_EraseFlash4KBAsyncAT - .extern CTRDGi_EraseFlashChipAT - .extern CTRDGi_EraseFlashChipAsyncAT - .extern CTRDGi_EraseFlashChipAsyncLE - .extern CTRDGi_EraseFlashChipAsyncMX - .extern CTRDGi_EraseFlashChipLE - .extern CTRDGi_EraseFlashChipMX - .extern CTRDGi_EraseFlashSectorAT - .extern CTRDGi_EraseFlashSectorAsyncAT - .extern CTRDGi_EraseFlashSectorAsyncLE - .extern CTRDGi_EraseFlashSectorAsyncMX - .extern CTRDGi_EraseFlashSectorMX - .extern CTRDGi_PollingSR1MCOMMON - .extern CTRDGi_PollingSR512kCOMMON - .extern CTRDGi_WriteFlash4KBAT - .extern CTRDGi_WriteFlash4KBAsyncAT - .extern CTRDGi_WriteFlashSectorAT - .extern CTRDGi_WriteFlashSectorAsyncAT - .extern CTRDGi_WriteFlashSectorAsyncLE - .extern CTRDGi_WriteFlashSectorAsyncMX - .extern CTRDGi_WriteFlashSectorLE - .extern CTRDGi_WriteFlashSectorMX - .extern CTRDGi_WriteFlashSectorAsyncMX5 - .extern CTRDGi_WriteFlashSectorMX5 - .extern defaultFlash1M - .extern defaultFlash512 - .extern LE26FV10N1TS_10 - .extern LE39FW512 - .extern MN63F805MNP - .extern MX29L010 - .extern UNK_021D6B14 - .extern UNK_021D6B30 - .extern UNK_021D6B28 - .extern UNK_021D6B1C - .extern UNK_021D6B24 - .extern UNK_021D6B20 - .extern UNK_021D6B0C - .extern UNK_021D6B34 - .extern UNK_021D6B2C - .extern UNK_021D6B4C - .extern UNK_021D6B18 - - .section .rodata - - .global UNK_02103FE4 -UNK_02103FE4: ; 0x02103FE4 - .byte 0x14, 0x00, 0x00, 0x00 - - .global UNK_02103FE8 -UNK_02103FE8: ; 0x02103FE8 - .word MX29L010 - .word LE26FV10N1TS_10 - .word defaultFlash1M - - .global UNK_02103FF4 -UNK_02103FF4: ; 0x02103FF4 - .word LE39FW512 - .word AT29LV512_lib - .word MN63F805MNP - .word defaultFlash512 - - .section .bss - - .text - - arm_func_start CTRDG_IdentifyAgbBackup -CTRDG_IdentifyAgbBackup: ; 0x020DBD50 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - cmp r7, #0x1 - mov r0, #0x1 - bhi _020DBEAC - bl OS_GetLockID - ldr r1, _020DBED8 ; =UNK_021D6B0C - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - bl OS_LockCartridge - ldr r6, _020DBEDC ; =0x04000204 - ldr r1, _020DBEE0 ; =UNK_02103FE4 - ldrh r3, [r6, #0x0] - ldrh r2, [r6, #0x0] - ldr r0, _020DBEE4 ; =UNK_021D6B28 - and r4, r3, #0x3 - bic r2, r2, #0x3 - orr r2, r2, #0x3 - strh r2, [r6, #0x0] - str r1, [r0, #0x0] - bl CTRDGi_ReadFlashID - ldr r2, _020DBEDC ; =0x04000204 - mov r6, r0 - ldrh r1, [r2, #0x0] - cmp r7, #0x0 - ldreq r5, _020DBEE8 ; =UNK_02103FF4 - bic r1, r1, #0x3 - orr r1, r1, r4 - cmp r7, #0x1 - ldr r0, _020DBED8 ; =UNK_021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - ldreq r5, _020DBEEC ; =UNK_02103FE8 - bl OS_UnlockCartridge - ldr r2, [r5, #0x0] - mov r0, #0x1 - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - beq _020DBE14 - and r3, r6, #0xff -_020DBDF4: - ldrh r1, [r2, #0x38] - cmp r3, r1 - moveq r0, #0x0 - beq _020DBE14 - ldr r2, [r5, #0x4]! - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - bne _020DBDF4 -_020DBE14: - ldr r2, [r2, #0x0] - ldr r1, _020DBEF0 ; =UNK_021D6B14 - ldr r3, _020DBEF4 ; =UNK_021D6B34 - str r2, [r1, #0x0] - ldr r1, [r5, #0x0] - ldr r2, _020DBEF8 ; =UNK_021D6B2C - ldr r4, [r1, #0x4] - ldr r1, _020DBEFC ; =UNK_021D6B18 - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r6, _020DBF00 ; =UNK_021D6B1C - ldr r3, [r3, #0x8] - ldr r4, _020DBF04 ; =UNK_021D6B30 - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - ldr r3, _020DBF08 ; =UNK_021D6B24 - ldr r7, [r2, #0xc] - ldr r2, _020DBEE4 ; =UNK_021D6B28 - str r7, [r1, #0x0] - ldr r7, [r5, #0x0] - ldr r1, _020DBF0C ; =UNK_021D6B20 - ldr r7, [r7, #0x10] - add sp, sp, #0x4 - str r7, [r6, #0x0] - ldr r6, [r5, #0x0] - ldr r6, [r6, #0x14] - str r6, [r4, #0x0] - ldr r4, [r5, #0x0] - ldr r4, [r4, #0x18] - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r3, [r3, #0x1c] - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - add r2, r2, #0x20 - str r2, [r1, #0x0] - ldmia sp!, {r4-r7,lr} - bx lr -_020DBEAC: - cmp r7, #0x2 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - bl OS_GetLockID - ldr r1, _020DBF10 ; =UNK_021D6B4C - strh r0, [r1, #0x0] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBED8: .word UNK_021D6B0C -_020DBEDC: .word 0x04000204 -_020DBEE0: .word UNK_02103FE4 -_020DBEE4: .word UNK_021D6B28 -_020DBEE8: .word UNK_02103FF4 -_020DBEEC: .word UNK_02103FE8 -_020DBEF0: .word UNK_021D6B14 -_020DBEF4: .word UNK_021D6B34 -_020DBEF8: .word UNK_021D6B2C -_020DBEFC: .word UNK_021D6B18 -_020DBF00: .word UNK_021D6B1C -_020DBF04: .word UNK_021D6B30 -_020DBF08: .word UNK_021D6B24 -_020DBF0C: .word UNK_021D6B20 -_020DBF10: .word UNK_021D6B4C diff --git a/arm9/asm/CTRDG_flash_AT29LV512.s b/arm9/asm/CTRDG_flash_AT29LV512.s index ff80e9474..24b2e0f2c 100644 --- a/arm9/asm/CTRDG_flash_AT29LV512.s +++ b/arm9/asm/CTRDG_flash_AT29LV512.s @@ -2,9 +2,9 @@ .include "global.inc" .extern CTRDGi_PollingSR512kCOMMON - .extern UNK_021D6B20 - .extern UNK_021D6B24 - .extern UNK_021D6B0C + .extern AgbFlash + .extern CTRDGi_PollingSR + .extern ctrdgi_flash_lock_id .extern UNK_021D6B38 .extern UNK_021D6B08 @@ -259,14 +259,14 @@ CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DC984 ; =UNK_021D6B0C + ldr r0, _020DC984 ; =ctrdgi_flash_lock_id ldr r1, [r5, #0x0] ldrh r0, [r0, #0x0] str r1, [r4, #0x0] ldr r4, [sp, #0xc] bl OS_LockCartridge ldr r5, _020DC988 ; =0x04000204 - ldr r1, _020DC98C ; =UNK_021D6B20 + ldr r1, _020DC98C ; =AgbFlash ldrh r0, [r5, #0x0] ldr r1, [r1, #0x0] ldrh r2, [r5, #0x0] @@ -302,7 +302,7 @@ _020DC91C: bne _020DC91C _020DC92C: ldr ip, _020DC994 ; =0x04000208 - ldr r3, _020DC9A0 ; =UNK_021D6B24 + ldr r3, _020DC9A0 ; =CTRDGi_PollingSR ldrh r0, [r12, #0x0] sub r1, r1, #0x1 mov r0, #0x1 @@ -311,7 +311,7 @@ _020DC92C: ldr r3, [r3, #0x0] blx r3 ldr r3, _020DC988 ; =0x04000204 - ldr r1, _020DC984 ; =UNK_021D6B0C + ldr r1, _020DC984 ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -324,14 +324,14 @@ _020DC92C: ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020DC984: .word UNK_021D6B0C +_020DC984: .word ctrdgi_flash_lock_id _020DC988: .word 0x04000204 -_020DC98C: .word UNK_021D6B20 +_020DC98C: .word AgbFlash _020DC990: .word AT29LV512_org _020DC994: .word 0x04000208 _020DC998: .word 0x0A005555 _020DC99C: .word 0x0A002AAA -_020DC9A0: .word UNK_021D6B24 +_020DC9A0: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlash4KBCoreAT CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 @@ -399,7 +399,7 @@ CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 ldr r0, [r5, #0x0] ldr r1, _020DCB80 ; =AT29LV512_org str r0, [r4, #0x0] - ldr r0, _020DCB84 ; =UNK_021D6B0C + ldr r0, _020DCB84 ; =ctrdgi_flash_lock_id ldrh r2, [sp, #0x20] ldrh r1, [r1, #0x28] ldrh r0, [r0, #0x0] @@ -407,7 +407,7 @@ CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 add r5, r1, #0xa000000 bl OS_LockCartridge ldr r4, _020DCB88 ; =0x04000204 - ldr r1, _020DCB8C ; =UNK_021D6B20 + ldr r1, _020DCB8C ; =AgbFlash ldrh r0, [r4, #0x0] ldr r2, [r1, #0x0] ldrh r1, [r4, #0x0] @@ -439,7 +439,7 @@ _020DCB0C: bne _020DCB0C _020DCB18: ldr ip, _020DCB90 ; =0x04000208 - ldr r3, _020DCB9C ; =UNK_021D6B24 + ldr r3, _020DCB9C ; =CTRDGi_PollingSR ldrh r0, [r12, #0x0] sub r1, r5, #0x1 strh r2, [r12, #0x0] @@ -456,7 +456,7 @@ _020DCB18: bic r1, r1, #0x3 movne r5, r0, lsr #0x10 orr r1, r1, r4 - ldr r0, _020DCB84 ; =UNK_021D6B0C + ldr r0, _020DCB84 ; =ctrdgi_flash_lock_id strh r1, [r2, #0x0] ldrh r0, [r0, #0x0] bl OS_UnlockCartridge @@ -466,23 +466,23 @@ _020DCB18: bx lr .balign 4 _020DCB80: .word AT29LV512_org -_020DCB84: .word UNK_021D6B0C +_020DCB84: .word ctrdgi_flash_lock_id _020DCB88: .word 0x04000204 -_020DCB8C: .word UNK_021D6B20 +_020DCB8C: .word AgbFlash _020DCB90: .word 0x04000208 _020DCB94: .word 0x0A005555 _020DCB98: .word 0x0A002AAA -_020DCB9C: .word UNK_021D6B24 +_020DCB9C: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlashChipCoreAT CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 stmdb sp!, {r4-r5,lr} sub sp, sp, #0x4 - ldr r0, _020DCC7C ; =UNK_021D6B0C + ldr r0, _020DCC7C ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r4, _020DCC80 ; =0x04000204 - ldr r0, _020DCC84 ; =UNK_021D6B20 + ldr r0, _020DCC84 ; =AgbFlash ldrh r3, [r4, #0x0] ldr r0, [r0, #0x0] ldrh r1, [r4, #0x0] @@ -510,7 +510,7 @@ CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 strb r2, [lr, #0x0] ldrh r2, [r0, #0x0] ldr r2, [r1, #0x0] - ldr r1, _020DCC98 ; =UNK_021D6B24 + ldr r1, _020DCC98 ; =CTRDGi_PollingSR strh r2, [r0, #0x0] ldr r4, [r1, #0x0] mov r0, #0x3 @@ -519,7 +519,7 @@ CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 and r5, r3, #0x3 blx r4 ldr r3, _020DCC80 ; =0x04000204 - ldr r1, _020DCC7C ; =UNK_021D6B0C + ldr r1, _020DCC7C ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -532,11 +532,11 @@ CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020DCC7C: .word UNK_021D6B0C +_020DCC7C: .word ctrdgi_flash_lock_id _020DCC80: .word 0x04000204 -_020DCC84: .word UNK_021D6B20 +_020DCC84: .word AgbFlash _020DCC88: .word 0x04000208 _020DCC8C: .word UNK_021D6B38 _020DCC90: .word 0x0A005555 _020DCC94: .word 0x0A002AAA -_020DCC98: .word UNK_021D6B24 +_020DCC98: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_LE39FW512.s b/arm9/asm/CTRDG_flash_LE39FW512.s index b3f4b8a3e..3228818df 100644 --- a/arm9/asm/CTRDG_flash_LE39FW512.s +++ b/arm9/asm/CTRDG_flash_LE39FW512.s @@ -2,9 +2,9 @@ .include "global.inc" .extern CTRDGi_PollingSR512kCOMMON - .extern UNK_021D6B20 - .extern UNK_021D6B24 - .extern UNK_021D6B0C + .extern AgbFlash + .extern CTRDGi_PollingSR + .extern ctrdgi_flash_lock_id .extern UNK_021D6B38 .extern UNK_021D6B08 @@ -128,13 +128,13 @@ CTRDGi_EraseFlashChipLE: ; 0x020DCD70 arm_func_start CTRDGi_VerifyFlashErase CTRDGi_VerifyFlashErase: ; 0x020DCD94 stmdb sp!, {r4-r6,lr} - ldr r2, _020DCE14 ; =UNK_021D6B0C + ldr r2, _020DCE14 ; =ctrdgi_flash_lock_id mov r4, r0 ldrh r0, [r2, #0x0] mov r5, r1 bl OS_LockCartridge ldr ip, _020DCE18 ; =0x04000204 - ldr r0, _020DCE1C ; =UNK_021D6B20 + ldr r0, _020DCE1C ; =AgbFlash ldrh r3, [r12, #0x0] ldr r0, [r0, #0x0] ldrh r1, [r12, #0x0] @@ -148,7 +148,7 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94 blx r5 cmp r0, #0x0 ldr r2, _020DCE18 ; =0x04000204 - ldr r0, _020DCE14 ; =UNK_021D6B0C + ldr r0, _020DCE14 ; =ctrdgi_flash_lock_id ldrh r1, [r2, #0x0] ldrne r4, _020DCE20 ; =0x00008004 bic r1, r1, #0x3 @@ -160,14 +160,14 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94 ldmia sp!, {r4-r6,lr} bx lr .balign 4 -_020DCE14: .word UNK_021D6B0C +_020DCE14: .word ctrdgi_flash_lock_id _020DCE18: .word 0x04000204 -_020DCE1C: .word UNK_021D6B20 +_020DCE1C: .word AgbFlash _020DCE20: .word 0x00008004 arm_func_start CTRDGi_VerifyFlashCoreFF CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 - ldr r1, _020DCE54 ; =UNK_021D6B20 + ldr r1, _020DCE54 ; =AgbFlash ldr r1, [r1, #0x0] ldr r2, [r1, #0x4] cmp r2, #0x0 @@ -182,7 +182,7 @@ _020DCE4C: mov r0, r2 bx lr .balign 4 -_020DCE54: .word UNK_021D6B20 +_020DCE54: .word AgbFlash arm_func_start CTRDGi_WriteFlashSectorCoreLE CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 @@ -203,7 +203,7 @@ CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 ldrhs r0, _020DD018 ; =0x000080FF ldmcsia sp!, {r4-r9,lr} bxcs lr - ldr r0, _020DD01C ; =UNK_021D6B20 + ldr r0, _020DD01C ; =AgbFlash mov r9, #0x0 ldr r0, [r0, #0x0] ldrh r0, [r0, #0x8] @@ -247,11 +247,11 @@ _020DCF1C: cmp r9, r5 bls _020DCF1C _020DCF38: - ldr r0, _020DD024 ; =UNK_021D6B0C + ldr r0, _020DD024 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r5, _020DD028 ; =0x04000204 - ldr r1, _020DD01C ; =UNK_021D6B20 + ldr r1, _020DD01C ; =AgbFlash ldrh r0, [r5, #0x0] ldr r3, [r1, #0x0] ldrh r2, [r5, #0x0] @@ -295,7 +295,7 @@ _020DCFD4: ldr r2, _020DD028 ; =0x04000204 strh r0, [r3, #0x0] ldrh r1, [r2, #0x0] - ldr r0, _020DD024 ; =UNK_021D6B0C + ldr r0, _020DD024 ; =ctrdgi_flash_lock_id bic r1, r1, #0x3 orr r1, r1, r5 strh r1, [r2, #0x0] @@ -307,9 +307,9 @@ _020DCFD4: bx lr .balign 4 _020DD018: .word 0x000080FF -_020DD01C: .word UNK_021D6B20 +_020DD01C: .word AgbFlash _020DD020: .word CTRDGi_VerifyFlashCoreFF -_020DD024: .word UNK_021D6B0C +_020DD024: .word ctrdgi_flash_lock_id _020DD028: .word 0x04000204 _020DD02C: .word UNK_021D6B08 _020DD030: .word 0x04000208 @@ -329,7 +329,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038 mov r0, #0xa0 strb r0, [r12, #0x0] ldrb r2, [lr, #0x0] - ldr r3, _020DD094 ; =UNK_021D6B24 + ldr r3, _020DD094 ; =CTRDGi_PollingSR mov r0, #0x1 strb r2, [r1, #0x0] ldrb r2, [lr, #0x0] @@ -341,7 +341,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038 .balign 4 _020DD08C: .word 0x0A005555 _020DD090: .word 0x0A002AAA -_020DD094: .word UNK_021D6B24 +_020DD094: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlashSectorCoreLE CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 @@ -361,11 +361,11 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 ldrhs r0, _020DD1B8 ; =0x000080FF ldmcsia sp!, {r4-r6,lr} bxcs lr - ldr r0, _020DD1BC ; =UNK_021D6B0C + ldr r0, _020DD1BC ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r6, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1C4 ; =UNK_021D6B20 + ldr r1, _020DD1C4 ; =AgbFlash ldrh r3, [r6, #0x0] ldr r0, [r1, #0x0] ldrh r2, [r6, #0x0] @@ -397,7 +397,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 strb r4, [r1, #0x0] ldrh r4, [r0, #0x0] ldr r4, [r2, #0x0] - ldr r2, _020DD1D8 ; =UNK_021D6B24 + ldr r2, _020DD1D8 ; =CTRDGi_PollingSR strh r4, [r0, #0x0] ldr r4, [r2, #0x0] mov r0, #0x2 @@ -405,7 +405,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 and r5, r3, #0x3 blx r4 ldr r3, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1BC ; =UNK_021D6B0C + ldr r1, _020DD1BC ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -419,24 +419,24 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 bx lr .balign 4 _020DD1B8: .word 0x000080FF -_020DD1BC: .word UNK_021D6B0C +_020DD1BC: .word ctrdgi_flash_lock_id _020DD1C0: .word 0x04000204 -_020DD1C4: .word UNK_021D6B20 +_020DD1C4: .word AgbFlash _020DD1C8: .word 0x04000208 _020DD1CC: .word UNK_021D6B38 _020DD1D0: .word 0x0A005555 _020DD1D4: .word 0x0A002AAA -_020DD1D8: .word UNK_021D6B24 +_020DD1D8: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlashChipCoreLE CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC stmdb sp!, {r4-r5,lr} sub sp, sp, #0x4 - ldr r0, _020DD2B8 ; =UNK_021D6B0C + ldr r0, _020DD2B8 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r4, _020DD2BC ; =0x04000204 - ldr r0, _020DD2C0 ; =UNK_021D6B20 + ldr r0, _020DD2C0 ; =AgbFlash ldrh r3, [r4, #0x0] ldr r0, [r0, #0x0] ldrh r1, [r4, #0x0] @@ -464,7 +464,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC strb r2, [lr, #0x0] ldrh r2, [r0, #0x0] ldr r2, [r1, #0x0] - ldr r1, _020DD2D4 ; =UNK_021D6B24 + ldr r1, _020DD2D4 ; =CTRDGi_PollingSR strh r2, [r0, #0x0] ldr r4, [r1, #0x0] mov r0, #0x3 @@ -473,7 +473,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC and r5, r3, #0x3 blx r4 ldr r3, _020DD2BC ; =0x04000204 - ldr r1, _020DD2B8 ; =UNK_021D6B0C + ldr r1, _020DD2B8 ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -486,11 +486,11 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020DD2B8: .word UNK_021D6B0C +_020DD2B8: .word ctrdgi_flash_lock_id _020DD2BC: .word 0x04000204 -_020DD2C0: .word UNK_021D6B20 +_020DD2C0: .word AgbFlash _020DD2C4: .word 0x04000208 _020DD2C8: .word UNK_021D6B38 _020DD2CC: .word 0x0A005555 _020DD2D0: .word 0x0A002AAA -_020DD2D4: .word UNK_021D6B24 +_020DD2D4: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_MX29L010.s b/arm9/asm/CTRDG_flash_MX29L010.s index 5ac28935e..7b4e1dc3b 100644 --- a/arm9/asm/CTRDG_flash_MX29L010.s +++ b/arm9/asm/CTRDG_flash_MX29L010.s @@ -2,9 +2,9 @@ .include "global.inc" .extern CTRDGi_PollingSR1MCOMMON - .extern UNK_021D6B20 - .extern UNK_021D6B24 - .extern UNK_021D6B0C + .extern AgbFlash + .extern CTRDGi_PollingSR + .extern ctrdgi_flash_lock_id .extern UNK_021D6B38 .extern UNK_021D6B08 @@ -135,7 +135,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DD540 ; =UNK_021D6B20 + ldr r0, _020DD540 ; =AgbFlash ldr r1, [r5, #0x0] ldr r0, [r0, #0x0] str r1, [r4, #0x0] @@ -153,11 +153,11 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 addne sp, sp, #0x28 ldmneia sp!, {r4-r8,lr} bxne lr - ldr r0, _020DD548 ; =UNK_021D6B0C + ldr r0, _020DD548 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r7, _020DD54C ; =0x04000204 - ldr r0, _020DD540 ; =UNK_021D6B20 + ldr r0, _020DD540 ; =AgbFlash ldrh r3, [r7, #0x0] ldr r2, [r0, #0x0] ldrh r1, [r7, #0x0] @@ -169,7 +169,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 strh r1, [r7, #0x0] and r7, r3, #0x3 bl CTRDGi_SetFlashBankMx - ldr r0, _020DD540 ; =UNK_021D6B20 + ldr r0, _020DD540 ; =AgbFlash and r1, r5, #0xf ldr r3, [r0, #0x0] mov r0, r1, lsl #0x10 @@ -211,7 +211,7 @@ _020DD4FC: ldr r2, _020DD54C ; =0x04000204 strh r0, [r3, #0x0] ldrh r1, [r2, #0x0] - ldr r0, _020DD548 ; =UNK_021D6B0C + ldr r0, _020DD548 ; =ctrdgi_flash_lock_id bic r1, r1, #0x3 orr r1, r1, r7 strh r1, [r2, #0x0] @@ -222,9 +222,9 @@ _020DD4FC: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020DD540: .word UNK_021D6B20 +_020DD540: .word AgbFlash _020DD544: .word 0x000080FF -_020DD548: .word UNK_021D6B0C +_020DD548: .word ctrdgi_flash_lock_id _020DD54C: .word 0x04000204 _020DD550: .word UNK_021D6B08 _020DD554: .word 0x04000208 @@ -244,7 +244,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C mov r0, #0xa0 strb r0, [r12, #0x0] ldrb r2, [lr, #0x0] - ldr r3, _020DD5B8 ; =UNK_021D6B24 + ldr r3, _020DD5B8 ; =CTRDGi_PollingSR mov r0, #0x1 strb r2, [r1, #0x0] ldrb r2, [lr, #0x0] @@ -256,7 +256,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C .balign 4 _020DD5B0: .word 0x0A005555 _020DD5B4: .word 0x0A002AAA -_020DD5B8: .word UNK_021D6B24 +_020DD5B8: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlashSectorCoreMX CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC @@ -268,7 +268,7 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DD748 ; =UNK_021D6B20 + ldr r0, _020DD748 ; =AgbFlash ldr r1, [r5, #0x0] ldr r0, [r0, #0x0] str r1, [r4, #0x0] @@ -279,11 +279,11 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC ldrhs r0, _020DD74C ; =0x000080FF ldmcsia sp!, {r4-r11,lr} bxcs lr - ldr r0, _020DD750 ; =UNK_021D6B0C + ldr r0, _020DD750 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r5, _020DD754 ; =0x04000204 - ldr r0, _020DD748 ; =UNK_021D6B20 + ldr r0, _020DD748 ; =AgbFlash ldrh r3, [r5, #0x0] ldr r2, [r0, #0x0] ldrh r1, [r5, #0x0] @@ -311,7 +311,7 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC mov r4, #0x30 str r0, [sp, #0xc] _020DD684: - ldr r0, _020DD748 ; =UNK_021D6B20 + ldr r0, _020DD748 ; =AgbFlash ldrh r12, [r8, #0x0] ldr r0, [r0, #0x0] ldr r3, _020DD75C ; =UNK_021D6B38 @@ -336,7 +336,7 @@ _020DD684: ldr r3, _020DD75C ; =UNK_021D6B38 ldr r3, [r3, #0x0] strh r3, [r8, #0x0] - ldr r3, _020DD768 ; =UNK_021D6B24 + ldr r3, _020DD768 ; =CTRDGi_PollingSR ldr r3, [r3, #0x0] blx r3 str r0, [sp, #0x4] @@ -349,7 +349,7 @@ _020DD684: beq _020DD684 _020DD714: ldr r2, _020DD754 ; =0x04000204 - ldr r1, _020DD750 ; =UNK_021D6B0C + ldr r1, _020DD750 ; =ctrdgi_flash_lock_id ldrh r0, [r2, #0x0] bic r3, r0, #0x3 ldr r0, [sp, #0x0] @@ -362,25 +362,25 @@ _020DD714: ldmia sp!, {r4-r11,lr} bx lr .balign 4 -_020DD748: .word UNK_021D6B20 +_020DD748: .word AgbFlash _020DD74C: .word 0x000080FF -_020DD750: .word UNK_021D6B0C +_020DD750: .word ctrdgi_flash_lock_id _020DD754: .word 0x04000204 _020DD758: .word 0x04000208 _020DD75C: .word UNK_021D6B38 _020DD760: .word 0x0A005555 _020DD764: .word 0x0A002AAA -_020DD768: .word UNK_021D6B24 +_020DD768: .word CTRDGi_PollingSR arm_func_start CTRDGi_EraseFlashChipCoreMX CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C stmdb sp!, {r4-r5,lr} sub sp, sp, #0x4 - ldr r0, _020DD848 ; =UNK_021D6B0C + ldr r0, _020DD848 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r4, _020DD84C ; =0x04000204 - ldr r0, _020DD850 ; =UNK_021D6B20 + ldr r0, _020DD850 ; =AgbFlash ldrh r3, [r4, #0x0] ldr r0, [r0, #0x0] ldrh r1, [r4, #0x0] @@ -408,7 +408,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C strb r2, [lr, #0x0] ldrh r2, [r0, #0x0] ldr r2, [r1, #0x0] - ldr r1, _020DD864 ; =UNK_021D6B24 + ldr r1, _020DD864 ; =CTRDGi_PollingSR strh r2, [r0, #0x0] ldr r4, [r1, #0x0] mov r0, #0x3 @@ -417,7 +417,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C and r5, r3, #0x3 blx r4 ldr r3, _020DD84C ; =0x04000204 - ldr r1, _020DD848 ; =UNK_021D6B0C + ldr r1, _020DD848 ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -430,11 +430,11 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C ldmia sp!, {r4-r5,lr} bx lr .balign 4 -_020DD848: .word UNK_021D6B0C +_020DD848: .word ctrdgi_flash_lock_id _020DD84C: .word 0x04000204 -_020DD850: .word UNK_021D6B20 +_020DD850: .word AgbFlash _020DD854: .word 0x04000208 _020DD858: .word UNK_021D6B38 _020DD85C: .word 0x0A005555 _020DD860: .word 0x0A002AAA -_020DD864: .word UNK_021D6B24 +_020DD864: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_MX29L512.s b/arm9/asm/CTRDG_flash_MX29L512.s index 17b501252..eac57f639 100644 --- a/arm9/asm/CTRDG_flash_MX29L512.s +++ b/arm9/asm/CTRDG_flash_MX29L512.s @@ -6,8 +6,8 @@ .extern CTRDGi_EraseFlashSectorAsyncLE .extern CTRDGi_PollingSR512kCOMMON .extern UNK_021D6B08 - .extern UNK_021D6B20 - .extern UNK_021D6B0C + .extern AgbFlash + .extern ctrdgi_flash_lock_id .section .rodata @@ -69,7 +69,7 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0 stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DD9E8 ; =UNK_021D6B20 + ldr r0, _020DD9E8 ; =AgbFlash ldr r1, [r5, #0x0] ldr r0, [r0, #0x0] str r1, [r4, #0x0] @@ -87,11 +87,11 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0 addne sp, sp, #0x28 ldmneia sp!, {r4-r8,lr} bxne lr - ldr r0, _020DD9F0 ; =UNK_021D6B0C + ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id ldrh r0, [r0, #0x0] bl OS_LockCartridge ldr r7, _020DD9F4 ; =0x04000204 - ldr r0, _020DD9E8 ; =UNK_021D6B20 + ldr r0, _020DD9E8 ; =AgbFlash ldrh r3, [r7, #0x0] ldr r2, [r0, #0x0] ldrh r1, [r7, #0x0] @@ -126,7 +126,7 @@ _020DD984: bne _020DD984 _020DD9B8: ldr r2, _020DD9F4 ; =0x04000204 - ldr r0, _020DD9F0 ; =UNK_021D6B0C + ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id ldrh r1, [r2, #0x0] bic r1, r1, #0x3 orr r1, r1, r7 @@ -138,8 +138,8 @@ _020DD9B8: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020DD9E8: .word UNK_021D6B20 +_020DD9E8: .word AgbFlash _020DD9EC: .word 0x000080FF -_020DD9F0: .word UNK_021D6B0C +_020DD9F0: .word ctrdgi_flash_lock_id _020DD9F4: .word 0x04000204 _020DD9F8: .word UNK_021D6B08 diff --git a/arm9/asm/CTRDG_flash_common.s b/arm9/asm/CTRDG_flash_common.s index aaef15fbd..4c51608a8 100644 --- a/arm9/asm/CTRDG_flash_common.s +++ b/arm9/asm/CTRDG_flash_common.s @@ -7,48 +7,48 @@ UNK_021D6B08: ; 0x021D6B08 .space 0x4 - .global UNK_021D6B0C -UNK_021D6B0C: ; 0x021D6B0C + .global ctrdgi_flash_lock_id +ctrdgi_flash_lock_id: ; 0x021D6B0C .space 0x4 .global UNK_021D6B10 UNK_021D6B10: ; 0x021D6B10 .space 0x4 - .global UNK_021D6B14 -UNK_021D6B14: ; 0x021D6B14 + .global CTRDGi_WriteAgbFlashSector +CTRDGi_WriteAgbFlashSector: ; 0x021D6B14 .space 0x4 - .global UNK_021D6B18 -UNK_021D6B18: ; 0x021D6B18 + .global CTRDGi_WriteAgbFlashSectorAsync +CTRDGi_WriteAgbFlashSectorAsync: ; 0x021D6B18 .space 0x4 - .global UNK_021D6B1C -UNK_021D6B1C: ; 0x021D6B1C + .global CTRDGi_EraseAgbFlashChipAsync +CTRDGi_EraseAgbFlashChipAsync: ; 0x021D6B1C .space 0x4 - .global UNK_021D6B20 -UNK_021D6B20: ; 0x021D6B20 + .global AgbFlash +AgbFlash: ; 0x021D6B20 .space 0x4 - .global UNK_021D6B24 -UNK_021D6B24: ; 0x021D6B24 + .global CTRDGi_PollingSR +CTRDGi_PollingSR: ; 0x021D6B24 .space 0x4 - .global UNK_021D6B28 -UNK_021D6B28: ; 0x021D6B28 + .global ctrdgi_fl_maxtime +ctrdgi_fl_maxtime: ; 0x021D6B28 .space 0x4 - .global UNK_021D6B2C -UNK_021D6B2C: ; 0x021D6B2C + .global CTRDGi_EraseAgbFlashSector +CTRDGi_EraseAgbFlashSector: ; 0x021D6B2C .space 0x4 - .global UNK_021D6B30 -UNK_021D6B30: ; 0x021D6B30 + .global CTRDGi_EraseAgbFlashSectorAsync +CTRDGi_EraseAgbFlashSectorAsync: ; 0x021D6B30 .space 0x4 - .global UNK_021D6B34 -UNK_021D6B34: ; 0x021D6B34 + .global CTRDGi_EraseAgbFlashChip +CTRDGi_EraseAgbFlashChip: ; 0x021D6B34 .space 0x4 .global UNK_021D6B38 @@ -63,8 +63,8 @@ UNK_021D6B3C: ; 0x021D6B3C UNK_021D6B44: ; 0x021D6B44 .space 0x8 - .global UNK_021D6B4C -UNK_021D6B4C: ; 0x021D6B4C + .global ctrdgi_sram_lock_id +ctrdgi_sram_lock_id: ; 0x021D6B4C .space 0x4 .text @@ -103,14 +103,14 @@ CTRDG_VerifyAgbFlash: CTRDG_WriteAgbFlashSector: stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r2, _020DBF90 ; =UNK_021D6B14 + ldr r2, _020DBF90 ; =CTRDGi_WriteAgbFlashSector ldr r2, [r2, #0x0] blx r2 add sp, sp, #0x4 ldmia sp!, {lr} bx lr .balign 4 -_020DBF90: .word UNK_021D6B14 +_020DBF90: .word CTRDGi_WriteAgbFlashSector arm_func_start CTRDG_ReadAgbFlash CTRDG_ReadAgbFlash: ; 0x020DBF94 @@ -178,7 +178,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DC128 ; =UNK_021D6B0C + ldr r0, _020DC128 ; =ctrdgi_flash_lock_id ldr r1, [r5, #0x0] ldrh r0, [r0, #0x0] str r1, [r4, #0x0] @@ -187,7 +187,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C ldr r4, [sp, #0x18] bl OS_LockCartridge ldr r3, _020DC12C ; =0x04000204 - ldr r0, _020DC130 ; =UNK_021D6B20 + ldr r0, _020DC130 ; =AgbFlash ldrh r2, [r3, #0x0] ldrh r1, [r3, #0x0] and r7, r2, #0x3 @@ -205,7 +205,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C mov r0, r0, lsl #0x10 mov r6, r0, lsr #0x10 _020DC0D4: - ldr r1, _020DC130 ; =UNK_021D6B20 + ldr r1, _020DC130 ; =AgbFlash mov r0, r5 ldr r1, [r1, #0x0] mov r2, r4 @@ -214,7 +214,7 @@ _020DC0D4: add r1, r1, #0xa000000 bl CTRDGi_VerifyFlashSectorCore ldr r3, _020DC12C ; =0x04000204 - ldr r1, _020DC128 ; =UNK_021D6B0C + ldr r1, _020DC128 ; =ctrdgi_flash_lock_id ldrh r2, [r3, #0x0] mov r4, r0 bic r0, r2, #0x3 @@ -227,9 +227,9 @@ _020DC0D4: ldmia sp!, {r4-r7,lr} bx lr .balign 4 -_020DC128: .word UNK_021D6B0C +_020DC128: .word ctrdgi_flash_lock_id _020DC12C: .word 0x04000204 -_020DC130: .word UNK_021D6B20 +_020DC130: .word AgbFlash arm_func_start CTRDGi_VerifyFlashSectorCore CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 @@ -259,7 +259,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168 stmia r4!, {r0-r3} ldmia r5!, {r0-r3} stmia r4!, {r0-r3} - ldr r0, _020DC25C ; =UNK_021D6B0C + ldr r0, _020DC25C ; =ctrdgi_flash_lock_id ldr r1, [r5, #0x0] ldrh r0, [r0, #0x0] str r1, [r4, #0x0] @@ -269,7 +269,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168 ldr r4, [sp, #0x18] bl OS_LockCartridge ldr r3, _020DC260 ; =0x04000204 - ldr r0, _020DC264 ; =UNK_021D6B20 + ldr r0, _020DC264 ; =AgbFlash ldrh r2, [r3, #0x0] ldrh r1, [r3, #0x0] and r8, r2, #0x3 @@ -287,7 +287,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168 mov r0, r0, lsl #0x10 mov r7, r0, lsr #0x10 _020DC1F4: - ldr r0, _020DC264 ; =UNK_021D6B20 + ldr r0, _020DC264 ; =AgbFlash cmp r4, #0x0 ldr r0, [r0, #0x0] sub r4, r4, #0x1 @@ -304,7 +304,7 @@ _020DC218: bne _020DC218 _020DC22C: ldr r2, _020DC260 ; =0x04000204 - ldr r0, _020DC25C ; =UNK_021D6B0C + ldr r0, _020DC25C ; =ctrdgi_flash_lock_id ldrh r1, [r2, #0x0] bic r1, r1, #0x3 orr r1, r1, r8 @@ -316,9 +316,9 @@ _020DC22C: ldmia sp!, {r4-r8,lr} bx lr .balign 4 -_020DC25C: .word UNK_021D6B0C +_020DC25C: .word ctrdgi_flash_lock_id _020DC260: .word 0x04000204 -_020DC264: .word UNK_021D6B20 +_020DC264: .word AgbFlash arm_func_start CTRDGi_PollingSR1MCOMMON CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 @@ -398,7 +398,7 @@ _020DC33C: _020DC360: ; 0x020DC360 cmp r7, r0 beq _020DC390 - ldr r0, _020DC3AC ; =UNK_021D6B20 + ldr r0, _020DC3AC ; =AgbFlash ldr r0, [r0, #0x0] ldrh r0, [r0, #0x18] cmp r0, #0xc2 @@ -418,7 +418,7 @@ _020DC394: ; 0x020DC394 bx lr .balign 4 _020DC3A8: .word UNK_021D6B10 -_020DC3AC: .word UNK_021D6B20 +_020DC3AC: .word AgbFlash _020DC3B0: .word 0x0A005555 arm_func_start CTRDGi_ReadSrFunc @@ -463,7 +463,7 @@ _020DC42C: .word UNK_021D6B10 StartFlashTimer: ; 0x020DC430 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r1, _020DC47C ; =UNK_021D6B28 + ldr r1, _020DC47C ; =ctrdgi_fl_maxtime ldr r2, _020DC480 ; =UNK_021D6B10 mov r3, #0x0 ldr r1, [r1, #0x0] @@ -481,7 +481,7 @@ StartFlashTimer: ; 0x020DC430 ldmia sp!, {lr} bx lr .balign 4 -_020DC47C: .word UNK_021D6B28 +_020DC47C: .word ctrdgi_fl_maxtime _020DC480: .word UNK_021D6B10 _020DC484: .word UNK_021D6B3C _020DC488: .word UNK_021D6B44 diff --git a/arm9/lib/include/CTRDG_backup.h b/arm9/lib/include/CTRDG_backup.h new file mode 100644 index 000000000..d248b7a1c --- /dev/null +++ b/arm9/lib/include/CTRDG_backup.h @@ -0,0 +1,41 @@ +#ifndef POKEDIAMOND_CTRDG_BACKUP_H +#define POKEDIAMOND_CTRDG_BACKUP_H + +#include "nitro/types.h" +#include "CTRDG_flash.h" +#include "CTRDG_task.h" + +typedef struct CTRDGiFlashTypePlusTag +{ + u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); + u16 (*CTRDGi_EraseAgbFlashChip)(void); + u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); + void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); + void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); + void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); + u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); + const u16 (*maxtime); + CTRDGFlashType type; +} CTRDGiFlashTypePlus; + +typedef enum +{ + CTRDG_BACKUP_TYPE_FLASH_512K, + CTRDG_BACKUP_TYPE_FLASH_1M, + CTRDG_BACKUP_TYPE_SRAM +} CTRDGBackupType; + +extern const u16 (*ctrdgi_fl_maxtime); + +extern u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); +extern const CTRDGFlashType *AgbFlash; +extern u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); +extern u16 (*CTRDGi_EraseAgbFlashChip)(void); +extern u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); +extern void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); +extern void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); +extern void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); + +u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type); + +#endif //POKEDIAMOND_CTRDG_BACKUP_H diff --git a/arm9/lib/include/CTRDG_flash.h b/arm9/lib/include/CTRDG_flash.h new file mode 100644 index 000000000..9a4aff414 --- /dev/null +++ b/arm9/lib/include/CTRDG_flash.h @@ -0,0 +1,25 @@ +#ifndef POKEDIAMOND_CTRDG_FLASH_H +#define POKEDIAMOND_CTRDG_FLASH_H + +#include "nitro/types.h" +#include "MI_exMemory.h" + +typedef struct CTRDGiFlashSectorTag +{ + u32 size; + u16 shift; + u16 count; + u16 top; + u8 reserved[2]; +} CTRDGiFlashSector; + +typedef struct CTRDGFlashTypeTag +{ + u32 romSize; + CTRDGiFlashSector sector; + MICartridgeRamCycle agbWait[2]; + u16 makerID; + u16 deviceID; +} CTRDGFlashType; + +#endif //POKEDIAMOND_CTRDG_FLASH_H diff --git a/arm9/lib/include/CTRDG_task.h b/arm9/lib/include/CTRDG_task.h new file mode 100644 index 000000000..2cf7a2335 --- /dev/null +++ b/arm9/lib/include/CTRDG_task.h @@ -0,0 +1,25 @@ +#ifndef POKEDIAMOND_CTRDG_TASK_H +#define POKEDIAMOND_CTRDG_TASK_H + +#include "nitro/types.h" + +struct CTRDGTaskInfo_tag; + +typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGTaskInfo_tag *); + +typedef struct CTRDGTaskInfo_tag +{ + CTRDG_TASK_FUNC task; + CTRDG_TASK_FUNC callback; + u32 result; + u8 *data; + u8 *adr; + u32 offset; + u32 size; + u8 *dst; + u16 sec_num; + u8 busy; + u8 param[1]; +} CTRDGTaskInfo; + +#endif //POKEDIAMOND_CTRDG_TASK_H diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h index df46b008e..aa90a73c9 100644 --- a/arm9/lib/include/MI_exMemory.h +++ b/arm9/lib/include/MI_exMemory.h @@ -22,6 +22,14 @@ typedef enum MI_CTRDG_ROMCYCLE2_4 = 1 } MICartridgeRomCycle2nd; +typedef enum +{ + MI_CTRDG_RAMCYCLE_10 = 0, + MI_CTRDG_RAMCYCLE_8 = 1, + MI_CTRDG_RAMCYCLE_6 = 2, + MI_CTRDG_RAMCYCLE_18 = 3 +} MICartridgeRamCycle; + static inline void MIi_SetCardProcessor(MIProcessor proc) { reg_MI_EXMEMCNT = @@ -54,4 +62,14 @@ static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2) reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4)); } +static inline void MI_SetCartridgeRamCycle(MICartridgeRamCycle c) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~3) | (c << 0)); +} + +static inline MICartridgeRamCycle MI_GetCartridgeRamCycle(void) +{ + return (MICartridgeRamCycle)((reg_MI_EXMEMCNT & 3) >> 0); +} + #endif //POKEDIAMOND_MI_EXMEMORY_H diff --git a/arm9/lib/src/CTRDG_backup.c b/arm9/lib/src/CTRDG_backup.c new file mode 100644 index 000000000..dc1a3f4be --- /dev/null +++ b/arm9/lib/src/CTRDG_backup.c @@ -0,0 +1,94 @@ +#include "CTRDG_backup.h" +#include "function_target.h" +#include "OS_spinLock.h" + +extern u16 ctrdgi_flash_lock_id; +extern u16 ctrdgi_sram_lock_id; + +extern u16 CTRDGi_ReadFlashID(void); + +extern const CTRDGiFlashTypePlus defaultFlash1M; +extern const CTRDGiFlashTypePlus MX29L010; +extern const CTRDGiFlashTypePlus LE26FV10N1TS_10; + +extern const CTRDGiFlashTypePlus defaultFlash512; +extern const CTRDGiFlashTypePlus LE39FW512; +extern const CTRDGiFlashTypePlus AT29LV512_lib; +extern const CTRDGiFlashTypePlus MN63F805MNP; + +static const CTRDGiFlashTypePlus *const flash1M_list[] = { + &MX29L010, + &LE26FV10N1TS_10, + &defaultFlash1M +}; + +static const CTRDGiFlashTypePlus *const flash512_list[] = { + &LE39FW512, + &AT29LV512_lib, + &MN63F805MNP, + &defaultFlash512 +}; + +static const u16 readidtime[] = { + 20 +}; + +ARM_FUNC u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type) +{ + u16 result = 1; + u16 flashID; + const CTRDGiFlashTypePlus *const *flp; + MICartridgeRamCycle ram_cycle; + + if (type == CTRDG_BACKUP_TYPE_FLASH_512K || type == CTRDG_BACKUP_TYPE_FLASH_1M) + { + ctrdgi_flash_lock_id = (u16)OS_GetLockID(); + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(MI_CTRDG_RAMCYCLE_18); + + ctrdgi_fl_maxtime = readidtime; + flashID = CTRDGi_ReadFlashID(); + + if (type == CTRDG_BACKUP_TYPE_FLASH_512K) + { + flp = flash512_list; + } + + if (type == CTRDG_BACKUP_TYPE_FLASH_1M) + { + flp = flash1M_list; + } + + MI_SetCartridgeRamCycle(ram_cycle); + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + result = 1; + while ((*flp)->type.makerID != 0) + { + if ((flashID & 0xff) == *(u16 *)&((*flp)->type.makerID)) + { + result = 0; + break; + } + flp++; + } + CTRDGi_WriteAgbFlashSector = (*flp)->CTRDGi_WriteAgbFlashSector; + CTRDGi_EraseAgbFlashChip = (*flp)->CTRDGi_EraseAgbFlashChip; + CTRDGi_EraseAgbFlashSector = (*flp)->CTRDGi_EraseAgbFlashSector; + CTRDGi_WriteAgbFlashSectorAsync = (*flp)->CTRDGi_WriteAgbFlashSectorAsync; + CTRDGi_EraseAgbFlashChipAsync = (*flp)->CTRDGi_EraseAgbFlashChipAsync; + CTRDGi_EraseAgbFlashSectorAsync = (*flp)->CTRDGi_EraseAgbFlashSectorAsync; + CTRDGi_PollingSR = (*flp)->CTRDGi_PollingSR; + ctrdgi_fl_maxtime = (*flp)->maxtime; + AgbFlash = &(*flp)->type; + } + else if (type == CTRDG_BACKUP_TYPE_SRAM) + { + ctrdgi_sram_lock_id = (u16)OS_GetLockID(); + result = 0; + } + return result; +} From a37fd3dff5df3a93ac7d756d1e16d411a0299dc9 Mon Sep 17 00:00:00 2001 From: tgsm Date: Thu, 14 Jan 2021 18:22:00 -0500 Subject: [PATCH 50/59] decompile unk_0202C144 --- arm9/asm/unk_0202C144.s | 42 ----------------------------------------- arm9/src/unk_0202C144.c | 26 +++++++++++++++++++++++++ include/unk_02029FB0.h | 9 +++++++++ include/unk_0202C144.h | 3 +++ 4 files changed, 38 insertions(+), 42 deletions(-) delete mode 100644 arm9/asm/unk_0202C144.s create mode 100644 arm9/src/unk_0202C144.c create mode 100644 include/unk_02029FB0.h diff --git a/arm9/asm/unk_0202C144.s b/arm9/asm/unk_0202C144.s deleted file mode 100644 index fb5bc6c4e..000000000 --- a/arm9/asm/unk_0202C144.s +++ /dev/null @@ -1,42 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0202C144 -FUN_0202C144: ; 0x0202C144 - push {r3-r7, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x4c - mov r2, #0x0 - bl GetMonData - cmp r0, #0x0 - bne _0202C194 - add r0, r5, #0x0 - bl Sav2_Pokedex_get - add r6, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02029FC8 - add r7, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - add r2, r0, #0x0 - lsl r2, r2, #0x10 - add r0, r7, #0x0 - add r1, r6, #0x0 - lsr r2, r2, #0x10 - bl FUN_0202A1C4 - add r0, r6, #0x0 - add r1, r4, #0x0 - bl Pokedex_SetMonCaughtFlag - add r0, r5, #0x0 - bl Sav2_Poketch_get - add r1, r4, #0x0 - bl Sav2_Poketch_PokemonHistoryAddMon -_0202C194: - pop {r3-r7, pc} - .balign 4 diff --git a/arm9/src/unk_0202C144.c b/arm9/src/unk_0202C144.c new file mode 100644 index 000000000..b7dd45aac --- /dev/null +++ b/arm9/src/unk_0202C144.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "pokedex.h" +#include "poketch.h" +#include "unk_02029FB0.h" +#include "unk_0202C144.h" + +#pragma thumb on + +extern struct UnkStruct_02029FB0 * FUN_02029FC8(struct SaveBlock2 * sav2); +extern void FUN_0202A1C4(struct UnkStruct_02029FB0 * unk, struct Pokedex * pokedex, u16 species); + +void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon) +{ + u32 is_egg = GetMonData(mon, MON_DATA_IS_EGG, NULL); + if (!is_egg) + { + struct Pokedex * pokedex = Sav2_Pokedex_get(sav2); + struct UnkStruct_02029FB0 * unk = FUN_02029FC8(sav2); + u32 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + FUN_0202A1C4(unk, pokedex, (u16)species); + Pokedex_SetMonCaughtFlag(pokedex, mon); + + struct SavePoketch * poketch = Sav2_Poketch_get(sav2); + Sav2_Poketch_PokemonHistoryAddMon(poketch, &mon->box); + } +} diff --git a/include/unk_02029FB0.h b/include/unk_02029FB0.h new file mode 100644 index 000000000..545a6d3ae --- /dev/null +++ b/include/unk_02029FB0.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_UNK_02029FB0_H +#define POKEDIAMOND_UNK_02029FB0_H + +struct UnkStruct_02029FB0 +{ + u8 unk[0x14C]; +}; + +#endif diff --git a/include/unk_0202C144.h b/include/unk_0202C144.h index 31d3942c0..95ca3be4a 100644 --- a/include/unk_0202C144.h +++ b/include/unk_0202C144.h @@ -1,6 +1,9 @@ #ifndef POKEDIAMOND_UNK_0202C144_H #define POKEDIAMOND_UNK_0202C144_H +#include "save_block_2.h" +#include "pokemon.h" + void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon); #endif //POKEDIAMOND_UNK_0202C144_H From a2c689698a8b16cc72615bd020f938ebe104b87e Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 5 Feb 2021 02:00:25 -0500 Subject: [PATCH 51/59] port over and implement asm processor for NONMATCHINGS. thanks hondew! --- Makefile | 2 +- arm7/Makefile | 2 +- arm9/Makefile | 14 +- include/macros.inc | 5 + tools/asm_processor/asm_processor.py | 1261 ++++++++++++++++++++++++++ tools/asm_processor/compile.sh | 19 + 6 files changed, 1299 insertions(+), 4 deletions(-) create mode 100644 include/macros.inc create mode 100644 tools/asm_processor/asm_processor.py create mode 100644 tools/asm_processor/compile.sh diff --git a/Makefile b/Makefile index 881aa3a1b..5189c062a 100644 --- a/Makefile +++ b/Makefile @@ -120,7 +120,7 @@ MAKEROM = $(WINE) $(TOOLS_DIR)/bin/makerom.exe FIXROM = $(TOOLS_DIR)/fixrom/fixrom$(EXE) NTRCOMP = $(WINE) $(TOOLS_DIR)/bin/ntrcomp.exe -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) diff --git a/arm7/Makefile b/arm7/Makefile index 88f796a06..f983c6543 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -102,7 +102,7 @@ GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE) MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) diff --git a/arm9/Makefile b/arm9/Makefile index d537fbd76..05e78524d 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -69,6 +69,9 @@ LIBS_OBJS = $(LIBS_FILES:%.s=$(BUILD_DIR)/%.o) # Object files O_FILES := $(C_OBJS) $(CXX_OBJS) $(S_OBJS) +GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(C_FILES) +GLOBAL_ASM_O_FILES = $(addprefix $(BUILD_DIR)/,$(GLOBAL_ASM_C_FILES:.c=.o)) + # Overlay modules OVERLAYS := $(shell grep -oE "Overlay \w+" $(LD_SPEC) | cut -d' ' -f2) @@ -102,6 +105,9 @@ AR := $(CROSS)ar OBJDUMP := $(CROSS)objdump OBJCOPY := $(CROSS)objcopy +ASM_PROCESSOR_DIR := ../tools/asm_processor +ASM_PROCESSOR := $(ASM_PROCESSOR_DIR)/compile.sh + # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -i ../include -i .. -D$(GAME_VERSION) -D$(GAME_LANGUAGE) CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off $(foreach dir,$(INCLUDE_DIRS),-i $(dir)) $(foreach dir,$(INCLUDE_RECURSIVE_DIRS),-ir $(dir)) -interworking -DFS_IMPLEMENT -enum int -W all -D$(GAME_VERSION) -D$(GAME_LANGUAGE) @@ -124,7 +130,7 @@ GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx$(EXE) SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE) MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) @@ -190,8 +196,12 @@ else $(BUILD_DIR)/%.o: dep := endif +# Cpp asm processor is not supported at this time. +$(GLOBAL_ASM_O_FILES): BUILD_C := $(ASM_PROCESSOR) "$(CC) $(CFLAGS)" "$(AS) $(ASFLAGS)" +BUILD_C ?= $(CC) -c $(CFLAGS) -o + $(C_OBJS): $(BUILD_DIR)/%.o: %.c $$(dep) - $(CC) -c $(CFLAGS) -o $@ $< + $(BUILD_C) $@ $< $(CXX_OBJS): $(BUILD_DIR)/%.o: %.cpp $$(dep) $(CXX) -c $(CXXFLAGS) -o $@ $< diff --git a/include/macros.inc b/include/macros.inc new file mode 100644 index 000000000..eb060422f --- /dev/null +++ b/include/macros.inc @@ -0,0 +1,5 @@ +.macro glabel label + .global \label + .thumb + \label: +.endm diff --git a/tools/asm_processor/asm_processor.py b/tools/asm_processor/asm_processor.py new file mode 100644 index 000000000..e3226cb23 --- /dev/null +++ b/tools/asm_processor/asm_processor.py @@ -0,0 +1,1261 @@ +#!/usr/bin/env python3 +import argparse +import tempfile +import struct +import copy +import sys +import re +import os +from collections import namedtuple, defaultdict +from io import StringIO + +MAX_FN_SIZE = 100 +SLOW_CHECKS = False + +EI_NIDENT = 16 +EI_CLASS = 4 +EI_DATA = 5 +EI_VERSION = 6 +EI_OSABI = 7 +EI_ABIVERSION = 8 +STN_UNDEF = 0 + +SHN_UNDEF = 0 +SHN_ABS = 0xfff1 +SHN_COMMON = 0xfff2 +SHN_XINDEX = 0xffff +SHN_LORESERVE = 0xff00 + +STT_NOTYPE = 0 +STT_OBJECT = 1 +STT_FUNC = 2 +STT_SECTION = 3 +STT_FILE = 4 +STT_COMMON = 5 +STT_TLS = 6 + +STB_LOCAL = 0 +STB_GLOBAL = 1 +STB_WEAK = 2 + +STV_DEFAULT = 0 +STV_INTERNAL = 1 +STV_HIDDEN = 2 +STV_PROTECTED = 3 + +SHT_NULL = 0 +SHT_PROGBITS = 1 +SHT_SYMTAB = 2 +SHT_STRTAB = 3 +SHT_RELA = 4 +SHT_HASH = 5 +SHT_DYNAMIC = 6 +SHT_NOTE = 7 +SHT_NOBITS = 8 +SHT_REL = 9 +SHT_SHLIB = 10 +SHT_DYNSYM = 11 +SHT_INIT_ARRAY = 14 +SHT_FINI_ARRAY = 15 +SHT_PREINIT_ARRAY = 16 +SHT_GROUP = 17 +SHT_SYMTAB_SHNDX = 18 +SHT_MIPS_GPTAB = 0x70000003 +SHT_MIPS_DEBUG = 0x70000005 +SHT_MIPS_REGINFO = 0x70000006 +SHT_MIPS_OPTIONS = 0x7000000d + +SHF_WRITE = 0x1 +SHF_ALLOC = 0x2 +SHF_EXECINSTR = 0x4 +SHF_MERGE = 0x10 +SHF_STRINGS = 0x20 +SHF_INFO_LINK = 0x40 +SHF_LINK_ORDER = 0x80 +SHF_OS_NONCONFORMING = 0x100 +SHF_GROUP = 0x200 +SHF_TLS = 0x400 + +R_MIPS_32 = 2 +R_MIPS_26 = 4 +R_MIPS_HI16 = 5 +R_MIPS_LO16 = 6 + + +class ElfHeader: + """ + typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; + } Elf32_Ehdr; + """ + + def __init__(self, data): + self.e_ident = data[:EI_NIDENT] + self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('> 4 + self.type = st_info & 15 + self.name = strtab.lookup_str(self.st_name) + self.visibility = self.st_other & 3 + + def to_bin(self): + st_info = (self.bind << 4) | self.type + return struct.pack('> 8 + self.rel_type = self.r_info & 0xff + + def to_bin(self): + self.r_info = (self.sym_index << 8) | self.rel_type + if self.sh_type == SHT_REL: + return struct.pack(' 0: + # Generate late rodata by emitting unique float constants. + # This requires 3 instructions for each 4 bytes of rodata. + # If we know alignment, we can use doubles, which give 3 + # instructions for 8 bytes of rodata. + size = self.fn_section_sizes['.late_rodata'] // 2 + skip_next = False + needs_double = (self.late_rodata_alignment != 0) + for i in range(size): + if skip_next: + skip_next = False + continue + # Jump tables give 9 instructions for >= 5 words of rodata, and should be + # emitted when: + # - -O2 or -O2 -g3 are used, which give the right codegen + # - we have emitted our first .float/.double (to ensure that we find the + # created rodata in the binary) + # - we have emitted our first .double, if any (to ensure alignment of doubles + # in shifted rodata sections) + # - we have at least 5 words of rodata left to emit (otherwise IDO does not + # generate a jump table) + # - we have at least 10 more instructions to go in this function (otherwise our + # function size computation will be wrong since the delay slot goes unused) + if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and + size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10): + cases = " ".join("case {}:".format(case) for case in range(size - i)) + late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }") + late_rodata_fn_output.extend([""] * 8) + jtbl_rodata_size = (size - i) * 4 + break + dummy_bytes = state.next_late_rodata_hex() + late_rodata_dummy_bytes.append(dummy_bytes) + if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) and i + 1 < size: + dummy_bytes2 = state.next_late_rodata_hex() + late_rodata_dummy_bytes.append(dummy_bytes2) + fval, = struct.unpack(' 0 or late_rodata_fn_output: + text_name = state.make_name('func') + src[0] = 'int {}(void) {{ return '.format(text_name) + instr_count = self.fn_section_sizes['.text'] // 2 + src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count > 1 else '; }; ' + if instr_count < state.min_instr_count: + self.fail("too short .text block") + tot_emitted = 0 + tot_skipped = 0 + fn_emitted = 0 + fn_skipped = 0 + rodata_stack = late_rodata_fn_output[::-1] + for (line, count) in self.fn_ins_inds: + for _ in range(count): + if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and + (not rodata_stack or rodata_stack[-1])): + # Don't let functions become too large. When a function reaches 284 + # instructions, and -O2 -framepointer flags are passed, the IRIX + # compiler decides it is a great idea to start optimizing more. + fn_emitted = 0 + fn_skipped = 0 + src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func')) + if fn_skipped < state.skip_instr_count: + fn_skipped += 1 + tot_skipped += 1 + elif rodata_stack: + src[line] += rodata_stack.pop() + else: + src[line] += '*(int *)' + tot_emitted += 1 + fn_emitted += 1 + if rodata_stack: + size = len(late_rodata_fn_output) // 3 + available = instr_count - tot_skipped + self.fail( + "late rodata to text ratio is too high: {} / {} must be <= 1/3\n" + "add .late_rodata_alignment (4|8) to the .late_rodata " + "block to double the allowed ratio." + .format(size, available)) + + init_name = None + if self.fn_section_sizes['.init'] > 0 or late_rodata_fn_output: + init_name = state.make_name('func') + src[0] = 'int {}(void) {{ return '.format(init_name) + instr_count = self.fn_section_sizes['.init'] // 2 + src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count else '; }; ' + if instr_count < state.min_instr_count: + self.fail("too short .init block") + tot_emitted = 0 + tot_skipped = 0 + fn_emitted = 0 + fn_skipped = 0 + rodata_stack = late_rodata_fn_output[::-1] + for (line, count) in self.fn_ins_inds: + for _ in range(count): + if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and + (not rodata_stack or rodata_stack[-1])): + # Don't let functions become too large. When a function reaches 284 + # instructions, and -O2 -framepointer flags are passed, the IRIX + # compiler decides it is a great idea to start optimizing more. + fn_emitted = 0 + fn_skipped = 0 + src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func')) + if fn_skipped < state.skip_instr_count: + fn_skipped += 1 + tot_skipped += 1 + elif rodata_stack: + src[line] += rodata_stack.pop() + else: + src[line] += '*(int *)' + tot_emitted += 1 + fn_emitted += 1 + if rodata_stack: + size = len(late_rodata_fn_output) // 3 + available = instr_count - tot_skipped + self.fail( + "late rodata to init ratio is too high: {} / {} must be <= 1/3\n" + "add .late_rodata_alignment (4|8) to the .late_rodata " + "block to double the allowed ratio." + .format(size, available)) + + rodata_name = None + if self.fn_section_sizes['.rodata'] > 0: + rodata_name = state.make_name('rodata') + src[self.num_lines] += f" const char {rodata_name}[{self.fn_section_sizes['.rodata']}] = {{1}};" + + data_name = None + if self.fn_section_sizes['.data'] > 0: + data_name = state.make_name('data') + src[self.num_lines] += f" char {data_name}[{self.fn_section_sizes['.data']}] = {{1}};" + + bss_name = None + if self.fn_section_sizes['.bss'] > 0: + bss_name = state.make_name('bss') + src[self.num_lines] += f" char {bss_name}[{self.fn_section_sizes['.bss']}];" + + sdata_name = None # sdata is like data but small + if self.fn_section_sizes['.sdata'] > 0: + sdata_code = "" + for i in range(self.fn_section_sizes['.sdata']): + sdata_name = state.make_name('sdata') + sdata_code += f" char {sdata_name} = 1;" + src[self.num_lines] += sdata_code + + sdata2_name = None # sdata2 is like rodata but small + if self.fn_section_sizes['.sdata2'] > 0: + sdata2_code = "" + for i in range(self.fn_section_sizes['.sdata2']): + sdata2_name = state.make_name('sdata2') + sdata2_code += f" const char {sdata2_name} = 1;" + src[self.num_lines] += sdata2_code + + sbss_name = None # Similarly, sbss is like uninitialized data but small + if self.fn_section_sizes['.sbss'] > 0: + sbss_code = "" + for i in range(self.fn_section_sizes['.sbss']): + sbss_name = state.make_name('sbss') + sbss_code += f" char {sbss_name};" + src[self.num_lines] += sbss_code + + """ sbss2 is currently borked + sbss2_name = None # Similarly, sbss2 is like uninitialized rodata but small + if self.fn_section_sizes['.sbss2'] > 0: + sbss2_code = "" + for i in range(self.fn_section_sizes['.sbss2']): + sbss2_name = state.make_name('sbss2') + sbss2_code += f" const char {sbss2_name};" + src[self.num_lines] += sbss2_code + """ + + fn = Function( + text_glabels=self.text_glabels, + asm_conts=self.asm_conts, + late_rodata_dummy_bytes=late_rodata_dummy_bytes, + jtbl_rodata_size=jtbl_rodata_size, + late_rodata_asm_conts=self.late_rodata_asm_conts, + fn_desc=self.fn_desc, + data={ + '.text': (text_name, self.fn_section_sizes['.text']), + '.data': (data_name, self.fn_section_sizes['.data']), + '.rodata': (rodata_name, self.fn_section_sizes['.rodata']), + '.bss': (bss_name, self.fn_section_sizes['.bss']), + '.sdata': (sdata_name, self.fn_section_sizes['.sdata']), + '.sdata2': (sdata2_name, self.fn_section_sizes['.sdata2']), + '.sbss': (sbss_name, self.fn_section_sizes['.sbss']), + #'.sbss2': (sbss2_name, self.fn_section_sizes['.sbss2']), + }) + return src, fn + +cutscene_data_regexpr = re.compile(r"CutsceneData (.|\n)*\[\] = {") +float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f") + +def repl_float_hex(m): + return str(struct.unpack(" 0 + n_text = objfile.text_section_index(temp_name) + loc = objfile.symtab.find_symbol(temp_name) + if loc is None: + ifdefed = True + break + loc = loc[1] + prev_loc = prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] + if loc < prev_loc: + raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype + (str(n_text) if sectype == '.text' else ''), prev_loc- loc)) + if loc != prev_loc: + asm.append('.section ' + sectype) + if sectype == '.text': + for i in range((loc - prev_loc) // 2): + asm.append('nop') + else: + asm.append('.space {}'.format(loc - prev_loc)) + to_copy[sectype + (str(n_text) if sectype == '.text' else '')].append((loc, size, temp_name, function.fn_desc)) + prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] = loc + size + if not ifdefed: + all_text_glabels.update(function.text_glabels) + all_late_rodata_dummy_bytes.append(function.late_rodata_dummy_bytes) + all_jtbl_rodata_size.append(function.jtbl_rodata_size) + late_rodata_asm.append(function.late_rodata_asm_conts) + for sectype, (temp_name, size) in function.data.items(): + if temp_name is not None: + asm.append('.section ' + sectype) + asm.append('glabel ' + temp_name + '_asm_start') + asm.append('.section .text') + for line in function.asm_conts: + asm.append(line) + for sectype, (temp_name, size) in function.data.items(): + if temp_name is not None: + #asm.append('.section ' + sectype) + asm.append('glabel ' + temp_name + '_asm_end') + + if any(late_rodata_asm): + late_rodata_source_name_start = '_asmpp_late_rodata_start' + late_rodata_source_name_end = '_asmpp_late_rodata_end' + asm.append('.rdata') + asm.append('glabel {}'.format(late_rodata_source_name_start)) + for conts in late_rodata_asm: + asm.extend(conts) + asm.append('glabel {}'.format(late_rodata_source_name_end)) + + o_file = open("asm_processor_temp.o", 'w').close() # Create temp file. tempfile module isn't working for me. + o_name = "asm_processor_temp.o" + + s_file = open("asm_processor_temp.s", 'wb') # Ditto. + s_name = "asm_processor_temp.s" + try: + s_file.write(asm_prelude + b'\n') + for line in asm: + s_file.write(line.encode(output_enc) + b'\n') + s_file.close() + ret = os.system(assembler + " " + s_name + " -o " + o_name) + if ret != 0: + raise Failure("failed to assemble") + with open(o_name, 'rb') as f: + asm_objfile = ElfFile(f.read()) + + # Remove some clutter from objdump output + objfile.drop_irrelevant_sections() + + """ + # Unify reginfo sections + target_reginfo = objfile.find_section('.reginfo') + source_reginfo_data = list(asm_objfile.find_section('.reginfo').data) + data = list(target_reginfo.data) + for i in range(20): + data[i] |= source_reginfo_data[i] + target_reginfo.data = bytes(data) + """ + + # Move over section contents + modified_text_positions = set() + jtbl_rodata_positions = set() + last_rodata_pos = 0 + n_text = 0 + for sec in objfile.sections: + sectype = sec.name + if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + if sectype == '.text': + n_text += 1 + continue + # This should work as long as you NONMATCH whole functions rather than asm fragments + func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2] + asm_n_text = asm_objfile.text_section_index(func + '_asm_start') + source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0) + assert source is not None, "didn't find source section: " + sectype + for (pos, count, temp_name, fn_desc) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source) + loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source) + assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc + if loc2 - loc1 != count: + raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.") + if sectype == '.bss' or sectype == '.sbss2': + continue + target = objfile.find_section(sectype, n_text if sectype == '.text' else 0) + assert target is not None, "missing target section of type " + sectype + data = list(target.data) + for (pos, count, _, _) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + # mwasmarm 4-aligns text sections, so make sure to copy exactly `count` bytes + data[pos:pos + count] = source.data[pos:pos + count] + if sectype == '.text': + assert count % 2 == 0 + assert pos % 2 == 0 + for i in range(count // 2): + modified_text_positions.add(pos + 2 * i) + elif sectype == '.rodata': + last_rodata_pos = pos + count + target.data = bytes(data) + if sectype == '.text': + n_text += 1 + + # Move over late rodata. This is heuristic, sadly, since I can't think + # of another way of doing it. + moved_late_rodata = {} + if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size): + source = asm_objfile.find_section('.rodata', 0) + target = objfile.find_section('.rodata', 0) + source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source) + source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source) + if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 2 + sum(all_jtbl_rodata_size): + raise Failure("computed wrong size of .late_rodata") + new_data = list(target.data) + for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size): + for index, dummy_bytes in enumerate(dummy_bytes_list): + pos = target.data.index(dummy_bytes, last_rodata_pos) + # This check is nice, but makes time complexity worse for large files: + if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 2) != -1: + raise Failure("multiple occurrences of late_rodata hex magic. Change asm-processor to use something better than 0xE0123456!") + if index == 0 and len(dummy_bytes_list) > 1 and target.data[pos+2:pos+8] == b'\0\0\0\0': + # Ugly hack to handle double alignment for non-matching builds. + # We were told by .late_rodata_alignment (or deduced from a .double) + # that a function's late_rodata started out 4 (mod 8), and emitted + # a float and then a double. But it was actually 0 (mod 8), so our + # double was moved by 4 bytes. To make them adjacent to keep jump + # tables correct, move the float by 4 bytes as well. + new_data[pos:pos+2] = b'\0\0\0\0' + pos += 2 + new_data[pos:pos+2] = source.data[source_pos:source_pos+2] + moved_late_rodata[source_pos] = pos + last_rodata_pos = pos + 2 + source_pos += 2 + if jtbl_rodata_size > 0: + assert dummy_bytes_list, "should always have dummy bytes before jtbl data" + pos = last_rodata_pos + new_data[pos : pos + jtbl_rodata_size] = \ + source.data[source_pos : source_pos + jtbl_rodata_size] + for i in range(0, jtbl_rodata_size, 2): + moved_late_rodata[source_pos + i] = pos + i + jtbl_rodata_positions.add(pos + i) + last_rodata_pos += jtbl_rodata_size + source_pos += jtbl_rodata_size + target.data = bytes(new_data) + + # Merge strtab data. + strtab_adj = len(objfile.symtab.strtab.data) + objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data + + # Find relocated symbols + relocated_symbols = set() + for obj in [asm_objfile, objfile]: + for sec in obj.sections: + for reltab in sec.relocated_by: + for rel in reltab.relocations: + relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index]) + + # Move over symbols, deleting the temporary function labels. + # Sometimes this naive procedure results in duplicate symbols, or UNDEF + # symbols that are also defined the same .o file. Hopefully that's fine. + # Skip over local symbols that aren't used relocated against, to avoid + # conflicts. + new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)] + new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)] + n_text = 0 + for i, s in enumerate(asm_objfile.symtab.symbol_entries): + is_local = (i < asm_objfile.symtab.sh_info) + if is_local and s not in relocated_symbols: + continue + if is_temp_name(s.name): + continue + if s.st_shndx not in [SHN_UNDEF, SHN_ABS]: + section_name = asm_objfile.sections[s.st_shndx].name + if section_name not in SECTIONS: + raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .sdata, .sdata2, .sbss, ABS and UNDEF, but found " + section_name) + if section_name == '.sbss2': #! I'm not sure why this isn't working + continue + s.st_shndx = objfile.find_section(section_name, n_text if section_name == '.text' else 0).index + if section_name == '.text': + n_text += 1 + # glabel's aren't marked as functions, making objdump output confusing. Fix that. + if s.name in all_text_glabels: + s.type = STT_FUNC + if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata: + s.st_value = moved_late_rodata[s.st_value] + s.st_name += strtab_adj + if is_local: + new_local_syms.append(s) + else: + new_global_syms.append(s) + new_syms = new_local_syms + new_global_syms + for i, s in enumerate(new_syms): + s.new_index = i + objfile.symtab.data = b''.join(s.to_bin() for s in new_syms) + objfile.symtab.sh_info = len(new_local_syms) + + # Move over relocations + n_text = 0 + for sec in objfile.sections: + sectype = sec.name + # This should work as long as you NONMATCH whole functions rather than asm fragments + target = objfile.find_section(sectype, n_text if sectype == '.text' else 0) + + if target is not None: + # fixup relocation symbol indices, since we butchered them above + for reltab in target.relocated_by: + nrels = [] + for rel in reltab.relocations: + if (sectype == '.text' and rel.r_offset in modified_text_positions or + sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions) or sectype == ".sbss2": + # don't include relocations for late_rodata dummy code + continue + # hopefully we don't have relocations for local or + # temporary symbols, so new_index exists + rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index + nrels.append(rel) + reltab.relocations = nrels + reltab.data = b''.join(rel.to_bin() for rel in nrels) + + if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + if sectype == '.text': + n_text += 1 + continue + + func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2] + asm_n_text = asm_objfile.text_section_index(func + '_asm_start') + source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0) + if not source: + if sectype == '.text': + n_text += 1 + continue + + target_reltab = objfile.find_section('.rel' + sectype, n_text if sectype == '.text' else 0) + target_reltaba = objfile.find_section('.rela' + sectype, n_text if sectype == '.text' else 0) + for reltab in source.relocated_by: + for rel in reltab.relocations: + rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index + # I suspect that this is requried for matching. If the after linking the + # binary doesn't match, retry after commenting out the following line: + rel.r_addend = 0 + if sectype == '.rodata' and rel.r_offset in moved_late_rodata: + rel.r_offset = moved_late_rodata[rel.r_offset] + new_data = b''.join(rel.to_bin() for rel in reltab.relocations) + if reltab.sh_type == SHT_REL: + target_reltab = objfile.add_section('.rel' + sectype, + sh_type=SHT_REL, sh_flags=0, + sh_link=objfile.symtab.index, sh_info=target.index, + sh_addralign=4, sh_entsize=8, data=b'') + target_reltab.data += new_data + else: + # Always append as a separate .rela.text section + target_reltaba = objfile.add_section('.rela' + sectype, + sh_type=SHT_RELA, sh_flags=0, + sh_link=objfile.symtab.index, sh_info=target.index, + sh_addralign=4, sh_entsize=12, data=b'') + target_reltaba.data += new_data + if sectype == '.text': + n_text += 1 + + objfile.write(objfile_name) + finally: + s_file.close() + #os.remove(s_name) + try: + pass + #os.remove(o_name) + except: + pass + +def run_wrapped(argv, outfile): + parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.") + parser.add_argument('filename', help="path to .c code") + parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process") + parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")") + parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") + parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)") + parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)") + parser.add_argument('-framepointer', dest='framepointer', action='store_true') + parser.add_argument('-g3', dest='g3', action='store_true') + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument('-O1', dest='opt', action='store_const', const='O1') + group.add_argument('-O2', dest='opt', action='store_const', const='O2') + group.add_argument('-g', dest='opt', action='store_const', const='g') + args = parser.parse_args(argv) + opt = args.opt + if args.g3: + if opt != 'O2': + raise Failure("-g3 is only supported together with -O2") + opt = 'g3' + + if args.objfile is None: + with open(args.filename, encoding=args.input_enc) as f: + parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile) + else: + if args.assembler is None: + raise Failure("must pass assembler command") + with open(args.filename, encoding=args.input_enc) as f: + functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc) + if not functions: + return + asm_prelude = b'' + if args.asm_prelude: + with open(args.asm_prelude, 'rb') as f: + asm_prelude = f.read() + fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc) + +def run(argv, outfile=sys.stdout.buffer): + try: + run_wrapped(argv, outfile) + except Failure as e: + sys.exit(1) + +if __name__ == "__main__": + run(sys.argv[1:]) diff --git a/tools/asm_processor/compile.sh b/tools/asm_processor/compile.sh new file mode 100644 index 000000000..7d9506440 --- /dev/null +++ b/tools/asm_processor/compile.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +CC="$1" +shift +AS="$1" +shift + +temp="$(mktemp)" +../tools/asm_processor/asm_processor.py "$2" --assembler "$AS" > "$temp.c" && +$CC -c "$temp.c" -o "$1" + +prelude=$(mktemp prelude.XXXXXX) +cat ../include/macros.inc >> "$prelude" +cat global.inc >> "$prelude" + +../tools/asm_processor/asm_processor.py "$2" --post-process "$1" --assembler "$AS" --asm-prelude "$prelude" +$DEVKITARM/bin/arm-none-eabi-objcopy --remove-section .comment "$1" "$1" +rm "$prelude" +rm "$temp" From fc81c4a0af763477fa485e2648cc47ffd5ed703d Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 01:16:47 +0100 Subject: [PATCH 52/59] add macOS support --- INSTALL.md | 29 +++++++++++++++++++++++++++++ Makefile | 4 ++++ arm7/Makefile | 5 +++++ arm9/Makefile | 7 ++++++- tools/knarc/Makefile | 2 +- tools/mwasmarm_patcher/Makefile | 5 +++++ 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 35eb054dc..5a6ecd099 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -48,6 +48,35 @@ Install them using either the Cygwin package manager or using pacman on Msys2. **NOTE FOR MSYS2:** You will need to compile and install [libpng](https://www.libpng.org/pub/png/libpng.html) from source. +#### macOS + +**macOS 10.14 Mojave or older is required**. macOS 10.15 Catalina is not supported due to missing support for 32-bit binaries (thus making wine emulation unfeasible). You will also require the following packages: + +* GNU make +* LLVM 8 clang compiler +* gcc@5 (for mwasmarm_patcher) +* arm-gcc-bin +* git +* libpng +* wine-stable and xquartz dependency + +They can be installed with the following commands: + +```console +$ brew tap osx-cross/homebrew-arm +$ brew tap homebrew/cask-versions +$ brew install make llvm@8 gcc@5 arm-gcc-bin libpng git +$ brew install --cask xquartz +$ brew install --cask --no-quarantine wine-stable +``` + +To build the project, run the below commands: + +```console +$ export PATH=/usr/local/opt/llvm@8/bin:$PATH SHA1SUM=shasum CC=clang CXX=clang++ +$ gmake +``` + ### 4. Build ROM Run `make` to build the ROM. The ROM will be output as `build/diamond.us/pokediamond.us.nds` diff --git a/Makefile b/Makefile index 5189c062a..4467d8ac9 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,11 @@ LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start # DS TOOLS TOOLS_DIR = tools +ifeq ($(UNAME_S),Darwin) +SHA1SUM = shasum +else SHA1SUM = sha1sum +endif CSV2BIN = $(TOOLS_DIR)/csv2bin/csv2bin$(EXE) JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) O2NARC = $(TOOLS_DIR)/o2narc/o2narc$(EXE) diff --git a/arm7/Makefile b/arm7/Makefile index f983c6543..d142c079a 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -96,7 +96,12 @@ LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start ####################### Other Tools ######################### # DS TOOLS +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) +SHA1SUM = shasum +else SHA1SUM = sha1sum +endif JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE) diff --git a/arm9/Makefile b/arm9/Makefile index 05e78524d..ea391eea5 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -120,11 +120,16 @@ STATIC_LIBS := $(addprefix $(BUILD_DIR)/lib/,libsyscall.a) ####################### Other Tools ######################### # DS TOOLS -ifndef BUSYBOX +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) +SHA1SUM = shasum +else +ifdef BUSYBOX SHA1SUM = sha1sum --quiet else SHA1SUM = sha1sum endif +endif JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx$(EXE) SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE) diff --git a/tools/knarc/Makefile b/tools/knarc/Makefile index 7dc8bd247..62abc0628 100644 --- a/tools/knarc/Makefile +++ b/tools/knarc/Makefile @@ -8,7 +8,7 @@ else C_SRCS := UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) -LDFLAGS += -lstdc++ -lc++ -lc +LDFLAGS += -lstdc++ -lc++ -lc /usr/local/opt/llvm@8/lib/libc++fs.a -O2 -Wall -Wno-switch else LDFLAGS += -lstdc++fs endif diff --git a/tools/mwasmarm_patcher/Makefile b/tools/mwasmarm_patcher/Makefile index 9765f713c..26df548c7 100644 --- a/tools/mwasmarm_patcher/Makefile +++ b/tools/mwasmarm_patcher/Makefile @@ -1,6 +1,11 @@ .PHONY: all clean +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) +CC := gcc-5 +else CC := gcc +endif CFLAGS := -O3 .PHONY: all clean From 95c06516c1190a610385ce2a865115730ee76671 Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 01:27:39 +0100 Subject: [PATCH 53/59] fix build section --- INSTALL.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 5a6ecd099..65dead6ec 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -70,19 +70,21 @@ $ brew install --cask xquartz $ brew install --cask --no-quarantine wine-stable ``` -To build the project, run the below commands: - -```console -$ export PATH=/usr/local/opt/llvm@8/bin:$PATH SHA1SUM=shasum CC=clang CXX=clang++ -$ gmake -``` - ### 4. Build ROM Run `make` to build the ROM. The ROM will be output as `build/diamond.us/pokediamond.us.nds` To build Pokemon Pearl, run `make pearl`. You do not need to clean your working tree in between compiling. Pokemon Pearl will be built as `build/pearl.us/pokepearl.us.nds`. -Windows Users: +#### Windows If you get an error in saving configuration settings when specifying the license file, you need to add a system environment variable called LM_LICENSE_FILE and point it to the license.dat file. Alternatively, run mwccarm.exe from an Administrator command prompt, PowerShell, or WSL session. + +#### macOS + +To avoid issues run the build as shown below. This avoids issues with missing features (i.e. "introduced in macOS 10.15" errors) and Apple's make not following standards. + +```console +$ export PATH=/usr/local/opt/llvm@8/bin:$PATH CC=clang CXX=clang++ +$ gmake +``` From 563b14a97f6208e790843931afc54981f8e8f4b3 Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 01:44:52 +0100 Subject: [PATCH 54/59] document building with Docker --- INSTALL.md | 14 +++++++++++++- docker/Dockerfile | 11 +++++++++++ docker/build.sh | 20 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docker/Dockerfile create mode 100755 docker/build.sh diff --git a/INSTALL.md b/INSTALL.md index 35eb054dc..6cbe51112 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -54,6 +54,18 @@ Run `make` to build the ROM. The ROM will be output as `build/diamond.us/pokedia To build Pokemon Pearl, run `make pearl`. You do not need to clean your working tree in between compiling. Pokemon Pearl will be built as `build/pearl.us/pokepearl.us.nds`. -Windows Users: +#### Windows If you get an error in saving configuration settings when specifying the license file, you need to add a system environment variable called LM_LICENSE_FILE and point it to the license.dat file. Alternatively, run mwccarm.exe from an Administrator command prompt, PowerShell, or WSL session. + +#### Docker + +If you find issues building the ROMs with the above methods, you can try the Docker-specific build script. It will build a Docker image with the system requirements above, and run the `make` scripts (any specified parameter will be passed to the `make` command): + +```console +$ make clean +$ ./docker/build.sh # build pokediamond +$ ./docker/build.sh pearl # build pokepearl +``` + +Note: Docker may not run at a full performance if its underlying Linux kernel is being virtualized (mainly Windows and macOS hosts). diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..3bc112353 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,11 @@ +FROM ubuntu:20.04 + +RUN dpkg --add-architecture i386 && \ +apt update && \ +DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends binutils-arm-none-eabi build-essential git libpng-dev wine wine32 && \ +rm -r /var/cache/apt/archives /var/lib/apt/lists + +# Run a persistent wineserver to avoid errors like +# wine: a wine server seems to be running, but I cannot connect to it. +RUN mkdir -p /root/.wine +CMD /usr/lib/wine/wineserver32 -f -p diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 000000000..1ce28543c --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -eou pipefail + +PROJECT_NAME=${PROJECT_NAME:-pokediamond} +PROJECT_PATH=${PROJECT_PATH:-$(dirname $(pwd))} + +# Build container image +IMAGE_NAME=${IMAGE_NAME:-$PROJECT_NAME-image} +docker build -t $IMAGE_NAME . + +# Start container and wine server +CONTAINER_NAME=${CONTAINER_NAME:-$PROJECT_NAME} +docker run -d -i --name $CONTAINER_NAME --rm -t -v $PROJECT_PATH:/$PROJECT_NAME -w /$PROJECT_NAME $IMAGE_NAME + +# Build selected project, always exit successfully to ensure container stops +docker exec -i -t $CONTAINER_NAME make $@ || true + +# Exit the container and remove +docker stop $CONTAINER_NAME From a2f2340c2bda2dae406ffaa1935d28cb740c2e39 Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 02:16:48 +0100 Subject: [PATCH 55/59] fix ifdef -> ifndef typo --- arm9/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm9/Makefile b/arm9/Makefile index ea391eea5..8b84a135e 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -124,7 +124,7 @@ UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) SHA1SUM = shasum else -ifdef BUSYBOX +ifndef BUSYBOX SHA1SUM = sha1sum --quiet else SHA1SUM = sha1sum From 904d950a9ed1876554557cba5a2e627d46c139cb Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 02:21:45 +0100 Subject: [PATCH 56/59] Remove duplicated flags --- tools/knarc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/knarc/Makefile b/tools/knarc/Makefile index 62abc0628..0e0a09202 100644 --- a/tools/knarc/Makefile +++ b/tools/knarc/Makefile @@ -8,7 +8,7 @@ else C_SRCS := UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) -LDFLAGS += -lstdc++ -lc++ -lc /usr/local/opt/llvm@8/lib/libc++fs.a -O2 -Wall -Wno-switch +LDFLAGS += -lstdc++ -lc++ -lc /usr/local/opt/llvm@8/lib/libc++fs.a else LDFLAGS += -lstdc++fs endif From 7b7d9ac83ebe77efb176b7a20a98b2baf3dfa852 Mon Sep 17 00:00:00 2001 From: Dsaster <78389441+dsastr@users.noreply.github.com> Date: Sat, 6 Feb 2021 22:07:15 +0100 Subject: [PATCH 57/59] Use existing scripts in contrib/docker --- INSTALL.md | 6 ++-- .../docker/Dockerfile.ubuntu | 2 ++ contrib/docker/build_docker.sh | 30 +++++++++++++++---- docker/build.sh | 20 ------------- 4 files changed, 29 insertions(+), 29 deletions(-) rename docker/Dockerfile => contrib/docker/Dockerfile.ubuntu (96%) delete mode 100755 docker/build.sh diff --git a/INSTALL.md b/INSTALL.md index 6cbe51112..f932b2380 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -60,12 +60,12 @@ If you get an error in saving configuration settings when specifying the license #### Docker -If you find issues building the ROMs with the above methods, you can try the Docker-specific build script. It will build a Docker image with the system requirements above, and run the `make` scripts (any specified parameter will be passed to the `make` command): +If you find issues building the ROMs with the above methods, you can try the Docker-specific build script. It will build an Alpine-based Docker image with the system requirements above, and run the `make` scripts (any specified parameter will be passed to the `make` command): ```console $ make clean -$ ./docker/build.sh # build pokediamond -$ ./docker/build.sh pearl # build pokepearl +$ ./contrib/docker/build_docker.sh # build pokediamond +$ ./contrib/docker/build_docker.sh pearl # build pokepearl ``` Note: Docker may not run at a full performance if its underlying Linux kernel is being virtualized (mainly Windows and macOS hosts). diff --git a/docker/Dockerfile b/contrib/docker/Dockerfile.ubuntu similarity index 96% rename from docker/Dockerfile rename to contrib/docker/Dockerfile.ubuntu index 3bc112353..d06b15f26 100644 --- a/docker/Dockerfile +++ b/contrib/docker/Dockerfile.ubuntu @@ -5,6 +5,8 @@ apt update && \ DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends binutils-arm-none-eabi build-essential git libpng-dev wine wine32 && \ rm -r /var/cache/apt/archives /var/lib/apt/lists +WORKDIR /app + # Run a persistent wineserver to avoid errors like # wine: a wine server seems to be running, but I cannot connect to it. RUN mkdir -p /root/.wine diff --git a/contrib/docker/build_docker.sh b/contrib/docker/build_docker.sh index b59e21586..dafacbe7f 100755 --- a/contrib/docker/build_docker.sh +++ b/contrib/docker/build_docker.sh @@ -1,11 +1,29 @@ #!/bin/sh -ver="0.1" +PROJECT_PATH="$(git rev-parse --show-toplevel)" +PROJECT_NAME="pokediamond" +PROJECT_VER="0.1" -docker inspect pokediamond:$ver > /dev/null -if [ $? = 0 ]; then - echo "Not rebuilding image since image exists"; +# Build container image +IMAGE_NAME="$PROJECT_NAME:$PROJECT_VER" +IMAGE_PATH="$PROJECT_PATH/contrib/docker" +if docker inspect $IMAGE_NAME > /dev/null; then + echo "Not rebuilding image since it already exists"; +elif [ "x$USE_UBUNTU" != "x" ]; then + docker build -t $IMAGE_NAME -f $IMAGE_PATH/Dockerfile.ubuntu $IMAGE_PATH else - docker build -t pokediamond:$ver $(git rev-parse --show-toplevel)/contrib/docker + docker build -t $IMAGE_NAME $IMAGE_PATH fi -docker run --network=none -it -v $(git rev-parse --show-toplevel):/app pokediamond:$ver + +# Start container and wine server +CONTAINER_NAME="$PROJECT_NAME-build" +docker run -d --name $CONTAINER_NAME --network=none -it --rm -v $PROJECT_PATH:/app $IMAGE_NAME + +# Build selected project, always exit successfully to ensure container stops +EXIT_CODE="0" +docker exec -i -t $CONTAINER_NAME make $@ || EXIT_CODE="$?" + +# Exit and remove the container +docker stop $CONTAINER_NAME + +exit $EXIT_CODE diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100755 index 1ce28543c..000000000 --- a/docker/build.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -eou pipefail - -PROJECT_NAME=${PROJECT_NAME:-pokediamond} -PROJECT_PATH=${PROJECT_PATH:-$(dirname $(pwd))} - -# Build container image -IMAGE_NAME=${IMAGE_NAME:-$PROJECT_NAME-image} -docker build -t $IMAGE_NAME . - -# Start container and wine server -CONTAINER_NAME=${CONTAINER_NAME:-$PROJECT_NAME} -docker run -d -i --name $CONTAINER_NAME --rm -t -v $PROJECT_PATH:/$PROJECT_NAME -w /$PROJECT_NAME $IMAGE_NAME - -# Build selected project, always exit successfully to ensure container stops -docker exec -i -t $CONTAINER_NAME make $@ || true - -# Exit the container and remove -docker stop $CONTAINER_NAME From f9512bc6c7b8c93a4c72b92825db67718863a200 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 25 Feb 2021 15:34:52 +0000 Subject: [PATCH 58/59] partial CTRDG_flash_AT29LV512.o decomp --- arm9/arm9.lsf | 1 + ...T29LV512.s => CTRDG_flash_AT29LV512_asm.s} | 192 +----------------- arm9/asm/CTRDG_flash_LE39FW512.s | 16 +- arm9/asm/CTRDG_flash_MX29L010.s | 18 +- arm9/asm/CTRDG_flash_common.s | 10 +- arm9/lib/include/CTRDG_backup.h | 4 + arm9/lib/include/CTRDG_flash.h | 2 + arm9/lib/include/CTRDG_flash_AT29LV512.h | 10 + arm9/lib/include/OS_interrupt.h | 7 + arm9/lib/src/CTRDG_flash_AT29LV512.c | 143 +++++++++++++ arm9/modules/21/include/mod21_02254854.h | 8 +- arm9/modules/21/src/mod21_02254854.c | 22 +- 12 files changed, 211 insertions(+), 222 deletions(-) rename arm9/asm/{CTRDG_flash_AT29LV512.s => CTRDG_flash_AT29LV512_asm.s} (62%) create mode 100644 arm9/lib/include/CTRDG_flash_AT29LV512.h create mode 100644 arm9/lib/src/CTRDG_flash_AT29LV512.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index fac2074d3..6bbff67c7 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -456,6 +456,7 @@ Static arm9 Object CTRDG_proc.o Object CTRDG_backup.o Object CTRDG_flash_common.o + Object CTRDG_flash_AT29LV512_asm.o Object CTRDG_flash_AT29LV512.o Object CTRDG_flash_LE26FV10N1TS-10.o Object CTRDG_flash_LE39FW512.o diff --git a/arm9/asm/CTRDG_flash_AT29LV512.s b/arm9/asm/CTRDG_flash_AT29LV512_asm.s similarity index 62% rename from arm9/asm/CTRDG_flash_AT29LV512.s rename to arm9/asm/CTRDG_flash_AT29LV512_asm.s index 24b2e0f2c..7cfa90af0 100644 --- a/arm9/asm/CTRDG_flash_AT29LV512.s +++ b/arm9/asm/CTRDG_flash_AT29LV512_asm.s @@ -5,40 +5,11 @@ .extern AgbFlash .extern CTRDGi_PollingSR .extern ctrdgi_flash_lock_id - .extern UNK_021D6B38 .extern UNK_021D6B08 - - .section .rodata - - .global atMaxTime -atMaxTime: ; 0x02104004 - .short 10, 40, 0, 40 - - .global AT29LV512_lib -AT29LV512_lib: ; 0x0210400C - .word CTRDGi_WriteFlash4KBAT - .word CTRDGi_EraseFlashChipAT - .word CTRDGi_EraseFlash4KBAT - .word CTRDGi_WriteFlash4KBAsyncAT - .word CTRDGi_EraseFlashChipAsyncAT - .word CTRDGi_EraseFlash4KBAsyncAT - .word CTRDGi_PollingSR512kCOMMON - .word atMaxTime - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 - - .global AT29LV512_org -AT29LV512_org: ; 0x02104048 - .word CTRDGi_WriteFlashSectorAT - .word CTRDGi_EraseFlashChipAT - .word CTRDGi_EraseFlashSectorAT - .word CTRDGi_WriteFlashSectorAsyncAT - .word CTRDGi_EraseFlashChipAsyncAT - .word CTRDGi_EraseFlashSectorAsyncAT - .word CTRDGi_PollingSR512kCOMMON - .word atMaxTime - .byte 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00 + .extern CTRDGi_EraseFlashChipCoreAT + .extern CTRDGi_EraseFlashSectorCoreAT + .extern AT29LV512_org + .extern AT29LV512_lib .text @@ -385,158 +356,3 @@ _020DCA18: bx lr .balign 4 _020DCA54: .word 0x000080FF - - arm_func_start CTRDGi_EraseFlashSectorCoreAT -CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - ldr r1, _020DCB80 ; =AT29LV512_org - str r0, [r4, #0x0] - ldr r0, _020DCB84 ; =ctrdgi_flash_lock_id - ldrh r2, [sp, #0x20] - ldrh r1, [r1, #0x28] - ldrh r0, [r0, #0x0] - mov r1, r2, lsl r1 - add r5, r1, #0xa000000 - bl OS_LockCartridge - ldr r4, _020DCB88 ; =0x04000204 - ldr r1, _020DCB8C ; =AgbFlash - ldrh r0, [r4, #0x0] - ldr r2, [r1, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r2, #0x10] - ldr r3, _020DCB90 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r2, [r3, #0x0] - mov r1, #0x0 - ldr r4, _020DCB94 ; =0x0A005555 - strh r1, [r3, #0x0] - mov r3, #0xaa - strb r3, [r4, #0x0] - ldr r1, _020DCB98 ; =0x0A002AAA - mov r3, #0x55 - strb r3, [r1, #0x0] - mov r3, #0xa0 - strb r3, [r4, #0x0] - ldr r1, _020DCB80 ; =AT29LV512_org - and r4, r0, #0x3 - ldr r1, [r1, #0x24] - cmp r1, #0x0 - beq _020DCB18 - mov r0, #0xff -_020DCB0C: - strb r0, [r5], #0x1 - subs r1, r1, #0x1 - bne _020DCB0C -_020DCB18: - ldr ip, _020DCB90 ; =0x04000208 - ldr r3, _020DCB9C ; =CTRDGi_PollingSR - ldrh r0, [r12, #0x0] - sub r1, r5, #0x1 - strh r2, [r12, #0x0] - ldr r3, [r3, #0x0] - mov r0, #0x1 - mov r2, #0xff - blx r3 - ldr r2, _020DCB88 ; =0x04000204 - movs r5, r0 - ldrh r1, [r2, #0x0] - andne r0, r5, #0xff00 - orrne r0, r0, #0x2 - movne r0, r0, lsl #0x10 - bic r1, r1, #0x3 - movne r5, r0, lsr #0x10 - orr r1, r1, r4 - ldr r0, _020DCB84 ; =ctrdgi_flash_lock_id - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge - mov r0, r5 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCB80: .word AT29LV512_org -_020DCB84: .word ctrdgi_flash_lock_id -_020DCB88: .word 0x04000204 -_020DCB8C: .word AgbFlash -_020DCB90: .word 0x04000208 -_020DCB94: .word 0x0A005555 -_020DCB98: .word 0x0A002AAA -_020DCB9C: .word CTRDGi_PollingSR - - arm_func_start CTRDGi_EraseFlashChipCoreAT -CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DCC7C ; =ctrdgi_flash_lock_id - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DCC80 ; =0x04000204 - ldr r0, _020DCC84 ; =AgbFlash - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DCC88 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DCC8C ; =UNK_021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DCC90 ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DCC94 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DCC98 ; =CTRDGi_PollingSR - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DCC80 ; =0x04000204 - ldr r1, _020DCC7C ; =ctrdgi_flash_lock_id - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCC7C: .word ctrdgi_flash_lock_id -_020DCC80: .word 0x04000204 -_020DCC84: .word AgbFlash -_020DCC88: .word 0x04000208 -_020DCC8C: .word UNK_021D6B38 -_020DCC90: .word 0x0A005555 -_020DCC94: .word 0x0A002AAA -_020DCC98: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_LE39FW512.s b/arm9/asm/CTRDG_flash_LE39FW512.s index 3228818df..26e714c0c 100644 --- a/arm9/asm/CTRDG_flash_LE39FW512.s +++ b/arm9/asm/CTRDG_flash_LE39FW512.s @@ -5,7 +5,7 @@ .extern AgbFlash .extern CTRDGi_PollingSR .extern ctrdgi_flash_lock_id - .extern UNK_021D6B38 + .extern ctrdgi_backup_irq .extern UNK_021D6B08 .section .rodata @@ -266,7 +266,7 @@ _020DCF38: mov r2, #0x0 strh r1, [r7, #0x0] ldrh r3, [r9, #0x0] - ldr r1, _020DD034 ; =UNK_021D6B38 + ldr r1, _020DD034 ; =ctrdgi_backup_irq and r5, r0, #0x3 strh r2, [r9, #0x0] ldrh r0, [r7, #0x0] @@ -289,7 +289,7 @@ _020DCFA0: bne _020DCFA0 _020DCFD4: ldr r3, _020DD030 ; =0x04000208 - ldr r0, _020DD034 ; =UNK_021D6B38 + ldr r0, _020DD034 ; =ctrdgi_backup_irq ldrh r1, [r3, #0x0] ldr r0, [r0, #0x0] ldr r2, _020DD028 ; =0x04000204 @@ -313,7 +313,7 @@ _020DD024: .word ctrdgi_flash_lock_id _020DD028: .word 0x04000204 _020DD02C: .word UNK_021D6B08 _020DD030: .word 0x04000208 -_020DD034: .word UNK_021D6B38 +_020DD034: .word ctrdgi_backup_irq arm_func_start CTRDGi_ProgramFlashByteLE CTRDGi_ProgramFlashByteLE: ; 0x020DD038 @@ -378,7 +378,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 ldrh r5, [r0, #0x0] ldrh r12, [r1, #0x8] mov r1, #0x0 - ldr r2, _020DD1CC ; =UNK_021D6B38 + ldr r2, _020DD1CC ; =ctrdgi_backup_irq strh r1, [r0, #0x0] mov r6, r4, lsl r12 ldr lr, _020DD1D0 ; =0x0A005555 @@ -423,7 +423,7 @@ _020DD1BC: .word ctrdgi_flash_lock_id _020DD1C0: .word 0x04000204 _020DD1C4: .word AgbFlash _020DD1C8: .word 0x04000208 -_020DD1CC: .word UNK_021D6B38 +_020DD1CC: .word ctrdgi_backup_irq _020DD1D0: .word 0x0A005555 _020DD1D4: .word 0x0A002AAA _020DD1D8: .word CTRDGi_PollingSR @@ -447,7 +447,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC strh r1, [r4, #0x0] ldrh r4, [r0, #0x0] mov r2, #0x0 - ldr r1, _020DD2C8 ; =UNK_021D6B38 + ldr r1, _020DD2C8 ; =ctrdgi_backup_irq strh r2, [r0, #0x0] ldr lr, _020DD2CC ; =0x0A005555 str r4, [r1, #0x0] @@ -490,7 +490,7 @@ _020DD2B8: .word ctrdgi_flash_lock_id _020DD2BC: .word 0x04000204 _020DD2C0: .word AgbFlash _020DD2C4: .word 0x04000208 -_020DD2C8: .word UNK_021D6B38 +_020DD2C8: .word ctrdgi_backup_irq _020DD2CC: .word 0x0A005555 _020DD2D0: .word 0x0A002AAA _020DD2D4: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_MX29L010.s b/arm9/asm/CTRDG_flash_MX29L010.s index 7b4e1dc3b..13de7bd70 100644 --- a/arm9/asm/CTRDG_flash_MX29L010.s +++ b/arm9/asm/CTRDG_flash_MX29L010.s @@ -5,7 +5,7 @@ .extern AgbFlash .extern CTRDGi_PollingSR .extern ctrdgi_flash_lock_id - .extern UNK_021D6B38 + .extern ctrdgi_backup_irq .extern UNK_021D6B08 .section .rodata @@ -184,7 +184,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 mov r3, r5, lsl r3 strh r0, [r1, #0x0] ldrh r1, [r8, #0x0] - ldr r0, _020DD558 ; =UNK_021D6B38 + ldr r0, _020DD558 ; =ctrdgi_backup_irq add r5, r3, #0xa000000 str r2, [r0, #0x0] cmp r1, #0x0 @@ -205,7 +205,7 @@ _020DD4C8: bne _020DD4C8 _020DD4FC: ldr r3, _020DD554 ; =0x04000208 - ldr r0, _020DD558 ; =UNK_021D6B38 + ldr r0, _020DD558 ; =ctrdgi_backup_irq ldrh r1, [r3, #0x0] ldr r0, [r0, #0x0] ldr r2, _020DD54C ; =0x04000204 @@ -228,7 +228,7 @@ _020DD548: .word ctrdgi_flash_lock_id _020DD54C: .word 0x04000204 _020DD550: .word UNK_021D6B08 _020DD554: .word 0x04000208 -_020DD558: .word UNK_021D6B38 +_020DD558: .word ctrdgi_backup_irq arm_func_start CTRDGi_ProgramFlashByteMX CTRDGi_ProgramFlashByteMX: ; 0x020DD55C @@ -314,7 +314,7 @@ _020DD684: ldr r0, _020DD748 ; =AgbFlash ldrh r12, [r8, #0x0] ldr r0, [r0, #0x0] - ldr r3, _020DD75C ; =UNK_021D6B38 + ldr r3, _020DD75C ; =ctrdgi_backup_irq ldrh r1, [r0, #0x8] ldr r0, [sp, #0x8] ldr r2, [sp, #0xc] @@ -333,7 +333,7 @@ _020DD684: strb r6, [r3, #0x0] strb r4, [r1, #0x0] ldrh r3, [r8, #0x0] - ldr r3, _020DD75C ; =UNK_021D6B38 + ldr r3, _020DD75C ; =ctrdgi_backup_irq ldr r3, [r3, #0x0] strh r3, [r8, #0x0] ldr r3, _020DD768 ; =CTRDGi_PollingSR @@ -367,7 +367,7 @@ _020DD74C: .word 0x000080FF _020DD750: .word ctrdgi_flash_lock_id _020DD754: .word 0x04000204 _020DD758: .word 0x04000208 -_020DD75C: .word UNK_021D6B38 +_020DD75C: .word ctrdgi_backup_irq _020DD760: .word 0x0A005555 _020DD764: .word 0x0A002AAA _020DD768: .word CTRDGi_PollingSR @@ -391,7 +391,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C strh r1, [r4, #0x0] ldrh r4, [r0, #0x0] mov r2, #0x0 - ldr r1, _020DD858 ; =UNK_021D6B38 + ldr r1, _020DD858 ; =ctrdgi_backup_irq strh r2, [r0, #0x0] ldr lr, _020DD85C ; =0x0A005555 str r4, [r1, #0x0] @@ -434,7 +434,7 @@ _020DD848: .word ctrdgi_flash_lock_id _020DD84C: .word 0x04000204 _020DD850: .word AgbFlash _020DD854: .word 0x04000208 -_020DD858: .word UNK_021D6B38 +_020DD858: .word ctrdgi_backup_irq _020DD85C: .word 0x0A005555 _020DD860: .word 0x0A002AAA _020DD864: .word CTRDGi_PollingSR diff --git a/arm9/asm/CTRDG_flash_common.s b/arm9/asm/CTRDG_flash_common.s index 4c51608a8..ed1dd88e6 100644 --- a/arm9/asm/CTRDG_flash_common.s +++ b/arm9/asm/CTRDG_flash_common.s @@ -51,8 +51,8 @@ CTRDGi_EraseAgbFlashSectorAsync: ; 0x021D6B30 CTRDGi_EraseAgbFlashChip: ; 0x021D6B34 .space 0x4 - .global UNK_021D6B38 -UNK_021D6B38: ; 0x021D6B38 + .global ctrdgi_backup_irq +ctrdgi_backup_irq: ; 0x021D6B38 .space 0x4 .global UNK_021D6B3C @@ -493,7 +493,7 @@ CTRDGi_ReadFlashID: ; 0x020DC48C ldr r5, _020DC590 ; =0x04000208 mov r0, #0x0 ldrh r2, [r5, #0x0] - ldr r1, _020DC594 ; =UNK_021D6B38 + ldr r1, _020DC594 ; =ctrdgi_backup_irq ldr r4, _020DC598 ; =0x0A005555 strh r0, [r5, #0x0] str r2, [r1, #0x0] @@ -527,7 +527,7 @@ _020DC4FC: orr r4, r0, r4, lsr #0x10 ldrh r2, [r12, #0x0] mov r0, #0x0 - ldr r1, _020DC594 ; =UNK_021D6B38 + ldr r1, _020DC594 ; =ctrdgi_backup_irq strh r0, [r12, #0x0] ldr r5, _020DC598 ; =0x0A005555 str r2, [r1, #0x0] @@ -559,7 +559,7 @@ _020DC580: bx lr .balign 4 _020DC590: .word 0x04000208 -_020DC594: .word UNK_021D6B38 +_020DC594: .word ctrdgi_backup_irq _020DC598: .word 0x0A005555 _020DC59C: .word 0x0A002AAA _020DC5A0: .word UNK_021D6B10 diff --git a/arm9/lib/include/CTRDG_backup.h b/arm9/lib/include/CTRDG_backup.h index d248b7a1c..272744ad9 100644 --- a/arm9/lib/include/CTRDG_backup.h +++ b/arm9/lib/include/CTRDG_backup.h @@ -5,6 +5,10 @@ #include "CTRDG_flash.h" #include "CTRDG_task.h" +#define CTRDG_BACKUP_PHASE_PROGRAM 0x0001 +#define CTRDG_BACKUP_PHASE_SECTOR_ERASE 0x0002 +#define CTRDG_BACKUP_PHASE_CHIP_ERASE 0x0003 + typedef struct CTRDGiFlashTypePlusTag { u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); diff --git a/arm9/lib/include/CTRDG_flash.h b/arm9/lib/include/CTRDG_flash.h index 9a4aff414..aa02d9517 100644 --- a/arm9/lib/include/CTRDG_flash.h +++ b/arm9/lib/include/CTRDG_flash.h @@ -4,6 +4,8 @@ #include "nitro/types.h" #include "MI_exMemory.h" +#define CTRDG_AGB_FLASH_ADR 0x0A000000 + typedef struct CTRDGiFlashSectorTag { u32 size; diff --git a/arm9/lib/include/CTRDG_flash_AT29LV512.h b/arm9/lib/include/CTRDG_flash_AT29LV512.h new file mode 100644 index 000000000..908dd6cf3 --- /dev/null +++ b/arm9/lib/include/CTRDG_flash_AT29LV512.h @@ -0,0 +1,10 @@ +#ifndef POKEDIAMOND_CTRDG_FLASH_AT29LV512_H +#define POKEDIAMOND_CTRDG_FLASH_AT29LV512_H + +#include "nitro/types.h" +#include "CTRDG_task.h" + +u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg); +u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg); + +#endif //POKEDIAMOND_CTRDG_FLASH_AT29LV512_H diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index c3812128b..d063b817b 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -43,6 +43,13 @@ static inline BOOL OS_EnableIrq(void) return (BOOL)prep; } +static inline BOOL OS_RestoreIrq(BOOL enable) +{ + u16 prep = reg_OS_IME; + reg_OS_IME = (u16)enable; + return (BOOL)prep; +} + static inline OSIrqMask OS_GetIrqMask(void) { return reg_OS_IE; diff --git a/arm9/lib/src/CTRDG_flash_AT29LV512.c b/arm9/lib/src/CTRDG_flash_AT29LV512.c new file mode 100644 index 000000000..8cd90c316 --- /dev/null +++ b/arm9/lib/src/CTRDG_flash_AT29LV512.c @@ -0,0 +1,143 @@ +#include "CTRDG_flash_AT29LV512.h" +#include "function_target.h" +#include "CTRDG_backup.h" +#include "CTRDG_flash.h" +#include "MI_exMemory.h" +#include "OS_interrupt.h" +#include "OS_spinLock.h" + +#define CTRDG_BACKUP_COM_ADR1 (CTRDG_AGB_FLASH_ADR+0x00005555) +#define CTRDG_BACKUP_COM_ADR2 (CTRDG_AGB_FLASH_ADR+0x00002aaa) + +extern u16 ctrdgi_flash_lock_id; +extern BOOL ctrdgi_backup_irq; + +extern u16 CTRDGi_PollingSR512kCOMMON(u16 phase, u8 *adr, u16 lastData); + +extern u16 CTRDGi_EraseFlashChipAT(void); +extern u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo); +extern u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo); +extern u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src); +extern u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src); + +extern void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback); +extern void CTRDGi_EraseFlash4KBAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback); +extern void CTRDGi_WriteFlash4KBAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); +extern void CTRDGi_EraseFlashSectorAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback); +extern void CTRDGi_WriteFlashSectorAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); + +static const u16 atMaxTime[] = { + 10, 40, 0, 40 +}; + +const CTRDGiFlashTypePlus AT29LV512_lib = { + CTRDGi_WriteFlash4KBAT, + CTRDGi_EraseFlashChipAT, + CTRDGi_EraseFlash4KBAT, + CTRDGi_WriteFlash4KBAsyncAT, + CTRDGi_EraseFlashChipAsyncAT, + CTRDGi_EraseFlash4KBAsyncAT, + CTRDGi_PollingSR512kCOMMON, + atMaxTime, + { + 0x00010000, //ROM size + {0x00001000, 12, 16, 0}, //sector + {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle + 0x1f, //maker ID + 0x3d, //device ID + } +}; + +const CTRDGiFlashTypePlus AT29LV512_org = { + CTRDGi_WriteFlashSectorAT, + CTRDGi_EraseFlashChipAT, + CTRDGi_EraseFlashSectorAT, + CTRDGi_WriteFlashSectorAsyncAT, + CTRDGi_EraseFlashChipAsyncAT, + CTRDGi_EraseFlashSectorAsyncAT, + CTRDGi_PollingSR512kCOMMON, + atMaxTime, + { + 0x00010000, //ROM size + {0x00000080, 7, 512, 0}, //sector + {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle + 0x1f, //maker ID + 0x3d, //device ID + } +}; + +ARM_FUNC u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg) +{ + MICartridgeRamCycle ram_cycle; + u32 result; + (void)arg; + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); + + ctrdgi_backup_irq = OS_DisableIrq(); + + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x80; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x10; + + (void)OS_RestoreIrq(ctrdgi_backup_irq); + + result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_CHIP_ERASE, (u8 *)CTRDG_AGB_FLASH_ADR, 0xff); + + MI_SetCartridgeRamCycle(ram_cycle); + + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + return result; +} + +ARM_FUNC u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg) +{ + u32 i; + u8 *dst; + BOOL shlet_ime; + MICartridgeRamCycle ram_cycle; + u32 result; + CTRDGTaskInfo p = *arg; + u16 p_secNo = p.sec_num; + + dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift)); + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); + + shlet_ime = OS_DisableIrq(); + + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0; + + for (i = AT29LV512_org.type.sector.size; i > 0; i--) + { + *dst++ = 0xff; + } + dst--; + + (void)OS_RestoreIrq(shlet_ime); + + result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, 0xff); + + if (result) + { + result = (u16)((result & 0xff00) | CTRDG_BACKUP_PHASE_SECTOR_ERASE); + } + + MI_SetCartridgeRamCycle(ram_cycle); + + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + return result; +} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index 26501f35c..cc2435686 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -4,12 +4,18 @@ #include "nitro/types.h" #include "mod21_02254A6C.h" +typedef struct Time +{ + u32 hour; + u32 minute; +} Time; + typedef struct UnkStruct02254854 { u8 bytearray[8]; u8 padding0[8]; BOOL Unk10; - u32 Unk14[2]; + Time time; u8 padding1[4]; u32 Unk20; void *Unk24; diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index fe285936a..a9a7599da 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -3,7 +3,7 @@ #include "unk_0200CA44.h" #include "mod21_02254854.h" -extern void GF_RTC_CopyTime(u32 *param0); +extern void GF_RTC_CopyTime(Time *param0); u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); @@ -42,7 +42,7 @@ THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) { #pragma unused (param2, param3) //not sure, please check - if (MOD21_02254A6C((UnkStruct02254A6C *)¶m0->Unk24, param0->Unk14)) //todo fix + if (MOD21_02254A6C((UnkStruct02254A6C *)¶m0->Unk24, ¶m0->time)) //todo fix { param0->bytearray[0] = 0; param0->bytearray[1] = 0; @@ -50,16 +50,16 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 param0->bytearray[3] = 1; param0->bytearray[6] = 0; param0->Unk20 = 0; - GF_RTC_CopyTime(param0->Unk14); - if (param0->Unk14[0] >= 0x18) + GF_RTC_CopyTime(¶m0->time); + if (param0->time.hour >= 0x18) { - param0->Unk14[0] = param0->Unk14[0] % 0x18; + param0->time.hour = param0->time.hour % 0x18; } - if (param0->Unk14[1] >= 0x3c) + if (param0->time.minute >= 0x3c) { - param0->Unk14[0] = param0->Unk14[0] % 0x3c; + param0->time.hour = param0->time.hour % 0x3c; } - param0->bytearray[5] = (u8)param0->Unk14[1]; + param0->bytearray[5] = (u8)param0->time.minute; param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); if (param0->Unk10 == FALSE) { @@ -168,9 +168,9 @@ THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0) } if (MOD21_02254B34(param0->Unk24, 1)) { - param0->bytearray[5] = (u8)param0->Unk14[1]; - GF_RTC_CopyTime(param0->Unk14); - if (param0->bytearray[5] != param0->Unk14[1]) + param0->bytearray[5] = (u8)param0->time.minute; + GF_RTC_CopyTime(¶m0->time); + if (param0->bytearray[5] != param0->time.minute) { MOD21_02254B10(param0->Unk24, 1); } From 8fdf73a9f02bf896d4620341f47436160cc008ba Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 25 Feb 2021 15:56:12 +0000 Subject: [PATCH 59/59] try and fix workflow --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba9767268..22fd05311 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: - name: Update and Install Software run: | sudo apt update - sudo apt -y upgrade + sudo apt -y --fix-missing upgrade sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi sudo dpkg --add-architecture i386 wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -