ogrebattle64/src/1A660.c

111 lines
2.5 KiB
C

#include "common.h"
#include <ultra64.h>
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;
}
}