Jump Table Related Disassembly (#60)

* Part 1, Commit 1 of 24

audio/effects

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 2 of 24

audio/external

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 3 of 24

audio/heap

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 4 of 24

audio/port_eu

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 5 of 24

audio/seqplayer

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 6 of 24

code_80005FD0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 7 of 24

code_8001C4D0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 8 of 24

code_80027D00

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 9 of 24

code_800393C0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 10 of 24

code_8003DC40

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 11 of 24

code_800431B0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 12 of 24

code_80057C60

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 13 of 24

code_8006E9C0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 14 of 24

code_80071F00

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 15 of 24

code_80086E70

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 16 of 24

code_8008C1D0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 17 of 24

code_80091750

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 18 of 24

code_800AF9B0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 19 of 24

code_8028DF00

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 20 of 24

code_80290C20

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 21 of 24

code_802B0210

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 22 of 24

code_actors

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 23 of 24

memory

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 1, Commit 24 of 24

os/__osException

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 1 of 20

audio/effects.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 2 of 20

audio/external.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 3 of 24

audio/heap.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 4 of 20

audio/port_eu.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 5 of 20

audio/seqplayer.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 6 of 20

code_80005FD0.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 7 of 20

code_8001C4D0.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 8 of 20

code_80027D00.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 9 of 20

code_8003DC40.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 10 of 20

code_800431B0.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 11 of 20

code_80057C60.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 12 of 20

code_8006E9C0.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 13 of 20

code_80071F00.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 14 of 20

code_80086E70.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 15 of 20

code_80091750.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 16 of 20

code_800AF9B0.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 17 of 20

code_80290C20.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 18 of 20

code_802B0210.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 19 of 20

code_80296A50.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 2, Commit 20 of 20

memory.c

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 3, Commit 1 of 4

code_8008C1D0

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 3, Commit 2 of 4

code_8028DF00

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 3, Commit 3 of 4

math_util

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Part 3, Commit 4 of 4

crash_screen

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>

* Recreated disassemblies with a context file

Signed-off-by: Taggerung <tyler.taggerung@gmail.com>
This commit is contained in:
Tyler McGavran
2021-11-23 04:47:54 -05:00
committed by GitHub
parent bed14f61c3
commit a2dc62ccf8
328 changed files with 41811 additions and 2150 deletions
+113 -7
View File
@@ -313,15 +313,121 @@ GLOBAL_ASM("asm/non_matchings/audio/effects/func_800BE5BC.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_800BE5E0:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
extern ? D_803B7088;
Unable to determine jump table for jr instruction at func_800BE5E0.s line 11.
f32 func_800BE5E0(void *arg0) {
f32 temp_f0;
f32 temp_f0_2;
f32 temp_f2;
f32 temp_f6;
s16 temp_a2;
s16 temp_v1_3;
u8 temp_v0;
u8 temp_v1;
void *temp_v1_2;
s16 phi_a2;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_v1 = arg0->unk1;
temp_v0 = arg0->unk0;
switch (temp_v1) {
case 0:
return 0.0f;
case 1:
if ((temp_v0 & 0x40) != 0) {
arg0->unk1 = 5;
} else {
case 2:
arg0->unk2 = 0;
arg0->unk1 = 3;
case 3:
loop_6:
temp_v1_2 = arg0->unk20 + (arg0->unk2 * 4);
arg0->unk4 = temp_v1_2->unk0;
temp_a2 = arg0->unk4;
if (temp_a2 != -3) {
if (temp_a2 != -2) {
if (temp_a2 != -1) {
if (temp_a2 == 0) {
arg0->unk1 = 0;
} else {
if (temp_a2 >= 4) {
arg0->unk4 = ((temp_a2 * D_803B7088.unkC) / D_803B7088.unk0) / 4;
}
phi_a2 = arg0->unk4;
if (arg0->unk4 == 0) {
arg0->unk4 = 1;
phi_a2 = arg0->unk4;
}
temp_v1_3 = arg0->unk2;
arg0->unk1 = 4;
temp_f6 = (arg0->unk20 + (temp_v1_3 * 4))->unk2;
arg0->unk2 = temp_v1_3 + 1;
arg0->unk18 = temp_f6 / 32767.0f;
temp_f0 = arg0->unk18;
arg0->unk18 = temp_f0 * temp_f0;
arg0->unkC = (arg0->unk18 - arg0->unk14) / phi_a2;
}
} else {
arg0->unk1 = 5;
}
} else {
arg0->unk2 = temp_v1_2->unk2;
goto loop_6;
}
} else {
arg0->unk1 = 1;
}
if (arg0->unk1 == 4) {
case 4:
arg0->unk4 = arg0->unk4 - 1;
arg0->unk14 = arg0->unk14 + arg0->unkC;
if (arg0->unk4 <= 0) {
arg0->unk1 = 3;
}
}
}
default:
block_30:
if ((temp_v0 & 0x20) != 0) {
arg0->unk1 = 6;
arg0->unk0 = temp_v0 & 0xFFDF;
}
if ((temp_v0 & 0x10) != 0) {
arg0->unk1 = 7;
arg0->unk0 = temp_v0 & 0xFFEF;
}
temp_f2 = arg0->unk14;
if (temp_f2 < 0.0f) {
return 0.0f;
}
if (temp_f2 > 1.0f) {
return 1.0f;
}
return temp_f2;
case 6:
case 7:
temp_f0_2 = arg0->unk8;
arg0->unk14 = arg0->unk14 - arg0->unk10;
if ((temp_f0_2 != 0.0f) && (temp_v1 == 6)) {
if (arg0->unk14 < temp_f0_2) {
arg0->unk14 = temp_f0_2;
arg0->unk4 = 0x80;
arg0->unk1 = 8;
}
} else if (arg0->unk14 < 0.00001f) {
arg0->unk14 = 0.0f;
arg0->unk1 = 0;
}
goto block_30;
case 8:
arg0->unk4 = arg0->unk4 - 1;
if (arg0->unk4 == 0) {
arg0->unk1 = 7;
}
goto block_30;
}
}
#else
GLOBAL_ASM("asm/non_matchings/audio/effects/func_800BE5E0.s")
#endif
+1466 -63
View File
File diff suppressed because it is too large Load Diff
+109 -7
View File
@@ -849,15 +849,117 @@ GLOBAL_ASM("asm/non_matchings/audio/heap/func_800B9FB8.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_800BA00C:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_800B9FB8(); /* extern */
? func_800BA250(); /* extern */
? func_800BEF2C(? *); /* extern */
extern ? D_803B1510;
extern ? D_803B1A30;
extern ? D_803B7088;
Unable to determine jump table for jr instruction at func_800BA00C.s line 17.
s32 func_800BA00C(void) {
? *temp_s0;
s32 *temp_v1;
s32 temp_a0;
s32 temp_a2;
s32 temp_v0;
s32 temp_v0_4;
s32 temp_v0_5;
s32 temp_v0_6;
u8 temp_t6;
void *temp_v0_2;
void *temp_v0_3;
? *phi_s0;
s32 phi_v1;
s32 phi_a0;
s32 phi_a2;
s32 *phi_v1_2;
s32 phi_v0;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t6 = D_803B0500;
switch (temp_t6) {
case 5:
phi_s0 = &D_803B1510;
do {
func_800BEF2C(phi_s0);
temp_s0 = phi_s0 + 0x148;
phi_s0 = temp_s0;
} while (temp_s0 != &D_803B1A30);
D_803B0504 = 4;
D_803B0500 += -1;
break;
case 4:
temp_v0 = D_803B0504;
if (temp_v0 != 0) {
D_803B0504 = temp_v0 - 1;
func_800B9FB8();
} else {
temp_a2 = D_803B70B0;
phi_v1 = 0;
phi_a0 = 0;
phi_a2 = temp_a2;
if (temp_a2 > 0) {
do {
temp_a0 = phi_a0 + 1;
temp_v0_2 = D_803B1508 + phi_v1;
phi_a0 = temp_a0;
if (((temp_v0_2->unkB0 >> 0x1F) != 0) && (temp_v0_2->unk59 != 0)) {
temp_v0_2->unk68 = D_803B7088.unk18;
temp_v0_3 = D_803B1508 + phi_v1;
temp_v0_3->unk58 = temp_v0_3->unk58 | 0x10;
phi_a2 = D_803B70B0;
}
phi_v1 += 0xC0;
} while (temp_a0 < phi_a2);
}
D_803B0504 = 0x10;
D_803B0500 += -1;
}
break;
case 3:
temp_v0_4 = D_803B0504;
phi_v1_2 = &D_803B7180;
if (temp_v0_4 != 0) {
D_803B0504 = temp_v0_4 - 1;
func_800B9FB8();
} else {
do {
phi_v0 = 0;
loop_18:
*(*phi_v1_2 + phi_v0) = 0;
(*phi_v1_2 + phi_v0)->unk2 = 0;
(*phi_v1_2 + phi_v0)->unk4 = 0;
temp_v0_5 = phi_v0 + 8;
(*phi_v1_2 + phi_v0)->unk6 = 0;
phi_v0 = temp_v0_5;
if (temp_v0_5 != 0xA00) {
goto loop_18;
}
temp_v1 = phi_v1_2 + 4;
phi_v1_2 = temp_v1;
} while (temp_v1 != &D_803B718C);
D_803B0504 = 4;
D_803B0500 += -1;
}
break;
case 2:
temp_v0_6 = D_803B0504;
if (temp_v0_6 != 0) {
D_803B0504 = temp_v0_6 - 1;
} else {
D_803B0500 += -1;
}
break;
case 1:
func_800BA250();
D_803B0500 = 0;
break;
}
if (D_803B0500 < 3) {
return 0;
}
return 1;
}
#else
GLOBAL_ASM("asm/non_matchings/audio/heap/func_800BA00C.s")
#endif
+100 -7
View File
@@ -407,15 +407,108 @@ GLOBAL_ASM("asm/non_matchings/audio/port_eu/func_800CBC24.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_800CBCB0:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_800CB818(void *); /* extern */
extern ? D_80193820;
extern ? D_803B1510;
extern ? D_803B5EF0;
Unable to determine jump table for jr instruction at func_800CBCB0.s line 116.
void func_800CBCB0(u32 arg0) {
s32 temp_s1;
s32 temp_t1;
s32 temp_t8;
u8 temp_a0;
u8 temp_a1;
u8 temp_v0;
u8 temp_v1_2;
void *temp_s0;
void *temp_v0_2;
void *temp_v1;
s32 phi_v0;
s32 phi_s1;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t8 = arg0 & 0xFF;
temp_s1 = (arg0 >> 8) & 0xFF;
phi_v0 = temp_s1;
phi_s1 = temp_s1;
if (temp_t8 != temp_s1) {
do {
temp_s0 = &D_80193820 + ((phi_v0 & 0xFF) * 8);
temp_a0 = temp_s0->unk0;
temp_t1 = (phi_s1 + 1) & 0xFF;
phi_s1 = temp_t1;
if ((temp_a0 & 0xF0) == 0xF0) {
func_800CB818(temp_s0);
} else {
temp_v0 = temp_s0->unk1;
if (temp_v0 < 4) {
temp_v1 = &D_803B1510 + (temp_v0 * 0x148);
if ((temp_a0 & 0x80) != 0) {
func_800CB818(temp_s0);
} else if ((temp_a0 & 0x40) != 0) {
if (temp_a0 != 0x41) {
if (temp_a0 != 0x46) {
if (temp_a0 != 0x47) {
if (temp_a0 != 0x48) {
} else {
temp_v1->unkC = temp_s0->unk4;
}
} else {
temp_v1->unk8 = temp_s0->unk4 * 0x30;
}
} else {
(temp_v1 + temp_s0->unk3)->unk7 = temp_s0->unk4;
}
} else {
temp_v1->unk0 = temp_v1->unk0 | 4;
temp_v1->unk28 = temp_s0->unk4;
}
} else if ((temp_v1->unk0 >> 0x1F) != 0) {
temp_a1 = temp_s0->unk2;
if (temp_a1 < 0x10) {
temp_v0_2 = (temp_v1 + (temp_a1 * 4))->unk30;
if (temp_v0_2 != &D_803B5EF0) {
switch (temp_a0) {
case 1:
temp_v0_2->unk1 = temp_v0_2->unk1 | 0x40;
temp_v0_2->unk20 = temp_s0->unk4;
break;
case 2:
temp_v0_2->unk1 = temp_v0_2->unk1 | 0x40;
temp_v0_2->unk24 = temp_s0->unk4;
break;
case 3:
temp_v0_2->unk1 = temp_v0_2->unk1 | 0x20;
temp_v0_2->unk9 = temp_s0->unk4;
break;
case 4:
temp_v0_2->unk1 = temp_v0_2->unk1 | 0x80;
temp_v0_2->unk30 = temp_s0->unk4;
break;
case 5:
temp_v0_2->unk4 = temp_s0->unk4;
break;
case 6:
temp_v1_2 = temp_s0->unk3;
if (temp_v1_2 < 8) {
(temp_v0_2 + temp_v1_2)->unk58 = temp_s0->unk4;
}
break;
case 8:
temp_v0_2->unk0 = ((temp_s0->unk4 * 0x10) & 0x10) | (temp_v0_2->unk0 & 0xFFEF);
break;
}
}
}
}
}
}
temp_s0->unk0 = 0;
phi_v0 = temp_t1;
} while (temp_t8 != temp_t1);
}
}
#else
GLOBAL_ASM("asm/non_matchings/audio/port_eu/func_800CBCB0.s")
#endif
+1265 -21
View File
File diff suppressed because it is too large Load Diff
+1378 -57
View File
File diff suppressed because it is too large Load Diff
+376 -14
View File
@@ -22,15 +22,204 @@ extern Player *D_800DC4E8;
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8001C4D0:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_80014DE4(s32, s32, s32, Camera *); /* extern */
? func_802B7F7C(Camera *, f32 *, s16 *, Camera *); /* extern */
extern ? D_80150130;
extern ? D_80152300;
extern ? D_80164498;
extern ? D_80164678;
extern ? D_801649D8;
extern ? D_801649E8;
extern ? D_801649F8;
extern ? D_80164A08;
extern ? D_80164A18;
extern ? D_80164A38;
extern ? D_80164A48;
extern ? D_80164A78;
extern ? D_80164A90;
extern ? D_80164AA0;
static ? D_800DDB30; /* unable to generate initializer */
static s32 D_800ED50C = 0x4139999A; /* const */
static s32 D_800ED510 = 0x4199999A; /* const */
static s32 D_800ED514 = 0x4139999A; /* const */
static s32 D_800ED518 = 0x4199999A; /* const */
static s32 D_800ED51C = 0x4119999A; /* const */
static s32 D_800ED520 = 0x4139999A; /* const */
static s32 D_800ED524 = 0x4199999A; /* const */
Unable to determine jump table for jr instruction at func_8001C4D0.s line 21.
void func_8001C4D0(f32 x, f32 y, f32 z, s16 rot, u32 arg4, s32 cameraId) {
void *sp30;
s32 sp2C;
s32 sp28;
f32 *sp24;
f32 *sp20;
f32 *sp1C;
f32 *temp_t1;
f32 *temp_t2;
f32 *temp_t3;
f32 *temp_v0_2;
f32 *temp_v0_3;
f32 *temp_v0_4;
f32 *temp_v0_5;
s16 *temp_a0;
s32 temp_t6;
s32 temp_t6_2;
s32 temp_v0;
void *temp_v1;
f32 *phi_v0;
s16 phi_v1;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t6 = cameraId * 2;
*(&D_80152300 + temp_t6) = arg4;
switch (arg4) {
case 0:
case 1:
case 3:
case 8:
case 9:
case 10:
D_80164A89 = 0;
cameras[cameraId].posX = x;
cameras[cameraId].posY = y;
cameras[cameraId].posZ = z;
cameras[cameraId].rotZ = 0;
cameras[cameraId].unk2 = 150.0f;
cameras[cameraId].unk1 = y - 3.0;
cameras[cameraId].unk = 0.0f;
cameras[cameraId].angleX = 0.0f;
cameras[cameraId].angleZ = 0.0f;
cameras[cameraId].angleY = 1.0f;
cameras[cameraId].unkB0 = 0;
cameras[cameraId].unk25 = (bitwise s32) 0.0f;
cameras[cameraId].unkAE = cameraId;
temp_t6_2 = cameraId * 4;
*(&D_801649D8 + temp_t6_2) = 20.0f;
*(&D_801649E8 + temp_t6_2) = 10.0f;
*(&D_801649F8 + temp_t6_2) = 7.0f;
D_80164A2C = 0;
D_80164A30 = 30.0f;
temp_t1 = temp_t6_2 + &D_80164A38;
temp_t2 = temp_t6_2 + &D_80164A48;
*temp_t1 = 0.0f;
*temp_t2 = 0.0f;
*(&D_80164A90 + temp_t6_2) = 0.0f;
*(&D_80164AA0 + temp_t6_2) = 0.0f;
temp_t3 = temp_t6_2 + &D_80164A78;
*temp_t3 = *(&D_800DDB30 + (D_800DC52C * 4));
*(&D_80164A18 + temp_t6_2) = 0;
*(&D_80164A08 + temp_t6_2) = 0;
*(&D_80164498 + temp_t6_2) = 0.0f;
cameras[cameraId].unk24_and_a_half = 0;
cameras[cameraId].unk22 = 0.0f;
temp_v1 = D_800DC4DC + (cameraId * 0xDD8);
cameras[cameraId].unk2C = temp_v1->unk2E;
cameras[cameraId].unk28 = temp_v1->unk2E;
temp_v0 = D_800DC52C;
if (temp_v0 != 0) {
if (temp_v0 != 1) {
if (temp_v0 != 2) {
if (temp_v0 != 3) {
} else if (gModeSelection == 3) {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk5 = 0x4139999A;
cameras[cameraId].unk6 = -0x3DE60000;
cameras[cameraId].unk9 = 0x4199999A;
} else {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk5 = 0x41100000;
cameras[cameraId].unk6 = -0x3DE00000;
cameras[cameraId].unk9 = 0x41900000;
}
} else {
goto block_7;
}
} else if (gModeSelection == 3) {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk5 = 0x4139999A;
cameras[cameraId].unk6 = -0x3DE60000;
cameras[cameraId].unk9 = 0x4199999A;
} else {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk9 = (bitwise s32) 30.0f;
cameras[cameraId].unk5 = 0x4119999A;
cameras[cameraId].unk6 = -0x3DF40000;
}
} else {
block_7:
if (gModeSelection == 3) {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk5 = 0x4139999A;
cameras[cameraId].unk6 = -0x3DE60000;
cameras[cameraId].unk9 = 0x4199999A;
D_80164A88 = 0;
} else {
cameras[cameraId].unk4 = (bitwise s32) 0.0f;
cameras[cameraId].unk7 = (bitwise s32) 0.0f;
cameras[cameraId].unk8 = (bitwise s32) 0.0f;
cameras[cameraId].unk5 = 0x41180000;
cameras[cameraId].unk6 = -0x3DB80000;
cameras[cameraId].unk9 = 0x428C0000;
}
}
sp28 = temp_t6_2;
sp2C = temp_t6;
sp30 = &cameras[cameraId];
sp24 = temp_t1;
sp20 = temp_t2;
sp1C = temp_t3;
func_80014DE4(cameraId, temp_t6_2, temp_t6, &cameras[cameraId]);
temp_a0 = temp_t6 + &D_80164678;
if (*temp_a0 == 0) {
if (D_80164A28 == 1) {
temp_v0_2 = temp_t6_2 + &D_80150130;
*temp_v0_2 = 80.0f;
phi_v0 = temp_v0_2;
} else {
temp_v0_3 = temp_t6_2 + &D_80150130;
*temp_v0_3 = 40.0f;
phi_v0 = temp_v0_3;
}
cameras[cameraId].unk30 = *phi_v0;
}
phi_v1 = *temp_a0;
if (*temp_a0 == 1) {
temp_v0_4 = temp_t6_2 + &D_80150130;
if (D_80164A28 == 1) {
*temp_v0_4 = 100.0f;
} else {
*temp_v0_4 = 60.0f;
}
cameras[cameraId].unk30 = *temp_v0_4;
phi_v1 = *temp_a0;
}
if (phi_v1 == 2) {
temp_v0_5 = temp_t6_2 + &D_80150130;
if (D_80164A28 == 1) {
*temp_v0_5 = 100.0f;
} else {
*temp_v0_5 = 60.0f;
}
cameras[cameraId].unk30 = *temp_v0_5;
*temp_t1 = 20.0f;
*temp_t2 = 1.5f;
*temp_t3 = 1.0f;
}
break;
}
func_802B7F7C(&cameras[cameraId], &cameras[cameraId].unk, &cameras[cameraId].rotX, &cameras[cameraId]);
}
#else
GLOBAL_ASM("asm/non_matchings/code_8001C4D0/func_8001C4D0.s")
#endif
@@ -1191,15 +1380,188 @@ GLOBAL_ASM("asm/non_matchings/code_8001C4D0/func_8001EE98.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8001F394:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_800225CC(f32, f32 *, ?, ?, s32); /* extern */
extern ? D_80164498;
extern ? D_80164A08;
Unable to determine jump table for jr instruction at func_8001F394.s line 94.
void func_8001F394(Player *player, f32 *arg1) {
s32 playerId;
s32 sp1C;
f32 *temp_a0;
f32 *temp_a0_2;
f32 *temp_a0_3;
f32 *temp_a0_4;
f32 *temp_a0_5;
f32 *temp_a0_6;
f32 temp_f0;
f32 temp_f0_2;
f32 temp_f0_3;
f32 temp_f0_4;
f32 temp_f0_5;
f32 temp_f0_6;
s32 *temp_v1;
s32 temp_t3;
s32 temp_v0;
s32 temp_v0_2;
s32 temp_v0_3;
s32 temp_v0_4;
s32 temp_v0_5;
f32 *phi_a0;
f32 phi_f2;
f32 phi_f0;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
if (player == D_800DC4DC) {
playerId = 0;
}
if (player == D_800DC4E0) {
playerId = 1;
}
if (player == D_800DC4E4) {
playerId = 2;
}
if (player == D_800DC4E8) {
playerId = 3;
}
temp_t3 = playerId * 4;
temp_v1 = temp_t3 + &D_80164A08;
if (*temp_v1 == 0) {
if (player->unk_00C & 0x40000) {
*temp_v1 = 1;
}
if ((player->unk_0BC & 0x2000) == 0x2000) {
*temp_v1 = 2;
}
if ((player->unk_0BC & 0x100000) == 0x100000) {
*temp_v1 = 3;
}
if ((player->unk_00C & 0x100) == 0x100) {
*temp_v1 = 4;
}
temp_v0 = player->unk_0BC;
if (((temp_v0 & 0x80) == 0x80) || ((temp_v0 & 0x40) == 0x40)) {
*temp_v1 = 5;
}
*(&D_80164498 + temp_t3) = 0.0f;
}
switch (*temp_v1) {
case 1:
temp_a0 = temp_t3 + &D_80164498;
phi_a0 = temp_a0;
if (player->unk_00C & 0x40000) {
sp1C = temp_t3;
func_800225CC(0.0f, temp_a0, 0x41A00000, 0x3E4CCCCD, temp_t3);
} else {
temp_f0 = *temp_a0;
if (temp_f0 > 1.0f) {
*temp_a0 = temp_f0 - 1.0f;
} else {
*temp_v1 = 0;
block_51:
*phi_a0 = 0.0f;
}
}
break;
case 2:
if ((player->unk_0BC & 0x2000) == 0x2000) {
if (player->unk_0DC != 0) {
sp1C = temp_t3;
func_800225CC(0.0f, temp_t3 + &D_80164498, 0x41000000, 0x3E4CCCCD, temp_t3);
}
} else {
temp_a0_2 = temp_t3 + &D_80164498;
temp_f0_2 = *temp_a0_2;
phi_a0 = temp_a0_2;
if (temp_f0_2 > 1.0f) {
*temp_a0_2 = temp_f0_2 - 2.0f;
} else {
*temp_v1 = 0;
goto block_51;
}
}
break;
case 3:
temp_v0_2 = player->unk_0BC;
temp_a0_3 = temp_t3 + &D_80164498;
phi_a0 = temp_a0_3;
if (((temp_v0_2 & 0x100000) == 0x100000) && ((temp_v0_2 & 8) == 8)) {
sp1C = temp_t3;
func_800225CC(0.0f, temp_a0_3, 0x41A00000, 0x3DCCCCCD, temp_t3);
} else {
temp_f0_3 = *temp_a0_3;
if (temp_f0_3 > 1.0f) {
*temp_a0_3 = temp_f0_3 - 1.0f;
} else {
*temp_v1 = 0;
goto block_51;
}
}
break;
case 4:
temp_a0_4 = temp_t3 + &D_80164498;
phi_a0 = temp_a0_4;
if ((player->unk_00C & 0x100) == 0x100) {
sp1C = temp_t3;
func_800225CC(0.0f, temp_a0_4, 0x41C80000, 0x3F800000, temp_t3);
} else {
temp_f0_4 = *temp_a0_4;
if (temp_f0_4 > 1.0f) {
*temp_a0_4 = temp_f0_4 - 2.0f;
} else {
*temp_v1 = 0;
goto block_51;
}
}
break;
case 5:
temp_v0_3 = player->unk_0BC;
temp_a0_5 = temp_t3 + &D_80164498;
phi_a0 = temp_a0_5;
if (((temp_v0_3 & 0x80) == 0x80) || ((temp_v0_3 & 0x40) == 0x40)) {
sp1C = temp_t3;
func_800225CC(0.0f, temp_a0_5, 0x41900000, 0x3E4CCCCD, temp_t3);
} else {
temp_f0_5 = *temp_a0_5;
if (temp_f0_5 > 1.0f) {
*temp_a0_5 = temp_f0_5 - 2.0f;
} else {
*temp_v1 = 0;
goto block_51;
}
}
break;
}
temp_v0_4 = D_800DC52C;
if (temp_v0_4 != 0) {
if ((temp_v0_4 != 1) && (temp_v0_4 != 2) && (temp_v0_4 != 3)) {
phi_f2 = sp34;
} else {
phi_f0 = func_80014EE4(*arg1, playerId, MIPS2C_ERROR(Read from unset register $a2));
goto block_66;
}
} else {
temp_v0_5 = D_80164A28;
if (temp_v0_5 == 1) {
*(&D_80164498 + (playerId * 4)) = 40.0f;
}
temp_a0_6 = (playerId * 4) + &D_80164498;
if (temp_v0_5 == 2) {
temp_f0_6 = *temp_a0_6;
if (temp_f0_6 >= 0.0f) {
*temp_a0_6 = temp_f0_6 - 0.8;
}
if (*temp_a0_6 <= 0.0f) {
D_80164A28 = 0;
*temp_a0_6 = 0.0f;
}
}
phi_f0 = func_80014EE4(*arg1, playerId, MIPS2C_ERROR(Read from unset register $a2));
block_66:
phi_f2 = phi_f0;
}
*arg1 = phi_f2;
cameras[playerId].unk30 = phi_f2;
}
#else
GLOBAL_ASM("asm/non_matchings/code_8001C4D0/func_8001F394.s")
#endif
+454 -7
View File
@@ -98,15 +98,462 @@ GLOBAL_ASM("asm/non_matchings/code_80027D00/func_80027DA8.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_80027EDC:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_800C8F80(s32, ?, s8); /* extern */
? func_800C9018(s32, ?, s8); /* extern */
? func_800CA288(s32, ?, s8); /* extern */
? func_800CA2B8(s32, s8); /* extern */
? func_800CA2E4(s32, ?, s8); /* extern */
? func_800CA30C(s32, s8); /* extern */
extern ? D_80164438;
extern ? D_80165300;
u16 gCurrentCourseId; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_80027EDC.s line 369.
void func_80027EDC(u16 *arg0, s8 arg1) {
s16 *sp1C;
s16 *temp_v0_10;
s16 *temp_v0_12;
s16 *temp_v0_13;
s16 *temp_v0_15;
s16 *temp_v0_16;
s16 *temp_v0_17;
s16 *temp_v0_18;
s16 *temp_v0_20;
s16 *temp_v0_21;
s16 *temp_v0_23;
s16 *temp_v0_24;
s16 *temp_v0_25;
s16 *temp_v0_27;
s16 *temp_v0_28;
s16 *temp_v0_30;
s16 *temp_v0_31;
s16 *temp_v0_33;
s16 *temp_v0_34;
s16 *temp_v0_36;
s16 *temp_v0_37;
s16 *temp_v0_39;
s16 *temp_v0_3;
s16 *temp_v0_40;
s16 *temp_v0_41;
s16 *temp_v0_42;
s16 *temp_v0_44;
s16 *temp_v0_45;
s16 *temp_v0_47;
s16 *temp_v0_48;
s16 *temp_v0_4;
s16 *temp_v0_6;
s16 *temp_v0_7;
s16 *temp_v0_9;
s16 temp_a0;
s16 temp_v0_11;
s16 temp_v0_14;
s16 temp_v0_19;
s16 temp_v0_22;
s16 temp_v0_26;
s16 temp_v0_29;
s16 temp_v0_2;
s16 temp_v0_32;
s16 temp_v0_35;
s16 temp_v0_38;
s16 temp_v0_43;
s16 temp_v0_46;
s16 temp_v0_5;
s16 temp_v0_8;
s32 temp_a0_2;
s32 temp_t2;
s32 temp_t6;
s32 temp_v1;
s32 temp_v1_10;
s32 temp_v1_11;
s32 temp_v1_12;
s32 temp_v1_13;
s32 temp_v1_14;
s32 temp_v1_2;
s32 temp_v1_3;
s32 temp_v1_4;
s32 temp_v1_5;
s32 temp_v1_6;
s32 temp_v1_7;
s32 temp_v1_8;
s32 temp_v1_9;
s8 temp_a2;
u16 temp_t5;
u16 temp_t9;
u16 temp_v0;
s16 phi_a0;
s8 phi_a2;
s16 *phi_v0;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_v0 = *arg0;
temp_a2 = arg1;
phi_a2 = temp_a2;
if (((temp_v0 & 0x4000) == 0x4000) && ((temp_v0 & 0x100) != 0x100)) {
temp_t9 = gCurrentCourseId;
switch (temp_t9) { /* switch 1 */
case 0: /* switch 1 */
temp_v1 = temp_a2 * 2;
temp_v0_2 = *(&D_80164438 + temp_v1);
if ((temp_v0_2 >= 0x19B) && (temp_v0_2 < 0x1B9)) {
temp_v0_3 = temp_v1 + &D_80165300;
if (*temp_v0_3 != 1) {
sp1C = temp_v0_3;
func_800CA288(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1 + &D_80165300) = 1;
return;
}
temp_v0_4 = temp_v1 + &D_80165300;
if (*temp_v0_4 != 0) {
sp1C = temp_v0_4;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_4;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 1: /* switch 1 */
temp_v1_2 = temp_a2 * 2;
temp_v0_5 = *(&D_80164438 + temp_v1_2);
if ((temp_v0_5 >= 0xA0) && (temp_v0_5 < 0xB4)) {
temp_v0_6 = temp_v1_2 + &D_80165300;
if (*temp_v0_6 != 1) {
sp1C = temp_v0_6;
func_800CA288(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_2 + &D_80165300) = 1;
return;
}
temp_v0_7 = temp_v1_2 + &D_80165300;
if (*temp_v0_7 != 0) {
sp1C = temp_v0_7;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_7;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 2: /* switch 1 */
temp_v1_3 = temp_a2 * 2;
temp_v0_8 = *(&D_80164438 + temp_v1_3);
if ((temp_v0_8 >= 0x29) && (temp_v0_8 < 0x1D2)) {
temp_v0_9 = temp_v1_3 + &D_80165300;
if (*temp_v0_9 != 1) {
sp1C = temp_v0_9;
func_800CA288(temp_a2 & 0xFF, 0x41, temp_a2);
}
*(temp_v1_3 + &D_80165300) = 1;
return;
}
temp_v0_10 = temp_v1_3 + &D_80165300;
if (*temp_v0_10 != 0) {
sp1C = temp_v0_10;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_10;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 3: /* switch 1 */
temp_v1_4 = temp_a2 * 2;
temp_v0_11 = *(&D_80164438 + temp_v1_4);
if ((temp_v0_11 >= 0x180) && (temp_v0_11 < 0x1E1)) {
temp_v0_12 = temp_v1_4 + &D_80165300;
if (*temp_v0_12 != 1) {
sp1C = temp_v0_12;
func_800CA288(temp_a2 & 0xFF, 0x41, temp_a2);
}
*(temp_v1_4 + &D_80165300) = 1;
return;
}
temp_v0_13 = temp_v1_4 + &D_80165300;
if (*temp_v0_13 != 0) {
sp1C = temp_v0_13;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_13;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 8: /* switch 1 */
temp_v1_5 = temp_a2 * 2;
temp_v0_14 = *(&D_80164438 + temp_v1_5);
if ((temp_v0_14 >= 0x145) && (temp_v0_14 < 0x18B)) {
temp_v0_15 = temp_v1_5 + &D_80165300;
if (*temp_v0_15 != 1) {
sp1C = temp_v0_15;
func_800CA288(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_5 + &D_80165300) = 1;
return;
}
temp_v0_16 = temp_v1_5 + &D_80165300;
if (*temp_v0_16 != 0) {
sp1C = temp_v0_16;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_16;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 10: /* switch 1 */
if ((temp_v0 & 0x800) != 0x800) {
temp_t6 = temp_a2 * 2;
temp_v0_17 = temp_t6 + &D_80165300;
if (*temp_v0_17 != 1) {
sp1C = temp_v0_17;
func_800CA288(temp_a2 & 0xFF, 0x1E, temp_a2);
}
*(temp_t6 + &D_80165300) = 1;
return;
}
temp_v0_18 = (temp_a2 * 2) + &D_80165300;
if (*temp_v0_18 != 0) {
sp1C = temp_v0_18;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_18;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 12: /* switch 1 */
temp_v1_6 = temp_a2 * 2;
temp_v0_19 = *(&D_80164438 + temp_v1_6);
if ((temp_v0_19 >= 0x11C) && (temp_v0_19 < 0x209)) {
temp_v0_20 = temp_v1_6 + &D_80165300;
if (*temp_v0_20 != 1) {
sp1C = temp_v0_20;
func_800CA288(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_6 + &D_80165300) = 1;
return;
}
temp_v0_21 = temp_v1_6 + &D_80165300;
if (*temp_v0_21 != 0) {
sp1C = temp_v0_21;
func_800CA2B8(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_21;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 18: /* switch 1 */
temp_v1_7 = temp_a2 * 2;
temp_v0_22 = *(&D_80164438 + temp_v1_7);
if (((temp_v0_22 >= 0) && (temp_v0_22 < 0x65)) || ((temp_v0_22 >= 0x14A) && (temp_v0_22 < 0x21F))) {
temp_v0_25 = temp_v1_7 + &D_80165300;
if (*temp_v0_25 != 2) {
sp1C = temp_v0_25;
func_800C8F80(temp_a2 & 0xFF, 0x170802D, temp_a2);
}
*(temp_v1_7 + &D_80165300) = 2;
return;
}
if ((temp_v0_22 >= 0x288) && (temp_v0_22 < 0x305)) {
temp_v0_23 = temp_v1_7 + &D_80165300;
if (*temp_v0_23 != 1) {
sp1C = temp_v0_23;
func_800CA288(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_7 + &D_80165300) = 1;
return;
}
temp_v0_24 = temp_v1_7 + &D_80165300;
temp_a0 = *temp_v0_24;
phi_a0 = temp_a0;
if (temp_a0 != 0) {
if (temp_a0 == 1) {
temp_a0_2 = temp_a2 & 0xFF;
sp1C = temp_v0_24;
arg1 = temp_a2;
func_800CA2B8(temp_a0_2, temp_a2);
phi_a0 = *temp_v0_24;
phi_a2 = arg1;
}
if (phi_a0 == 2) {
sp1C = temp_v1_7 + &D_80165300;
func_800C9018(phi_a2 & 0xFF, 0x170802D, phi_a2);
}
phi_v0 = temp_v1_7 + &D_80165300;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
}
} else {
temp_t5 = gCurrentCourseId;
switch (temp_t5) { /* switch 2 */
case 0: /* switch 2 */
temp_v1_8 = temp_a2 * 2;
temp_v0_26 = *(&D_80164438 + temp_v1_8);
if ((temp_v0_26 >= 0x19B) && (temp_v0_26 < 0x1B9)) {
temp_v0_27 = temp_v1_8 + &D_80165300;
if (*temp_v0_27 != 1) {
sp1C = temp_v0_27;
func_800CA2E4(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_8 + &D_80165300) = 1;
return;
}
temp_v0_28 = temp_v1_8 + &D_80165300;
if (*temp_v0_28 != 0) {
sp1C = temp_v0_28;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_28;
block_127:
*phi_v0 = 0;
}
default: /* switch 2 */
default: /* switch 1 */
return;
case 1: /* switch 2 */
temp_v1_9 = temp_a2 * 2;
temp_v0_29 = *(&D_80164438 + temp_v1_9);
if ((temp_v0_29 >= 0xA0) && (temp_v0_29 < 0xB4)) {
temp_v0_30 = temp_v1_9 + &D_80165300;
if (*temp_v0_30 != 1) {
sp1C = temp_v0_30;
func_800CA2E4(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_9 + &D_80165300) = 1;
return;
}
temp_v0_31 = temp_v1_9 + &D_80165300;
if (*temp_v0_31 != 0) {
sp1C = temp_v0_31;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_31;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 2: /* switch 2 */
temp_v1_10 = temp_a2 * 2;
temp_v0_32 = *(&D_80164438 + temp_v1_10);
if ((temp_v0_32 >= 0x29) && (temp_v0_32 < 0x1D2)) {
temp_v0_33 = temp_v1_10 + &D_80165300;
if (*temp_v0_33 != 1) {
sp1C = temp_v0_33;
func_800CA2E4(temp_a2 & 0xFF, 0x41, temp_a2);
}
*(temp_v1_10 + &D_80165300) = 1;
return;
}
temp_v0_34 = temp_v1_10 + &D_80165300;
if (*temp_v0_34 != 0) {
sp1C = temp_v0_34;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_34;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 3: /* switch 2 */
temp_v1_11 = temp_a2 * 2;
temp_v0_35 = *(&D_80164438 + temp_v1_11);
if ((temp_v0_35 >= 0x180) && (temp_v0_35 < 0x1E1)) {
temp_v0_36 = temp_v1_11 + &D_80165300;
if (*temp_v0_36 != 1) {
sp1C = temp_v0_36;
func_800CA2E4(temp_a2 & 0xFF, 0x41, temp_a2);
}
*(temp_v1_11 + &D_80165300) = 1;
return;
}
temp_v0_37 = temp_v1_11 + &D_80165300;
if (*temp_v0_37 != 0) {
sp1C = temp_v0_37;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_37;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 8: /* switch 2 */
temp_v1_12 = temp_a2 * 2;
temp_v0_38 = *(&D_80164438 + temp_v1_12);
if ((temp_v0_38 >= 0x145) && (temp_v0_38 < 0x18B)) {
temp_v0_39 = temp_v1_12 + &D_80165300;
if (*temp_v0_39 != 1) {
sp1C = temp_v0_39;
func_800CA2E4(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_12 + &D_80165300) = 1;
return;
}
temp_v0_40 = temp_v1_12 + &D_80165300;
if (*temp_v0_40 != 0) {
sp1C = temp_v0_40;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_40;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 10: /* switch 2 */
if ((temp_v0 & 0x800) != 0x800) {
temp_t2 = temp_a2 * 2;
temp_v0_41 = temp_t2 + &D_80165300;
if (*temp_v0_41 != 1) {
sp1C = temp_v0_41;
func_800CA2E4(temp_a2 & 0xFF, 0x1E, temp_a2);
}
*(temp_t2 + &D_80165300) = 1;
return;
}
temp_v0_42 = (temp_a2 * 2) + &D_80165300;
if (*temp_v0_42 != 0) {
sp1C = temp_v0_42;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_42;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 12: /* switch 2 */
temp_v1_13 = temp_a2 * 2;
temp_v0_43 = *(&D_80164438 + temp_v1_13);
if ((temp_v0_43 >= 0x11C) && (temp_v0_43 < 0x209)) {
temp_v0_44 = temp_v1_13 + &D_80165300;
if (*temp_v0_44 != 1) {
sp1C = temp_v0_44;
func_800CA2E4(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_13 + &D_80165300) = 1;
return;
}
temp_v0_45 = temp_v1_13 + &D_80165300;
if (*temp_v0_45 != 0) {
sp1C = temp_v0_45;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_45;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
case 18: /* switch 2 */
temp_v1_14 = temp_a2 * 2;
temp_v0_46 = *(&D_80164438 + temp_v1_14);
if ((temp_v0_46 >= 0x288) && (temp_v0_46 < 0x305)) {
temp_v0_47 = temp_v1_14 + &D_80165300;
if (*temp_v0_47 != 1) {
sp1C = temp_v0_47;
func_800CA2E4(temp_a2 & 0xFF, 0x55, temp_a2);
}
*(temp_v1_14 + &D_80165300) = 1;
return;
}
temp_v0_48 = temp_v1_14 + &D_80165300;
if (*temp_v0_48 != 0) {
sp1C = temp_v0_48;
func_800CA30C(temp_a2 & 0xFF, temp_a2);
phi_v0 = temp_v0_48;
goto block_127;
}
/* Duplicate return node #128. Try simplifying control flow for better match */
return;
}
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_80027D00/func_80027EDC.s")
#endif
+53 -7
View File
@@ -240,15 +240,61 @@ GLOBAL_ASM("asm/non_matchings/code_8003DC40/func_8003F138.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8003F46C:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_8002A5F4(void *, f32, ?, f32); /* extern */
? func_8003E048(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
? func_8003E37C(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
? func_8003E6EC(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
? func_8003E9EC(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
? func_8003EE2C(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
? func_8003F138(Player *, void *, f32 *, f32 *, f32 *, f32 *); /* extern */
u16 gCurrentCourseId; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_8003F46C.s line 77.
void func_8003F46C(Player *arg0, void *arg1, s32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7, f32 *arg6, f32 *arg7) {
u16 temp_t9;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
arg1->unk0 = -arg0->unk_140;
arg1->unk4 = -arg0->unk_144;
arg1->unk8 = -arg0->unk_148;
if ((arg0->unk_144 < 0.0f) && ((arg0->unk_0CA & 2) == 0)) {
*arg7 += arg1->unk0 * arg0->unk_124 * 1.0f;
*arg6 += arg1->unk4 * arg0->unk_124 * 1.0f;
*arg7 += arg1->unk8 * arg0->unk_124 * 1.0f;
func_8002A5F4(arg1, *arg6, 0x3F99999A, 0.0f);
arg0->kartHopJerk = 0.0f;
arg0->kartHopAcceleration = 0.0f;
arg0->kartHopVelocity = 0.0f;
return;
}
temp_t9 = gCurrentCourseId;
switch (temp_t9) {
case 0:
func_8003E048(arg0, arg1, arg6, arg7, arg6, arg7);
break;
case 1:
case 6:
func_8003E37C(arg0, arg1, arg6, arg7, arg6, arg7);
break;
case 2:
func_8003E6EC(arg0, arg1, arg6, arg7, arg6, arg7);
break;
case 8:
func_8003E9EC(arg0, arg1, arg6, arg7, arg6, arg7);
break;
case 14:
func_8003EE2C(arg0, arg1, arg6, arg7, arg6, arg7);
break;
case 18:
func_8003F138(arg0, arg1, arg6, arg7, arg6, arg7);
break;
default:
func_8003E048(arg0, arg1, arg6, arg7, arg6, arg7);
break;
}
if (arg0->unk_0BC & 0x10000) {
arg0->unk_DAC = 0.5f;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_8003DC40/func_8003F46C.s")
#endif
+177 -14
View File
@@ -6185,15 +6185,105 @@ GLOBAL_ASM("asm/non_matchings/code_800431B0/func_800507D8.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_800508C0:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_8004C024(s16, ?, s16, s32, s32, s32, s32); /* extern */
? func_8004C148(?, s16, s16, s32, s32, s32, s32); /* extern */
Unable to determine jump table for jr instruction at func_800508C0.s line 125.
void func_800508C0(void) {
s32 sp54;
s32 sp50;
u32 sp4C;
s32 sp48;
u16 sp42;
u16 sp40;
u16 sp3E;
s32 temp_v1;
s16 phi_s0;
u16 phi_s0_2;
s32 phi_s1;
s32 phi_s2;
u16 phi_s0_3;
s32 phi_s1_2;
s32 phi_s2_2;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
if (gModeSelection == 1) {
phi_s0 = D_80164378;
} else {
phi_s0 = D_80164360;
}
temp_v1 = lapCount[phi_s0];
sp4C = func_80050644(phi_s0 & 0xFFFF, &sp54, &sp50);
if (temp_v1 > 0) {
if (temp_v1 == 1) {
phi_s0_2 = 0;
phi_s1 = 0;
phi_s2 = 0xFF;
} else {
if (temp_v1 == 2) {
phi_s1 = 0xFF;
} else {
phi_s1 = 0;
}
phi_s0_2 = 0xFF;
phi_s2 = 0;
}
sp48 = temp_v1;
func_8004C024(0x20, 0x12, 0x104, phi_s0_2 & 0xFFFF, phi_s1, phi_s2, 0xFF);
func_8004C148(0x124, 0x12, 0xCC, phi_s0_2 & 0xFFFF, phi_s1, phi_s2, 0xFF);
func_8004C024(0x20, 0xDE, 0x104, phi_s0_2 & 0xFFFF, phi_s1, phi_s2, 0xFF);
func_8004C148(0x20, 0x12, 0xCC, phi_s0_2 & 0xFFFF, phi_s1, phi_s2, 0xFF);
sp42 = phi_s0_2;
sp40 = phi_s1;
sp3E = phi_s2;
}
phi_s0_3 = sp42;
phi_s1_2 = sp40;
phi_s2_2 = sp3E;
if ((lapCount[phi_s0] >= 0) && (lapCount[phi_s0] < 3)) {
if (lapCount[phi_s0] != 0) {
if (lapCount[phi_s0] != 1) {
if (lapCount[phi_s0] != 2) {
} else {
phi_s1_2 = 0;
goto block_20;
}
} else {
phi_s1_2 = 0xFF;
block_20:
phi_s0_3 = 0xFF;
phi_s2_2 = 0;
}
} else {
phi_s0_3 = 0;
phi_s1_2 = 0;
phi_s2_2 = 0xFF;
}
switch (sp4C) {
case 1:
func_8004C024(0x20, 0x12, sp54, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
return;
case 2:
func_8004C024(0x20, 0x12, 0x104, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C148(0x124, 0x12, sp50, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
return;
case 3:
func_8004C024(0x20, 0x12, 0x104, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C148(0x124, 0x12, 0xCC, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C024(sp54 + 0x20, 0xDE, 0x104 - sp54, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
return;
case 4:
func_8004C024(0x20, 0x12, 0x104, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C148(0x124, 0x12, 0xCC, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C024(0x20, 0xDE, 0x104, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
func_8004C148(0x20, sp50 + 0x12, 0xCC - sp50, phi_s0_3 & 0xFFFF, phi_s1_2, phi_s2_2, 0xFF);
/* Duplicate return node #27. Try simplifying control flow for better match */
return;
}
} else {
default:
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_800431B0/func_800508C0.s")
#endif
@@ -7765,15 +7855,88 @@ GLOBAL_ASM("asm/non_matchings/code_800431B0/func_800534A4.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_800534E8:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
extern ? D_80165CBC;
static ? D_800E4638; /* unable to generate initializer; const */
static ? D_800E4640; /* unable to generate initializer; const */
static ? D_800E4650; /* unable to generate initializer; const */
static ? D_800E4658; /* unable to generate initializer; const */
static ? D_800E4668; /* unable to generate initializer; const */
static ? D_800E4670; /* unable to generate initializer; const */
static ? D_800E4680; /* unable to generate initializer; const */
static ? D_800E4688; /* unable to generate initializer; const */
static ? D_800E4698; /* unable to generate initializer; const */
static ? D_800E46A0; /* unable to generate initializer; const */
Unable to determine jump table for jr instruction at func_800534E8.s line 14.
void func_800534E8(s32 arg0) {
Gfx *temp_v0;
Gfx *temp_v0_10;
Gfx *temp_v0_2;
Gfx *temp_v0_3;
Gfx *temp_v0_4;
Gfx *temp_v0_5;
Gfx *temp_v0_6;
Gfx *temp_v0_7;
Gfx *temp_v0_8;
Gfx *temp_v0_9;
u16 temp_t7;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t7 = *(&D_80165CBC + (arg0 * 0xE0));
switch (temp_t7) {
case 0:
temp_v0 = gDisplayListHead;
gDisplayListHead = temp_v0 + 8;
temp_v0->words.w0 = 0x3860010;
temp_v0->words.w1 = &D_800E4640;
temp_v0_2 = gDisplayListHead;
gDisplayListHead = temp_v0_2 + 8;
temp_v0_2->words.w0 = 0x3880010;
temp_v0_2->words.w1 = &D_800E4638;
return;
case 1:
temp_v0_3 = gDisplayListHead;
gDisplayListHead = temp_v0_3 + 8;
temp_v0_3->words.w0 = 0x3860010;
temp_v0_3->words.w1 = &D_800E4658;
temp_v0_4 = gDisplayListHead;
gDisplayListHead = temp_v0_4 + 8;
temp_v0_4->words.w0 = 0x3880010;
temp_v0_4->words.w1 = &D_800E4650;
return;
case 2:
temp_v0_5 = gDisplayListHead;
gDisplayListHead = temp_v0_5 + 8;
temp_v0_5->words.w0 = 0x3860010;
temp_v0_5->words.w1 = &D_800E4670;
temp_v0_6 = gDisplayListHead;
gDisplayListHead = temp_v0_6 + 8;
temp_v0_6->words.w0 = 0x3880010;
temp_v0_6->words.w1 = &D_800E4668;
return;
case 3:
temp_v0_7 = gDisplayListHead;
gDisplayListHead = temp_v0_7 + 8;
temp_v0_7->words.w0 = 0x3860010;
temp_v0_7->words.w1 = &D_800E4688;
temp_v0_8 = gDisplayListHead;
gDisplayListHead = temp_v0_8 + 8;
temp_v0_8->words.w0 = 0x3880010;
temp_v0_8->words.w1 = &D_800E4680;
return;
case 4:
temp_v0_9 = gDisplayListHead;
gDisplayListHead = temp_v0_9 + 8;
temp_v0_9->words.w0 = 0x3860010;
temp_v0_9->words.w1 = &D_800E46A0;
temp_v0_10 = gDisplayListHead;
gDisplayListHead = temp_v0_10 + 8;
temp_v0_10->words.w0 = 0x3880010;
temp_v0_10->words.w1 = &D_800E4698;
/* fallthrough */
default:
return;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_800431B0/func_800534E8.s")
#endif
+3103 -140
View File
File diff suppressed because it is too large Load Diff
+861 -21
View File
@@ -338,15 +338,235 @@ GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_8006EF60.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8006F008:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_8006EEE8(s16); /* extern */
s32 func_802A84F4(? *, ?, ?, s16); /* extern */
extern ? D_0F0D0E50;
extern ? gTextureExhaust0;
extern ? gTextureExhaust1;
extern ? gTextureExhaust2;
extern ? gTextureExhaust3;
extern ? gTextureExhaust4;
extern ? gTextureExhaust5;
s16 gCurrentCourseId; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_8006F008.s line 57.
void func_8006F008(void) {
s16 temp_a0;
s8 temp_v0;
u32 phi_a0;
s16 phi_t9;
s16 *phi_v1;
s16 *phi_t0;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
D_801655C8 = 0;
D_8018D01C = 1.0f;
if (gIsMirrorMode != 0) {
D_8018D01C = -1.0f;
}
D_8018D2C0 = 0x101;
D_8018D2D8 = 0xAA;
D_8018D300 = 0xFF;
D_8018D308 = 0xFF;
temp_a0 = gCurrentCourseId;
D_8018D310 = 0xFF;
D_8018D318 = 0xFF;
phi_a0 = temp_a0;
if (temp_a0 < 0x14) {
func_8006EEE8(temp_a0);
phi_a0 = gCurrentCourseId;
}
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
switch (phi_a0) {
case 0:
D_8018D220 = func_802A84F4(&gTextureExhaust5, 0x443, 0x1000, 0xFF);
D_8018D2A0 = 0.022f;
D_8018D2E0 = 6;
D_8018D2E8 = 0x1C;
D_8018D2C0 = 0x104;
D_8018D2D8 = 0xAA;
D_80165718 = 0;
D_80165720 = 5;
D_80165728 = -0xF0;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 1:
D_8018D2A0 = 0.022f;
D_8018D2C0 = 0x109;
D_8018D2E0 = 0x13;
phi_t9 = 0x25;
block_26:
D_8018D2E8 = phi_t9;
break;
case 2:
D_8018D2C0 = 0x109;
D_8018D2A0 = 0.0174f;
D_8018D2E0 = 0xC;
D_8018D2E8 = 0x30;
break;
case 3:
D_80165880 = func_802A84F4(&D_0F0D0E50, 0x4CC2, 0xD980, 0xFF);
D_8018D2A0 = 0.016f;
D_8018D2C0 = 0x106;
D_8018D2E0 = 0x37;
D_8018D2E8 = 0x27;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 4:
D_8018D220 = func_802A84F4(&gTextureExhaust0, 0x479, 0xC00, 0xFF);
D_8018D2A0 = 0.018f;
D_8018D2E0 = 0x3D;
D_8018D2E8 = 0x26;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 5:
D_8018D2C0 = 0x106;
D_8018D2A0 = 0.016f;
D_8018D2E0 = 0x24;
D_8018D2E8 = 0x28;
D_8018D300 = 0x48;
D_8018D308 = 0x64;
D_8018D310 = 0xFF;
break;
case 6:
D_8018D220 = func_802A84F4(&gTextureExhaust3, 0x3C8, 0x1000, 0xFF);
D_8018D2A0 = 0.014f;
D_8018D2C0 = 0x10C;
D_8018D2E0 = 0x28;
D_8018D2E8 = 0x15;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 7:
D_8018D220 = func_802A84F4(&gTextureExhaust4, 0x3F8, 0x1000, 0xFF);
D_8018D2C0 = 0x106;
D_8018D2A0 = 0.014f;
D_8018D2E0 = 0x25;
D_8018D2E8 = 0x32;
D_80165718 = -0x40;
D_80165720 = 5;
D_80165728 = -0x14A;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 8:
D_8018D220 = func_802A84F4(&gTextureExhaust2, 0x4F4, 0xC00, 0xFF);
D_8018D2A0 = 0.0155f;
D_8018D2C0 = 0x10F;
D_8018D2E0 = 0x2D;
D_8018D2E8 = 0x3C;
D_80165718 = -0x8C;
D_80165720 = -0x2C;
D_80165728 = -0xD7;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 9:
D_8018D220 = func_802A84F4(&gTextureExhaust0, 0x479, 0xC00, 0xFF);
D_8018D2A0 = 0.0155f;
D_8018D2C0 = 0x10F;
D_8018D2E0 = 0x12;
D_8018D2E8 = 0x24;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 10:
D_8018D2A0 = 0.013f;
D_8018D2C0 = 0xFC;
D_8018D2E0 = 0x39;
D_8018D2E8 = 0x2C;
break;
case 11:
D_8018D2C0 = 0x107;
D_8018D2D8 = 0xA5;
D_8018D220 = func_802A84F4(&gTextureExhaust5, 0x443, 0x1000, 0xFF);
D_8018D2A0 = 0.015f;
D_8018D2E0 = 0x37;
D_8018D2E8 = 0x1B;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 12:
D_8018D220 = func_802A84F4(&gTextureExhaust1, 0x485, 0xC00, 0xFF);
D_8018D2A0 = 0.015f;
D_8018D2C0 = 0x106;
D_8018D2E0 = 0x34;
D_8018D2E8 = 0x21;
D_8018D300 = 0x48;
D_8018D308 = 0x64;
D_8018D310 = 0xFF;
phi_v1 = &D_8018D2C0;
phi_t0 = &D_8018D2D8;
break;
case 13:
D_8018D2A0 = 0.0103f;
D_8018D2C0 = 0x105;
D_8018D2D8 = 0xA6;
D_8018D2E0 = 0x27;
D_8018D2E8 = 0x37;
break;
case 14:
D_8018D2A0 = 0.0155f;
D_8018D2C0 = 0x106;
D_8018D2E0 = 0x35;
D_8018D2E8 = 0x23;
break;
case 15:
D_8018D2A0 = 0.0335f;
D_8018D2E0 = 0x20;
D_8018D2E8 = 0x20;
break;
case 16:
D_8018D2A0 = 0.0445f;
D_8018D2E0 = 0x20;
D_8018D2E8 = 0x20;
break;
case 17:
D_8018D2A0 = 0.0285f;
D_8018D2E0 = 0x20;
D_8018D2E8 = 0x20;
break;
case 18:
D_8018D2A0 = 0.0155f;
D_8018D2C0 = 0xFF;
D_8018D2E0 = 0x1D;
D_8018D2E8 = 0x2F;
break;
case 19:
D_8018D2A0 = 0.0257f;
D_8018D2E0 = 0x20;
phi_t9 = 0x1F;
goto block_26;
}
if (gIsMirrorMode != 0) {
D_8018D2E0 = D_8018D2B0 - D_8018D2E0;
}
temp_v0 = D_8018EDF3;
if (temp_v0 == 4) {
phi_v1->unk0 = 0xA0;
phi_t0->unk0 = 0x78;
return;
}
if (temp_v0 == 3) {
phi_v1->unk0 = 0xEB;
phi_t0->unk0 = 0xAF;
return;
}
if (temp_v0 == 2) {
if (gCurrentCourseId != 0xA) {
phi_v1->unk2 = 0x109;
phi_v1->unk0 = phi_v1->unk2;
} else {
phi_v1->unk2 = 0xFF;
phi_v1->unk0 = phi_v1->unk2;
}
phi_t0->unk0 = 0x41;
phi_t0->unk2 = 0xB4;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_8006F008.s")
#endif
@@ -987,15 +1207,88 @@ GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_800704A0.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8007055C:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? find_unused_obj_index(void *); /* extern */
? func_80070328(? *); /* extern */
? func_800704A0(? *); /* extern */
? func_8008C23C(); /* extern */
extern ? D_8018CC80;
static ? D_800E6A38; /* unable to generate initializer; const */
static ? D_800E6AA8; /* unable to generate initializer; const */
static ? D_800E6B00; /* unable to generate initializer; const */
static ? D_800E6B38; /* unable to generate initializer; const */
static ? D_800E6BA8; /* unable to generate initializer; const */
static ? D_800E6C10; /* unable to generate initializer; const */
static ? D_800E6C80; /* unable to generate initializer; const */
static ? D_800E6DE0; /* unable to generate initializer; const */
u16 gCurrentCourseId; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_8007055C.s line 17.
void func_8007055C(void) {
s32 temp_s1;
u16 temp_t6;
s32 phi_s4;
s32 phi_s0;
s32 phi_s1;
s32 phi_s1_2;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t6 = gCurrentCourseId;
switch (temp_t6) {
case 0:
func_80070328(&D_800E6C10);
break;
case 4:
func_80070328(&D_800E6AA8);
break;
case 5:
phi_s4 = 0x19;
phi_s0 = 0;
if (D_8018EDF3 == 1) {
phi_s4 = 0x32;
}
phi_s1 = 0;
phi_s1_2 = 0;
if (phi_s4 > 0) {
do {
find_unused_obj_index(&D_8018CC80 + (D_8018D1F8 * 4) + phi_s0);
temp_s1 = phi_s1 + 1;
phi_s0 += 4;
phi_s1 = temp_s1;
phi_s1_2 = temp_s1;
} while (temp_s1 != phi_s4);
}
D_8018D1F8 += phi_s1_2;
D_8018D1F0 = phi_s1_2;
break;
case 6:
func_80070328(&D_800E6B00);
break;
case 7:
func_80070328(&D_800E6B38);
break;
case 8:
func_80070328(&D_800E6A38);
break;
case 9:
func_80070328(&D_800E6AA8);
break;
case 10:
func_800704A0(&D_800E6C80);
break;
case 11:
func_80070328(&D_800E6C10);
break;
case 12:
func_80070328(&D_800E6BA8);
break;
case 13:
func_800704A0(&D_800E6C80);
break;
case 14:
func_800704A0(&D_800E6DE0);
break;
}
func_8008C23C();
}
#else
GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_8007055C.s")
#endif
@@ -1024,15 +1317,562 @@ GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_80070714.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_80070780:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? find_unused_obj_index(s32 *); /* extern */
? func_80070714(); /* extern */
? func_80071F6C(? *); /* extern */
? func_800723A4(s32, ?, s16 *, ? **); /* extern */
? func_80073444(s32, ? *, ? *, ?, s32); /* extern */
? func_800770F0(s32); /* extern */
? func_800887C0(s32); /* extern */
extern ? D_06007BB8;
extern ? D_06007DB8;
extern ? *D_80165758;
extern ? D_80165C18;
extern ? D_80183EB0;
extern ? D_80183EC8;
extern ? D_80183EDC;
extern ? D_80183F34;
extern ? D_80183F3C;
extern ? D_80183F50;
extern ? D_8018C030;
extern ? D_8018C0B0;
extern ? D_8018C278;
extern ? D_8018C404;
extern ? D_8018C5F0;
extern ? D_8018C6B0;
extern ? D_8018D1A0;
extern ? D_8018D1B3;
extern ? D_8018D1C4;
static ? D_800E5728; /* unable to generate initializer; const */
static ? D_800E5854; /* unable to generate initializer; const */
static ? D_800E5894; /* unable to generate initializer; const */
static ? D_800E58EC; /* unable to generate initializer; const */
static ? D_800E5E14; /* unable to generate initializer; const */
static ? D_800E5EE6; /* unable to generate initializer; const */
static u16 D_800E5EE8; /* type too large by 2; unable to generate initializer; const */
static ? D_800E5FD0; /* unable to generate initializer; const */
static ? D_800E6360; /* unable to generate initializer; const */
static ? D_800E641A; /* unable to generate initializer; const */
u16 gCurrentCourseId; /* unable to generate initializer */
u16 D_800E5E8C[0x2D]; /* unable to generate initializer; const */
u16 D_800E5F80[0x28]; /* unable to generate initializer; const */
Unable to determine jump table for jr instruction at func_80070780.s line 19.
void func_80070780(void) {
void *sp4C;
u16 *sp48;
u16 *sp44;
? *temp_s0_4;
? *temp_s2_2;
f32 temp_f0;
f32 temp_f0_2;
f32 temp_f0_3;
f32 temp_f0_4;
f32 temp_f0_5;
f32 temp_f2;
f32 temp_f2_2;
s32 *temp_s0_15;
s32 *temp_s0_16;
s32 *temp_s0_17;
s32 *temp_s1;
s32 *temp_s1_2;
s32 *temp_s1_3;
s32 *temp_s1_4;
s32 *temp_s1_5;
s32 *temp_s2;
s32 *temp_s2_3;
s32 temp_s0;
s32 temp_s0_10;
s32 temp_s0_14;
s32 temp_s0_2;
s32 temp_s0_3;
s32 temp_s0_5;
s32 temp_s0_6;
s32 temp_s0_7;
s32 temp_s0_8;
s32 temp_s0_9;
s32 temp_s3;
s32 temp_s3_2;
s32 temp_s3_3;
s32 temp_s3_4;
s32 temp_s3_5;
s32 temp_s3_6;
s32 temp_v0;
s32 temp_v0_11;
s8 *temp_s0_11;
s8 *temp_s0_12;
s8 *temp_s0_13;
s8 temp_v0_10;
u16 *temp_v1_2;
u16 *temp_v1_3;
u16 *temp_v1_4;
u16 temp_t6;
void *temp_v0_12;
void *temp_v0_2;
void *temp_v0_3;
void *temp_v0_4;
void *temp_v0_5;
void *temp_v0_6;
void *temp_v0_7;
void *temp_v0_8;
void *temp_v0_9;
void *temp_v1;
s32 *phi_s0;
s32 phi_s3;
s32 *phi_s1;
s32 phi_s2;
s32 phi_s3_2;
s32 *phi_s2_2;
? *phi_s1_2;
s32 phi_s3_3;
? *phi_s0_2;
s32 *phi_s1_3;
u16 *phi_v1;
s32 *phi_s2_3;
? *phi_s1_4;
s32 *phi_s1_5;
u16 *phi_v1_2;
s32 *phi_s2_4;
s32 *phi_s1_6;
u16 *phi_v1_3;
s32 *phi_s1_7;
s32 *phi_s2_5;
s32 *phi_s0_3;
s32 phi_s3_4;
s32 *phi_s0_4;
s32 phi_s3_5;
s8 *phi_s0_5;
s32 *phi_s1_8;
s8 *phi_s0_6;
s32 *phi_s1_9;
s8 *phi_s0_7;
s32 *phi_s1_10;
s32 *phi_s1_11;
? *phi_s2_6;
s32 *phi_s0_8;
s32 *phi_s1_12;
s32 *phi_s0_9;
s32 *phi_s0_10;
s32 *phi_s1_13;
s32 *phi_s1_14;
s32 *phi_s2_7;
s32 phi_s3_6;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_t6 = gCurrentCourseId;
switch (temp_t6) {
case 0:
if (D_800DC50C != 9) {
if (gModeSelection == 0) {
func_80070714();
}
phi_s0 = &D_8018C630;
phi_s3 = 0;
if (D_80165738 > 0) {
do {
find_unused_obj_index(phi_s0);
func_800723A4(*phi_s0, 0);
temp_s3 = phi_s3 + 1;
phi_s0 += 4;
phi_s3 = temp_s3;
} while (temp_s3 < D_80165738);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
}
default:
return;
case 2:
D_80165750 = 0xB;
D_80165758 = &D_800E5894;
temp_v0 = gCCSelection;
if (temp_v0 != 0) {
if (temp_v0 != 1) {
if (temp_v0 != 2) {
if (temp_v0 != 3) {
}
} else {
D_80165750 = 0xC;
D_80165758 = &D_800E58EC;
}
}
} else {
D_80165750 = 8;
D_80165758 = &D_800E5854;
}
phi_s1 = &D_80183EA0;
phi_s3_2 = 0;
if (D_80165750 > 0) {
phi_s2 = 0;
do {
temp_s0 = *phi_s1;
func_800723A4(temp_s0, 0, &D_80165750, &D_80165758);
temp_v1 = D_80165758 + phi_s2;
temp_s3_2 = phi_s3_2 + 1;
temp_v0_2 = &D_80165C18 + (temp_s0 * 0xE0);
temp_v0_2->unk10 = temp_v1->unk0 * D_8018D01C;
temp_v0_2->unk18 = temp_v1->unk2;
temp_v0_2->unkD5 = temp_v1->unk4;
temp_v0_2->unkA0 = temp_v1->unk6;
phi_s1 += 4;
phi_s2 += 8;
phi_s3_2 = temp_s3_2;
} while (temp_s3_2 < D_80165750);
}
temp_s0_2 = D_80183F28;
func_800723A4(temp_s0_2, 0, &D_80165750, &D_80165758);
temp_v0_3 = &D_80165C18 + (temp_s0_2 * 0xE0);
temp_v0_3->unk8 = 80.0f;
temp_v0_3->unk4 = D_8018D01C * -68.0;
temp_v0_3->unkC = -1840.0f;
phi_s2_2 = &D_8018BFA8;
phi_s1_2 = &D_800E5728;
phi_s3_3 = 0;
do {
temp_s0_3 = *phi_s2_2;
func_800723A4(temp_s0_3, 0);
temp_v0_4 = &D_80165C18 + (temp_s0_3 * 0xE0);
temp_s3_3 = phi_s3_3 + 1;
temp_v0_4->unk8 = phi_s1_2->unk2;
temp_v0_4->unk4 = phi_s1_2->unk0 * D_8018D01C;
temp_v0_4->unkC0 = 0;
temp_v0_4->unkC = phi_s1_2->unk4;
phi_s2_2 += 4;
phi_s3_3 = temp_s3_3;
if ((phi_s3_3 & 1) != 0) {
temp_v0_4->unkC0 = 0x8000;
}
phi_s1_2 += 6;
} while (temp_s3_3 < 4);
phi_s0_2 = &D_8018C030;
do {
func_80071F6C(phi_s0_2);
temp_s0_4 = phi_s0_2 + 4;
phi_s0_2 = temp_s0_4;
} while (temp_s0_4 != &D_8018C0B0);
return;
case 3:
if (D_800DC50C != 9) {
temp_s0_5 = D_80183EA0.unk0;
func_80073444(temp_s0_5, &D_06007BB8, &D_06007DB8, 0x20, 0x40);
temp_v0_5 = &D_80165C18 + (temp_s0_5 * 0xE0);
temp_v0_5->unkB2 = 0;
temp_v0_5->unkB4 = 0;
temp_v0_5->unkB6 = 0x8000;
func_800723A4(D_80183EA0.unk4, 0);
func_800723A4(D_80183EA0.unk8, 0);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 4:
phi_s1_3 = &D_80183EA0;
do {
func_800723A4(*phi_s1_3, 0);
temp_s1 = phi_s1_3 + 4;
phi_s1_3 = temp_s1;
} while (temp_s1 < &D_80183EB0);
phi_s2_3 = &D_80183F28;
if (D_800DC50C != 9) {
phi_v1 = D_800E5E8C;
phi_s1_4 = &D_800E5E14;
do {
temp_s0_6 = *phi_s2_3;
sp44 = phi_v1;
func_800723A4(temp_s0_6, 0);
temp_f2 = D_8018D01C;
temp_f0 = phi_s1_4->unk0 * temp_f2;
temp_v0_6 = &D_80165C18 + (temp_s0_6 * 0xE0);
temp_v0_6->unk10 = temp_f0;
temp_v0_6->unk4 = temp_f0;
temp_f0_2 = phi_s1_4->unk2 + 6.0;
temp_v1_2 = phi_v1 + 6;
temp_v0_6->unk44 = temp_f0_2;
temp_v0_6->unk8 = temp_f0_2;
temp_f0_3 = phi_s1_4->unk4;
temp_v0_6->unkD5 = phi_s1_4->unk6;
temp_v0_6->unk9E = phi_v1->unk4;
temp_v0_6->unk18 = temp_f0_3;
temp_v0_6->unkC = temp_f0_3;
temp_v0_6->unk9C = phi_v1->unk0 * temp_f2;
phi_v1 = temp_v1_2;
phi_s2_3 += 4;
phi_s1_4 += 8;
} while (temp_v1_2 != &D_800E5EE6);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 5:
phi_s1_5 = &D_8018C1B0;
do {
find_unused_obj_index(phi_s1_5);
temp_s1_2 = phi_s1_5 + 4;
phi_s1_5 = temp_s1_2;
} while (temp_s1_2 < &D_8018C278);
phi_s1_6 = &D_80183EA0;
if (D_800DC50C != 9) {
phi_v1_2 = &D_800E5EE8;
phi_s2_4 = &D_80183F28;
do {
temp_s0_7 = *phi_s2_4;
sp44 = phi_v1_2;
func_800723A4(temp_s0_7, 0);
temp_v0_7 = &D_80165C18 + (temp_s0_7 * 0xE0);
temp_s0_8 = *phi_s1_6;
temp_v0_7->unk10 = phi_v1_2->unk0 * D_8018D01C;
temp_v0_7->unk18 = phi_v1_2->unk4;
temp_v0_7->unk14 = phi_v1_2->unk2 + 5.0 + 3.0;
func_800723A4(temp_s0_8, 0);
temp_v0_8 = &D_80165C18 + (temp_s0_8 * 0xE0);
temp_v1_3 = phi_v1_2 + 8;
temp_v0_8->unkD5 = phi_v1_2->unk6;
temp_v0_8->unk10 = phi_v1_2->unk0 * D_8018D01C;
temp_v0_8->unk14 = phi_v1_2->unk2 + 3.0;
temp_v0_8->unk18 = phi_v1_2->unk4;
phi_v1_2 = temp_v1_3;
phi_s2_4 += 4;
phi_s1_6 += 4;
} while (temp_v1_3 != D_800E5F80);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 6:
phi_s1_7 = &D_80183EA0;
if (D_800DC50C != 9) {
phi_v1_3 = D_800E5F80;
do {
temp_s0_9 = *phi_s1_7;
sp48 = phi_v1_3;
func_800723A4(temp_s0_9, 0);
temp_f2_2 = D_8018D01C;
temp_v0_9 = &D_80165C18 + (temp_s0_9 * 0xE0);
temp_f0_4 = phi_v1_3->unk0 * temp_f2_2;
temp_v1_4 = phi_v1_3 + 8;
temp_v0_9->unk10 = temp_f0_4;
temp_v0_9->unk4 = temp_f0_4;
temp_f0_5 = phi_v1_3->unk4;
temp_v0_9->unk1C = phi_v1_3->unk2 * temp_f2_2;
temp_v0_9->unk18 = temp_f0_5;
temp_v0_9->unkC = temp_f0_5;
temp_v0_9->unk24 = phi_v1_3->unk6;
phi_v1_3 = temp_v1_4;
phi_s1_7 += 4;
} while (temp_v1_4 != &D_800E5FD0);
}
phi_s2_5 = &D_80183F28;
do {
temp_s0_10 = *phi_s2_5;
func_800723A4(temp_s0_10, 0);
temp_s2 = phi_s2_5 + 4;
phi_s2_5 = temp_s2;
if (phi_s2_5 < &D_80183F3C) {
(&D_80165C18 + (temp_s0_10 * 0xE0))->unkD5 = 0;
} else {
(&D_80165C18 + (temp_s0_10 * 0xE0))->unkD5 = 1;
}
} while (temp_s2 != &D_80183F50);
return;
case 7:
if (D_800DC50C != 9) {
if (gModeSelection == 0) {
func_80070714();
}
phi_s0_3 = &D_8018C630;
phi_s3_4 = 0;
if (D_80165738 > 0) {
do {
find_unused_obj_index(phi_s0_3);
func_800723A4(*phi_s0_3, 0);
temp_s3_4 = phi_s3_4 + 1;
phi_s0_3 += 4;
phi_s3_4 = temp_s3_4;
} while (temp_s3_4 < D_80165738);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 8:
if (D_800DC50C != 9) {
if (gModeSelection == 0) {
func_80070714();
}
D_80165898 = 0;
func_800723A4(D_80183EA0.unk0, 0);
phi_s0_4 = &D_8018C630;
phi_s3_5 = 0;
if (D_80165738 > 0) {
do {
find_unused_obj_index(phi_s0_4);
func_800723A4(*phi_s0_4, 0);
temp_s3_5 = phi_s3_5 + 1;
phi_s0_4 += 4;
phi_s3_5 = temp_s3_5;
} while (temp_s3_5 < D_80165738);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 9:
if (D_800DC50C != 9) {
temp_v0_10 = D_8018EDF3;
phi_s1_8 = &D_80183EA0;
if ((temp_v0_10 == 1) || ((temp_v0_10 == 2) && (gModeSelection == 2))) {
temp_v0_11 = gCCSelection;
if (temp_v0_11 != 0) {
if (temp_v0_11 != 1) {
if (temp_v0_11 != 2) {
if (temp_v0_11 != 3) {
} else {
D_8018D1C8 = 5;
D_8018D1D0 = 8;
D_8018D1D8 = 8;
}
} else {
D_8018D1C8 = 5;
D_8018D1D0 = 8;
D_8018D1D8 = 0xA;
}
} else {
D_8018D1C8 = 5;
D_8018D1D0 = 8;
D_8018D1D8 = 8;
}
} else {
D_8018D1C8 = 4;
D_8018D1D0 = 6;
goto block_75;
}
} else {
D_8018D1C8 = 4;
D_8018D1D0 = 6;
block_75:
D_8018D1D8 = 6;
}
phi_s0_5 = &D_8018D198;
do {
*phi_s0_5 = 0;
find_unused_obj_index(phi_s1_8);
temp_s0_11 = phi_s0_5 + 1;
phi_s0_5 = temp_s0_11;
phi_s1_8 += 4;
} while (temp_s0_11 < &D_8018D1A0);
phi_s0_6 = &D_8018D1A8;
phi_s1_9 = &D_80183EA0;
do {
*phi_s0_6 = 0;
find_unused_obj_index(phi_s1_9);
temp_s0_12 = phi_s0_6 + 1;
phi_s0_6 = temp_s0_12;
phi_s1_9 += 4;
} while (temp_s0_12 < &D_8018D1B3);
phi_s0_7 = &D_8018D1B8;
phi_s1_10 = &D_80183EA0;
do {
*phi_s0_7 = 0;
find_unused_obj_index(phi_s1_10);
temp_s0_13 = phi_s0_7 + 1;
phi_s0_7 = temp_s0_13;
phi_s1_10 += 4;
} while (temp_s0_13 < &D_8018D1C4);
phi_s1_11 = &D_8018C1B0;
phi_s2_6 = &D_800E6360;
do {
find_unused_obj_index(phi_s1_11);
temp_s0_14 = *phi_s1_11;
func_800723A4(temp_s0_14, 0);
temp_v0_12 = &D_80165C18 + (temp_s0_14 * 0xE0);
sp4C = temp_v0_12;
temp_v0_12->unkC = phi_s2_6->unk4;
temp_v0_12->unk4 = phi_s2_6->unk0 * D_8018D01C;
func_800887C0(temp_s0_14);
temp_s2_2 = phi_s2_6 + 6;
temp_v0_12->unk0 = 0.7f;
phi_s1_11 += 4;
phi_s2_6 = temp_s2_2;
} while (temp_s2_2 < &D_800E641A);
phi_s0_8 = &D_8018C3F0;
do {
find_unused_obj_index(phi_s0_8);
temp_s0_15 = phi_s0_8 + 4;
phi_s0_8 = temp_s0_15;
} while (temp_s0_15 != &D_8018C5F0);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 11:
if (D_800DC50C != 9) {
find_unused_obj_index(&D_8018CF10);
func_800723A4(D_8018CF10, 0);
phi_s1_12 = &D_8018C1B0;
do {
find_unused_obj_index(phi_s1_12);
temp_s1_3 = phi_s1_12 + 4;
phi_s1_12 = temp_s1_3;
} while (temp_s1_3 < &D_8018C278);
phi_s0_9 = &D_8018C3F0;
do {
find_unused_obj_index(phi_s0_9);
temp_s0_16 = phi_s0_9 + 4;
phi_s0_9 = temp_s0_16;
} while (temp_s0_16 < &D_8018C404);
phi_s0_10 = &D_8018C630;
do {
find_unused_obj_index(phi_s0_10);
temp_s0_17 = phi_s0_10 + 4;
phi_s0_10 = temp_s0_17;
} while (temp_s0_17 != &D_8018C6B0);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 12:
phi_s1_13 = &D_80183EA0;
do {
func_800723A4(*phi_s1_13, 0);
temp_s1_4 = phi_s1_13 + 4;
phi_s1_13 = temp_s1_4;
} while (temp_s1_4 != &D_80183EDC);
return;
case 13:
phi_s1_14 = &D_80183EA0;
if (D_800DC50C != 9) {
do {
func_800723A4(*phi_s1_14, 0);
temp_s1_5 = phi_s1_14 + 4;
phi_s1_14 = temp_s1_5;
} while (temp_s1_5 < &D_80183EC8);
phi_s2_7 = &D_80183F28;
do {
func_800723A4(*phi_s2_7, 0);
temp_s2_3 = phi_s2_7 + 4;
phi_s2_7 = temp_s2_3;
} while (temp_s2_3 != &D_80183F34);
return;
}
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
case 18:
phi_s3_6 = 0;
do {
func_800770F0(phi_s3_6);
temp_s3_6 = phi_s3_6 + 1;
phi_s3_6 = temp_s3_6;
} while (temp_s3_6 != 8);
/* Duplicate return node #106. Try simplifying control flow for better match */
return;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_8006E9C0/func_80070780.s")
#endif
+3138 -301
View File
File diff suppressed because it is too large Load Diff
+98 -7
View File
@@ -2658,15 +2658,106 @@ GLOBAL_ASM("asm/non_matchings/code_80086E70/func_8008BFC0.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_8008BFFC:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_80086F60(); /* extern */
? func_80088228(); /* extern */
? func_80088364(); /* extern */
? func_8008B620(); /* extern */
? func_8008B6A4(); /* extern */
extern ? D_80165C18;
Unable to determine jump table for jr instruction at func_8008BFFC.s line 17.
void func_8008BFFC(s32 arg0) {
s16 temp_v0;
s16 temp_v0_2;
s16 temp_v0_3;
s16 temp_v0_4;
s16 temp_v0_5;
s16 temp_v0_6;
u8 temp_t8;
void *temp_v1;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_v1 = (arg0 * 0xE0) + &D_80165C18;
temp_t8 = temp_v1->unkDE;
switch (temp_t8) {
case 1:
if (temp_v1->unkAE == 1) {
func_8008B620();
return;
}
default:
return;
case 2:
temp_v0 = temp_v1->unkAE;
if ((temp_v0 != 0) && (temp_v0 == 1)) {
func_8008B6A4();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
case 3:
temp_v0_2 = temp_v1->unkAE;
if ((temp_v0_2 != 0) && (temp_v0_2 == 1)) {
func_8008B620();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
case 4:
temp_v0_3 = temp_v1->unkAE;
if (temp_v0_3 != 0) {
if (temp_v0_3 != 1) {
if (temp_v0_3 != 2) {
return;
}
func_80086F60();
return;
}
func_8008B620();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
case 5:
temp_v0_4 = temp_v1->unkAE;
if (temp_v0_4 != 0) {
if (temp_v0_4 != 1) {
if (temp_v0_4 != 2) {
return;
}
func_80086F60();
return;
}
func_8008B620();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
case 6:
temp_v0_5 = temp_v1->unkAE;
if ((temp_v0_5 != 0) && (temp_v0_5 == 1)) {
func_8008B620();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
case 7:
temp_v0_6 = temp_v1->unkAE;
if (temp_v0_6 != 0) {
if (temp_v0_6 != 1) {
if (temp_v0_6 != 2) {
return;
}
func_80088364();
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
}
func_80088228();
return;
}
/* Duplicate return node #31. Try simplifying control flow for better match */
return;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_80086E70/func_8008BFFC.s")
#endif
+3168 -62
View File
File diff suppressed because it is too large Load Diff
+6674 -315
View File
File diff suppressed because it is too large Load Diff
+1680 -42
View File
File diff suppressed because it is too large Load Diff
+1737 -49
View File
File diff suppressed because it is too large Load Diff
+1995 -124
View File
File diff suppressed because it is too large Load Diff
+1338 -49
View File
File diff suppressed because it is too large Load Diff
+119 -67
View File
@@ -63,11 +63,12 @@ void crash_screen_draw_glyph(u16 *framebuffer, s32 x, s32 y, s32 glyph) {
}
}
GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen.s")
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? osViSwapBuffer(s32); /* extern */
? osWritebackDCacheAll(s32, s32, s16, s16); /* extern */
/*
void crash_screen_draw_square(uint_ptr arg0, s32 arg1) {
void crash_screen_draw_square(s32 arg0, s32 arg1) {
s32 temp_a0;
s32 temp_a1;
s32 temp_a1_2;
@@ -103,26 +104,26 @@ void crash_screen_draw_square(uint_ptr arg0, s32 arg1) {
phi_a1_4 = phi_a1_3;
if (phi_s2 < phi_s0) {
do {
phi_v1 = phi_s2;
phi_v1_2 = phi_s2;
if (phi_s2 < phi_s0) {
temp_a0 = phi_s0 - phi_s2;
temp_t0 = temp_a0 & 3;
temp_ra = arg0 + (phi_s1 * 0x280);
phi_v1_2 = phi_s2;
phi_a0_3 = temp_a0;
if (temp_t0 != 0) {
phi_v0 = temp_ra + (phi_s2 * 2);
phi_v1 = phi_s2;
do {
temp_v1 = phi_v1 + 1;
phi_v1 = temp_v1;
phi_v1_2 = temp_v1;
if (temp_a0 == 6) {
*phi_v0 = 0xF801;
} else {
*phi_v0 = 0xFFFF;
}
phi_v0 += 2;
phi_v1 = temp_v1;
} while ((temp_t0 + phi_s2) != temp_v1);
phi_v1_2 = temp_v1;
phi_a0_3 = temp_a0;
phi_a1_4 = temp_v1 * 2;
if (temp_v1 != phi_s0) {
goto block_10;
@@ -134,6 +135,8 @@ block_10:
phi_a1 = temp_a1;
do {
temp_a1_2 = phi_a1 + 8;
phi_a1 = temp_a1_2;
phi_a1_4 = temp_a1_2;
if (temp_a0 == 6) {
phi_v0_2->unk0 = 0xF801;
} else {
@@ -155,9 +158,6 @@ block_10:
phi_v0_2->unk6 = 0xFFFF;
}
phi_v0_2 += 8;
phi_a1 = temp_a1_2;
phi_a0_3 = temp_a0;
phi_a1_4 = temp_a1_2;
} while (temp_a1_2 != (phi_s0 * 2));
}
}
@@ -176,8 +176,18 @@ block_10:
osWritebackDCacheAll(phi_a0, phi_a1_2, 0xF801, 0xFFFF);
osViSwapBuffer(arg0);
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen_draw_square.s")
#endif
void crash_screen_draw_info(uint_ptr arg0, void *arg1) {
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? crash_screen_draw_glyph(s32, s32, s32, u32); /* extern */
? osViSwapBuffer(s32); /* extern */
? osWritebackDCacheAll(); /* extern */
extern s32 D_800DC670;
void crash_screen_draw_info(s32 arg0, void *arg1) {
s32 temp_a2;
s32 temp_s0;
s32 temp_s1;
@@ -229,52 +239,54 @@ loop_3:
}
temp_t0 = phi_t0 + 0x14;
phi_t0 = temp_t0;
} while ((temp_t0 < 0x3C) != 0);
} while (temp_t0 < 0x3C);
temp_s0 = (D_800DC670 * 0x18) + 0x35;
func_800040C0(arg0, 0x6C, temp_s0, arg1->unk14 & 0xF);
func_800040C0(arg0, 0x74, temp_s0, 0x10U);
crash_screen_draw_glyph(arg0, 0x6C, temp_s0, arg1->unk14 & 0xF);
crash_screen_draw_glyph(arg0, 0x74, temp_s0, 0x10);
temp_s2 = arg1 + 0x20;
phi_s1 = 0xB4;
phi_s4 = temp_s2->unkFC;
phi_s1_2 = 0xB4;
phi_s1_3 = 0xB4;
do {
func_800040C0(arg0, phi_s1, temp_s0, phi_s4 & 0xF);
crash_screen_draw_glyph(arg0, phi_s1, temp_s0, phi_s4 & 0xF);
temp_s1 = phi_s1 - 8;
phi_s1 = temp_s1;
phi_s4 = phi_s4 >> 4;
} while ((temp_s1 < 0x7C) == 0);
temp_s1_2 = ((u32) temp_s2->unk100 >> 2) & 0x1F;
func_800040C0(arg0, 0xBC, temp_s0, 0x10U);
func_800040C0(arg0, 0xC4, temp_s0, temp_s1_2 >> 4);
func_800040C0(arg0, 0xCC, temp_s0, temp_s1_2 & 0xF);
phi_s1_2 = 0xB4;
} while (temp_s1 >= 0x7C);
temp_s1_2 = (temp_s2->unk100 >> 2) & 0x1F;
crash_screen_draw_glyph(arg0, 0xBC, temp_s0, 0x10);
crash_screen_draw_glyph(arg0, 0xC4, temp_s0, temp_s1_2 >> 4);
crash_screen_draw_glyph(arg0, 0xCC, temp_s0, temp_s1_2 & 0xF);
phi_s4_2 = temp_s2->unkE4;
do {
func_800040C0(arg0, phi_s1_2, 0x49, phi_s4_2 & 0xF);
crash_screen_draw_glyph(arg0, phi_s1_2, 0x49, phi_s4_2 & 0xF);
temp_s1_3 = phi_s1_2 - 8;
temp_t3 = phi_s4_2 >> 4;
phi_s1_2 = temp_s1_3;
phi_s4_2 = temp_t3;
} while ((temp_s1_3 < 0x7C) == 0);
temp_t4 = temp_s2->unkFC & ~3;
phi_s1_3 = 0xB4;
phi_s4_3 = temp_t3;
if (temp_t4 >= 0x80000001U) {
phi_s1_3 = 0xB4;
phi_s4_3 = temp_t3;
if (temp_t4 < 0x803FFF7FU) {
phi_s1_3 = 0xB4;
phi_s4_3 = *temp_t4;
}
} while (temp_s1_3 >= 0x7C);
temp_t4 = temp_s2->unkFC & ~3;
if ((temp_t4 >= 0x80000001) && (temp_t4 < 0x803FFF7F)) {
phi_s4_3 = *temp_t4;
}
do {
func_800040C0(arg0, phi_s1_3, 0x5D, phi_s4_3 & 0xF);
crash_screen_draw_glyph(arg0, phi_s1_3, 0x5D, phi_s4_3 & 0xF);
temp_s1_4 = phi_s1_3 - 8;
phi_s1_3 = temp_s1_4;
phi_s4_3 = phi_s4_3 >> 4;
} while ((temp_s1_4 < 0x7C) == 0);
} while (temp_s1_4 >= 0x7C);
osWritebackDCacheAll();
osViSwapBuffer(arg0);
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen_draw_info.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
void *__osGetCurrFaultedThread(); /* extern */
void *get_faulted_thread(void) {
s32 temp_v0_2;
@@ -284,9 +296,9 @@ void *get_faulted_thread(void) {
void *phi_v1;
temp_v0 = __osGetCurrFaultedThread();
phi_v1 = temp_v0;
if (temp_v0->unk4 != -1) {
phi_v0 = temp_v0->unk4;
phi_v1 = temp_v0;
loop_2:
if ((phi_v0 > 0) && (phi_v0 < 0x80) && ((phi_v1->unk12 & 3) != 0)) {
return phi_v1;
@@ -303,12 +315,31 @@ loop_2:
block_7:
return NULL;
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/get_faulted_thread.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? crash_screen_draw_info(s32, s32); /* extern */
? crash_screen_draw_square(s32); /* extern */
s32 get_faulted_thread(); /* extern */
? osRecvMesg(? *, ? *, ?); /* extern */
? osSetEventMesg(?, ? *, ?); /* extern */
? read_controllers(); /* extern */
extern void *D_800DC4BC;
extern s32 D_800DC670;
extern ? D_800DC6FC;
extern ? D_80162D40;
extern s32 D_80162D60;
extern s32 D_80162D64;
extern s32 pFramebuffer;
void thread9_crash_screen(s32 arg0) {
? sp44;
s32 temp_v0;
s32 temp_v1;
u16 temp_v0_2;
void *temp_v0;
osSetEventMesg(0xC, &D_80162D40, 0x10);
osSetEventMesg(0xA, &D_80162D40, 0x10);
@@ -320,49 +351,70 @@ loop_1:
if (temp_v0 == 0) {
goto loop_1;
}
if (D_800DC670 != 0) {
goto block_10;
}
crash_screen_draw_square(pFramebuffer);
if (D_800DC670 == 0) {
crash_screen_draw_square(pFramebuffer);
do {
loop_4:
read_controllers();
temp_v0_2 = D_800DC4BC->unk6;
if (temp_v0_2 == 0) {
goto loop_4;
read_controllers();
temp_v0_2 = D_800DC4BC->unk6;
if (temp_v0_2 == 0) {
goto loop_4;
}
temp_v1 = D_80162D60;
if (temp_v0_2 == *(&D_800DC6FC + (temp_v1 * 2))) {
D_80162D60 = temp_v1 + 1;
} else {
D_80162D60 = 0;
}
} while (*(&D_800DC6FC + (D_80162D60 * 2)) != 0xFFFF);
crash_screen_draw_info(pFramebuffer, D_80162D64);
}
temp_v1 = D_80162D60;
if (temp_v0_2 != *(&D_800DC6FC + (temp_v1 * 2))) {
goto block_7;
}
D_80162D60 = (s32) (temp_v1 + 1);
goto block_8;
block_7:
D_80162D60 = 0;
block_8:
if (*(&D_800DC6FC + (D_80162D60 * 2)) != 0xFFFF) {
goto loop_4;
}
crash_screen_draw_info(pFramebuffer, D_80162D64);
block_10:
if (D_800DC670 >= 5) {
goto loop_1;
}
D_800DC670 = (s32) (D_800DC670 + 1);
D_800DC670 += 1;
goto loop_1;
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/thread9_crash_screen.s")
#endif
// crash_screen_set_framebuffer
void func_800046AC(uintptr_t framebuffer) {
pFramebuffer = framebuffer;
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
extern s32 pFramebuffer;
void func_800046AC(s32 arg0) {
pFramebuffer = arg0;
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/func_800046AC.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? osCreateMesgQueue(? *, ? *, ?); /* extern */
? osCreateThread(? *, ?, ? *, ?, ? *, s32); /* extern */
extern ? D_80162790;
extern ? D_80162D40;
extern ? D_80162D58;
extern ? thread9_crash_screen;
void create_debug_thread(void) {
osCreateMesgQueue(&D_80162D40, &D_80162D58, 1);
osCreateThread(&D_80162790, 9, thread9_crash_screen, 0, &D_80162D40, 0x7F);
osCreateThread(&D_80162790, 9, &thread9_crash_screen, 0, &D_80162D40, 0x7F);
}
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/create_debug_thread.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? osStartThread(? *); /* extern */
extern ? D_80162790;
void start_debug_thread(void) {
osStartThread(&D_80162790);
}
*/
#else
GLOBAL_ASM("asm/non_matchings/crash_screen/start_debug_thread.s")
#endif
+1910 -23
View File
File diff suppressed because it is too large Load Diff
+582 -21
View File
@@ -789,29 +789,197 @@ GLOBAL_ASM("asm/non_matchings/memory/func_802A8F14.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_802A8F80:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
static ? D_802B8D58; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_802A8F80.s line 24.
void func_802A8F80(s32 arg0, s32 arg1, s8 arg2) {
s32 sp58;
s32 sp48;
s32 sp44;
s32 sp40;
s32 temp_a1;
s32 temp_t5;
s32 temp_t8;
s32 temp_t9;
u8 temp_a0;
u8 temp_a0_2;
s32 phi_v1;
s32 phi_v0;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
sp58.unk0 = D_802B8D58.unk0;
sp58.unk4 = D_802B8D58.unk4;
phi_v0 = 0;
phi_v0 = 0;
switch (arg2) {
case 26:
sp44 = 0x20;
sp40 = 0;
phi_v1 = 0x20;
block_9:
sp48 = phi_v1;
break;
case 44:
sp44 = 0x20;
sp40 = 0;
phi_v1 = 0x20;
phi_v0 = 0x100;
goto block_9;
case 27:
sp44 = 0x20;
sp40 = 0;
phi_v1 = 0x40;
goto block_9;
case 28:
sp44 = 0x40;
sp40 = 0;
phi_v1 = 0x20;
goto block_9;
case 29:
sp44 = 0x20;
sp40 = 3;
phi_v1 = 0x20;
goto block_9;
case 30:
sp44 = 0x20;
sp40 = 3;
phi_v1 = 0x40;
goto block_9;
case 31:
sp44 = 0x40;
sp40 = 3;
phi_v1 = 0x20;
goto block_9;
}
temp_a1 = D_802BA274;
temp_a0 = *(temp_a1 + arg1);
temp_t9 = temp_a1 + 1;
D_802BA274 = temp_t9;
temp_a0_2 = *(temp_t9 + arg1);
D_802BA274 = temp_t9 + 1;
*(arg0 + (D_802BA270 * 8)) = sp58;
(arg0 + (D_802BA270 * 8))->unk4 = sp5C;
D_802BA270 += 1;
*(arg0 + (D_802BA270 * 8)) = (sp40 << 0x15) | 0xF5000000 | 0x100000 | ((((sp48 * 2) + 7) >> 3) << 9) | phi_v0;
(arg0 + (D_802BA270 * 8))->unk4 = ((temp_a0_2 & 0xF) << 0x12) | (((temp_a0_2 & 0xF0) >> 4) << 0xE) | ((temp_a0 & 0xF) << 8) | (((temp_a0 & 0xF0) >> 4) * 0x10);
temp_t5 = D_802BA270 + 1;
temp_t8 = temp_t5 * 8;
D_802BA270 = temp_t5;
*(arg0 + temp_t8) = 0xF2000000;
(arg0 + (D_802BA270 * 8))->unk4 = ((sp48 - 1) << 0xE) | ((sp44 - 1) * 4);
D_802BA270 += 1;
}
#else
GLOBAL_ASM("asm/non_matchings/memory/func_802A8F80.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function func_802A91E4:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
static ? D_802B8D60; /* unable to generate initializer */
static ? D_802B8D68; /* unable to generate initializer */
Unable to determine jump table for jr instruction at func_802A91E4.s line 27.
void func_802A91E4(s32 arg0, s32 arg1, s8 arg2) {
s32 sp48;
s32 sp40;
s32 sp2C;
s32 sp28;
s32 sp24;
s32 temp_t1;
s32 temp_t6;
s32 temp_t6_2;
s32 temp_t8;
s32 temp_t9;
s32 temp_t9_2;
s32 temp_v1;
u32 temp_t2;
u32 temp_t6_3;
u8 temp_a2;
u8 temp_a3;
s32 phi_v0;
u32 phi_v0_2;
u32 phi_a2;
u32 phi_v1;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
sp48.unk0 = D_802B8D60.unk0;
sp48.unk4 = D_802B8D60.unk4;
sp40.unk0 = D_802B8D68.unk0;
sp40.unk4 = D_802B8D68.unk4;
switch (arg2) {
case 32:
sp28 = 0x20;
sp24 = 0;
phi_v0 = 0x20;
block_8:
sp2C = phi_v0;
break;
case 33:
sp28 = 0x20;
sp24 = 0;
phi_v0 = 0x40;
goto block_8;
case 34:
sp28 = 0x40;
sp24 = 0;
phi_v0 = 0x20;
goto block_8;
case 35:
sp28 = 0x20;
sp24 = 3;
phi_v0 = 0x20;
goto block_8;
case 36:
sp28 = 0x20;
sp24 = 3;
phi_v0 = 0x40;
goto block_8;
case 37:
sp28 = 0x40;
sp24 = 3;
phi_v0 = 0x20;
goto block_8;
}
temp_v1 = D_802BA274;
temp_a2 = *(arg1 + temp_v1);
temp_t9 = temp_v1 + 1;
D_802BA274 = temp_t9;
temp_t8 = temp_t9 + 1;
D_802BA274 = temp_t8;
temp_a3 = *(temp_t8 + arg1);
D_802BA274 = temp_t8 + 1;
temp_t6 = sp24 << 0x15;
*(arg0 + (D_802BA270 * 8)) = temp_t6 | 0xFD000000 | 0x100000;
(arg0 + (D_802BA270 * 8))->unk4 = (temp_a2 << 0xB) + 0x5000000;
temp_t9_2 = D_802BA270 + 1;
D_802BA270 = temp_t9_2;
*(arg0 + (temp_t9_2 * 8)) = sp48;
(arg0 + (D_802BA270 * 8))->unk4 = sp4C;
D_802BA270 += 1;
*(arg0 + (D_802BA270 * 8)) = temp_t6 | 0xF5000000 | 0x100000 | (temp_a3 & 0xF);
temp_t1 = ((temp_a3 & 0xF0) >> 4) << 0x18;
(arg0 + (D_802BA270 * 8))->unk4 = temp_t1;
temp_t6_2 = D_802BA270 + 1;
D_802BA270 = temp_t6_2;
*(arg0 + (temp_t6_2 * 8)) = sp40;
(arg0 + (D_802BA270 * 8))->unk4 = sp44;
temp_t6_3 = (sp2C * 2) >> 3;
D_802BA270 += 1;
temp_t2 = (sp2C * sp28) - 1;
phi_v1 = 0x7FF;
if (temp_t2 < 0x7FF) {
phi_v1 = temp_t2;
}
if (temp_t6_3 == 0) {
phi_v0_2 = 1;
} else {
phi_v0_2 = temp_t6_3;
}
phi_a2 = temp_t6_3;
if (temp_t6_3 == 0) {
phi_a2 = 1;
}
*(arg0 + (D_802BA270 * 8)) = 0xF3000000;
(arg0 + (D_802BA270 * 8))->unk4 = ((phi_v0_2 + 0x7FF) / phi_a2) | temp_t1 | (phi_v1 << 0xC);
D_802BA270 += 1;
}
#else
GLOBAL_ASM("asm/non_matchings/memory/func_802A91E4.s")
#endif
@@ -1069,15 +1237,408 @@ GLOBAL_ASM("asm/non_matchings/memory/func_802A99A4.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
/*
Failed to decompile function display_list_unpack:
//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909
? func_802A884C(s32, s32, s8, s32 *); /* extern */
? func_802A8940(s32, s32, s8, s32 *); /* extern */
? func_802A89C0(s32, s32, s8, s32 *); /* extern */
? func_802A8A04(s32, s32, s8, s32 *); /* extern */
? func_802A8A70(s32, s32, s8, s32 *); /* extern */
? func_802A8ADC(s32, s32, s8, s32 *); /* extern */
? func_802A8B48(s32, s32, s32, s32 *); /* extern */
? func_802A8BB4(s32, s32, s32, s32 *); /* extern */
? func_802A8C20(s32, s32, s32, s32 *); /* extern */
? func_802A8C8C(s32, s32, s32, s32 *); /* extern */
? func_802A8CF8(s32, s32, s32, s32 *); /* extern */
? func_802A8D64(s32, s32, s32, s32 *); /* extern */
? func_802A8DD0(s32, s32, s32, s32 *); /* extern */
? func_802A8E3C(s32, s32, s32, s32 *); /* extern */
? func_802A8EA8(s32, s32, s32, s32 *); /* extern */
? func_802A8F14(s32, s32, s32, s32 *); /* extern */
? func_802A8F80(s32, s32, s8, s32 *); /* extern */
? func_802A91E4(s32, s32, s8, s32 *); /* extern */
? func_802A94D8(s32, s32, s8, s32 *); /* extern */
? func_802A9544(s32, s32, s8, s32 *); /* extern */
? func_802A95B0(s32, s32, s8, s32 *); /* extern */
? func_802A9674(s32, s32, s8, s32 *); /* extern */
? func_802A9714(s32, s32, s8, s32 *); /* extern */
? func_802A980C(s32, s32, s8, s32 *); /* extern */
? func_802A99A4(s32, s32, s8, s32 *); /* extern */
? set_segment_base_addr(?, s32); /* extern */
Unable to determine jump table for jr instruction at display_list_unpack.s line 52.
void display_list_unpack(u32 arg0, s32 arg1, s32 arg2) {
s32 sp2C;
s32 temp_s0;
s32 temp_s1;
s32 temp_v1;
u8 temp_a0;
s32 *phi_a3;
There must be a read of a variable in the same block as
the instruction, which has a name starting with "jtbl"/"jpt_".
*/
temp_s0 = gSegmentTable[arg0 >> 0x18] + (arg0 & 0xFFFFFF) + 0x80000000;
temp_s1 = gHeapEndPtr - (((arg1 + 0xF) & ~0xF) + 8);
gHeapEndPtr = temp_s1;
D_802BA270 = 0;
sp2C = temp_s1;
D_802BA274 = 0;
phi_a3 = &D_802BA274;
loop_1:
temp_v1 = *phi_a3;
temp_a0 = *(temp_v1 + temp_s0);
*phi_a3 = temp_v1 + 1;
if (temp_a0 != 0xFF) {
switch (temp_a0) {
case 0x0:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x5:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x6:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x7:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x8:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x9:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xA:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xB:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xC:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xD:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xE:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0xF:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x10:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x11:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x12:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x13:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x14:
func_802A884C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x15:
func_802A8B48(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x16:
func_802A8BB4(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x17:
func_802A8C20(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2E:
func_802A8C8C(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x53:
func_802A8CF8(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x18:
func_802A8D64(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x19:
func_802A8DD0(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2F:
func_802A8E3C(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x54:
func_802A8EA8(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x55:
func_802A8F14(temp_s1, temp_s0, arg2, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1A:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2C:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1B:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1C:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1D:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1E:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x1F:
func_802A8F80(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x20:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x21:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x22:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x23:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x24:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x25:
func_802A91E4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x26:
func_802A94D8(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x27:
func_802A9544(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x28:
func_802A95B0(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x33:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x34:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x35:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x36:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x37:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x38:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x39:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3A:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3B:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3C:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3D:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3E:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x3F:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x40:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x41:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x42:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x43:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x44:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x45:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x46:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x47:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x48:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x49:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4A:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4B:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4C:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4D:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4E:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x4F:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x50:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x51:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x52:
func_802A9674(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x29:
func_802A9714(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x58:
func_802A980C(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x30:
func_802A99A4(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2D:
func_802A8ADC(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2A:
func_802A89C0(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x56:
func_802A8A04(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x57:
func_802A8A70(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
case 0x2B:
func_802A8940(temp_s1, temp_s0, temp_a0, phi_a3);
phi_a3 = &D_802BA274;
break;
}
goto loop_1;
}
set_segment_base_addr(7, sp2C);
}
#else
GLOBAL_ASM("asm/non_matchings/memory/display_list_unpack.s")
#endif