Match func_800006E8 (#13)

* Match func_800006E8 in main.c, label gGfxSPTask.
This commit is contained in:
Duncan
2021-03-03 08:42:54 +00:00
committed by GitHub
parent a92452afe1
commit a943679f65
5 changed files with 33 additions and 154 deletions
-115
View File
@@ -1,115 +0,0 @@
glabel func_800006E8
/* 0012E8 800006E8 3C028015 */ lui $v0, %hi(D_8015029C) # $v0, 0x8015
/* 0012EC 800006EC 2442029C */ addiu $v0, %lo(D_8015029C) # addiu $v0, $v0, 0x29c
/* 0012F0 800006F0 8C4F0000 */ lw $t7, ($v0)
/* 0012F4 800006F4 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0012F8 800006F8 3C0E8015 */ lui $t6, %hi(D_8014EF88) # $t6, 0x8015
/* 0012FC 800006FC AFBF0014 */ sw $ra, 0x14($sp)
/* 001300 80000700 25CEEF88 */ addiu $t6, %lo(D_8014EF88) # addiu $t6, $t6, -0x1078
/* 001304 80000704 ADEE0040 */ sw $t6, 0x40($t7)
/* 001308 80000708 8C590000 */ lw $t9, ($v0)
/* 00130C 8000070C 24180002 */ li $t8, 2
/* 001310 80000710 24080001 */ li $t0, 1
/* 001314 80000714 AF380044 */ sw $t8, 0x44($t9)
/* 001318 80000718 8C490000 */ lw $t1, ($v0)
/* 00131C 8000071C 24040002 */ li $a0, 2
/* 001320 80000720 3C03800E */ lui $v1, %hi(rspbootTextStart) # $v1, 0x800e
/* 001324 80000724 AD280000 */ sw $t0, ($t1)
/* 001328 80000728 8C4A0000 */ lw $t2, ($v0)
/* 00132C 8000072C 24638F70 */ addiu $v1, %lo(rspbootTextStart) # addiu $v1, $v1, -0x7090
/* 001330 80000730 3C0C800E */ lui $t4, %hi(rspbootTextEnd) # $t4, 0x800e
/* 001334 80000734 AD440004 */ sw $a0, 4($t2)
/* 001338 80000738 8C4B0000 */ lw $t3, ($v0)
/* 00133C 8000073C 258C9040 */ addiu $t4, %lo(rspbootTextEnd) # addiu $t4, $t4, -0x6fc0
/* 001340 80000740 01836823 */ subu $t5, $t4, $v1
/* 001344 80000744 AD630008 */ sw $v1, 8($t3)
/* 001348 80000748 8C4E0000 */ lw $t6, ($v0)
/* 00134C 8000074C 3C0F800E */ lui $t7, %hi(D_800DC50C) # $t7, 0x800e
/* 001350 80000750 24010004 */ li $at, 4
/* 001354 80000754 ADCD000C */ sw $t5, 0xc($t6)
/* 001358 80000758 8DEFC50C */ lw $t7, %lo(D_800DC50C)($t7)
/* 00135C 8000075C 3C18800E */ lui $t8, %hi(gPlayerCountSelection1) # $t8, 0x800e
/* 001360 80000760 3C19800E */ lui $t9, %hi(gspF3DEXTextStart) # $t9, 0x800e
/* 001364 80000764 55E10006 */ bnel $t7, $at, .L80000780
/* 001368 80000768 8C480000 */ lw $t0, ($v0)
/* 00136C 8000076C 8F18C538 */ lw $t8, %lo(gPlayerCountSelection1)($t8)
/* 001370 80000770 24010001 */ li $at, 1
/* 001374 80000774 5701000A */ bnel $t8, $at, .L800007A0
/* 001378 80000778 8C4C0000 */ lw $t4, ($v0)
/* 00137C 8000077C 8C480000 */ lw $t0, ($v0)
.L80000780:
/* 001380 80000780 27399040 */ addiu $t9, %lo(gspF3DEXTextStart) # addiu $t9, $t9, -0x6fc0
/* 001384 80000784 3C09800F */ lui $t1, %hi(gspF3DEXDataStart) # $t1, 0x800f
/* 001388 80000788 AD190010 */ sw $t9, 0x10($t0)
/* 00138C 8000078C 8C4A0000 */ lw $t2, ($v0)
/* 001390 80000790 25293D00 */ addiu $t1, %lo(gspF3DEXDataStart) # addiu $t1, $t1, 0x3d00
/* 001394 80000794 10000009 */ b .L800007BC
/* 001398 80000798 AD490018 */ sw $t1, 0x18($t2)
/* 00139C 8000079C 8C4C0000 */ lw $t4, ($v0)
.L800007A0:
/* 0013A0 800007A0 3C0B800E */ lui $t3, %hi(gspF3DLXTextStart) # $t3, 0x800e
/* 0013A4 800007A4 256BA420 */ addiu $t3, %lo(gspF3DLXTextStart) # addiu $t3, $t3, -0x5be0
/* 0013A8 800007A8 AD8B0010 */ sw $t3, 0x10($t4)
/* 0013AC 800007AC 8C4E0000 */ lw $t6, ($v0)
/* 0013B0 800007B0 3C0D800F */ lui $t5, %hi(gspF3DLXDataStart) # $t5, 0x800f
/* 0013B4 800007B4 25AD4500 */ addiu $t5, %lo(gspF3DLXDataStart) # addiu $t5, $t5, 0x4500
/* 0013B8 800007B8 ADCD0018 */ sw $t5, 0x18($t6)
.L800007BC:
/* 0013BC 800007BC 8C4F0000 */ lw $t7, ($v0)
/* 0013C0 800007C0 24191000 */ li $t9, 4096
/* 0013C4 800007C4 24090800 */ li $t1, 2048
/* 0013C8 800007C8 ADE00004 */ sw $zero, 4($t7)
/* 0013CC 800007CC 8C580000 */ lw $t8, ($v0)
/* 0013D0 800007D0 3C0B8016 */ lui $t3, %hi(gGfxSPTaskStack) # $t3, 0x8016
/* 0013D4 800007D4 256BEFE0 */ addiu $t3, %lo(gGfxSPTaskStack) # addiu $t3, $t3, -0x1020
/* 0013D8 800007D8 AF040004 */ sw $a0, 4($t8)
/* 0013DC 800007DC 8C480000 */ lw $t0, ($v0)
/* 0013E0 800007E0 240D0400 */ li $t5, 1024
/* 0013E4 800007E4 3C0F8039 */ lui $t7, %hi(gGfxSPTaskOutputBuffer) # $t7, 0x8039
/* 0013E8 800007E8 AD190014 */ sw $t9, 0x14($t0)
/* 0013EC 800007EC 8C4A0000 */ lw $t2, ($v0)
/* 0013F0 800007F0 25EFFF80 */ addiu $t7, %lo(gGfxSPTaskOutputBuffer) # addiu $t7, $t7, -0x80
/* 0013F4 800007F4 3C19803B */ lui $t9, %hi(gGfxSPTaskOutputBufferSize) # $t9, 0x803b
/* 0013F8 800007F8 AD49001C */ sw $t1, 0x1c($t2)
/* 0013FC 800007FC 8C4C0000 */ lw $t4, ($v0)
/* 001400 80000800 3C038015 */ lui $v1, %hi(gGfxPool) # $v1, 0x8015
/* 001404 80000804 2739F780 */ addiu $t9, %lo(gGfxSPTaskOutputBufferSize) # addiu $t9, $t9, -0x880
/* 001408 80000808 AD8B0020 */ sw $t3, 0x20($t4)
/* 00140C 8000080C 8C4E0000 */ lw $t6, ($v0)
/* 001410 80000810 2463EF40 */ addiu $v1, %lo(gGfxPool) # addiu $v1, $v1, -0x10c0
/* 001414 80000814 3C010001 */ lui $at, (0x0001A0C0 >> 16) # lui $at, 1
/* 001418 80000818 ADCD0024 */ sw $t5, 0x24($t6)
/* 00141C 8000081C 8C580000 */ lw $t8, ($v0)
/* 001420 80000820 3421A0C0 */ ori $at, (0x0001A0C0 & 0xFFFF) # ori $at, $at, 0xa0c0
/* 001424 80000824 3C0C8015 */ lui $t4, %hi(gDisplayListHead) # $t4, 0x8015
/* 001428 80000828 AF0F0028 */ sw $t7, 0x28($t8)
/* 00142C 8000082C 8C480000 */ lw $t0, ($v0)
/* 001430 80000830 AD19002C */ sw $t9, 0x2c($t0)
/* 001434 80000834 8C690000 */ lw $t1, ($v1)
/* 001438 80000838 8C4B0000 */ lw $t3, ($v0)
/* 00143C 8000083C 01215021 */ addu $t2, $t1, $at
/* 001440 80000840 AD6A0030 */ sw $t2, 0x30($t3)
/* 001444 80000844 8C6D0000 */ lw $t5, ($v1)
/* 001448 80000848 8D8C0298 */ lw $t4, %lo(gDisplayListHead)($t4)
/* 00144C 8000084C 3C01FFFE */ lui $at, (0xFFFE5F40 >> 16) # lui $at, 0xfffe
/* 001450 80000850 34215F40 */ ori $at, (0xFFFE5F40 & 0xFFFF) # ori $at, $at, 0x5f40
/* 001454 80000854 018D7023 */ subu $t6, $t4, $t5
/* 001458 80000858 01C17821 */ addu $t7, $t6, $at
/* 00145C 8000085C 8C480000 */ lw $t0, ($v0)
/* 001460 80000860 000FC0C3 */ sra $t8, $t7, 3
/* 001464 80000864 0018C8C0 */ sll $t9, $t8, 3
/* 001468 80000868 0C023085 */ jal func_8008C214
/* 00146C 8000086C AD190034 */ sw $t9, 0x34($t0)
/* 001470 80000870 3C028015 */ lui $v0, %hi(D_8015029C) # $v0, 0x8015
/* 001474 80000874 2442029C */ addiu $v0, %lo(D_8015029C) # addiu $v0, $v0, 0x29c
/* 001478 80000878 8C4A0000 */ lw $t2, ($v0)
/* 00147C 8000087C 3C098016 */ lui $t1, %hi(gGfxSPTaskYieldBuffer) # $t1, 0x8016
/* 001480 80000880 2529DEE0 */ addiu $t1, %lo(gGfxSPTaskYieldBuffer) # addiu $t1, $t1, -0x2120
/* 001484 80000884 AD490038 */ sw $t1, 0x38($t2)
/* 001488 80000888 8C4C0000 */ lw $t4, ($v0)
/* 00148C 8000088C 240B0D00 */ li $t3, 3328
/* 001490 80000890 AD8B003C */ sw $t3, 0x3c($t4)
/* 001494 80000894 8FBF0014 */ lw $ra, 0x14($sp)
/* 001498 80000898 27BD0018 */ addiu $sp, $sp, 0x18
/* 00149C 8000089C 03E00008 */ jr $ra
/* 0014A0 800008A0 00000000 */ nop
+2 -2
View File
@@ -13,8 +13,8 @@ glabel func_80000E00
/* 001A2C 80000E2C 3C010002 */ lui $at, (0x00028B20 >> 16) # lui $at, 2
/* 001A30 80000E30 34218B20 */ ori $at, (0x00028B20 & 0xFFFF) # ori $at, $at, 0x8b20
/* 001A34 80000E34 00417821 */ addu $t7, $v0, $at
/* 001A38 80000E38 3C018015 */ lui $at, %hi(D_8015029C) # $at, 0x8015
/* 001A3C 80000E3C AC2F029C */ sw $t7, %lo(D_8015029C)($at)
/* 001A38 80000E38 3C018015 */ lui $at, %hi(gGfxSPTask) # $at, 0x8015
/* 001A3C 80000E3C AC2F029C */ sw $t7, %lo(gGfxSPTask)($at)
/* 001A40 80000E40 3C010001 */ lui $at, (0x0001A0C0 >> 16) # lui $at, 1
/* 001A44 80000E44 3421A0C0 */ ori $at, (0x0001A0C0 & 0xFFFF) # ori $at, $at, 0xa0c0
/* 001A48 80000E48 0041C021 */ addu $t8, $v0, $at
+2 -2
View File
@@ -27,7 +27,7 @@ glabel func_80000EB4
/* 001B18 80000F18 8FBF0014 */ lw $ra, 0x14($sp)
/* 001B1C 80000F1C 34218B20 */ ori $at, (0x00028B20 & 0xFFFF) # ori $at, $at, 0x8b20
/* 001B20 80000F20 00415021 */ addu $t2, $v0, $at
/* 001B24 80000F24 3C018015 */ lui $at, %hi(D_8015029C) # $at, 0x8015
/* 001B28 80000F28 AC2A029C */ sw $t2, %lo(D_8015029C)($at)
/* 001B24 80000F24 3C018015 */ lui $at, %hi(gGfxSPTask) # $at, 0x8015
/* 001B28 80000F28 AC2A029C */ sw $t2, %lo(gGfxSPTask)($at)
/* 001B2C 80000F2C 03E00008 */ jr $ra
/* 001B30 80000F30 27BD0018 */ addiu $sp, $sp, 0x18
+28 -34
View File
@@ -8,7 +8,7 @@
#include "segment_symbols.h"
// Declarations (not in this file)
void func_8008C214(UNUSED int);
void func_8008C214(void);
void func_80091B78(void);
void func_802A4D18(void);
void func_802A7C08(void);
@@ -44,7 +44,7 @@ extern struct VblankHandler *gVblankHandler1;
extern struct VblankHandler *gVblankHandler2;
extern const f64 D_800EB640;
extern struct VblankHandler sSoundVblankHandler;
extern struct SPTask *D_8015029C;
extern struct SPTask *gGfxSPTask;
extern OSMesgQueue D_8014EF58, D_8014EF88, D_8014EFD0, gIntrMesgQueue;
extern OSMesgQueue sSoundMesgQueue;
extern OSMesg sSoundMesgBuf;
@@ -156,40 +156,34 @@ void start_sptask(s32 taskType) {
// Most similar to create_task_structure from SM64, with additional provisions
// to load both F3DEX and F3DLX, depending on the number of players
#ifdef NON_MATCHING
void func_800006E8(void) {
D_8015029C->msgqueue = &D_8014EF88;
D_8015029C->msg = (OSMesg) 2;
D_8015029C->task.t.type = M_GFXTASK;
D_8015029C->task.t.flags = 2;
D_8015029C->task.t.ucode_boot = rspbootTextStart;
D_8015029C->task.t.ucode_boot_size = ((u8 *) rspbootTextEnd - (u8 *) rspbootTextStart);
if (D_800DC50C == 4 && gPlayerCountSelection1 == 1) {
D_8015029C->task.t.ucode = gspF3DEXTextStart;
D_8015029C->task.t.ucode_data = gspF3DEXDataStart;
gGfxSPTask->msgqueue = &D_8014EF88;
gGfxSPTask->msg = (OSMesg) 2;
gGfxSPTask->task.t.type = M_GFXTASK;
gGfxSPTask->task.t.flags = (1 << 1);
gGfxSPTask->task.t.ucode_boot = rspbootTextStart;
gGfxSPTask->task.t.ucode_boot_size = ((u8 *) rspbootTextEnd - (u8 *) rspbootTextStart);
if (D_800DC50C != 4 || gPlayerCountSelection1 - 1 == 0) {
gGfxSPTask->task.t.ucode = gspF3DEXTextStart;
gGfxSPTask->task.t.ucode_data = gspF3DEXDataStart;
} else {
D_8015029C->task.t.ucode = gspF3DLXTextStart;
D_8015029C->task.t.ucode_data = gspF3DLXDataStart;
gGfxSPTask->task.t.ucode = gspF3DLXTextStart;
gGfxSPTask->task.t.ucode_data = gspF3DLXDataStart;
}
D_8015029C->task.t.flags = 0;
D_8015029C->task.t.flags = 2;
D_8015029C->task.t.ucode_size = 0x1000;
D_8015029C->task.t.ucode_data_size = 0x800;
D_8015029C->task.t.dram_stack = (u64 *) gGfxSPTaskStack;
D_8015029C->task.t.dram_stack_size = 0x400;
D_8015029C->task.t.output_buff = (u64 *) gGfxSPTaskOutputBuffer;
D_8015029C->task.t.output_buff_size = (u64 *) gGfxSPTaskOutputBufferSize;
D_8015029C->task.t.data_ptr = (u64 *) (gGfxPool + 0x1A0C0);
D_8015029C->task.t.data_size = (gDisplayListHead - gGfxPool->buffer) * sizeof(Gfx);
func_8008C214(2);
D_8015029C->task.t.yield_data_ptr = (u64 *) gGfxSPTaskYieldBuffer;
D_8015029C->task.t.yield_data_size = 0xD00;
gGfxSPTask->task.t.flags = 0;
gGfxSPTask->task.t.flags = (1 << 1);
gGfxSPTask->task.t.ucode_size = SP_UCODE_SIZE;
gGfxSPTask->task.t.ucode_data_size = SP_UCODE_DATA_SIZE;
gGfxSPTask->task.t.dram_stack = (u64 *) &gGfxSPTaskStack;
gGfxSPTask->task.t.dram_stack_size = SP_DRAM_STACK_SIZE8;
gGfxSPTask->task.t.output_buff = (u64 *) &gGfxSPTaskOutputBuffer;
gGfxSPTask->task.t.output_buff_size = (u64 *) &gGfxSPTaskOutputBufferSize;
gGfxSPTask->task.t.data_ptr = (u64 *) &gGfxPool->buffer[0x3418];
gGfxSPTask->task.t.data_size = (gDisplayListHead - &gGfxPool->buffer[0x3418]) * sizeof(Gfx);
func_8008C214();
gGfxSPTask->task.t.yield_data_ptr = (u64 *) &gGfxSPTaskYieldBuffer;
gGfxSPTask->task.t.yield_data_size = 0xD00; /* Not equal to OS_YIELD_DATA_SIZE */
}
#else
GLOBAL_ASM("asm/non_matchings/main/func_800006E8.s")
#endif
void init_controllers(void) {
osCreateMesgQueue(&gSIEventMesgQueue, &gSIEventMesgBuf, ARRAY_COUNT(gSIEventMesgBuf));
@@ -348,7 +342,7 @@ GLOBAL_ASM("asm/non_matchings/main/func_80000D3C.s")
void *func_80000E00(void) {
gGfxPool = 0x800FD860;
set_segment_base_addr(1, 0x800FD860);
D_8015029C = (s32) (gGfxPool + 0x28B20);
gGfxSPTask = (s32) (gGfxPool + 0x28B20);
gDisplayListHead = (s32) (gGfxPool + 0x1A0C0);
func_80000CA8();
func_80000D3C(0);
@@ -372,7 +366,7 @@ s32 func_80000EB4(void) {
gGfxPool = temp_a1;
set_segment_base_addr(1, temp_a1);
gDisplayListHead = (s32) (gGfxPool + 0x1A0C0);
D_8015029C = (s32) (gGfxPool + 0x28B20);
gGfxSPTask = (s32) (gGfxPool + 0x28B20);
return gGfxPool;
}
#else
+1 -1
View File
@@ -716,7 +716,7 @@ gSegmentTable = 0x80150258;
D_8015026C = 0x8015026C;
gDisplayListHead = 0x80150298;
gDisplayListHead = 0x80150298;
D_8015029C = 0x8015029C;
gGfxSPTask = 0x8015029C;
D_801502A0 = 0x801502A0;
D_801502A8 = 0x801502A8;
D_801502B4 = 0x801502B4;