summaryrefslogtreecommitdiff
path: root/arm7/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/lib')
-rw-r--r--arm7/lib/include/PAD_xyButton.h4
-rw-r--r--arm7/lib/include/mmap.h1
-rw-r--r--arm7/lib/include/registers.h8
-rw-r--r--arm7/lib/src/PAD_xyButton.c13
4 files changed, 24 insertions, 2 deletions
diff --git a/arm7/lib/include/PAD_xyButton.h b/arm7/lib/include/PAD_xyButton.h
index 49bc75bb..6d8c0d38 100644
--- a/arm7/lib/include/PAD_xyButton.h
+++ b/arm7/lib/include/PAD_xyButton.h
@@ -1,8 +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
index d224d6a5..fa344f04 100644
--- a/arm7/lib/src/PAD_xyButton.c
+++ b/arm7/lib/src/PAD_xyButton.c
@@ -2,11 +2,12 @@
#include "OS_alarm.h"
#include "OS_tick.h"
#include "PAD_xyButton.h"
+#include "registers.h"
static BOOL PADi_XYButtonAvailable;
static OSAlarm PADi_Alarm;
-extern void FUN_037FB92C(void);
+void EXIi_SelectRcnt(u16);
ARM_FUNC BOOL PAD_InitXYButton(void) {
OSTick tick;
@@ -17,8 +18,16 @@ ARM_FUNC BOOL PAD_InitXYButton(void) {
else {
OS_CreateAlarm(&PADi_Alarm);
tick = OS_GetTick();
- OS_SetPeriodicAlarm(&PADi_Alarm, tick + 0x82e, 0x82e, (OSAlarmHandler)FUN_037FB92C, NULL);
+ 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 = r4 | ((r1 & (EXTKEYIN_X | EXTKEYIN_Y | EXTKEYIN_DEBUG)) << 10);
+}