diff options
-rw-r--r-- | arm7/asm/EXI_genPort.s | 19 | ||||
-rw-r--r-- | arm7/global.inc | 2 | ||||
-rw-r--r-- | arm7/lib/include/PAD_xyButton.h | 4 | ||||
-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 | 13 |
6 files changed, 25 insertions, 22 deletions
diff --git a/arm7/asm/EXI_genPort.s b/arm7/asm/EXI_genPort.s index ff2a46f7..ced58086 100644 --- a/arm7/asm/EXI_genPort.s +++ b/arm7/asm/EXI_genPort.s @@ -23,22 +23,3 @@ EXIi_SetBitRcnt0L: ; 0x037FB90C strh r0, [r2] bx lr _037FB928: .word 0x04000134 - - arm_func_start FUN_037FB92C -FUN_037FB92C: ; 0x037FB92C - stmdb sp!, {r4, lr} - mov r4, #0 - mov r0, #32768 ; 0x8000 - bl EXIi_SelectRcnt - ldr r0, _037FB964 ; =0x04000136 - ldrh r1, [r0] - ands r0, r1, #128 ; 0x80 - movne r4, #32768 ; 0x8000 - and r0, r1, #11 - orr r1, r4, r0, lsl #10 - ldr r0, _037FB968 ; =0x027FFFA8 - strh r1, [r0] - ldmia sp!, {r4, lr} - bx lr -_037FB964: .word 0x04000136 -_037FB968: .word 0x027FFFA8 diff --git a/arm7/global.inc b/arm7/global.inc index b21c60fc..11f0b8e2 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -123,7 +123,7 @@ .extern PXI_SetFifoRecvCallback
.extern EXIi_SelectRcnt
.extern EXIi_SetBitRcnt0L
-.extern FUN_037FB92C
+.extern PADi_xyButtonAlarmHandler
.extern SNDi_LockMutex
.extern SNDi_SetPlayerParam
.extern SNDi_SetSurroundDecay
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); +} |