100 lines
2.4 KiB
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);
|