#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);