mirror of
https://github.com/pret/pokediamond.git
synced 2026-10-01 21:07:01 -05:00
Merge pull request #223 from Cleverking2003/master
Decompile PAD_xyButton
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
12
arm7/lib/include/PAD_xyButton.h
Normal file
12
arm7/lib/include/PAD_xyButton.h
Normal file
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
33
arm7/lib/src/PAD_xyButton.c
Normal file
33
arm7/lib/src/PAD_xyButton.c
Normal file
@@ -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));
|
||||
}
|
||||
Reference in New Issue
Block a user