diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-07-06 16:26:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-06 16:26:39 -0400 |
commit | 6b4bf8b5a0fe88dfe6adc769ea82bc2aeb527752 (patch) | |
tree | 873500ec67f14572021e773b87f1590b0cc428eb /arm7/lib | |
parent | 8ae925315e82abdb9f07442d200f4a7bcae97559 (diff) | |
parent | 85c37c87a3c79f97c9603129701f91785abd0ddc (diff) |
Merge pull request #223 from Cleverking2003/master
Decompile PAD_xyButton
Diffstat (limited to 'arm7/lib')
-rw-r--r-- | arm7/lib/include/OS_alarm.h | 3 | ||||
-rw-r--r-- | arm7/lib/include/PAD_xyButton.h | 12 | ||||
-rw-r--r-- | arm7/lib/include/mmap.h | 1 | ||||
-rw-r--r-- | arm7/lib/include/registers.h | 8 | ||||
-rw-r--r-- | arm7/lib/src/PAD_xyButton.c | 33 |
5 files changed, 57 insertions, 0 deletions
diff --git a/arm7/lib/include/OS_alarm.h b/arm7/lib/include/OS_alarm.h index 8ae89e97..a4566348 100644 --- a/arm7/lib/include/OS_alarm.h +++ b/arm7/lib/include/OS_alarm.h @@ -1,9 +1,12 @@ #ifndef POKEDIAMOND_ARM7_OS_ALARM_H #define POKEDIAMOND_ARM7_OS_ALARM_H +#include "OS_thread.h" #include "nitro/OS_alarm_shared.h" void OS_CreateAlarm(OSAlarm *alarm); +BOOL OS_IsAlarmAvailable(void); void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg); +void OS_SetPeriodicAlarm(OSAlarm *alarm, OSTick start, OSTick period, OSAlarmHandler handler, void *arg); #endif //POKEDIAMOND_ARM7_OS_ALARM_H diff --git a/arm7/lib/include/PAD_xyButton.h b/arm7/lib/include/PAD_xyButton.h new file mode 100644 index 00000000..6d8c0d38 --- /dev/null +++ b/arm7/lib/include/PAD_xyButton.h @@ -0,0 +1,12 @@ +#ifndef POKEDIAMOND_PAD_XYBUTTON_H +#define POKEDIAMOND_PAD_XYBUTTON_H + +#include "mmap.h" +#include "nitro/types.h" + +#define BUTTON_XY_BUF (*(vu16 *) HW_BUTTON_XY_BUF) + +BOOL PAD_InitXYButton(void); +void PADi_xyButtonAlarmHandler(void); + +#endif diff --git a/arm7/lib/include/mmap.h b/arm7/lib/include/mmap.h index 1b403dc5..f43b4bc4 100644 --- a/arm7/lib/include/mmap.h +++ b/arm7/lib/include/mmap.h @@ -24,6 +24,7 @@ #define HW_PRV_WRAM_SYSRV (HW_PRV_WRAM + HW_PRV_WRAM_SIZE - HW_PRV_WRAM_SYSRV_SIZE) #define HW_VBLANK_COUNT_BUF (HW_MAIN_MEM + 0x007ffc3c) +#define HW_BUTTON_XY_BUF (HW_MAIN_MEM + 0x007FFFA8) #define HW_LOCK_ID_FLAG_SUB (HW_MAIN_MEM + 0x007fffb8) #endif //POKEDIAMOND_ARM7_MMAP_H diff --git a/arm7/lib/include/registers.h b/arm7/lib/include/registers.h index 4ef8bdfb..1fb1e9ca 100644 --- a/arm7/lib/include/registers.h +++ b/arm7/lib/include/registers.h @@ -3,4 +3,12 @@ #include "nitro/registers_shared.h" +#define reg_EXTKEYIN (*(REGType16v *)0x4000136) + +#define EXTKEYIN_X (1<<0) +#define EXTKEYIN_Y (1<<1) +#define EXTKEYIN_DEBUG (1<<3) +#define EXTKEYIN_PEN (1<<6) +#define EXTKEYIN_HINGE (1<<7) + #endif //POKEDIAMOND_ARM7_REGISTERS_H diff --git a/arm7/lib/src/PAD_xyButton.c b/arm7/lib/src/PAD_xyButton.c new file mode 100644 index 00000000..7c3eeac8 --- /dev/null +++ b/arm7/lib/src/PAD_xyButton.c @@ -0,0 +1,33 @@ +#include "function_target.h" +#include "OS_alarm.h" +#include "OS_tick.h" +#include "PAD_xyButton.h" +#include "registers.h" + +static BOOL PADi_XYButtonAvailable; +static OSAlarm PADi_Alarm; + +void EXIi_SelectRcnt(u16); + +ARM_FUNC BOOL PAD_InitXYButton(void) { + OSTick tick; + if (!OS_IsTickAvailable() || !OS_IsAlarmAvailable()) + return FALSE; + else if (PADi_XYButtonAvailable) + return FALSE; + else { + OS_CreateAlarm(&PADi_Alarm); + tick = OS_GetTick(); + OS_SetPeriodicAlarm(&PADi_Alarm, tick + 0x82e, 0x82e, (OSAlarmHandler)PADi_xyButtonAlarmHandler, NULL); + PADi_XYButtonAvailable = TRUE; + return TRUE; + } +} + +void PADi_xyButtonAlarmHandler(void) { + u16 r4 = 0, r1; + EXIi_SelectRcnt(0x8000); + r1 = reg_EXTKEYIN; + if(r1 & EXTKEYIN_HINGE) r4 = 0x8000; + BUTTON_XY_BUF = (u16)(r4 | ((r1 & (EXTKEYIN_X | EXTKEYIN_Y | EXTKEYIN_DEBUG)) << 10)); +} |