From 07400e92d04dfd4d565ba707094e26c794936be6 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 09:34:14 +0300 Subject: Decompile pad --- arm7/asm/PAD_xyButton.s | 60 --------------------------------------------- arm7/lib/include/OS_alarm.h | 3 +++ arm7/lib/include/pad.h | 8 ++++++ arm7/lib/src/PAD_xyButton.c | 24 ++++++++++++++++++ 4 files changed, 35 insertions(+), 60 deletions(-) delete mode 100644 arm7/asm/PAD_xyButton.s create mode 100644 arm7/lib/include/pad.h create mode 100644 arm7/lib/src/PAD_xyButton.c diff --git a/arm7/asm/PAD_xyButton.s b/arm7/asm/PAD_xyButton.s deleted file mode 100644 index 66dc0a61..00000000 --- a/arm7/asm/PAD_xyButton.s +++ /dev/null @@ -1,60 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global PADi_XYButtonAvailable -PADi_XYButtonAvailable: ;0x038079DC - .space 0x038079E0 - 0x038079DC - - .global _038079E0 -_038079E0: ;0x038079E0 - .space 0x03807A0C - 0x038079E0 - - .section .text - - arm_func_start PAD_InitXYButton -PAD_InitXYButton: ; 0x037FB96C - stmfd sp!, {lr} - sub sp, sp, #12 - bl OS_IsTickAvailable - cmp r0, #0 - beq _037FB98C - bl OS_IsAlarmAvailable - cmp r0, #0 - bne _037FB994 -_037FB98C: - mov r0, #0 - b _037FB9F0 -_037FB994: - ldr r0, _037FB9FC ; =PADi_XYButtonAvailable - ldr r0, [r0] - cmp r0, #0 - movne r0, #0 - bne _037FB9F0 - ldr r0, _037FBA00 ; =_038079E0 - bl OS_CreateAlarm - bl OS_GetTick - mov r2, r0 - ldr r0, _037FBA04 ; =FUN_037FB92C - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r3, _037FBA08 ; =0x0000082E - str r0, [sp] - ldr r0, _037FBA00 ; =_038079E0 - adds ip, r2, r3 - adc r2, r1, #0 - mov r1, ip - bl OS_SetPeriodicAlarm - mov r0, #1 - ldr r1, _037FB9FC ; =PADi_XYButtonAvailable - str r0, [r1] -_037FB9F0: - add sp, sp, #12 - ldmia sp!, {lr} - bx lr -_037FB9FC: .word PADi_XYButtonAvailable -_037FBA00: .word _038079E0 -_037FBA04: .word FUN_037FB92C -_037FBA08: .word 0x0000082E 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.h b/arm7/lib/include/pad.h new file mode 100644 index 00000000..8591bf7b --- /dev/null +++ b/arm7/lib/include/pad.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_PAD_H +#define POKEDIAMOND_PAD_H + +#include "nitro/types.h" + +BOOL PAD_InitXYButton(void); + +#endif diff --git a/arm7/lib/src/PAD_xyButton.c b/arm7/lib/src/PAD_xyButton.c new file mode 100644 index 00000000..ed4e7c05 --- /dev/null +++ b/arm7/lib/src/PAD_xyButton.c @@ -0,0 +1,24 @@ +#include "function_target.h" +#include "OS_alarm.h" +#include "OS_tick.h" +#include "pad.h" + +static BOOL PADi_XYButtonAvailable; +static OSAlarm PADi_Alarm; + +extern void FUN_037FB92C(void); + +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)FUN_037FB92C, NULL); + PADi_XYButtonAvailable = TRUE; + return TRUE; + } +} -- cgit v1.2.3 From 4d7fd9ee0c39e73b637a894b6751095e2bcd5b74 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 09:42:04 +0300 Subject: rename --- arm7/lib/include/PAD_XYButton.h | 8 ++++++++ arm7/lib/include/pad.h | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 arm7/lib/include/PAD_XYButton.h delete mode 100644 arm7/lib/include/pad.h diff --git a/arm7/lib/include/PAD_XYButton.h b/arm7/lib/include/PAD_XYButton.h new file mode 100644 index 00000000..49bc75bb --- /dev/null +++ b/arm7/lib/include/PAD_XYButton.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_PAD_XYBUTTON_H +#define POKEDIAMOND_PAD_XYBUTTON_H + +#include "nitro/types.h" + +BOOL PAD_InitXYButton(void); + +#endif diff --git a/arm7/lib/include/pad.h b/arm7/lib/include/pad.h deleted file mode 100644 index 8591bf7b..00000000 --- a/arm7/lib/include/pad.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEDIAMOND_PAD_H -#define POKEDIAMOND_PAD_H - -#include "nitro/types.h" - -BOOL PAD_InitXYButton(void); - -#endif -- cgit v1.2.3 From 369a6d8c8bfc3a0be042851cab472767a9a13ccf Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 09:45:45 +0300 Subject: consistent rename --- arm7/lib/include/PAD_XYButton.h | 8 -------- arm7/lib/include/PAD_xyButton.h | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 arm7/lib/include/PAD_XYButton.h create mode 100644 arm7/lib/include/PAD_xyButton.h diff --git a/arm7/lib/include/PAD_XYButton.h b/arm7/lib/include/PAD_XYButton.h deleted file mode 100644 index 49bc75bb..00000000 --- a/arm7/lib/include/PAD_XYButton.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEDIAMOND_PAD_XYBUTTON_H -#define POKEDIAMOND_PAD_XYBUTTON_H - -#include "nitro/types.h" - -BOOL PAD_InitXYButton(void); - -#endif diff --git a/arm7/lib/include/PAD_xyButton.h b/arm7/lib/include/PAD_xyButton.h new file mode 100644 index 00000000..49bc75bb --- /dev/null +++ b/arm7/lib/include/PAD_xyButton.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_PAD_XYBUTTON_H +#define POKEDIAMOND_PAD_XYBUTTON_H + +#include "nitro/types.h" + +BOOL PAD_InitXYButton(void); + +#endif -- cgit v1.2.3 From 1f2f48038cabc775a4e5af8938d5cd619f7a4fd9 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 16:58:16 +0300 Subject: I'm fucking stupid --- arm7/lib/src/PAD_xyButton.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm7/lib/src/PAD_xyButton.c b/arm7/lib/src/PAD_xyButton.c index ed4e7c05..d224d6a5 100644 --- a/arm7/lib/src/PAD_xyButton.c +++ b/arm7/lib/src/PAD_xyButton.c @@ -1,7 +1,7 @@ #include "function_target.h" #include "OS_alarm.h" #include "OS_tick.h" -#include "pad.h" +#include "PAD_xyButton.h" static BOOL PADi_XYButtonAvailable; static OSAlarm PADi_Alarm; -- cgit v1.2.3 From 388e4016a23dc5f3d7b140d500c42fd5c1d1943c Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 19:47:38 +0300 Subject: One more func --- arm7/asm/EXI_genPort.s | 19 ------------------- arm7/global.inc | 2 +- arm7/lib/include/PAD_xyButton.h | 4 ++++ arm7/lib/include/mmap.h | 1 + arm7/lib/include/registers.h | 8 ++++++++ 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); +} -- cgit v1.2.3 From 85c37c87a3c79f97c9603129701f91785abd0ddc Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Mon, 6 Jul 2020 19:55:37 +0300 Subject: cast --- arm7/lib/src/PAD_xyButton.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm7/lib/src/PAD_xyButton.c b/arm7/lib/src/PAD_xyButton.c index fa344f04..7c3eeac8 100644 --- a/arm7/lib/src/PAD_xyButton.c +++ b/arm7/lib/src/PAD_xyButton.c @@ -29,5 +29,5 @@ void PADi_xyButtonAlarmHandler(void) { EXIi_SelectRcnt(0x8000); r1 = reg_EXTKEYIN; if(r1 & EXTKEYIN_HINGE) r4 = 0x8000; - BUTTON_XY_BUF = r4 | ((r1 & (EXTKEYIN_X | EXTKEYIN_Y | EXTKEYIN_DEBUG)) << 10); + BUTTON_XY_BUF = (u16)(r4 | ((r1 & (EXTKEYIN_X | EXTKEYIN_Y | EXTKEYIN_DEBUG)) << 10)); } -- cgit v1.2.3