From 9bee42a73e823b174472ee7d0500a58259cba4fd Mon Sep 17 00:00:00 2001 From: mariob92 <21146795-mariob92@users.noreply.gitlab.com> Date: Wed, 21 May 2025 15:36:20 +0200 Subject: [PATCH] documentation: defragmanager.c --- include/core1/core1.h | 13 ++++++++ include/functions.h | 2 ++ src/core1/defragmanager.c | 65 +++++++++++++++++++-------------------- src/core1/vimgr.c | 8 ++--- 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/include/core1/core1.h b/include/core1/core1.h index c5fcc653..1a5fa0f3 100644 --- a/include/core1/core1.h +++ b/include/core1/core1.h @@ -127,4 +127,17 @@ void toggleTextureFilterPoint(void); void getGraphicsStacks(Gfx **gfx, Mtx **mtx, Vtx **vtx); void dummy_func_80254464(void); +/* src/core1/defragmanager.c */ + +#define DEFRAGMANAGER_THREAD_STACK_SIZE 2048 +#define DEFRAGMANAGER_THREAD_ID 2 +#define DEFRAGMANAGER_THREAD_PRIORITY 10 +#define DEFRAGMANAGER_THREAD_PRIORITY_HIGH 30 + +void defragManager_init(void); +void defragManager_free(void); +void defragManager_resume(void); +void defragManager_pause(void); +void defragManager_setPriority(OSPri pri); + #endif diff --git a/include/functions.h b/include/functions.h index e64ecb40..ec716a68 100644 --- a/include/functions.h +++ b/include/functions.h @@ -513,4 +513,6 @@ extern void baflag_toggle(enum misc_flag_e arg0); extern void piMgr_read(void *vaddr, s32 devaddr, s32 size); +s32 game_defrag(void); + #endif diff --git a/src/core1/defragmanager.c b/src/core1/defragmanager.c index 636b3adc..a4673590 100644 --- a/src/core1/defragmanager.c +++ b/src/core1/defragmanager.c @@ -1,59 +1,56 @@ #include #include "core1/core1.h" #include "functions.h" -#include "variables.h" -#define DEFRAG_THREAD_STACK_SIZE 0x800 +static void defragThread_entry(void *args); -void defragThread_entry(void *arg); +static OSMesgQueue sDefragThreadResumeSyncQueue; +static OSMesg sDefragThreadResumeSyncMesg; +static OSMesgQueue sDefragThreadPauseSyncQueue; +static OSMesg sDefragThreadPauseSyncMesg; +static OSThread sDefragThread; +static u8 sDefragThreadStack[DEFRAGMANAGER_THREAD_STACK_SIZE]; -OSMesgQueue D_8027E120; -OSMesg D_8027E138; -OSMesgQueue D_8027E140; -OSMesg D_8027E158; -OSThread sDefragThread; -u8 sDefragThreadStack[0x800]; - -/* .code */ -void defragManager_init(void){ - osCreateMesgQueue(&D_8027E120, &D_8027E138, 1); - osCreateMesgQueue(&D_8027E140, &D_8027E158, 1); - osCreateThread(&sDefragThread, 2, defragThread_entry, NULL, sDefragThreadStack + DEFRAG_THREAD_STACK_SIZE, 10); +void defragManager_init(void) { + osCreateMesgQueue(&sDefragThreadResumeSyncQueue, &sDefragThreadResumeSyncMesg, 1); + osCreateMesgQueue(&sDefragThreadPauseSyncQueue, &sDefragThreadPauseSyncMesg, 1); + osCreateThread(&sDefragThread, DEFRAGMANAGER_THREAD_ID, defragThread_entry, NULL, sDefragThreadStack + DEFRAGMANAGER_THREAD_STACK_SIZE, DEFRAGMANAGER_THREAD_PRIORITY); osStartThread(&sDefragThread); } -void defragManager_free(void){ +void defragManager_free(void) { osStopThread(&sDefragThread); osDestroyThread(&sDefragThread); } -void defragManager_80240874(void){ - if(func_8023E000() == 3){ - osSendMesg(&D_8027E120, NULL, OS_MESG_BLOCK); +void defragManager_resume(void) { + if (func_8023E000() == 3) { + osSendMesg(&sDefragThreadResumeSyncQueue, NULL, OS_MESG_BLOCK); } } -void defragManager_802408B0(void){ - if(func_8023E000() == 3){ - osSendMesg(&D_8027E140, NULL, OS_MESG_BLOCK); +void defragManager_pause(void) { + if (func_8023E000() == 3) { + osSendMesg(&sDefragThreadPauseSyncQueue, NULL, OS_MESG_BLOCK); } } -void defragManager_setPriority(OSPri pri){ - if(func_8023E000() == 3){ +void defragManager_setPriority(OSPri pri) { + if (func_8023E000() == 3) { osSetThreadPri(&sDefragThread, pri); } } -void defragThread_entry(void *arg) { - int tmp_v0; - do{ - osRecvMesg(&D_8027E120, NULL, OS_MESG_BLOCK); - if(!D_8027E140.validCount){ - do{ - tmp_v0 = game_defrag(); - }while(!D_8027E140.validCount && tmp_v0); +static void defragThread_entry(void *args) { + s32 defrag_flag; + + do { + osRecvMesg(&sDefragThreadResumeSyncQueue, NULL, OS_MESG_BLOCK); + if (sDefragThreadPauseSyncQueue.validCount == 0) { + do { + defrag_flag = game_defrag(); + } while ((sDefragThreadPauseSyncQueue.validCount == 0) && defrag_flag); } - osRecvMesg(&D_8027E140, NULL, OS_MESG_BLOCK); - }while(1); + osRecvMesg(&sDefragThreadPauseSyncQueue, NULL, OS_MESG_BLOCK); + } while(1); } diff --git a/src/core1/vimgr.c b/src/core1/vimgr.c index 9a6538da..c9ba0d66 100644 --- a/src/core1/vimgr.c +++ b/src/core1/vimgr.c @@ -165,8 +165,8 @@ void viMgr_func_8024BFD8(s32 arg0){ static s32 D_80280E90; osSetThreadPri(NULL, 0x7f); - defragManager_setPriority(0x1E); - defragManager_80240874(); + defragManager_setPriority(DEFRAGMANAGER_THREAD_PRIORITY_HIGH); + defragManager_resume(); if(arg0){ osRecvMesg(&sMesgQueue2, NULL, OS_MESG_BLOCK); } @@ -187,9 +187,9 @@ void viMgr_func_8024BFD8(s32 arg0){ }//L8024C178 D_80280724 = D_802808D8; D_802808D8 = 0; - defragManager_802408B0(); + defragManager_pause(); osSetThreadPri(NULL, 0x14); - defragManager_setPriority(0xA); + defragManager_setPriority(DEFRAGMANAGER_THREAD_PRIORITY); } void viMgr_func_8024C1B4(void){