diff options
-rw-r--r-- | arm9/lib/include/FS_overlay.h | 3 | ||||
-rw-r--r-- | arm9/lib/include/registers.h | 55 | ||||
-rw-r--r-- | arm9/src/main.c | 50 | ||||
-rw-r--r-- | include/main.h | 11 |
4 files changed, 112 insertions, 7 deletions
diff --git a/arm9/lib/include/FS_overlay.h b/arm9/lib/include/FS_overlay.h index fd1e2900..14c7ce66 100644 --- a/arm9/lib/include/FS_overlay.h +++ b/arm9/lib/include/FS_overlay.h @@ -12,6 +12,9 @@ extern "C" { typedef u32 FSOverlayID; +#define FS_EXTERN_OVERLAY(name) extern u32 SDK_OVERLAY_ ## name ## _ID[1] +#define FS_OVERLAY_ID(name) ((u32)&(SDK_OVERLAY_ ## name ## _ID)) + typedef void (*FSOverlayInitFunc)(void); typedef struct FSOverlayInfoHeader diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h index 45b36334..a28f9800 100644 --- a/arm9/lib/include/registers.h +++ b/arm9/lib/include/registers.h @@ -52,4 +52,59 @@ #define REG_GXSTAT_ADDR (HW_REG_BASE + REG_GXSTAT_OFFSET) #define reg_G3X_GXSTAT (*(REGType32v *)REG_GXSTAT_ADDR) +#define REG_PAD_KEYINPUT_L_SHIFT 9 +#define REG_PAD_KEYINPUT_L_SIZE 1 +#define REG_PAD_KEYINPUT_L_MASK 0x0200 + +#define REG_PAD_KEYINPUT_R_SHIFT 8 +#define REG_PAD_KEYINPUT_R_SIZE 1 +#define REG_PAD_KEYINPUT_R_MASK 0x0100 + +#define REG_PAD_KEYINPUT_DOWN_SHIFT 7 +#define REG_PAD_KEYINPUT_DOWN_SIZE 1 +#define REG_PAD_KEYINPUT_DOWN_MASK 0x0080 + +#define REG_PAD_KEYINPUT_UP_SHIFT 6 +#define REG_PAD_KEYINPUT_UP_SIZE 1 +#define REG_PAD_KEYINPUT_UP_MASK 0x0040 + +#define REG_PAD_KEYINPUT_LEFT_SHIFT 5 +#define REG_PAD_KEYINPUT_LEFT_SIZE 1 +#define REG_PAD_KEYINPUT_LEFT_MASK 0x0020 + +#define REG_PAD_KEYINPUT_RIGHT_SHIFT 4 +#define REG_PAD_KEYINPUT_RIGHT_SIZE 1 +#define REG_PAD_KEYINPUT_RIGHT_MASK 0x0010 + +#define REG_PAD_KEYINPUT_START_SHIFT 3 +#define REG_PAD_KEYINPUT_START_SIZE 1 +#define REG_PAD_KEYINPUT_START_MASK 0x0008 + +#define REG_PAD_KEYINPUT_SEL_SHIFT 2 +#define REG_PAD_KEYINPUT_SEL_SIZE 1 +#define REG_PAD_KEYINPUT_SEL_MASK 0x0004 + +#define REG_PAD_KEYINPUT_B_SHIFT 1 +#define REG_PAD_KEYINPUT_B_SIZE 1 +#define REG_PAD_KEYINPUT_B_MASK 0x0002 + +#define REG_PAD_KEYINPUT_A_SHIFT 0 +#define REG_PAD_KEYINPUT_A_SIZE 1 +#define REG_PAD_KEYINPUT_A_MASK 0x0001 + +#ifndef SDK_ASM +#define REG_PAD_KEYINPUT_FIELD( l, r, down, up, left, right, start, sel, b, a ) \ + (u16)( \ + ((u32)(l) << REG_PAD_KEYINPUT_L_SHIFT) | \ + ((u32)(r) << REG_PAD_KEYINPUT_R_SHIFT) | \ + ((u32)(down) << REG_PAD_KEYINPUT_DOWN_SHIFT) | \ + ((u32)(up) << REG_PAD_KEYINPUT_UP_SHIFT) | \ + ((u32)(left) << REG_PAD_KEYINPUT_LEFT_SHIFT) | \ + ((u32)(right) << REG_PAD_KEYINPUT_RIGHT_SHIFT) | \ + ((u32)(start) << REG_PAD_KEYINPUT_START_SHIFT) | \ + ((u32)(sel) << REG_PAD_KEYINPUT_SEL_SHIFT) | \ + ((u32)(b) << REG_PAD_KEYINPUT_B_SHIFT) | \ + ((u32)(a) << REG_PAD_KEYINPUT_A_SHIFT)) +#endif + #endif //POKEDIAMOND_REGISTERS_H 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? } diff --git a/include/main.h b/include/main.h index 0df94795..57cc5fef 100644 --- a/include/main.h +++ b/include/main.h @@ -1,14 +1,21 @@ #ifndef GUARD_MAIN_H #define GUARD_MAIN_H +#include "FS_overlay.h" + +struct Unk21DBE18 +{ + u8 filler_00[16]; +}; + struct Unk2106FA0 { s32 unk0; s32 unk4; s32 unk8; s32 unkC; - s32 unk10; - s32 unk14; + FSOverlayID unk10; + struct Unk21DBE18 * unk14; s32 unk18; s32 unk1C; s32 unk20; |