From 70500acb81d66623f750d7e5dde7c7a32a36c01b Mon Sep 17 00:00:00 2001 From: MegaMech Date: Fri, 7 Oct 2022 19:00:29 -0700 Subject: [PATCH] Documented OS related text --- include/macros.h | 12 ++++++++ include/rsp.h | 8 +++--- src/main.c | 33 ++++++++++++---------- src/rsp.c | 72 ++++++++++++++++++++++++------------------------ 4 files changed, 71 insertions(+), 54 deletions(-) create mode 100644 include/macros.h diff --git a/include/macros.h b/include/macros.h new file mode 100644 index 0000000..b00cc7a --- /dev/null +++ b/include/macros.h @@ -0,0 +1,12 @@ +#ifndef _MACROS_H_ +#define _MACROS_H_ + + +#ifndef __sgi +#define GLOBAL_ASM(...) +#endif + +#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) + + +#endif diff --git a/include/rsp.h b/include/rsp.h index a1d94f6..a72b0ff 100644 --- a/include/rsp.h +++ b/include/rsp.h @@ -5,8 +5,8 @@ struct UnkStruct800006C4_2 { char unk0; char filler1[0x1B]; s32 unk1C; - void* unk20; - s32 unk24; + void* vaddr; + s32 size; s32 unk28; }; @@ -55,8 +55,8 @@ void *func_80000AB0(struct UnkStruct80000A80* arg0); void *func_80000AE0(struct UnkStruct80000A80* arg0); s32 func_80000B10(struct UnkStruct80000A80* arg0); void *func_80000B74(struct UnkStruct80000A80* arg0); -void func_80000BA4(void *arg); -void func_80000D54(void); +void thread20_rsp(void *arg); +void rsp_init(void); void func_80000DF4(void); void func_80000E2C(void* arg0, s32 arg1); diff --git a/src/main.c b/src/main.c index 1e909b7..487afa5 100644 --- a/src/main.c +++ b/src/main.c @@ -1,39 +1,44 @@ #include -extern void func_80000460(); // thread 1 function +extern void thread1_idle(); // thread 1 function extern void func_8002B330(); // thread 6 function // entry .bss u8 D_8007ED80[0xF180-0xED80]; // unknown, start of .bss -OSThread D_8007F180; +OSThread gIdleThread; u8 unk_8007F330[0x400]; -OSThread D_8007F730; +OSThread pThreads; u8 unk_8007F8E0[0x720]; u8 D_80080000[0x18E0]; u8 D_800818E0[0x18]; u8 D_800818F8[0x8]; -void func_80000460(s32 arg0) { - osCreateViManager(0xFE); +/** + * Initialize hardware, start main thread, then idle. + */ +void thread1_idle(void *arg0) { + osCreateViManager(OS_PRIORITY_VIMGR); func_80001474(0, 1); - osViBlack(1); + osViBlack(TRUE); func_80008F7C(); - func_80000D54(); + rsp_init(); func_800052B4(); func_8000D564(); func_800019C8(); func_800057C0(); - osCreateThread(&D_8007F730, 6, &func_8002B330, 0, &D_800818E0, 0x14); - osStartThread(&D_8007F730); - osSetThreadPri(0, 0); - while(1); + osCreateThread(&pThreads, 6, &func_8002B330, 0, &D_800818E0, 20); + osStartThread(&pThreads); + osSetThreadPri(NULL, 0); + + // Halt + while(TRUE); } -void main(void) { +void main_func(void) { osInitialize(); osCartRomInit(); func_8000B7D0(0); func_80002F58(); - osCreateThread(&D_8007F180, 1, &func_80000460, 0, &D_8007F730, 0x64); - osStartThread(&D_8007F180); + osCreateThread(&gIdleThread, 1, &thread1_idle, 0, &pThreads, 100); + osStartThread(&gIdleThread); } diff --git a/src/rsp.c b/src/rsp.c index 0c92a23..83a7a1f 100644 --- a/src/rsp.c +++ b/src/rsp.c @@ -10,9 +10,9 @@ #define SRAM_pageSize 0xd #define SRAM_relDuration 0x2 -OSThread D_80081900; +OSThread gRspThread; u8 unk_80081AB0[0x2000]; -u8 D_80083AB0[0x9C]; +u8 gRspThreadStack[0x9C]; OSMesg D_80083B4C; u8 unk_80081B50[0x3C]; OSMesg D_80083B8C; @@ -62,10 +62,10 @@ s32 func_800006C4(struct UnkStruct800006C4_2* arg0) { unkStruct.sp22 = 0; unkStruct.sp24 = &D_80083BD0.queue2; - unkStruct.sp28 = arg0->unk20; + unkStruct.sp28 = arg0->vaddr; unkStruct.sp2C = arg0->unk1C; - unkStruct.sp30 = arg0->unk24; - osInvalDCache(arg0->unk20, arg0->unk24); + unkStruct.sp30 = arg0->size; + osInvalDCache(arg0->vaddr, arg0->size); func_8005E0F0(unk1C, &unkStruct.sp20, 0); osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); return 0; @@ -77,12 +77,12 @@ s32 func_8000074C(struct UnkStruct800006C4_2* arg0) { unkStruct.sp22 = 0; unkStruct.sp24 = &D_80083BD0.queue2; - unkStruct.sp28 = arg0->unk20; + unkStruct.sp28 = arg0->vaddr; unkStruct.sp2C = arg0->unk1C; - unkStruct.sp30 = arg0->unk24; - osWritebackDCache(arg0->unk20, arg0->unk24); + unkStruct.sp30 = arg0->size; + osWritebackDCache(arg0->vaddr, arg0->size); func_8005E0F0(unk1C, &unkStruct.sp20, 1); - osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); + osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, OS_MESG_BLOCK); return 0; } @@ -97,12 +97,12 @@ s32 func_800007D4(struct UnkStruct800006C4_2* arg0, s32 arg1) { unkStruct.sp22 = 0; unkStruct.sp24 = &D_80083BD0.queue2; - unkStruct.sp28 = arg0->unk20; + unkStruct.sp28 = arg0->vaddr; unkStruct.sp2C = arg0->unk1C; - unkStruct.sp30 = arg0->unk24; - osInvalDCache(arg0->unk20, arg0->unk24); + unkStruct.sp30 = arg0->size; + osInvalDCache(arg0->vaddr, arg0->size); func_8005E0F0(handle, &unkStruct.sp20, 0); - osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); + osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, OS_MESG_BLOCK); return 0; } @@ -113,12 +113,12 @@ s32 func_8000087C(struct UnkStruct800006C4_2* arg0) { handle = osCartRomInit(); unkStruct.sp22 = 0; unkStruct.sp24 = &D_80083BD0.queue2; - unkStruct.sp28 = arg0->unk20; + unkStruct.sp28 = arg0->vaddr; unkStruct.sp2C = arg0->unk1C; - unkStruct.sp30 = arg0->unk24; - osWritebackDCache(arg0->unk20, arg0->unk24); + unkStruct.sp30 = arg0->size; + osWritebackDCache(arg0->vaddr, arg0->size); func_8005E0F0(handle, &unkStruct.sp20, 1); - osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); + osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, OS_MESG_BLOCK); return 0; } @@ -126,9 +126,9 @@ s32 func_80000904(struct UnkStruct800006C4_2* arg0) { s32 arr[5]; s32 sp20; - osInvalDCache(arg0->unk20, 0x80); - func_8000D0B4(&sp20, 0, arg0->unk1C, arg0->unk20, 1, &D_80083BD0.queue2); - osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); + osInvalDCache(arg0->vaddr, 0x80); + func_8000D0B4(&sp20, 0, arg0->unk1C, arg0->vaddr, 1, &D_80083BD0.queue2); + osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, OS_MESG_BLOCK); return 0; } @@ -137,25 +137,25 @@ s32 func_80000974(struct UnkStruct800006C4_2* arg0) { s32 sp20_4; s32 sp20_5; - func_8000CEE4(&sp20_4, 0, arg0->unk20, &D_80083BD0.queue2); - osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, 1); + func_8000CEE4(&sp20_4, 0, arg0->vaddr, &D_80083BD0.queue2); + osRecvMesg(&D_80083BD0.queue2, &D_80083BD0.unk0, OS_MESG_BLOCK); return 0; } void* func_800009C8(void) { - void* sp1C; + void* msg; - osRecvMesg(&D_80083BD0.queue2, &sp1C, 1); - return sp1C; + osRecvMesg(&D_80083BD0.queue2, &msg, OS_MESG_BLOCK); + return msg; } void *func_800009F8(struct UnkStruct800006C4_2* arg0) { - func_80050FC0(arg0, 0, arg0->unk1C, arg0->unk20, arg0->unk24, &D_80083BD0.queue2); + func_80050FC0(arg0, 0, arg0->unk1C, arg0->vaddr, arg0->size, &D_80083BD0.queue2); return func_800009C8(); } void *func_80000A3C(struct UnkStruct800006C4_2* arg0) { - func_80050FC0(arg0, 1, arg0->unk1C, arg0->unk20, arg0->unk24, &D_80083BD0.queue2); + func_80050FC0(arg0, 1, arg0->unk1C, arg0->vaddr, arg0->size, &D_80083BD0.queue2); return func_800009C8(); } @@ -190,14 +190,14 @@ void *func_80000B74(struct UnkStruct80000A80* arg0) { return func_800009C8(); } -void func_80000BA4(void *arg) { +void thread20_rsp(void *arg) { struct UnkStruct800006C4_2* sp2C; void* var_v0; func_800005C0(); func_8000C8F8(); while(1) { - osRecvMesg(&D_80083BD0.queue1, (void*)&sp2C, 1); + osRecvMesg(&D_80083BD0.queue1, (void*)&sp2C, OS_MESG_BLOCK); switch (sp2C->unk0) { case 0xF0: var_v0 = func_800007D4(sp2C, 0); @@ -254,12 +254,12 @@ void func_80000BA4(void *arg) { } } -void func_80000D54(void) { +void rsp_init(void) { osCreateMesgQueue(&D_80083BD0.queue2, &D_80083BCC, 1); - osCreateMesgQueue(&D_80083BD0.queue1, &D_80083B8C, 0x10); - func_8005B6A0(0x96, &D_80083BD0.unk4, &D_80083AB0[0x1C], 0x20); - osCreateThread(&D_80081900, 0x14, func_80000BA4, NULL, D_80083AB0, 0x5A); - osStartThread(&D_80081900); + osCreateMesgQueue(&D_80083BD0.queue1, &D_80083B8C, 16); + func_8005B6A0(0x96, &D_80083BD0.unk4, &gRspThreadStack[0x1C], 0x20); + osCreateThread(&gRspThread, 20, thread20_rsp, NULL, gRspThreadStack, 90); + osStartThread(&gRspThread); } void func_80000DF4(void) { @@ -271,8 +271,8 @@ void func_80000DF4(void) { void func_80000E2C(void* arg0, s32 arg1) { if (arg1 == 1) { - osJamMesg(&D_80083BD0.queue1, arg0, 1); + osJamMesg(&D_80083BD0.queue1, arg0, OS_MESG_BLOCK); return; } - osSendMesg(&D_80083BD0.queue1, arg0, 1); + osSendMesg(&D_80083BD0.queue1, arg0, OS_MESG_BLOCK); }