From 0a22e5a87ecc1843d7a323772c6a8460733bcced Mon Sep 17 00:00:00 2001 From: Duncan Date: Tue, 2 Mar 2021 23:52:52 +0000 Subject: [PATCH] Match send_display_list and symbol renames (#12) --- asm/non_matchings/main/func_80000C40.s | 29 ------------------- asm/non_matchings/main/func_80000E00.s | 2 +- asm/non_matchings/main/func_80000F34.s | 2 +- asm/non_matchings/main/func_80001FAC.s | 8 +++--- asm/non_matchings/main/thread3_video.s | 4 +-- data/data_0DD0A0.s | 2 +- src/main.c | 40 +++++++++++++------------- undefined_syms.txt | 2 +- 8 files changed, 30 insertions(+), 59 deletions(-) delete mode 100644 asm/non_matchings/main/func_80000C40.s diff --git a/asm/non_matchings/main/func_80000C40.s b/asm/non_matchings/main/func_80000C40.s deleted file mode 100644 index 4b6f8d833..000000000 --- a/asm/non_matchings/main/func_80000C40.s +++ /dev/null @@ -1,29 +0,0 @@ -glabel func_80000C40 -/* 001840 80000C40 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 001844 80000C44 AFBF0014 */ sw $ra, 0x14($sp) -/* 001848 80000C48 0C033624 */ jal osWritebackDCacheAll -/* 00184C 80000C4C AFA40018 */ sw $a0, 0x18($sp) -/* 001850 80000C50 8FA70018 */ lw $a3, 0x18($sp) -/* 001854 80000C54 3C02800E */ lui $v0, %hi(sCurrentDisplaySPTask) # $v0, 0x800e -/* 001858 80000C58 2442C4B0 */ addiu $v0, %lo(sCurrentDisplaySPTask) # addiu $v0, $v0, -0x3b50 -/* 00185C 80000C5C ACE00048 */ sw $zero, 0x48($a3) -/* 001860 80000C60 8C4E0000 */ lw $t6, ($v0) -/* 001864 80000C64 3C048015 */ lui $a0, %hi(D_8014EFB8) # $a0, 0x8015 -/* 001868 80000C68 2484EFB8 */ addiu $a0, %lo(D_8014EFB8) # addiu $a0, $a0, -0x1048 -/* 00186C 80000C6C 15C00009 */ bnez $t6, .L80000C94 -/* 001870 80000C70 3C01800E */ lui $at, %hi(D_800DC4B8) # 0x800e -/* 001874 80000C74 AC470000 */ sw $a3, ($v0) -/* 001878 80000C78 3C01800E */ lui $at, %hi(D_800DC4B8) # $at, 0x800e -/* 00187C 80000C7C AC20C4B8 */ sw $zero, %lo(D_800DC4B8)($at) -/* 001880 80000C80 24050067 */ li $a1, 103 -/* 001884 80000C84 0C033630 */ jal osSendMesg -/* 001888 80000C88 00003025 */ move $a2, $zero -/* 00188C 80000C8C 10000003 */ b .L80000C9C -/* 001890 80000C90 8FBF0014 */ lw $ra, 0x14($sp) -.L80000C94: -/* 001894 80000C94 AC27C4B8 */ sw $a3, %lo(D_800DC4B8)($at) -/* 001898 80000C98 8FBF0014 */ lw $ra, 0x14($sp) -.L80000C9C: -/* 00189C 80000C9C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0018A0 80000CA0 03E00008 */ jr $ra -/* 0018A4 80000CA4 00000000 */ nop diff --git a/asm/non_matchings/main/func_80000E00.s b/asm/non_matchings/main/func_80000E00.s index d12f80a86..f12c5d1d4 100644 --- a/asm/non_matchings/main/func_80000E00.s +++ b/asm/non_matchings/main/func_80000E00.s @@ -29,7 +29,7 @@ glabel func_80000E00 /* 001A6C 80000E6C 8C84EF40 */ lw $a0, %lo(gGfxPool)($a0) /* 001A70 80000E70 3C010002 */ lui $at, (0x00028B20 >> 16) # lui $at, 2 /* 001A74 80000E74 34218B20 */ ori $at, (0x00028B20 & 0xFFFF) # ori $at, $at, 0x8b20 -/* 001A78 80000E78 0C000310 */ jal func_80000C40 +/* 001A78 80000E78 0C000310 */ jal send_display_list /* 001A7C 80000E7C 00812021 */ addu $a0, $a0, $at /* 001A80 80000E80 3C02800E */ lui $v0, %hi(D_800DC560) # $v0, 0x800e /* 001A84 80000E84 3C03800E */ lui $v1, %hi(D_800DC54C) # $v1, 0x800e diff --git a/asm/non_matchings/main/func_80000F34.s b/asm/non_matchings/main/func_80000F34.s index 886360baf..d0d845983 100644 --- a/asm/non_matchings/main/func_80000F34.s +++ b/asm/non_matchings/main/func_80000F34.s @@ -14,7 +14,7 @@ glabel func_80000F34 /* 001B64 80000F64 8C84EF40 */ lw $a0, %lo(gGfxPool)($a0) /* 001B68 80000F68 3C010002 */ lui $at, (0x00028B20 >> 16) # lui $at, 2 /* 001B6C 80000F6C 34218B20 */ ori $at, (0x00028B20 & 0xFFFF) # ori $at, $at, 0x8b20 -/* 001B70 80000F70 0C000310 */ jal func_80000C40 +/* 001B70 80000F70 0C000310 */ jal send_display_list /* 001B74 80000F74 00812021 */ addu $a0, $a0, $at /* 001B78 80000F78 0C000D54 */ jal profiler_log_thread5_time /* 001B7C 80000F7C 24040003 */ li $a0, 3 diff --git a/asm/non_matchings/main/func_80001FAC.s b/asm/non_matchings/main/func_80001FAC.s index 560feab9f..56e4de4dd 100644 --- a/asm/non_matchings/main/func_80001FAC.s +++ b/asm/non_matchings/main/func_80001FAC.s @@ -17,10 +17,10 @@ glabel func_80001FAC /* 002BE8 80001FE8 00003025 */ move $a2, $zero /* 002BEC 80001FEC 2410FFFF */ li $s0, -1 /* 002BF0 80001FF0 10500018 */ beq $v0, $s0, .L80002054 -/* 002BF4 80001FF4 3C16800E */ lui $s6, %hi(D_800DC4B8) # $s6, 0x800e +/* 002BF4 80001FF4 3C16800E */ lui $s6, %hi(sNextDisplaySPTask) # $s6, 0x800e /* 002BF8 80001FF8 3C13800E */ lui $s3, %hi(D_800DC4B4) # $s3, 0x800e /* 002BFC 80001FFC 2673C4B4 */ addiu $s3, %lo(D_800DC4B4) # addiu $s3, $s3, -0x3b4c -/* 002C00 80002000 26D6C4B8 */ addiu $s6, %lo(D_800DC4B8) # addiu $s6, $s6, -0x3b48 +/* 002C00 80002000 26D6C4B8 */ addiu $s6, %lo(sNextDisplaySPTask) # addiu $s6, $s6, -0x3b48 /* 002C04 80002004 24120002 */ li $s2, 2 /* 002C08 80002008 24110001 */ li $s1, 1 /* 002C0C 8000200C 8FAE0040 */ lw $t6, 0x40($sp) @@ -48,8 +48,8 @@ glabel func_80001FAC /* 002C58 80002058 2463C4AC */ addiu $v1, %lo(sCurrentAudioSPTask) # addiu $v1, $v1, -0x3b54 /* 002C5C 8000205C 8C680000 */ lw $t0, ($v1) /* 002C60 80002060 3C13800E */ lui $s3, %hi(D_800DC4B4) # $s3, 0x800e -/* 002C64 80002064 3C16800E */ lui $s6, %hi(D_800DC4B8) # $s6, 0x800e -/* 002C68 80002068 26D6C4B8 */ addiu $s6, %lo(D_800DC4B8) # addiu $s6, $s6, -0x3b48 +/* 002C64 80002064 3C16800E */ lui $s6, %hi(sNextDisplaySPTask) # $s6, 0x800e +/* 002C68 80002068 26D6C4B8 */ addiu $s6, %lo(sNextDisplaySPTask) # addiu $s6, $s6, -0x3b48 /* 002C6C 8000206C 15000006 */ bnez $t0, .L80002088 /* 002C70 80002070 2673C4B4 */ addiu $s3, %lo(D_800DC4B4) # addiu $s3, $s3, -0x3b4c /* 002C74 80002074 8E620000 */ lw $v0, ($s3) diff --git a/asm/non_matchings/main/thread3_video.s b/asm/non_matchings/main/thread3_video.s index 1b08a901b..352065775 100644 --- a/asm/non_matchings/main/thread3_video.s +++ b/asm/non_matchings/main/thread3_video.s @@ -76,8 +76,8 @@ glabel thread3_video /* 003108 80002508 00003825 */ move $a3, $zero /* 00310C 8000250C 0C0330D8 */ jal osStartThread /* 003110 80002510 02002025 */ move $a0, $s0 -/* 003114 80002514 3C108015 */ lui $s0, %hi(D_8014EFB8) # $s0, 0x8015 -/* 003118 80002518 2610EFB8 */ addiu $s0, %lo(D_8014EFB8) # addiu $s0, $s0, -0x1048 +/* 003114 80002514 3C108015 */ lui $s0, %hi(gIntrMesgQueue) # $s0, 0x8015 +/* 003118 80002518 2610EFB8 */ addiu $s0, %lo(gIntrMesgQueue) # addiu $s0, $s0, -0x1048 /* 00311C 8000251C 24150067 */ li $s5, 103 /* 003120 80002520 24140066 */ li $s4, 102 /* 003124 80002524 24130065 */ li $s3, 101 diff --git a/data/data_0DD0A0.s b/data/data_0DD0A0.s index 3634f199f..6e9958143 100644 --- a/data/data_0DD0A0.s +++ b/data/data_0DD0A0.s @@ -23,7 +23,7 @@ glabel sCurrentDisplaySPTask glabel D_800DC4B4 .word 0x00000000 -glabel D_800DC4B8 +glabel sNextDisplaySPTask .word 0x00000000 glabel D_800DC4BC diff --git a/src/main.c b/src/main.c index adb3cfb07..ff1706545 100644 --- a/src/main.c +++ b/src/main.c @@ -45,7 +45,7 @@ extern struct VblankHandler *gVblankHandler2; extern const f64 D_800EB640; extern struct VblankHandler sSoundVblankHandler; extern struct SPTask *D_8015029C; -extern OSMesgQueue D_8014EF58, D_8014EF88, D_8014EFD0, D_8014EFB8; +extern OSMesgQueue D_8014EF58, D_8014EF88, D_8014EFD0, gIntrMesgQueue; extern OSMesgQueue sSoundMesgQueue; extern OSMesg sSoundMesgBuf; extern OSMesg D_8014F004, D_8014F058, D_8014F018; @@ -86,6 +86,8 @@ extern u16 sController1Unplugged; extern u32 D_801502B4; extern u32 D_802F9F80; +extern struct SPTask* sNextDisplaySPTask; + // Declarations (in this file) void thread1_idle(void *arg0); void thread3_video(void *arg0); @@ -135,10 +137,10 @@ void thread1_idle(void *arg0) { void setup_mesg_queues(void) { osCreateMesgQueue(&D_8014EF58, &D_8014F004, 1); osCreateMesgQueue(&D_8014EFD0, &D_8014F058, 0x10); - osCreateMesgQueue(&D_8014EFB8, &D_8014F018, 0x10); - osViSetEvent(&D_8014EFB8, (OSMesg) 0x66, 1); - osSetEventMesg(4, &D_8014EFB8, (OSMesg) 0x64); - osSetEventMesg(9, &D_8014EFB8, (OSMesg) 0x65); + osCreateMesgQueue(&gIntrMesgQueue, &D_8014F018, 0x10); + osViSetEvent(&gIntrMesgQueue, (OSMesg) 0x66, 1); + osSetEventMesg(4, &gIntrMesgQueue, (OSMesg) 0x64); + osSetEventMesg(9, &gIntrMesgQueue, (OSMesg) 0x65); } void start_sptask(s32 taskType) { @@ -291,20 +293,18 @@ void func_80000C0C(OSMesg arg0) { } // similar to send_display_list from SM64 -#ifdef MIPS_TO_C -void func_80000C40(struct SPTask *spTask) { +void send_display_list(struct SPTask *spTask) { osWritebackDCacheAll(); - spTask->state = 0; + spTask->state = SPTASK_STATE_NOT_STARTED; if (sCurrentDisplaySPTask == NULL) { sCurrentDisplaySPTask = spTask; - D_800DC4B8 = NULL; - osSendMesg(&D_8014EFB8, 0x67, 0, spTask); + sNextDisplaySPTask = NULL; + osSendMesg(&gIntrMesgQueue, MESG_START_GFX_SPTASK, OS_MESG_NOBLOCK); + } + else{ + sNextDisplaySPTask = spTask; } - *(void *)0x800E0000 = spTask; } -#else -GLOBAL_ASM("asm/non_matchings/main/func_80000C40.s") -#endif void func_80000CA8(void) { func_802A7C08(); @@ -353,7 +353,7 @@ void *func_80000E00(void) { func_80000CA8(); func_80000D3C(0); func_80000CE8(); - func_80000C40(gGfxPool + 0x28B20); + send_display_list(gGfxPool + 0x28B20); D_800DC560 = (u16) (D_800DC560 + 1); D_800DC54C = (s32) (D_800DC54C + 1); return &D_800DC560; @@ -388,7 +388,7 @@ void *func_80000F34(void) { profiler_log_thread5_time(2); osRecvMesg(&D_8014EF88, &D_8014F098, 1); - func_80000C40(gGfxPool + 0x28B20); + send_display_list(gGfxPool + 0x28B20); profiler_log_thread5_time(3); osRecvMesg(&D_8014EF70, &D_8014F098, 1); osViSwapBuffer(((D_800DC55C * 4) + 0x80150000)->unk2A8 | 0x80000000); @@ -912,7 +912,7 @@ loop_2: D_800DC4B4 = sp40; } } else { - D_800DC4B8 = sp40; + sNextDisplaySPTask = sp40; } temp_ret_2 = osRecvMesg(&D_8014EFD0, &sp40, 0); phi_return = temp_ret_2; @@ -930,11 +930,11 @@ loop_2: } } if (sCurrentDisplaySPTask == 0) { - temp_v0_2 = D_800DC4B8; + temp_v0_2 = sNextDisplaySPTask; phi_return = temp_v0_2; if (temp_v0_2 != 0) { sCurrentDisplaySPTask = temp_v0_2; - D_800DC4B8 = 0; + sNextDisplaySPTask = 0; phi_return = temp_v0_2; } } @@ -1096,7 +1096,7 @@ loop_1: // manual work while (1) { OSMesg msg; - osRecvMesg(&D_8014EFB8, &msg, OS_MESG_BLOCK); + osRecvMesg(&gIntrMesgQueue, &msg, OS_MESG_BLOCK); switch (msg) { case MESG_SP_COMPLETE: func_800022DC(); diff --git a/undefined_syms.txt b/undefined_syms.txt index 1f5449230..43cafa770 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -678,7 +678,7 @@ sSoundVblankHandler = 0x8014EF50; D_8014EF58 = 0x8014EF58; D_8014EF70 = 0x8014EF70; D_8014EF88 = 0x8014EF88; -D_8014EFB8 = 0x8014EFB8; +gIntrMesgQueue = 0x8014EFB8; D_8014EFD0 = 0x8014EFD0; sSoundMesgQueue = 0x8014EFE8; sSoundMesgBuf = 0x8014F000;