From 3c458e8b4893866639734a572a7d8e5ce6c7c1ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 5 May 2020 20:13:17 -0400 Subject: Decompile GF funcs responsible for overlays --- arm9/src/poke_overlay.c | 203 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 arm9/src/poke_overlay.c (limited to 'arm9/src') diff --git a/arm9/src/poke_overlay.c b/arm9/src/poke_overlay.c new file mode 100644 index 00000000..105881d8 --- /dev/null +++ b/arm9/src/poke_overlay.c @@ -0,0 +1,203 @@ +#include "global.h" +#include "nitro.h" +#include "FS_file.h" +#include "FS_overlay.h" + +#define OVERLAY_LOAD_WRAM 0 +#define OVERLAY_LOAD_ITCM 1 +#define OVERLAY_LOAD_DTCM 2 + +extern void ErrorHandling(void); + +struct LoadedOverlay { + FSOverlayID id; + BOOL active; +}; + +extern struct LoadedOverlay gLoadedOverlays[3][8]; + +struct LoadedOverlay* GetLoadedOverlaysInRegion(int); +BOOL GetOverlayRamBounds(FSOverlayID, void**, void**); +BOOL CanOverlayBeLoaded(FSOverlayID); +int GetOverlayLoadDestination(FSOverlayID); +BOOL LoadOverlayNormal(MIProcessor, FSOverlayID); +BOOL LoadOverlayNoInit(MIProcessor, FSOverlayID); +BOOL LoadOverlayNoInitAsync(MIProcessor, FSOverlayID); + +THUMB_FUNC void FreeOverlayAllocation(struct LoadedOverlay * loaded) +{ + if (loaded->active != TRUE) + ErrorHandling(); + if (FS_UnloadOverlay(MI_PROCESSOR_ARM9, loaded->id) != TRUE) + ErrorHandling(); + loaded->active = FALSE; +} + +THUMB_FUNC void UnloadOverlayByID(FSOverlayID id) +{ + struct LoadedOverlay * loaded = GetLoadedOverlaysInRegion(GetOverlayLoadDestination(id)); + int i; + for (i = 0; i < 8; i++) + { + if (loaded[i].active == TRUE && loaded[i].id == id) + { + FreeOverlayAllocation(&loaded[i]); + break; + } + } +} + +THUMB_FUNC int GetOverlayLoadDestination(FSOverlayID id) +{ + FSOverlayInfo info; + u8 *end; + u8 *start; + if (FS_LoadOverlayInfo(&info, MI_PROCESSOR_ARM9, id) != TRUE) + ErrorHandling(); + start = (u8 *)HW_ITCM_IMAGE; + end = (u8 *)HW_ITCM_END; + if (info.header.ram_address <= end && info.header.ram_address >= start) + return OVERLAY_LOAD_ITCM; + start = (u8 *)SDK_AUTOLOAD_DTCM_START; + end = start + HW_DTCM_SIZE; + if (info.header.ram_address <= end && info.header.ram_address >= start) + return OVERLAY_LOAD_DTCM; + return OVERLAY_LOAD_WRAM; +} + +THUMB_FUNC BOOL HandleLoadOverlay(FSOverlayID id, int a1) +{ + u32 sp0 = FS_DMA_NOT_USE; + struct LoadedOverlay *r3; + int r7; + int r6; + BOOL result; + + if (!CanOverlayBeLoaded(id)) + return FALSE; + r7 = GetOverlayLoadDestination(id); + r3 = GetLoadedOverlaysInRegion(r7); + for (r6 = 0; r6 < 8; r6++) + { + if (!r3[r6].active) + { + struct LoadedOverlay * ovly; + ovly = &r3[r6]; + ovly->active = TRUE; + ovly->id = id; + break; + } + } + if (r6 >= 8) + { + ErrorHandling(); + return FALSE; + } + if (r7 == OVERLAY_LOAD_ITCM || r7 == OVERLAY_LOAD_DTCM) + { + sp0 = FS_SetDefaultDMA(FS_DMA_NOT_USE); + } + switch (a1) + { + case 0: + result = LoadOverlayNormal(MI_PROCESSOR_ARM9, id); + break; + case 1: + result = LoadOverlayNoInit(MI_PROCESSOR_ARM9, id); + break; + case 2: + result = LoadOverlayNoInitAsync(MI_PROCESSOR_ARM9, id); + break; + default: + ErrorHandling(); + return FALSE; + } + if (r7 == OVERLAY_LOAD_ITCM || r7 == OVERLAY_LOAD_DTCM) + { + FS_SetDefaultDMA(sp0); + } + if (result == 0) + { + ErrorHandling(); + return FALSE; + } + return TRUE; +} + +THUMB_FUNC BOOL CanOverlayBeLoaded(FSOverlayID id) +{ + void *start, *end, *start2, *end2; + struct LoadedOverlay *r5; + int i; + if (!GetOverlayRamBounds(id, &start, &end)) + return FALSE; + r5 = GetLoadedOverlaysInRegion(GetOverlayLoadDestination(id)); + for (i = 0; i < 8; i++) + { + if (r5[i].active == TRUE && GetOverlayRamBounds(r5[i].id, &start2, &end2) == TRUE) + { + if ((start >= start2 && start < end2) || (end > start2 && end <= end2) || (start <= start2 && end >= end2)) + { + ErrorHandling(); + return FALSE; + } + } + } + return TRUE; +} + +THUMB_FUNC struct LoadedOverlay* GetLoadedOverlaysInRegion(int a0) +{ + switch (a0) + { + case OVERLAY_LOAD_WRAM: + default: + return gLoadedOverlays[0]; + case OVERLAY_LOAD_ITCM: + return gLoadedOverlays[1]; + case OVERLAY_LOAD_DTCM: + return gLoadedOverlays[2]; + } +} + +THUMB_FUNC BOOL GetOverlayRamBounds(FSOverlayID id, void ** start, void ** end) +{ + FSOverlayInfo info; + if (!FS_LoadOverlayInfo(&info, MI_PROCESSOR_ARM9, id)) { + ErrorHandling(); + return FALSE; + } + *start = (void *)info.header.ram_address; + *end = (char *)*start + (info.header.ram_size + info.header.bss_size); + return TRUE; +} + +THUMB_FUNC BOOL LoadOverlayNormal(MIProcessor target, FSOverlayID id) +{ + return FS_LoadOverlay(target, id); +} + +THUMB_FUNC BOOL LoadOverlayNoInit(MIProcessor target, FSOverlayID id) +{ + FSOverlayInfo info; + if (!FS_LoadOverlayInfo(&info, target, id)) + return FALSE; + if (!FS_LoadOverlayImage(&info)) + return FALSE; + FS_StartOverlay(&info); + return TRUE; +} + +THUMB_FUNC BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) +{ + FSOverlayInfo info; + FSFile file; + if (!FS_LoadOverlayInfo(&info, target, id)) + return FALSE; + FS_InitFile(&file); + FS_LoadOverlayImageAsync(&info, &file); + FS_WaitAsync(&file); + FS_CloseFile(&file); + FS_StartOverlay(&info); + return TRUE; +} -- cgit v1.2.3 From c8230ac1a65a367f7796a2c8afed9533ba135faf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 5 May 2020 22:08:55 -0400 Subject: Fix matching --- arm9/src/poke_overlay.c | 53 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 11 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/poke_overlay.c b/arm9/src/poke_overlay.c index 105881d8..9a81ea83 100644 --- a/arm9/src/poke_overlay.c +++ b/arm9/src/poke_overlay.c @@ -188,16 +188,47 @@ THUMB_FUNC BOOL LoadOverlayNoInit(MIProcessor target, FSOverlayID id) return TRUE; } -THUMB_FUNC BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) +//THUMB_FUNC BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) +//{ +// FSOverlayInfo info; +// FSFile file; +// if (!FS_LoadOverlayInfo(&info, target, id)) +// return FALSE; +// FS_InitFile(&file); +// FS_LoadOverlayImageAsync(&info, &file); +// FS_WaitAsync(&file); +// FS_CloseFile(&file); +// FS_StartOverlay(&info); +// return TRUE; +//} + +THUMB_FUNC asm BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) { - FSOverlayInfo info; - FSFile file; - if (!FS_LoadOverlayInfo(&info, target, id)) - return FALSE; - FS_InitFile(&file); - FS_LoadOverlayImageAsync(&info, &file); - FS_WaitAsync(&file); - FS_CloseFile(&file); - FS_StartOverlay(&info); - return TRUE; + push {lr} + sub sp, #0x74 + add r3, r0, #0x0 + add r2, r1, #0x0 + add r0, sp, #0x0 + add r1, r3, #0x0 + bl FS_LoadOverlayInfo + cmp r0, #0x0 + bne _020061C2 + add sp, #0x74 + mov r0, #0x0 + pop {pc} +_020061C2: + add r0, sp, #0x2c + bl FS_InitFile + add r0, sp, #0x0 + add r1, sp, #0x2c + bl FS_LoadOverlayImageAsync + add r0, sp, #0x2c + bl FS_WaitAsync + add r0, sp, #0x2c + bl FS_CloseFile + add r0, sp, #0x0 + bl FS_StartOverlay + mov r0, #0x1 + add sp, #0x74 + pop {pc} } -- cgit v1.2.3 From 3e723988b8596fe450a5f3dd3f43a55d9a13cff5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 7 May 2020 15:43:46 -0400 Subject: Match LoadOverlayNoInitAsync --- arm9/src/poke_overlay.c | 53 ++++++++++--------------------------------------- 1 file changed, 11 insertions(+), 42 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/poke_overlay.c b/arm9/src/poke_overlay.c index 9a81ea83..105881d8 100644 --- a/arm9/src/poke_overlay.c +++ b/arm9/src/poke_overlay.c @@ -188,47 +188,16 @@ THUMB_FUNC BOOL LoadOverlayNoInit(MIProcessor target, FSOverlayID id) return TRUE; } -//THUMB_FUNC BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) -//{ -// FSOverlayInfo info; -// FSFile file; -// if (!FS_LoadOverlayInfo(&info, target, id)) -// return FALSE; -// FS_InitFile(&file); -// FS_LoadOverlayImageAsync(&info, &file); -// FS_WaitAsync(&file); -// FS_CloseFile(&file); -// FS_StartOverlay(&info); -// return TRUE; -//} - -THUMB_FUNC asm BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) +THUMB_FUNC BOOL LoadOverlayNoInitAsync(MIProcessor target, FSOverlayID id) { - push {lr} - sub sp, #0x74 - add r3, r0, #0x0 - add r2, r1, #0x0 - add r0, sp, #0x0 - add r1, r3, #0x0 - bl FS_LoadOverlayInfo - cmp r0, #0x0 - bne _020061C2 - add sp, #0x74 - mov r0, #0x0 - pop {pc} -_020061C2: - add r0, sp, #0x2c - bl FS_InitFile - add r0, sp, #0x0 - add r1, sp, #0x2c - bl FS_LoadOverlayImageAsync - add r0, sp, #0x2c - bl FS_WaitAsync - add r0, sp, #0x2c - bl FS_CloseFile - add r0, sp, #0x0 - bl FS_StartOverlay - mov r0, #0x1 - add sp, #0x74 - pop {pc} + FSOverlayInfo info; + FSFile file; + if (!FS_LoadOverlayInfo(&info, target, id)) + return FALSE; + FS_InitFile(&file); + FS_LoadOverlayImageAsync(&info, &file); + FS_WaitAsync(&file); + FS_CloseFile(&file); + FS_StartOverlay(&info); + return TRUE; } -- cgit v1.2.3 From 1966623ed0516e84d8129e8f22dba502b018bcc3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 8 May 2020 08:35:17 -0400 Subject: Finish FS_command_default.c --- arm9/src/string_util.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/string_util.c b/arm9/src/string_util.c index 6c949e88..e6ea85de 100644 --- a/arm9/src/string_util.c +++ b/arm9/src/string_util.c @@ -1,6 +1,9 @@ #include "global.h" -u16 gDigitTable[] = { +#define EOS 0xFFFF +#define NON_DIGIT 0xE2 + +const u16 gDigitTable[] = { 0xA2, 0xA3, 0xA4, @@ -19,7 +22,7 @@ u16 gDigitTable[] = { 0xB1 }; -s32 gPowersOfTen[] = { +const s32 gPowersOfTen[] = { 1, 10, 100, @@ -32,8 +35,6 @@ s32 gPowersOfTen[] = { 1000000000, }; -static const u16 EOS = 0xFFFF; - THUMB_FUNC void StringCopy(u16 *dest, const u16 *src) { u16 c = *src; @@ -129,8 +130,6 @@ enum PrintingMode { PAD_ZEROES }; -const u16 NON_DIGIT = 0xE2; - THUMB_FUNC u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n) { for (u32 x = gPowersOfTen[n - 1]; x != 0; x = x / 10) { -- cgit v1.2.3 From 7b8a6275ebdbb2b6d5023fe8769e08be074f032a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 14:12:15 -0400 Subject: Tocuh up main.c; key input --- arm9/src/main.c | 50 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index 73b63332..e2550a8f 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -1,11 +1,16 @@ #include "global.h" #include "main.h" +#include "FS_overlay.h" + +FS_EXTERN_OVERLAY(MODULE_52); +FS_EXTERN_OVERLAY(MODULE_63); + +#define SOFT_RESET_KEY (REG_PAD_KEYINPUT_L_MASK | REG_PAD_KEYINPUT_R_MASK | REG_PAD_KEYINPUT_START_MASK | REG_PAD_KEYINPUT_SEL_MASK) extern struct Unk2106FA0 gBacklightTop; extern struct Unk2106FA0 gBacklightTop_2; // same as the first one, it's referenced twice in the constant pool... extern struct Unk21C48B8 gUnknown21C48B8; -extern s32 gUnk027FFC20; extern struct { s32 unk0; s32 unk4; @@ -15,6 +20,41 @@ extern struct { extern void PM_GetBackLight(); extern void OS_WaitIrq(); extern void FUN_02016438(s32); +extern void InitSystemForTheGame(void); +extern void InitGraphicMemory(void); +extern void FUN_020163BC(void); +extern void FUN_02022294(void); +extern void FUN_0201259C(void); +extern void FUN_02000DF4(void); +extern void FUN_02002C14(void); +extern void FUN_02002C50(int, int); +extern int FUN_0202254C(void); +extern void FUN_02003B98(int, int); +extern int FUN_02029EF8(int); +extern int LoadPlayerDataAddress(int); +extern void FUN_02020AFC(void); +extern int FUN_020337E8(int); +extern void FUN_02034188(int, int); +extern int FUN_020227FC(int); +extern void FUN_02089D90(int); +extern void FUN_02000E7C(int, struct Unk21DBE18 *); +extern void ErrorHandling(void); +extern void FUN_02000FA4(void); +extern void FUN_0200A2AC(void); +extern void FUN_02015E30(void); +extern void FUN_02000EE8(void); +extern void FUN_02000FE8(void); +extern void FUN_02016464(void); +extern void FUN_02000F18(int); +extern BOOL FUN_0202FB80(void); +extern void FUN_02000E0C(void); +extern void FUN_0201B5CC(int); +extern void FUN_020125D4(void); +extern void FUN_02015E60(void); +extern void FUN_020222C4(void); +extern void FUN_0200A318(void); +extern void FUN_0200E2D8(void); +extern void FUN_02003C10(void); extern const s32 CONST_3F; // 0x0000003F extern const s32 CONST_34; // 0x00000034 @@ -51,15 +91,15 @@ THUMB_FUNC void NitroMain(void) } else { - switch (gUnk027FFC20) + switch (*((s32 *)HW_RESET_PARAMETER_BUF)) { case 0: gBacklightTop.unk1C = 0; - FUN_02000E7C(&CONST_3F, &gUnk021DBE18); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_63), &gUnk021DBE18); break; case 1: gBacklightTop.unk1C = 1; - FUN_02000E7C(&CONST_34, &gUnk021D76C8); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_52), &gUnk021D76C8); break; default: ErrorHandling(); @@ -77,7 +117,7 @@ THUMB_FUNC void NitroMain(void) FUN_02000EE8(); FUN_02000FE8(); FUN_02016464(); - if ((gUnknown21C48B8.unk38 & 0x30C) == 0x30C && !gUnk021C4918.unk8) // soft reset? + if ((gUnknown21C48B8.unk38 & SOFT_RESET_KEY) == SOFT_RESET_KEY && !gUnk021C4918.unk8) // soft reset? { FUN_02000F18(0); // soft reset? } -- cgit v1.2.3 From 653f8d26f0cd1ef791cf7d78d5c1eae1f34350af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 14:19:15 -0400 Subject: Get rid of CONST_34, CONST_3F --- arm9/src/main.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index e2550a8f..ea752438 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -56,9 +56,6 @@ extern void FUN_0200A318(void); extern void FUN_0200E2D8(void); extern void FUN_02003C10(void); -extern const s32 CONST_3F; // 0x0000003F -extern const s32 CONST_34; // 0x00000034 - extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; -- cgit v1.2.3 From 66506824a796f28e9d926077024d319fa67d3aaf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 15:18:26 -0400 Subject: SDK declaration of PM_GetBackLight --- arm9/src/main.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index ea752438..527cd97e 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -7,8 +7,6 @@ FS_EXTERN_OVERLAY(MODULE_63); #define SOFT_RESET_KEY (REG_PAD_KEYINPUT_L_MASK | REG_PAD_KEYINPUT_R_MASK | REG_PAD_KEYINPUT_START_MASK | REG_PAD_KEYINPUT_SEL_MASK) -extern struct Unk2106FA0 gBacklightTop; -extern struct Unk2106FA0 gBacklightTop_2; // same as the first one, it's referenced twice in the constant pool... extern struct Unk21C48B8 gUnknown21C48B8; extern struct { @@ -17,7 +15,6 @@ extern struct { u8 unk8; } gUnk021C4918; -extern void PM_GetBackLight(); extern void OS_WaitIrq(); extern void FUN_02016438(s32); extern void InitSystemForTheGame(void); @@ -67,7 +64,7 @@ THUMB_FUNC void NitroMain(void) FUN_020163BC(); FUN_02016438(0); - PM_GetBackLight(&gBacklightTop_2, 0); + PM_GetBackLight(&gBacklightTop_2.unk0, NULL); FUN_02022294(); FUN_0201259C(); -- cgit v1.2.3 From c38f30451b1d7bbcf466c0f489799487a60581b0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 15:57:27 -0400 Subject: Decompile main through FUN_02000EC8 --- arm9/src/FUN_02000DF4.c | 12 ---------- arm9/src/main.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 14 deletions(-) delete mode 100644 arm9/src/FUN_02000DF4.c (limited to 'arm9/src') diff --git a/arm9/src/FUN_02000DF4.c b/arm9/src/FUN_02000DF4.c deleted file mode 100644 index 80e80b30..00000000 --- a/arm9/src/FUN_02000DF4.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" -#include "main.h" - -extern struct Unk2106FA0 gBacklightTop; - -THUMB_FUNC void FUN_02000DF4(void) -{ - gBacklightTop.unk8 = -1; - gBacklightTop.unkC = 0; - gBacklightTop.unk10 = -1; - gBacklightTop.unk14 = 0; -} diff --git a/arm9/src/main.c b/arm9/src/main.c index 527cd97e..eb02186e 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -34,7 +34,7 @@ extern int FUN_020337E8(int); extern void FUN_02034188(int, int); extern int FUN_020227FC(int); extern void FUN_02089D90(int); -extern void FUN_02000E7C(int, struct Unk21DBE18 *); +extern void FUN_02000E7C(FSOverlayID, struct Unk21DBE18 *); extern void ErrorHandling(void); extern void FUN_02000FA4(void); extern void FUN_0200A2AC(void); @@ -140,4 +140,61 @@ THUMB_FUNC void NitroMain(void) FUN_02003C10(); FUN_0201B5CC(gUnknown21C48B8.unk20); } -} \ No newline at end of file +} + +THUMB_FUNC void FUN_02000DF4(void) +{ + gBacklightTop.unk8 = -1; + gBacklightTop.unkC = 0; + gBacklightTop.unk10 = -1; // overlay invalid + gBacklightTop.unk14 = NULL; +} + +THUMB_FUNC void FUN_02000E0C(void) +{ + if (!gBacklightTop.unkC) + { + if (gBacklightTop.unk14 == NULL) + return; + if (gBacklightTop.unk10 != -1u) + HandleLoadOverlay(gBacklightTop.unk10, 0); + gBacklightTop.unk8 = gBacklightTop.unk10; + gBacklightTop.unkC = FUN_02006234(gBacklightTop.unk14, &gBacklightTop.unk18, 0); + gBacklightTop.unk10 = -1u; + gBacklightTop.unk14 = NULL; + } + if (FUN_02006290(gBacklightTop.unkC)) + { + FUN_02006260(gBacklightTop.unkC); + gBacklightTop.unkC = 0; + if (gBacklightTop.unk8 != -1u) + UnloadOverlayByID(gBacklightTop.unk8); + } +} + +THUMB_FUNC void FUN_02000E7C(FSOverlayID id, struct Unk21DBE18 * arg1) +{ + if (gBacklightTop.unk14 != NULL) + ErrorHandling(); + gBacklightTop.unk10 = id; + gBacklightTop.unk14 = arg1; +} + +THUMB_FUNC void FUN_02000E9C(void) +{ + FUN_0202FB80(); + OS_WaitIrq(1, 1); + gUnknown21C48B8.unk2C++; + gUnknown21C48B8.unk30 = 0; + if (gUnknown21C48B8.unk0 != NULL) + gUnknown21C48B8.unk0(gUnknown21C48B8.unk4); +} + +void FUN_02000EC8(u32 parameter) +{ + if (FUN_02033678() && CARD_TryWaitBackupAsync() == 1) + { + OS_ResetSystem(parameter); + } + FUN_02000E9C(); +} -- cgit v1.2.3 From ee0060c513ce99b24cf0e303ae7684eaa2f99538 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 16:15:39 -0400 Subject: Decompile through FUN_02000F4C --- arm9/src/main.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index eb02186e..3236fdaa 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -42,7 +42,7 @@ extern void FUN_02015E30(void); extern void FUN_02000EE8(void); extern void FUN_02000FE8(void); extern void FUN_02016464(void); -extern void FUN_02000F18(int); +extern void FUN_02000F18(u32 parameter); extern BOOL FUN_0202FB80(void); extern void FUN_02000E0C(void); extern void FUN_0201B5CC(int); @@ -52,6 +52,7 @@ extern void FUN_020222C4(void); extern void FUN_0200A318(void); extern void FUN_0200E2D8(void); extern void FUN_02003C10(void); +void FUN_02000F4C(int arg0, int arg1); extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; @@ -190,7 +191,7 @@ THUMB_FUNC void FUN_02000E9C(void) gUnknown21C48B8.unk0(gUnknown21C48B8.unk4); } -void FUN_02000EC8(u32 parameter) +THUMB_FUNC void FUN_02000EC8(u32 parameter) { if (FUN_02033678() && CARD_TryWaitBackupAsync() == 1) { @@ -198,3 +199,62 @@ void FUN_02000EC8(u32 parameter) } FUN_02000E9C(); } + +THUMB_FUNC void FUN_02000EE8(void) +{ + int r1 = FUN_020335B8(); + switch (r1) + { + case 1: + FUN_02000F4C(1, r1); + break; + case 2: + FUN_02000F4C(0, r1); + break; + case 3: + FUN_02000F4C(1, r1); + break; + } +} + +THUMB_FUNC void FUN_02000F18(u32 parameter) +{ + FUN_0200E3A0(0, 0x7FFF); + FUN_0200E3A0(1, 0x7FFF); + if (FUN_02032DAC()) + { + FUN_020225F8(); + FUN_0202287C(); + } + do + { + FUN_02000FE8(); + FUN_02000EC8(parameter); + } while (1); +} + +THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) +{ + if (arg1 == 3) + { + FUN_02033F70(0, 3, 0); + } + else if (arg0 == 0) + { + FUN_02033F70(0, 2, 0); + } + else + { + FUN_02033F70(0, 0, 0); + } + FUN_02032DAC(); + while (1) + { + FUN_02000FE8(); + FUN_02016464(); + if (gUnknown21C48B8.unk48 & 1) + break; + FUN_02000E9C(); + } + FUN_02000F18(arg0); +} -- cgit v1.2.3 From 518b493af185999b3f362af392533cdcf9ca9786 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 19:19:53 -0400 Subject: Through FUN_02000FE8 --- arm9/src/main.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index 3236fdaa..74d0bfe7 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -1,17 +1,22 @@ #include "global.h" #include "main.h" #include "FS_overlay.h" +#include "PAD_pad.h" +#include "CARD_pullOut.h" FS_EXTERN_OVERLAY(MODULE_52); FS_EXTERN_OVERLAY(MODULE_63); -#define SOFT_RESET_KEY (REG_PAD_KEYINPUT_L_MASK | REG_PAD_KEYINPUT_R_MASK | REG_PAD_KEYINPUT_START_MASK | REG_PAD_KEYINPUT_SEL_MASK) +#define SOFT_RESET_KEY (PAD_BUTTON_L | PAD_BUTTON_R | PAD_BUTTON_START | PAD_BUTTON_SELECT) extern struct Unk21C48B8 gUnknown21C48B8; extern struct { s32 unk0; - s32 unk4; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; u8 unk8; } gUnk021C4918; @@ -258,3 +263,67 @@ THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) } FUN_02000F18(arg0); } + +void FUN_02000FA4(void) +{ + struct Unk21C4818 spC; + struct Unk21C4828 sp0; + FUN_0201265C(&spC, &sp0); + { + int r4 = gUnknown21C48B8.unk2C; + int r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16)); + FUN_0201BA1C(r4 + r5); + FUN_0201B9E0(r4 + r5); + } +} + +void FUN_02000FE8(void) +{ + PMBackLightSwitch top, bottom; + if (PAD_DetectFold()) + { + if (!gUnk021C4918.unk7) + { + FUN_0201CE04(); + if (CTRDG_IsPulledOut() == TRUE) + { + gBacklightTop.unk4 = 1; + } + { + int r1 = gBacklightTop.unk4; + while (1) + { + PMWakeUpTrigger trigger = PM_TRIGGER_COVER_OPEN | PM_TRIGGER_CARD; + if (gUnk021C4918.unk6 && !r1) + trigger |= PM_TRIGGER_CARTRIDGE; + PM_GoSleepMode(trigger, PM_PAD_LOGIC_OR, 0); + if (CARD_IsPulledOut()) + { + PM_ForceToPowerOff(); + break; + } + else if (PAD_DetectFold()) + { + r1 = gBacklightTop.unk4 = 1; + } + else + break; + } + FUN_0201CDD0(); + return; + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_ON) + PM_SetBackLight(2, PM_BACKLIGHT_OFF); + } + } + else + { + PM_GetBackLight(&top, &bottom); + if (top == PM_BACKLIGHT_OFF) + PM_SetBackLight(2, gBacklightTop.unk0); + } +} -- cgit v1.2.3 From 05e903f7477a7a904d3026673a32c3f6917b659f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 May 2020 19:33:09 -0400 Subject: Function decls in main.c --- arm9/src/main.c | 38 ++++++++++++++++++++++++++++++-------- arm9/src/poke_overlay.c | 6 +----- 2 files changed, 31 insertions(+), 13 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index 74d0bfe7..f16b16ff 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -1,8 +1,10 @@ #include "global.h" #include "main.h" -#include "FS_overlay.h" #include "PAD_pad.h" #include "CARD_pullOut.h" +#include "CARD_backup.h" +#include "CTRDG_common.h" +#include "poke_overlay.h" FS_EXTERN_OVERLAY(MODULE_52); FS_EXTERN_OVERLAY(MODULE_63); @@ -47,7 +49,7 @@ extern void FUN_02015E30(void); extern void FUN_02000EE8(void); extern void FUN_02000FE8(void); extern void FUN_02016464(void); -extern void FUN_02000F18(u32 parameter); +void DoSoftReset(u32 parameter); extern BOOL FUN_0202FB80(void); extern void FUN_02000E0C(void); extern void FUN_0201B5CC(int); @@ -58,6 +60,11 @@ extern void FUN_0200A318(void); extern void FUN_0200E2D8(void); extern void FUN_02003C10(void); void FUN_02000F4C(int arg0, int arg1); +extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); +extern BOOL FUN_02006290(int); +extern void FUN_02006260(int); +int FUN_02033678(void); +BOOL FUN_020335B8(void); extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; @@ -119,7 +126,7 @@ THUMB_FUNC void NitroMain(void) FUN_02016464(); if ((gUnknown21C48B8.unk38 & SOFT_RESET_KEY) == SOFT_RESET_KEY && !gUnk021C4918.unk8) // soft reset? { - FUN_02000F18(0); // soft reset? + DoSoftReset(0); // soft reset? } if (FUN_0202FB80()) { @@ -198,7 +205,7 @@ THUMB_FUNC void FUN_02000E9C(void) THUMB_FUNC void FUN_02000EC8(u32 parameter) { - if (FUN_02033678() && CARD_TryWaitBackupAsync() == 1) + if (FUN_02033678() && CARD_TryWaitBackupAsync() == TRUE) { OS_ResetSystem(parameter); } @@ -222,7 +229,13 @@ THUMB_FUNC void FUN_02000EE8(void) } } -THUMB_FUNC void FUN_02000F18(u32 parameter) +extern void FUN_0200E3A0(int, int); +extern BOOL FUN_02032DAC(void); +extern void FUN_020225F8(void); +extern void FUN_0202287C(void); + +// No Return +THUMB_FUNC void DoSoftReset(u32 parameter) { FUN_0200E3A0(0, 0x7FFF); FUN_0200E3A0(1, 0x7FFF); @@ -238,6 +251,8 @@ THUMB_FUNC void FUN_02000F18(u32 parameter) } while (1); } +extern void FUN_02033F70(int, int, int); + THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) { if (arg1 == 3) @@ -261,9 +276,13 @@ THUMB_FUNC void FUN_02000F4C(int arg0, int arg1) break; FUN_02000E9C(); } - FUN_02000F18(arg0); + DoSoftReset(arg0); } +extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *); +extern void FUN_0201BA1C(int); +extern void FUN_0201B9E0(int); + void FUN_02000FA4(void) { struct Unk21C4818 spC; @@ -277,6 +296,9 @@ void FUN_02000FA4(void) } } +extern void FUN_0201CE04(void); +extern void FUN_0201CDD0(void); + void FUN_02000FE8(void) { PMBackLightSwitch top, bottom; @@ -317,13 +339,13 @@ void FUN_02000FE8(void) { PM_GetBackLight(&top, &bottom); if (top == PM_BACKLIGHT_ON) - PM_SetBackLight(2, PM_BACKLIGHT_OFF); + PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF); } } else { PM_GetBackLight(&top, &bottom); if (top == PM_BACKLIGHT_OFF) - PM_SetBackLight(2, gBacklightTop.unk0); + PM_SetBackLight(PM_LCD_ALL, gBacklightTop.unk0); } } diff --git a/arm9/src/poke_overlay.c b/arm9/src/poke_overlay.c index 105881d8..4cf1ea67 100644 --- a/arm9/src/poke_overlay.c +++ b/arm9/src/poke_overlay.c @@ -1,11 +1,7 @@ #include "global.h" #include "nitro.h" #include "FS_file.h" -#include "FS_overlay.h" - -#define OVERLAY_LOAD_WRAM 0 -#define OVERLAY_LOAD_ITCM 1 -#define OVERLAY_LOAD_DTCM 2 +#include "poke_overlay.h" extern void ErrorHandling(void); -- cgit v1.2.3 From 0db97c387490270d29d1a09f3dc24270fb619da7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 May 2020 08:15:46 -0400 Subject: Disassemble module 37 --- arm9/src/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index f16b16ff..b7059e4d 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -63,8 +63,8 @@ void FUN_02000F4C(int arg0, int arg1); extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); extern BOOL FUN_02006290(int); extern void FUN_02006260(int); -int FUN_02033678(void); -BOOL FUN_020335B8(void); +extern BOOL FUN_02033678(void); +extern int FUN_020335B8(void); extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; -- cgit v1.2.3 From 08a4627c28a8ca48a5c637929892375e6009b18a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 May 2020 14:43:41 -0400 Subject: Disassemble module 57 --- arm9/src/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'arm9/src') diff --git a/arm9/src/main.c b/arm9/src/main.c index b7059e4d..8c80d686 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -66,8 +66,8 @@ extern void FUN_02006260(int); extern BOOL FUN_02033678(void); extern int FUN_020335B8(void); -extern struct Unk21DBE18 gUnk021DBE18; -extern struct Unk21DBE18 gUnk021D76C8; +extern struct Unk21DBE18 MOD63_UNK_021DBE18; +extern struct Unk21DBE18 MOD52_UNK_021D76C8; THUMB_FUNC void NitroMain(void) @@ -102,11 +102,11 @@ THUMB_FUNC void NitroMain(void) { case 0: gBacklightTop.unk1C = 0; - FUN_02000E7C(FS_OVERLAY_ID(MODULE_63), &gUnk021DBE18); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_63), &MOD63_UNK_021DBE18); break; case 1: gBacklightTop.unk1C = 1; - FUN_02000E7C(FS_OVERLAY_ID(MODULE_52), &gUnk021D76C8); + FUN_02000E7C(FS_OVERLAY_ID(MODULE_52), &MOD52_UNK_021D76C8); break; default: ErrorHandling(); -- cgit v1.2.3