Match load_course in memory.c (#269)

* Matched load_course in memory.c
This commit is contained in:
VDavid003 2022-11-06 16:52:10 +01:00 committed by GitHub
parent e9415164bb
commit 12415a9e8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 144 deletions

View File

@ -1,91 +0,0 @@
glabel load_course
/* 113F28 802AA918 00047080 */ sll $t6, $a0, 2
/* 113F2C 802AA91C 01C47023 */ subu $t6, $t6, $a0
/* 113F30 802AA920 3C0F802C */ lui $t7, %hi(gCourseTable) # $t7, 0x802c
/* 113F34 802AA924 25EF8D80 */ addiu $t7, %lo(gCourseTable) # addiu $t7, $t7, -0x7280
/* 113F38 802AA928 000E7100 */ sll $t6, $t6, 4
/* 113F3C 802AA92C 01CF1021 */ addu $v0, $t6, $t7
/* 113F40 802AA930 27BDFFA0 */ addiu $sp, $sp, -0x60
/* 113F44 802AA934 3C03800E */ lui $v1, %hi(gGamestate) # $v1, 0x800e
/* 113F48 802AA938 8C63C50C */ lw $v1, %lo(gGamestate)($v1)
/* 113F4C 802AA93C 8C580000 */ lw $t8, ($v0)
/* 113F50 802AA940 8C590004 */ lw $t9, 4($v0)
/* 113F54 802AA944 8C480008 */ lw $t0, 8($v0)
/* 113F58 802AA948 8C49000C */ lw $t1, 0xc($v0)
/* 113F5C 802AA94C 8C4A0028 */ lw $t2, 0x28($v0)
/* 113F60 802AA950 8C4B0018 */ lw $t3, 0x18($v0)
/* 113F64 802AA954 8C4C0020 */ lw $t4, 0x20($v0)
/* 113F68 802AA958 8C4D001C */ lw $t5, 0x1c($v0)
/* 113F6C 802AA95C 8C4E0024 */ lw $t6, 0x24($v0)
/* 113F70 802AA960 944F002C */ lhu $t7, 0x2c($v0)
/* 113F74 802AA964 24010005 */ li $at, 5
/* 113F78 802AA968 AFBF0014 */ sw $ra, 0x14($sp)
/* 113F7C 802AA96C 8C460010 */ lw $a2, 0x10($v0)
/* 113F80 802AA970 8C450014 */ lw $a1, 0x14($v0)
/* 113F84 802AA974 AFB80048 */ sw $t8, 0x48($sp)
/* 113F88 802AA978 AFB90044 */ sw $t9, 0x44($sp)
/* 113F8C 802AA97C AFA80040 */ sw $t0, 0x40($sp)
/* 113F90 802AA980 AFA9003C */ sw $t1, 0x3c($sp)
/* 113F94 802AA984 AFAA0030 */ sw $t2, 0x30($sp)
/* 113F98 802AA988 AFAB002C */ sw $t3, 0x2c($sp)
/* 113F9C 802AA98C AFAC0028 */ sw $t4, 0x28($sp)
/* 113FA0 802AA990 AFAD0024 */ sw $t5, 0x24($sp)
/* 113FA4 802AA994 AFAE0020 */ sw $t6, 0x20($sp)
/* 113FA8 802AA998 10610004 */ beq $v1, $at, .L802AA9AC
/* 113FAC 802AA99C AFAF001C */ sw $t7, 0x1c($sp)
/* 113FB0 802AA9A0 24010009 */ li $at, 9
/* 113FB4 802AA9A4 14610005 */ bne $v1, $at, .L802AA9BC
/* 113FB8 802AA9A8 3C198028 */ lui $t9, (0x8028DF00 >> 16) # lui $t9, 0x8028
.L802AA9AC:
/* 113FBC 802AA9AC 3C188028 */ lui $t8, 0x8028
/* 113FC0 802AA9B0 3C018016 */ lui $at, %hi(gHeapEndPtr) # $at, 0x8016
/* 113FC4 802AA9B4 10000004 */ b .L802AA9C8
/* 113FC8 802AA9B8 AC38F72C */ sw $t8, %lo(gHeapEndPtr)($at)
.L802AA9BC:
/* 113FCC 802AA9BC 3739DF00 */ ori $t9, (0x8028DF00 & 0xFFFF) # ori $t9, $t9, 0xdf00
/* 113FD0 802AA9C0 3C018016 */ lui $at, %hi(gHeapEndPtr) # $at, 0x8016
/* 113FD4 802AA9C4 AC39F72C */ sw $t9, %lo(gHeapEndPtr)($at)
.L802AA9C8:
/* 113FD8 802AA9C8 0C0A9F5C */ jal func_802A7D70
/* 113FDC 802AA9CC 00C02025 */ move $a0, $a2
/* 113FE0 802AA9D0 24040009 */ li $a0, 9
/* 113FE4 802AA9D4 0C0A9EE5 */ jal set_segment_base_addr
/* 113FE8 802AA9D8 00402825 */ move $a1, $v0
/* 113FEC 802AA9DC 3C08800E */ lui $t0, %hi(gGamestate) # $t0, 0x800e
/* 113FF0 802AA9E0 8D08C50C */ lw $t0, %lo(gGamestate)($t0)
/* 113FF4 802AA9E4 24010005 */ li $at, 5
/* 113FF8 802AA9E8 8FA40048 */ lw $a0, 0x48($sp)
/* 113FFC 802AA9EC 11010006 */ beq $t0, $at, .L802AAA08
/* 114000 802AA9F0 00000000 */ nop
/* 114004 802AA9F4 0C0AAA23 */ jal func_802AA88C
/* 114008 802AA9F8 8FA50044 */ lw $a1, 0x44($sp)
/* 11400C 802AA9FC 24040006 */ li $a0, 6
/* 114010 802AAA00 0C0A9EE5 */ jal set_segment_base_addr
/* 114014 802AAA04 00402825 */ move $a1, $v0
.L802AAA08:
/* 114018 802AAA08 3C098016 */ lui $t1, %hi(gPrevLoadedAddress) # $t1, 0x8016
/* 11401C 802AAA0C 8D29F728 */ lw $t1, %lo(gPrevLoadedAddress)($t1)
/* 114020 802AAA10 8FA40040 */ lw $a0, 0x40($sp)
/* 114024 802AAA14 8FA5003C */ lw $a1, 0x3c($sp)
/* 114028 802AAA18 0C0AA0B9 */ jal func_802A82E4
/* 11402C 802AAA1C AFA90018 */ sw $t1, 0x18($sp)
/* 114030 802AAA20 AFA2004C */ sw $v0, 0x4c($sp)
/* 114034 802AAA24 2404000F */ li $a0, 15
/* 114038 802AAA28 0C0A9EE5 */ jal set_segment_base_addr
/* 11403C 802AAA2C 00402825 */ move $a1, $v0
/* 114040 802AAA30 8FA4002C */ lw $a0, 0x2c($sp)
/* 114044 802AAA34 0C0AA1EA */ jal func_802A87A8
/* 114048 802AAA38 8FA50024 */ lw $a1, 0x24($sp)
/* 11404C 802AAA3C 8FA40028 */ lw $a0, 0x28($sp)
/* 114050 802AAA40 8FA50020 */ lw $a1, 0x20($sp)
/* 114054 802AAA44 0C0AA6BD */ jal display_list_unpack
/* 114058 802AAA48 8FA6001C */ lw $a2, 0x1c($sp)
/* 11405C 802AAA4C 0C0AA9F2 */ jal func_802AA7C8
/* 114060 802AAA50 8FA40030 */ lw $a0, 0x30($sp)
/* 114064 802AAA54 8FBF0014 */ lw $ra, 0x14($sp)
/* 114068 802AAA58 8FAA0018 */ lw $t2, 0x18($sp)
/* 11406C 802AAA5C 3C018016 */ lui $at, %hi(gPrevLoadedAddress)
/* 114070 802AAA60 8FA2004C */ lw $v0, 0x4c($sp)
/* 114074 802AAA64 27BD0060 */ addiu $sp, $sp, 0x60
/* 114078 802AAA68 03E00008 */ jr $ra
/* 11407C 802AAA6C AC2AF728 */ sw $t2, %lo(gPrevLoadedAddress)($at)

View File

@ -15,7 +15,7 @@
#include <actor_types.h>
//#include "segment_symbols.h"
//#include "segments.h"
#include "segments.h"
s32 D_802BA270;
@ -1393,67 +1393,58 @@ s32 func_802AA88C(s32 arg0, s32 arg1) {
GLOBAL_ASM("asm/non_matchings/memory/func_802AA88C.s")
#endif
#ifdef MIPS_TO_C
//generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc
void display_list_unpack(u32 *, u32 *, s32); /* extern */
void func_802A87A8(mk64_Vtx *, u32); /* extern */
void func_802AA7C8(u32 *); /* extern */
void *func_802AA88C(u32 *, u32 *); /* extern */
extern s32 gGamestate;
extern s32 gHeapEndPtr;
extern s32 gPrevLoadedAddress;
s32 load_course(s32 arg0) {
s32 sp4C;
u32 *sp48;
u32 *sp44;
u32 *sp40;
u32 *sp3C;
u32 *sp30;
mk64_Vtx *sp2C;
u32 *sp28;
u32 sp24;
u32 *sp20;
s32 sp1C;
s32 sp18;
s32 load_course(s32 courseId) {
UNUSED s32 pad[4];
s32 temp_v0;
s32 temp_v1;
struct courseTable *temp_v0_2;
u32 *dlRomStart;
u32 *dlRomEnd;
u32 *vertexRomStart;
u32 *vertexRomEnd;
s32 sp4C;
s32 gamestate;
u32 *textures;
mk64_Vtx *vertexStart;
u32 *packedStart;
u32 vertexCount;
u32 *finalDL;
s32 unknown1;
s32 prevLoadedAddress_saved;
s32 offsetRomStart;
s32 offsetRomEnd;
temp_v0_2 = &gCourseTable[arg0];
temp_v1 = gGamestate;
sp48 = temp_v0_2->dlRomStart;
sp44 = temp_v0_2->dlRomEnd;
sp40 = temp_v0_2->vertexRomStart;
sp3C = temp_v0_2->vertexRomEnd;
sp30 = temp_v0_2->textures;
sp2C = temp_v0_2->vertexStart;
sp28 = temp_v0_2->packedStart;
sp24 = temp_v0_2->vertexCount;
sp20 = temp_v0_2->finalDL;
sp1C = (s32) temp_v0_2->unknown1;
if ((temp_v1 == 5) || (temp_v1 == 9)) {
gHeapEndPtr = 0x80280000;
gamestate = gGamestate;
dlRomStart = gCourseTable[courseId].dlRomStart;
dlRomEnd = gCourseTable[courseId].dlRomEnd;
offsetRomStart = gCourseTable[courseId].offsetRomStart;
offsetRomEnd = gCourseTable[courseId].offsetRomEnd;
vertexRomStart = gCourseTable[courseId].vertexRomStart;
vertexRomEnd = gCourseTable[courseId].vertexRomEnd;
textures = gCourseTable[courseId].textures;
vertexStart = gCourseTable[courseId].vertexStart;
packedStart = gCourseTable[courseId].packedStart;
vertexCount = gCourseTable[courseId].vertexCount;
finalDL = gCourseTable[courseId].finalDL;
unknown1 = gCourseTable[courseId].unknown1;
if ((gamestate == ENDING_SEQUENCE) || (gamestate == CREDITS_SEQUENCE)) {
gHeapEndPtr = SEG_80280000;
} else {
gHeapEndPtr = 0x8028DF00;
gHeapEndPtr = SEG_8028DF00;
}
set_segment_base_addr(9, func_802A7D70((s32) temp_v0_2->offsetRomStart, (s32) temp_v0_2->offsetRomEnd));
set_segment_base_addr(9, func_802A7D70(offsetRomStart, offsetRomEnd));
if (gGamestate != ENDING_SEQUENCE) {
set_segment_base_addr(6, func_802AA88C(sp48, sp44));
set_segment_base_addr(6, func_802AA88C(dlRomStart, dlRomEnd));
}
sp18 = gPrevLoadedAddress;
temp_v0 = func_802A82E4((u8 *) sp40, (u8 *) sp3C);
prevLoadedAddress_saved = gPrevLoadedAddress;
temp_v0 = func_802A82E4((u8 *)vertexRomStart, (u8 *)vertexRomEnd);
sp4C = temp_v0;
set_segment_base_addr(0x0000000F, (void *) temp_v0);
func_802A87A8(sp2C, sp24);
display_list_unpack(sp28, sp20, sp1C);
func_802AA7C8(sp30);
gPrevLoadedAddress = sp18;
set_segment_base_addr(0xF, (void *)temp_v0);
func_802A87A8(vertexStart, vertexCount);
display_list_unpack(packedStart, finalDL, unknown1);
func_802AA7C8(textures);
gPrevLoadedAddress = prevLoadedAddress_saved;
return temp_v0;
}
#else
GLOBAL_ASM("asm/non_matchings/memory/load_course.s")
#endif
void func_802AAA70(uintptr_t addr) {
s32 segment = SEGMENT_NUMBER2(addr);