#include "common.h" #include void __start_copy_global_controller_data(void); void __end_copy_global_controller_data(void); s32 __read_controller(OSContPad* data, u32 flags); s32 __real_read_controller(void); s32 __calls_read_controller_0(s16* arg0); extern void func_8008A354(); extern void func_8008A37C(); extern s32 D_800C4B30; extern OSMesgQueue MQ_CONTROLLER; extern OSMesgQueue MQ_800E9BF0; INCLUDE_ASM(const s32, "1A660", func_8008A260); // INCLUDE_ASM(const s32, "1A660", func_8008A334); extern void func_8008B1D0(u8*); extern u8 D_800A9FF8; void func_8008A334(void) { func_8008B1D0(&D_800A9FF8); } void __start_copy_global_controller_data(void) { osSendMesg(&MQ_800E9BF0, NULL, OS_MESG_BLOCK); } void __end_copy_global_controller_data(void) { osRecvMesg(&MQ_800E9BF0, NULL, OS_MESG_BLOCK); } s32 __read_controller(OSContPad* data, u32 flags) { s32 res; res = osContStartReadData(&MQ_CONTROLLER); if(res != 0) return res; osRecvMesg(&MQ_CONTROLLER, NULL, OS_MESG_BLOCK); if (!(flags & D_800C4B30)) { func_8008A354(); osContGetReadData(data); func_8008A37C(); return 0; } return 0; } extern OSContStatus __GLOBAL_CONT_STATUS[MAXCONTROLLERS]; extern OSMesgQueue MQ_CONTROLLER; s32 __real_read_controller(void) { s32 var_v0; var_v0 = osContStartQuery(&MQ_CONTROLLER); if (var_v0 == 0) { osRecvMesg(&MQ_CONTROLLER, NULL, OS_MESG_BLOCK); osContGetQuery(__GLOBAL_CONT_STATUS); return 0; } else { return var_v0; } } extern void (*D_800A9FE0)(s16); extern OSMesgQueue MQ_800C4A00; extern OSContPad __GLOBAL_CONTROLLER_DATA; s32 __calls_read_controller_0(s16* arg0) { if (D_800C4B30 == 0) { osRecvMesg(&MQ_800C4A00, NULL, 0); __read_controller(&__GLOBAL_CONTROLLER_DATA, 1); if (D_800A9FE0 != NULL) { D_800A9FE0(*arg0); } osSendMesg(&MQ_800C4A00, NULL, 0); } return 0; } typedef struct { /* 0x0 */ u8 field_0x0[0xc]; /* 0xC */ OSContPad* data; } Arg___calls_read_controller_1; void __calls_read_controller_1(Arg___calls_read_controller_1* arg) { __read_controller(arg->data, 0); } s32 __calls_read_controller_2(s16* arg0) { s32 var_v0; osRecvMesg(&MQ_800C4A00, NULL, 0); var_v0 = __read_controller(&__GLOBAL_CONTROLLER_DATA, 0); if (var_v0 == 0) { if (D_800A9FE0 != NULL) { D_800A9FE0(*arg0); } return 0; } else { return var_v0; } }