ogrebattle64/src/_ob_prized_reading.c

118 lines
2.5 KiB
C

#include "common.h"
#include "nu/nusys.h"
extern u32 obStackMain;
/* 1A660 8008A260 */
u8 nuContMgrInit(void) {
s32 var_a0;
s32 var_a1;
s32 var_v1;
nuContDataUnLock();
osCreateMesgQueue(&nuContWaitMesgQ, &nuContWaitMesgBuf, 1);
osCreateMesgQueue(&nuContDataMutexQ, &nuContDataMutexBuf, 1);
nuSiCallBackAdd(&D_800A9FF8);
nuContQueryRead();
var_a0 = 1;
var_a1 = 0;
var_v1 = 0;
obStackMain = 0;
for(; var_v1 < MAXCONTROLLERS; var_v1++) {
if (__GLOBAL_CONT_STATUS[var_v1].errno == 0) {
if ((__GLOBAL_CONT_STATUS[var_v1].type & CONT_TYPE_MASK) == CONT_TYPE_NORMAL) {
var_a1 |= var_a0;
obStackMain += 1;
}
var_a0 *= 2;
}
}
return var_a1;
}
void func_8008A334(void) {
func_8008B1D0(&D_800A9FF8);
}
void __start_copy_global_controller_data(void) {
osSendMesg(&nuContDataMutexQ, NULL, OS_MESG_BLOCK);
}
void __end_copy_global_controller_data(void) {
osRecvMesg(&nuContDataMutexQ, NULL, OS_MESG_BLOCK);
}
s32 __read_controller(OSContPad* data, u32 flags) {
s32 res;
res = osContStartReadData(&nuSiMesgQ);
if(res != 0)
return res;
osRecvMesg(&nuSiMesgQ, NULL, OS_MESG_BLOCK);
if (!(flags & D_800C4B30)) {
func_8008A354();
osContGetReadData(data);
func_8008A37C();
return 0;
}
return 0;
}
s32 __real_read_controller(void) {
s32 var_v0;
var_v0 = osContStartQuery(&nuSiMesgQ);
if (var_v0 == 0) {
osRecvMesg(&nuSiMesgQ, NULL, OS_MESG_BLOCK);
osContGetQuery(__GLOBAL_CONT_STATUS);
return 0;
} else {
return var_v0;
}
}
s32 __calls_read_controller_0(s16* arg0) {
if (D_800C4B30 == 0) {
osRecvMesg(&nuContWaitMesgQ, NULL, 0);
__read_controller(__GLOBAL_CONTROLLER_DATA, 1);
if (D_800A9FE0 != NULL) {
D_800A9FE0(*arg0);
}
osSendMesg(&nuContWaitMesgQ, 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(&nuContWaitMesgQ, 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;
}
}