ogrebattle64/src/1A050.c

100 lines
2.4 KiB
C

#include "common.h"
void func_80089C50(void) {
__SCREEN_IS_NOT_BLACK = 0x80;
}
// INCLUDE_ASM(const s32, "1A050", __init_controllers);
/* 1A060 80089C60 */
u8 __init_controllers(void) {
u8 pattern;
OSContStatus data;
s32 pad[2];
osCreateMesgQueue(&MQ_CONTROLLER, D_800BBE60, 8);
osSetEventMesg(OS_EVENT_SI, &MQ_CONTROLLER, NULL);
osContInit(&MQ_CONTROLLER, &pattern, &data);
osCreateThread(&THREAD_CONTROLLER, 5, __controller_thread_80089D9C, NULL, &MQ_800BE030, 0x73);
osStartThread(&THREAD_CONTROLLER);
return pattern;
}
s32 func_80089CF8(s16 arg0, s32 arg1) {
typedef struct {
/* 0x0 */ s16 unk0;
/* 0x4 */ OSMesgQueue* msgQueue;
/* 0x8 */ s32 unk8;
/* 0xC */ s32 unkC;
} Message; // size 0x10
OSMesgQueue sp10;
Message msg;
OSMesg sp38; // maybe this is part of the struct?
msg.unk0 = arg0;
msg.unkC = arg1;
msg.msgQueue = &sp10;
osCreateMesgQueue(&sp10, &sp38, 1);
osSendMesg(&MQ_800E7988, &msg, OS_MESG_BLOCK);
osRecvMesg(&sp10, NULL, OS_MESG_BLOCK);
return msg.unk8;
}
void func_80089D5C(void) {
func_80089CF8(0x7F00, 0);
}
void __start_controller_thread(void) {
osStartThread(&THREAD_CONTROLLER);
}
INCLUDE_ASM(const s32, "1A050", __controller_thread_80089D9C);
void obInitializePi(void) {
osCreatePiManager(OS_PRIORITY_PIMGR, &MQ_800BE030, OSMESG_800BE048, sizeof(OSMESG_800BE048) / sizeof(OSMesg));
PTR_CART_ROM_HANDLE = osCartRomInit();
}
/* 1A380 80089F80 */
void romCopy(const void *src, void *dst, u32 len) {
OSIoMesg dmaIoMesgBuf;
OSMesgQueue dmaMessageQ;
OSMesg dummyMesg;
u32 readlength;
osCreateMesgQueue(&dmaMessageQ, &dummyMesg, 1);
dmaIoMesgBuf.hdr.pri = 0;
dmaIoMesgBuf.hdr.retQueue = &dmaMessageQ;
osInvalDCache(dst, len);
while (len != 0) {
readlength = len;
if (readlength > MAX_BYTES_TO_READ) {
readlength = MAX_BYTES_TO_READ;
}
dmaIoMesgBuf.devAddr = (u32)src;
dmaIoMesgBuf.dramAddr = dst;
dmaIoMesgBuf.size = readlength;
// Start the DMA transfer
osEPiStartDma(PTR_CART_ROM_HANDLE, &dmaIoMesgBuf, 0);
// Wait for the DMA transfer to complete
osRecvMesg(&dmaMessageQ, &dummyMesg, 1);
src += readlength;
dst += readlength;
len -= readlength;
}
}
INCLUDE_ASM(const s32, "1A050", func_8008A040);