mirror of https://github.com/n64decomp/mk64.git
parent
e9415164bb
commit
12415a9e8e
|
|
@ -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)
|
||||
97
src/memory.c
97
src/memory.c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue