diff --git a/include/functions.h b/include/functions.h index e3dacff6..8ac9fe10 100644 --- a/include/functions.h +++ b/include/functions.h @@ -579,4 +579,6 @@ extern void miscFlag_set(enum misc_flag_e arg0); extern void miscFlag_clear(enum misc_flag_e arg0); extern void miscFlag_toggle(enum misc_flag_e arg0); +extern void piMgr_read(void *vaddr, s32 devaddr, s32 size); + #endif diff --git a/src/core1/code_0.c b/src/core1/code_0.c index 3cd94f60..c08d5b28 100644 --- a/src/core1/code_0.c +++ b/src/core1/code_0.c @@ -4,6 +4,8 @@ #include "version.h" #include "gc/gctransition.h" +#define MAIN_THREAD_STACK_SIZE 0x17F0 + void setBootMap(enum map_e); void func_8023DFF0(s32); @@ -15,23 +17,24 @@ void func_8023DFF0(s32); s32 D_80275610 = 0; s32 D_80275614 = 0; u32 gGlobalTimer = 0; -u32 D_8027561C[] = { +u32 sDebugVar_8027561C[] = { // never used 0x9, 0x4, 0xA, 0x3, 0xB, 0x2, 0xC, 0x5, 0x0, 0x1, 0x6, 0xD, -1 }; u32 D_80275650 = VER_SELECT(0xAD019D3C, 0xA371A8F3, 0, 0); //SM_DATA_CRC_1 u32 D_80275654 = VER_SELECT(0xD381B72F, 0xD0709154, 0, 0); //SM_DATA_CRC_2 -char D_80275658[] = VER_SELECT("HjunkDire:218755", "HjunkDire:300875", "HjunkDire:", "HjunkDire:"); +char sDebugVar_80275658[] = VER_SELECT("HjunkDire:218755", "HjunkDire:300875", "HjunkDire:", "HjunkDire:"); /* .bss */ u32 D_8027A130; -u8 pad_8027A138[0x400]; -u64 D_8027A538; -u8 pad_8027A540[0x17F8]; -OSThread s_MainThread; -s32 gBootMap; -s32 gDisableInput; -u64 D_8027BEF0; +u8 pad_8027A138[0x400]; +u64 sDebugVar_8027A538; // never used +u64 sDebugVar_8027A540; // never used +u8 sMainThreadStack[MAIN_THREAD_STACK_SIZE]; // The real size of the stack is unclear yet, maybe there are some out-optimized debug variables below the stack +OSThread sMainThread; +s32 gBootMap; +s32 gDisableInput; +u64 sDebugVar_8027BEF0; // never used extern u8 core2_TEXT_START[]; @@ -42,7 +45,7 @@ void func_8023DA20(s32 arg0){ osWriteBackDCacheAll(); sns_find_and_parse_payload(); osInitialize(); - func_80240BE0(); + initThread_create(); } void func_8023DA74(void){ @@ -100,7 +103,7 @@ void func_8023DBDC(void){ func_8023DFF0(3); } -void core1_init(void){ +void core1_init(void) { #if VERSION == VERSION_PAL osTvType = 0; #endif @@ -109,7 +112,7 @@ void core1_init(void){ rarezip_init(); //initialize decompressor's huft table func_8024BE30(); overlayManagerloadCore2(); - D_8027BEF0 = D_8027A538; + sDebugVar_8027BEF0 = sDebugVar_8027A538; heap_init(); func_80254028(); dummy_func_8025AFB0(); @@ -201,10 +204,11 @@ void mainLoop(void){ }//L8023DF70 } -void __mainMethod(void *arg0){ +void mainThread_entry(void *arg) { core1_init(); sns_write_payload_over_heap(); - while(1){ //main loop + + while (1) { mainLoop(); } } @@ -221,14 +225,12 @@ void setBootMap(enum map_e map_id){ gBootMap = map_id; } -void mainThread_create(void){ - // 5th argument should be a pointer to the end of an array, but the start is unknown - // D_8027A538 is not the right symbol, but the end of the array is the important port and this is the closest symbol currently - osCreateThread(&s_MainThread, 6, __mainMethod, NULL, ((u8*)&D_8027A538) + 0x1800, 0x14); +void mainThread_create(void) { + osCreateThread(&sMainThread, 6, mainThread_entry, NULL, sMainThreadStack + MAIN_THREAD_STACK_SIZE, 20); } -OSThread *mainThread_get(void){ - return &s_MainThread; +OSThread *mainThread_get(void) { + return &sMainThread; } void disableInput_set(void){ diff --git a/src/core1/code_10A00.c b/src/core1/code_10A00.c index 9e485021..58fe4eec 100644 --- a/src/core1/code_10A00.c +++ b/src/core1/code_10A00.c @@ -4,6 +4,8 @@ #include "version.h" +#define PFSMANAGER_THREAD_STACK_SIZE 0x200 + extern s32 D_803727F4; extern struct { @@ -57,8 +59,8 @@ f32 D_80281308[4]; OSContStatus pfsManagerContStatus; u8 pad_D_80281320[0x8]; volatile s32 pfsManagerBusy; -OSThread pfsManagerThread; -u8 D_802814E0[0x200]; +OSThread sPfsManagerThread; +u8 sPfsManagerThreadStack[PFSMANAGER_THREAD_STACK_SIZE]; f32 D_802816E0; OSMesgQueue D_802816E8; OSMesg D_80281700[4]; @@ -290,8 +292,8 @@ void pfsManager_readData(){ } -void pfsManager_handle(void *arg0){ - do{ +void pfsManager_entry(void *arg) { + do { osRecvMesg(&pfsManagerContPollingMsqQ, 0, 1); if(pfsManagerBusy == TRUE){ pfsManager_readData(); @@ -299,19 +301,19 @@ void pfsManager_handle(void *arg0){ else{ osSendMesg(&pfsManagerContReplyMsgQ, 0, 0); } - }while(1); + } while (1); } void pfsManager_init(void){ osCreateMesgQueue(&pfsManagerContPollingMsqQ, &pfsManagerContPollingMsqBuf, 1); osCreateMesgQueue(&pfsManagerContReplyMsgQ, &pfsManagerContReplyMsgBuf, 1); - osCreateThread(&pfsManagerThread, 7, pfsManager_handle, NULL, D_802814E0 + 0x200, 0x28); + osCreateThread(&sPfsManagerThread, 7, pfsManager_entry, NULL, sPfsManagerThreadStack + PFSMANAGER_THREAD_STACK_SIZE, 40); osSetEventMesg(OS_EVENT_SI, &pfsManagerContPollingMsqQ, &pfsManagerContPollingMsqBuf); osContInit(&pfsManagerContPollingMsqQ, &pfsManagerBitPattern, &pfsManagerContStatus); osContSetCh(1); func_8024F224(); func_802476DC(); - osStartThread(&pfsManagerThread); + osStartThread(&sPfsManagerThread); } bool pfsManager_contErr(void){ diff --git a/src/core1/code_18210.c b/src/core1/code_18210.c index 2a72255f..3c3ed161 100644 --- a/src/core1/code_18210.c +++ b/src/core1/code_18210.c @@ -14,7 +14,7 @@ void func_80255C30(void) { D_80283380 = *(s32 *)0xA4001000 ^ 6103; D_80283388 |= (D_80283380) ? 2 :0; if (D_80283388 == 0) { - func_802405F0(&D_80283280, 0xB0000B70, 0x100); + piMgr_read(&D_80283280, 0xB0000B70, 0x100); } } diff --git a/src/core1/code_1D00.c b/src/core1/code_1D00.c index bf022604..da1f2a26 100644 --- a/src/core1/code_1D00.c +++ b/src/core1/code_1D00.c @@ -6,6 +6,7 @@ #include "n_libaudio.h" #define AUDIO_HEAP_SIZE VER_SELECT(0x21000, 0x23A00, 0x21000, 0x21000) +#define AUDIOMANAGER_THREAD_STACK_SIZE 0xE78 extern void n_alInit(N_ALGlobals *, ALSynConfig *); @@ -55,7 +56,7 @@ typedef struct struct_core1_1D00_5_s{ }OscState; void audioManager_create(void); -void audioManager_handle(void *); +void audioManagerThread_entry(void *arg); // void func_802403B8(void); void audioManager_handleDoneMsg(AudioInfo *info); void *func_802403B8(void *state); @@ -145,7 +146,7 @@ struct { OSMesgQueue audioReplyMsgQ; OSMesg audioReplyMsgBuf[8]; } audioManager; -u8 pad_8027C178[0xE78]; +u8 sAudioManagerThreadStack[AUDIOMANAGER_THREAD_STACK_SIZE]; ALHeap D_8027CFF0; u8 * D_8027D000; s32 D_8027D004; @@ -342,10 +343,11 @@ void audioManager_create(void) { audioManager.audioInfo[i]->unkC = audioManager.audioInfo[i]; audioManager.audioInfo[i]->data = malloc(D_8027DD7C * 4); } - osCreateThread(&audioManager.thread, 4, &audioManager_handle, 0, &D_8027CFF0, 0x32); + + osCreateThread(&audioManager.thread, 4, &audioManagerThread_entry, 0, sAudioManagerThreadStack + AUDIOMANAGER_THREAD_STACK_SIZE, 50); } -void audioManager_handle(void *arg0) { +void audioManagerThread_entry(void *arg) { s32 phi_s1; phi_s1 = 1; diff --git a/src/core1/code_2BD0.c b/src/core1/code_2BD0.c index f358c09f..910e3df3 100644 --- a/src/core1/code_2BD0.c +++ b/src/core1/code_2BD0.c @@ -3,40 +3,42 @@ #include "variables.h" #include "version.h" +#define PIMGR_MESGBUFFER_SIZE 16 + +OSIoMesg sPiMgrIOMesg; -OSIoMesg D_8027E090; struct { OSMesg mesg; OSMesgQueue queue; -} D_8027E0A8; -OSMesg D_8027E0C8[16]; //g_PimgrMesgBuffer -OSMesgQueue D_8027E108; //g_PimgrMesgQueue +} sPiMgrReadMesg; -void func_802405F0(u32 * arg0, s32 arg1, s32 size){ +OSMesg sPiMgrMesgBuffer[PIMGR_MESGBUFFER_SIZE]; +OSMesgQueue sPiMgrMesgQueue; + +void piMgr_read(void *vaddr, s32 devaddr, s32 size) { s32 block_cnt; s32 block_remainder; s32 block_size = VER_SELECT(0x20000, 0x8000, 0, 0); int i; - osWritebackDCache(arg0, size); + osWritebackDCache(vaddr, size); block_cnt = size / block_size; block_remainder = size % block_size; for(i = 0; i < block_cnt; i++){ - osPiStartDma(&D_8027E090, OS_MESG_PRI_NORMAL, OS_READ, arg1, arg0, VER_SELECT(0x20000, 0x8000, 0, 0), &D_8027E0A8.queue); - osRecvMesg(&D_8027E0A8.queue, NULL, 1); - arg1 += VER_SELECT(0x20000, 0x8000, 0, 0); - arg0 += VER_SELECT(0x8000, 0x2000, 0, 0); + osPiStartDma(&sPiMgrIOMesg, OS_MESG_PRI_NORMAL, OS_READ, devaddr, vaddr, VER_SELECT(0x20000, 0x8000, 0, 0), &sPiMgrReadMesg.queue); + osRecvMesg(&sPiMgrReadMesg.queue, NULL, 1); + devaddr += VER_SELECT(0x20000, 0x8000, 0, 0); + vaddr = (u32 *) vaddr + VER_SELECT(0x8000, 0x2000, 0, 0); } - osPiStartDma(&D_8027E090, OS_MESG_PRI_NORMAL, OS_READ, arg1, arg0, block_remainder, &D_8027E0A8.queue); - osRecvMesg(&D_8027E0A8.queue, NULL, 1); - osInvalDCache(arg0, size); - + osPiStartDma(&sPiMgrIOMesg, OS_MESG_PRI_NORMAL, OS_READ, devaddr, vaddr, block_remainder, &sPiMgrReadMesg.queue); + osRecvMesg(&sPiMgrReadMesg.queue, NULL, 1); + osInvalDCache(vaddr, size); } -void piMgr_create(void){ - osCreateMesgQueue(&D_8027E0A8.queue, &D_8027E0A8.mesg, 1); - osCreateMesgQueue(&D_8027E108, &D_8027E0C8[0], 16); - osCreatePiManager(OS_PRIORITY_PIMGR, &D_8027E108, &D_8027E0C8[0], 16); +void piMgr_init(void) { + osCreateMesgQueue(&sPiMgrReadMesg.queue, &sPiMgrReadMesg.mesg, 1); + osCreateMesgQueue(&sPiMgrMesgQueue, sPiMgrMesgBuffer, PIMGR_MESGBUFFER_SIZE); + osCreatePiManager(OS_PRIORITY_PIMGR, &sPiMgrMesgQueue, sPiMgrMesgBuffer, PIMGR_MESGBUFFER_SIZE); } diff --git a/src/core1/code_31C0.c b/src/core1/code_31C0.c index d215c7ad..3b3c57cb 100644 --- a/src/core1/code_31C0.c +++ b/src/core1/code_31C0.c @@ -2,25 +2,25 @@ #include "functions.h" #include "variables.h" +#define INIT_THREAD_STACK_SIZE 0x200 -u8 D_8027EB10[0x200]; // Size based on the previous symbol's address -OSThread D_8027ED10; +u8 sInitThreadStack[INIT_THREAD_STACK_SIZE]; // Size based on the previous symbol's address +OSThread sInitThread; +void initThread_entry(void *arg); -void func_80240C30(void*); - -void func_80240BE0(void){ - osCreateThread(&D_8027ED10, 1, func_80240C30, NULL, &D_8027EB10[0x200], 0); - osStartThread(&D_8027ED10); +void initThread_create(void) { + osCreateThread(&sInitThread, 1, initThread_entry, NULL, sInitThreadStack + INIT_THREAD_STACK_SIZE, OS_PRIORITY_IDLE); + osStartThread(&sInitThread); } -void piMgr_create(void); +void piMgr_init(void); void mainThread_create(void); OSThread *mainThread_get(void); -void func_80240C30(void *arg) +void initThread_entry(void *arg) { - piMgr_create(); + piMgr_init(); mainThread_create(); osStartThread(mainThread_get()); while (1); diff --git a/src/core1/code_8C50.c b/src/core1/code_8C50.c index 2cd813c6..f9686d2a 100644 --- a/src/core1/code_8C50.c +++ b/src/core1/code_8C50.c @@ -484,7 +484,11 @@ void func_80247560(void){ D_80280684 = 0; D_80280680 = 0; tmp_v0 = D_8027EF40; - while((u32)tmp_v0 % 0x10){((u32)tmp_v0)++;} + + while ((u32) tmp_v0 % 0x10) { + tmp_v0 = (u64 *) ((u32) tmp_v0 + 1); + } + D_80275950.t.yield_data_ptr = tmp_v0; osCreateThread(&D_80280428, 5, func_802473B4, NULL, &D_8027FC28[2048], 60); osStartThread(&D_80280428); diff --git a/src/core1/code_E360.c b/src/core1/code_E360.c index 5fe13071..b45c4066 100644 --- a/src/core1/code_E360.c +++ b/src/core1/code_E360.c @@ -152,7 +152,7 @@ void func_8024BE30(void){ } D_802808D8 = 0; func_8024BF94(2); - osCreateThread(&D_802808E0,0,func_8024C2F8,NULL,&thread0_stack[THREAD0_STACK_SIZE],80); + osCreateThread(&D_802808E0,0,func_8024C2F8,NULL, thread0_stack + THREAD0_STACK_SIZE, 80); osStartThread(&D_802808E0); } diff --git a/src/core1/defragmanager.c b/src/core1/defragmanager.c index 01d64000..10d62cb0 100644 --- a/src/core1/defragmanager.c +++ b/src/core1/defragmanager.c @@ -2,26 +2,28 @@ #include "functions.h" #include "variables.h" -void __defrag_thread(s32 arg0); +#define DEFRAG_THREAD_STACK_SIZE 0x800 + +void defragThread_entry(void *arg); OSMesgQueue D_8027E120; OSMesg D_8027E138; OSMesgQueue D_8027E140; OSMesg D_8027E158; -OSThread defragThread; -u8 defragStack[0x800]; +OSThread sDefragThread; +u8 sDefragThreadStack[0x800]; /* .code */ void defragManager_init(void){ osCreateMesgQueue(&D_8027E120, &D_8027E138, 1); osCreateMesgQueue(&D_8027E140, &D_8027E158, 1); - osCreateThread(&defragThread, 2, __defrag_thread, NULL, &defragStack[0x800], 10); - osStartThread(&defragThread); + osCreateThread(&sDefragThread, 2, defragThread_entry, NULL, sDefragThreadStack + DEFRAG_THREAD_STACK_SIZE, 10); + osStartThread(&sDefragThread); } void defragManager_free(void){ - osStopThread(&defragThread); - osDestroyThread(&defragThread); + osStopThread(&sDefragThread); + osDestroyThread(&sDefragThread); } void defragManager_80240874(void){ @@ -38,11 +40,11 @@ void defragManager_802408B0(void){ void defragManager_setPriority(OSPri pri){ if(func_8023E000() == 3){ - osSetThreadPri(&defragThread, pri); + osSetThreadPri(&sDefragThread, pri); } } -void __defrag_thread(s32 arg0){ +void defragThread_entry(void *arg) { int tmp_v0; do{ osRecvMesg(&D_8027E120, NULL, OS_MESG_BLOCK); diff --git a/src/core1/overlay.c b/src/core1/overlay.c index 0bb23cf1..0d6aea64 100644 --- a/src/core1/overlay.c +++ b/src/core1/overlay.c @@ -42,7 +42,7 @@ void overlay_load( else{ sp34 = &D_8002D500; } - func_802405F0(sp34, rom_start, rom_end - rom_start); + piMgr_read(sp34, rom_start, rom_end - rom_start); rarezip_uncompress(&sp34, &ram_start); sp2C = D_8027BF2C; sp30 = D_8027BF30; diff --git a/src/core1/rumblemanager.c b/src/core1/rumblemanager.c index c9d9533f..f8f7cf58 100644 --- a/src/core1/rumblemanager.c +++ b/src/core1/rumblemanager.c @@ -4,6 +4,8 @@ #include "version.h" +#define RUMBLE_THREAD_STACK_SIZE 0x200 + void func_8024F35C(s32); OSMesgQueue D_80282390; @@ -16,8 +18,8 @@ f32 D_80282420; f32 D_80282424; f32 D_80282428; f32 D_8028242C; -OSThread rumbleThread; -u8 rumbleStack[0x200]; +OSThread sRumbleThread; +u8 sRumbleThreadStack[RUMBLE_THREAD_STACK_SIZE]; /* .code */ void rumbleManager_80250D94(f32, f32, f32); @@ -55,7 +57,7 @@ void func_80250930(void){ } } -void __rumbleUpdate(void *arg0) { +void rumbleThread_entry(void *arg) { static s32 D_802827E0; static s32 rumble_state; f32 temp_f2; @@ -107,7 +109,7 @@ void rumbleManager_80250C08(void) { } } -void rumbleManager_init(void){ +void rumbleManager_init(void) { s32 pfs_status; func_8024F35C(4); @@ -121,8 +123,8 @@ void rumbleManager_init(void){ D_802823B0 = D_802823AC; if(D_802823AC){ osCreateMesgQueue(&D_80282390, &D_802823A8, 1); - osCreateThread(&rumbleThread, 8, __rumbleUpdate, NULL, &rumbleStack[0x200], 0x19); - osStartThread(&rumbleThread); + osCreateThread(&sRumbleThread, 8, rumbleThread_entry, NULL, sRumbleThreadStack + RUMBLE_THREAD_STACK_SIZE, 25); + osStartThread(&sRumbleThread); func_8024BDAC(&D_80282390, 0); } } diff --git a/src/core2/code_B3A80.c b/src/core2/code_B3A80.c index 26ddc169..7637fdd5 100644 --- a/src/core2/code_B3A80.c +++ b/src/core2/code_B3A80.c @@ -398,7 +398,7 @@ void *assetcache_get(enum asset_e assetId) { uncompressed_file = malloc(comp_size); compressed_file = uncompressed_file; } - func_802405F0(compressed_file, assetSectionRomMetaList[assetId].offset + D_80383CCC, sp3C); + piMgr_read(compressed_file, assetSectionRomMetaList[assetId].offset + D_80383CCC, sp3C); if(assetSectionRomMetaList[assetId].compFlag & 0x0001){//decompress rarezip_inflate(compressed_file, uncompressed_file); realloc(uncompressed_file, assetCacheCurrentSize); @@ -417,7 +417,7 @@ void *assetcache_get(enum asset_e assetId) { } void func_8033BAB0(enum asset_e asset_id, s32 offset, s32 size, void *dst_ptr) { - func_802405F0(dst_ptr, assetSectionRomMetaList[asset_id].offset + D_80383CCC + offset, size); + piMgr_read(dst_ptr, assetSectionRomMetaList[asset_id].offset + D_80383CCC + offset, size); } void assetCache_resizeAsset(void *assetPtr, s32 size){ @@ -438,9 +438,9 @@ void assetCache_init(void){ assetCacheLength = 0; assetSectionRomHeader = (AssetROMHead *)malloc(sizeof(AssetROMHead)); D_80383CC8 = (u32)assets_ROM_START; - func_802405F0(assetSectionRomHeader, D_80383CC8, sizeof(AssetROMHead)); + piMgr_read(assetSectionRomHeader, D_80383CC8, sizeof(AssetROMHead)); assetSectionRomMetaList = (AssetFileMeta *)malloc(assetSectionRomHeader->count*sizeof(AssetFileMeta)); - func_802405F0(assetSectionRomMetaList, D_80383CC8 + sizeof(AssetROMHead),assetSectionRomHeader->count*sizeof(AssetFileMeta)); + piMgr_read(assetSectionRomMetaList, D_80383CC8 + sizeof(AssetROMHead),assetSectionRomHeader->count*sizeof(AssetFileMeta)); D_80383CCC = D_80383CC8 + sizeof(AssetROMHead) + assetSectionRomHeader->count*sizeof(AssetFileMeta); } @@ -531,7 +531,7 @@ s32 func_8033BDAC(enum asset_e id, void *dst, s32 size) { } } comp_size = assetSectionRomMetaList[id].offset + D_80383CCC; - func_802405F0(comp_ptr, comp_size, sp34); + piMgr_read(comp_ptr, comp_size, sp34); if (assetSectionRomMetaList[id].compFlag & 1) { rarezip_inflate(comp_ptr, dst); osWritebackDCache(dst, assetCacheCurrentSize);