Tocuh up main.c; key input

This commit is contained in:
PikalaxALT
2020-05-10 14:12:15 -04:00
parent 6b870e88c3
commit 7b8a6275eb
4 changed files with 112 additions and 7 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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?
}

View File

@@ -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;