Merge pull request #113 from Kelebek1/various

Various
This commit is contained in:
Revo
2024-08-24 15:33:07 -04:00
committed by GitHub
25 changed files with 2971 additions and 77 deletions

View File

@@ -44,4 +44,6 @@ void func_8002B274(s32, s32);
// exception_set.s
void set_watch_lohi(s32);
unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1);
#endif

View File

@@ -9,6 +9,15 @@
#define SHT_MAX 32767.0f
#define SHT_MINV (1.0f / SHT_MAX)
extern long long __d_to_ll(double d);
extern long long __f_to_ll(float f);
extern unsigned long long __d_to_ull(double d);
extern unsigned long long __f_to_ull(float f);
extern double __ll_to_d(long long s);
extern float __ll_to_f(long long s);
extern double __ull_to_d(unsigned long long u);
extern float __ull_to_f(unsigned long long u);
typedef float MtxF_t[4][4];
typedef union {
MtxF_t mf;

View File

@@ -95,8 +95,6 @@ typedef struct unk_D_800A7440 {
} unk_D_800A7440; // size >= 0x8
extern unk_D_800A7440 D_800A7440;
extern struct unk_D_800AC840 D_800AC840;
extern struct unk_D_800AC840 D_800AC858;
extern struct unk_D_86002F58_004_000* D_8006F09C;
@@ -146,5 +144,59 @@ extern s8 D_80077DE4;
extern s32 D_80078E60;
extern s32 D_80078E64;
extern s32 D_80078E68;
extern u8 D_8007840C;
extern s32 D_80078E70;
extern s32 D_80078ECC;
extern u8 D_80078ED0;
extern u8 D_80078390[];
extern u32 D_80078404;
extern s32 D_80078408;
extern s32 D_80078E74;
extern u8 D_80078E78;
extern u8 D_80078E7C;
extern u8 D_80078E80;
extern s32 D_80078EC8;
extern s32 D_800FC680;
extern s32 D_800FC684;
extern u32 D_800FC6DC;
extern s32 D_80078ED4;
extern s32 D_80078ED8;
extern s32 D_80078EDC;
typedef struct unk_D_800FC6E4 {
/* 0x00 */ char pad00[0x8];
/* 0x08 */ s32 unk_08;
/* 0x0C */ u32 unk_0C[2];
} unk_D_800FC6E4; // size >= 0x10
extern unk_D_800FC6E4* D_800FC6E0;
extern unk_D_800FC6E4* D_800FC6E4;
extern s32 D_800FC688;
extern s32 D_800FC68C;
extern s32 D_800FC6A4;
extern s32 D_800FC6A8;
typedef struct unk_D_800FC6F4 {
/* 0x00 */ char pad00[0x14];
/* 0x14 */ u32 unk_14;
/* 0x18 */ char pad18[0x4];
/* 0x1C */ u32 unk_1C;
/* 0x20 */ char pad20[0x4];
/* 0x24 */ u32 unk_24;
} unk_D_800FC6F4; /// size >= 0x28
extern unk_D_800FC6F4* D_800FC6F4;
typedef struct unk_D_800FC6F8 {
/* 0x00 */ u32 unk_00[2];
} unk_D_800FC6F8; // size = 0x8
extern unk_D_800FC6F8* D_800FC6F8;
typedef struct unk_D_800FC798 {
/* 0x00 */ u32 unk_00;
/* 0x04 */ u32 unk_04;
/* 0x08 */ u32 unk_08;
} unk_D_800FC798; // size >= 0xC
extern unk_D_800FC798* D_800FC798;
#endif

View File

@@ -239,3 +239,5 @@ D_87A01178 = 0x87A01178;
D_87A01180 = 0x87A01180;
D_87A01190 = 0x87A01190;
D_87A011A4 = 0x87A011A4;
D_800A7428 = 0x800A7428;
D_80079014 = 0x80079014;

View File

@@ -1,4 +1,3 @@
#include "global.h"
#include "2E110.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/2E110/func_8002D510.s")

View File

@@ -3,7 +3,7 @@
#include "global.h"
char* func_8002D7C0(char*, s32, s32, s32);
char* func_8002D7C0(char* arg0, s32 arg1, s32 arg2, s32 arg3);
#endif // _2E110_H_

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "373A0.h"
#include "4CBC0.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/373A0/func_800367A0.s")

10
src/373A0.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef _373A0_H_
#define _373A0_H_
#include "global.h"
void func_800367A0(s32, u8, s32);
void func_80037234(s32, s32);
void func_80037360(u32, u32, s32);
#endif // _373A0_H_

View File

@@ -4,8 +4,19 @@
#include "global.h"
void func_80038E98(s32, s32);
s32 func_80038F30(s32, s32);
s32 func_80039024(s32, s32, s32, s32, u32, s32);
void func_800392A8(s32, s32);
s32 func_80039354(s32);
void func_800393DC(s32, s32);
void func_80039534(s32, f32);
void func_800395FC(s32, s32);
void func_8003979C(s32, s32);
void func_800397BC(s32);
void func_8003986C(s32);
void func_800398F0(s32);
void func_80039940(void);
s32 func_80039A7C(s32, s32, s32);
void func_80039B88(s32, s32, s32, s32);
#endif // _38BB0_H_

View File

@@ -1,4 +1,111 @@
#include "global.h"
#include "3D140.h"
#include "373A0.h"
#include "45720.h"
extern u8 D_800783FC;
extern u8 D_80078400;
extern u16 D_80078410[1][9];
extern u16 D_80078446[1][9];
extern u16 D_800784EA[1][9];
extern u16 D_80077DF0[];
extern u16 D_80077E00[];
extern u16 D_80077E10[];
extern u16 D_80077E18[];
extern u16 D_80077E20[];
extern u16 D_80077E28[];
extern u16 D_80077E30[];
extern u16 D_80077E38[];
extern u16 D_80077E40[];
extern u16 D_80077E48[];
extern u16 D_80077E50[];
extern u16 D_80077E58[];
extern u16 D_80077E60[];
extern u16 D_80077E68[];
extern u16 D_80077E70[];
extern u16 D_80077E78[];
extern u16 D_80077E88[];
extern u16 D_80077E90[];
extern u16 D_800780A8[];
extern u8 D_800783BC;
extern u8 D_800783C0;
extern u8 D_800783C4;
extern s32 D_800783C8;
extern u32 D_800783CC;
extern u8 D_800783D4;
extern u8 D_800783D8;
extern u8 D_800783DC;
extern u8 D_800783E4;
extern u8 D_800783E8;
extern u8 D_800783EC;
extern f64 D_8007C7E0;
extern f64 D_8007C7E8;
extern f64 D_8007C7F0;
extern f64 D_8007C7F8;
extern u8 D_800FCD18[];
typedef struct unk_D_800FCB18 {
/* 0x00 */ char pad00[0xC];
/* 0x0C */ u16 unk_0C;
/* 0x0E */ char pad0E[0xE];
/* 0x1C */ u8 unk_1C;
/* 0x1D */ u8 unk_1D;
/* 0x1E */ char pad1E[0x8];
/* 0x26 */ u8 unk_26;
/* 0x28 */ u16 unk_28;
} unk_D_800FCB18; // size >= 0x2C
extern unk_D_800FCB18* D_800FCB18[2];
extern s32 D_800FCB28;
extern s32 D_800FCB2C;
typedef struct unk_D_800FCB48 {
/* 0x00 */ u16 unk_00[16];
/* 0x20 */ char pad20[0x4];
/* 0x24 */ s32 unk_24;
/* 0x28 */ char pad28[0x50];
/* 0x78 */ s32 unk_78;
/* 0x7C */ s32 unk_7C;
/* 0x80 */ char pad80[0x4];
} unk_D_800FCB48; // size = 0x84
extern unk_D_800FCB48 D_800FCB48[2];
extern s32 D_800FCCA4;
extern u8 D_800FCCAE;
extern u8 D_800FCCAF;
extern u8 D_800FCCB0;
extern u8 D_800FCCB1;
extern u8 D_800FCCB2;
extern u8 D_800FCCB3;
extern u8 D_800FCCB4;
extern u8 D_800FCCB5;
extern u8 D_800FCCB6;
extern s8 D_8007839C[];
extern s8 D_800783E0;
extern s16 D_800783F0;
extern s16 D_800783F4;
extern s16 D_800783F8;
extern u8 D_800FCB38[2][8];
extern s32 D_800FCC50[];
extern s8 D_800FCCA0;
extern s8 D_800FCCA1;
extern s8 D_800FCCA2;
extern s8 D_800FCCAC;
extern s8 D_800FCCB7;
extern s8 D_800FCCB8[];
extern s8 D_800FCCBA[];
extern s8 D_800FCCBC[];
extern s8 D_800FCCBE[];
extern s8 D_800FCCC0[];
extern s8 D_800FCCC2[];
extern s8 D_800FCCD4[];
extern s8 D_800FCCD6[];
extern s8 D_800FCCD8[];
extern s32 D_80078388;
extern u32 D_800783A4[4];
extern s32 D_800783B8;
void func_80041A98(void);
void func_80041C70(u32);
void func_800420C0(u16*);
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003C540.s")
@@ -36,9 +143,496 @@
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003D828.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003D918.s")
#ifdef NON_MATCHING
void func_8003D918(u32 arg0, u32 arg1) {
u32 temp_v0 = arg1 == 0x10;
u8 sp1B = 0;
u16 var_a0;
func_80041A98();
D_80078404 = arg1;
D_80078408 = arg0;
if (arg1 < 0x11) {
D_800783FC = 1;
D_8007840C = 1;
if ((arg0 == 0) && (arg1 != 0x10) && (arg1 != 0xF)) {
func_80041C70(0x34);
} else if ((arg0 == 0xFF) && (arg1 != 0x10) && (arg1 != 0xF)) {
func_80041C70(0x47);
arg0 = 0;
sp1B = 1;
}
if (arg1 < 0xC) {
if (arg0 < 9) {
var_a0 = D_80078410[arg1][arg0];
D_800783FC = 1;
D_80078400 = 1;
} else {
return;
}
} else if (arg1 == 0xC) {
if ((arg0 < 0x21) && (arg0 != 0)) {
var_a0 = D_800784EA[(arg0 - 1) / 8][(arg0 - 1) % 8];
D_800783FC = 1;
D_80078400 = 0;
} else {
return;
}
} else if (arg1 == 0xD) {
if (arg0 < 6) {
var_a0 = D_80078446[arg1][arg0];
D_800783FC = 1;
D_80078400 = 0;
} else {
return;
}
} else {
if (arg1 == 0xE) {
var_a0 = 0x49;
D_800783FC = 1;
D_80078400 = 2;
} else if (arg1 == 0xF) {
var_a0 = 0;
D_800783FC = 0;
D_80078400 = 0;
arg0 = 1;
} else {
D_800783FC = 1;
if (temp_v0) {
var_a0 = 0x48;
D_80078400 = 1;
arg0 = 1;
} else {
var_a0 = 0;
D_80078400 = 1;
}
}
}
if ((arg0 == 0) && (sp1B == 0)) {
D_80078400 = 2;
}
if (var_a0 != 0) {
func_80041C70(var_a0);
}
}
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003D918.s")
#endif
#ifdef NON_MATCHING
void func_8003DB84(s32 arg0) {
s32 i;
s32 var_t0;
s32 var_t2;
s32 var_t4;
s32 var_t5;
s32 var_v0;
u32 var_a0;
u32 temp_v0;
if (arg0 != 0) {
temp_v0 = osSetIntMask(1);
D_800783BC = 1;
D_800783C8 = 0;
D_800783C0 = 0;
D_800783C4 = 0;
osSetIntMask(temp_v0);
D_800783D4 = 0;
D_800783D8 = 0;
D_800783DC = 0;
D_800FCCAE = 0;
D_800FCCAF = 0;
D_800FCCB2 = 0;
D_800FCCB6 = 0;
D_800783E8 = 0;
D_800783EC = 0;
D_800FCCA4 = 0;
func_800367A0(0x5A, D_80078400, 0);
if ((D_800FCB18[0] != NULL) && (D_800FCB18[1] != NULL)) {
if (D_800FCB18[0] != NULL) {
D_800FCB28 = D_800FCB18[0]->unk_0C;
}
if (D_800FCB18[1] != NULL) {
D_800FCB2C = D_800FCB18[1]->unk_0C;
}
D_800FCB48[0].unk_24++;
D_800FCB48[0].unk_00[D_800FCB48[0].unk_24 & 0xF] = D_800FCB18[0]->unk_0C;
D_800FCB48[1].unk_24++;
D_800FCB48[1].unk_00[D_800FCB48[1].unk_24 & 0xF] = D_800FCB18[1]->unk_0C;
if (D_800783CC != 0) {
var_t0 = 1;
if (D_800FCB18[0]->unk_26 < D_800FCB18[1]->unk_26) {
var_t2 = 0;
var_t4 = 1;
} else {
var_t4 = 0;
var_t2 = 1;
}
if (D_800FCB18[0]->unk_0C < D_800FCB18[1]->unk_0C) {
var_t0 = 0;
var_t5 = 1;
} else {
var_t5 = 0;
}
if (D_800783CC < 2) {
if ((D_800FCB18[0]->unk_0C == 0) || (D_800FCB18[1]->unk_0C == 0)) {
temp_v0 = osSetIntMask(1);
D_800783C0 = 1;
osSetIntMask(temp_v0);
if (D_800FCB18[0]->unk_0C == 0) {
D_800FCCB0 = 1;
} else {
D_800FCCB0 = 2;
}
if ((D_800FCB18[0]->unk_0C == 0) && (D_800FCB18[1]->unk_0C == 0)) {
func_800420C0(D_80077E90);
return;
}
func_800420C0(D_80077E48);
return;
}
if ((((D_800FCB18[0]->unk_0C * 0x64u) / D_800FCB18[0]->unk_28) < 0x1E) &&
(((D_800FCB18[1]->unk_0C * 0x64u) / D_800FCB18[1]->unk_28) < 0x1E)) {
func_800420C0(D_80077E88);
return;
}
if (((((D_800FCB18[var_t4]->unk_26 - D_800FCB18[var_t2]->unk_26) * 0x64u) /
D_800FCB18[var_t2]->unk_26) >= 0x15) &&
(((D_800FCB18[var_t2]->unk_0C * 0x64u) / D_800FCB18[var_t2]->unk_28) < 0x28) &&
(((D_800FCB18[var_t4]->unk_0C * 0x64u) / D_800FCB18[var_t4]->unk_28) >= 0x51)) {
if (__ull_rem(osGetTime(), 3) == 0) {
var_a0 = 0x256;
goto block_53;
}
}
if ((((D_800FCB18[0]->unk_0C * 0x64u) / D_800FCB18[0]->unk_28) >= 0x5B) &&
(((D_800FCB18[1]->unk_0C * 0x64u) / D_800FCB18[1]->unk_28) >= 0x5B)) {
func_800420C0(D_80077E68);
return;
}
if (D_80078400 == 0) {
func_800420C0(D_80077E78);
return;
}
func_800420C0(D_80077DF0);
return;
}
if ((D_800FCB18[0]->unk_0C == 0) || (D_800FCB18[1]->unk_0C == 0)) {
temp_v0 = osSetIntMask(1);
D_800783C0 = 1;
osSetIntMask(temp_v0);
if (D_800FCB18[0]->unk_0C == 0) {
D_800FCCB0 = 1;
} else {
D_800FCCB0 = 2;
}
if (D_80078390[0] >= D_80078390[1]) {
var_v0 = D_80078390[0] - D_80078390[1];
} else {
var_v0 = D_80078390[1] - D_80078390[0];
}
if (var_v0 >= 2) {
func_800420C0(D_80077E70);
return;
}
if ((D_80078390[0] == 1) && (D_80078390[1] == 1)) {
var_a0 = 0x290;
if (D_800783E4 != 0) {
D_800783E4 = 0;
} else {
if (__ull_rem(osGetTime(), 2) != 0) {
var_a0 = 0x254;
} else {
var_a0 = 0x26B;
}
}
block_53:
func_80041C70(var_a0);
return;
}
if (D_80078390[D_800FCCB0 - 1] == 1) {
func_80041C70(0x26A);
return;
}
func_800420C0(D_80077E00);
return;
}
if (D_800FCCB0 != 0) {
if (((D_80078390[0] == 1) || (D_80078390[1] == 1)) && (D_80078390[0] < 4) && (D_80078390[1] < 4)) {
if (D_80078390[0] == 1) {
switch (D_80078390[1]) {
case 1:
func_80041C70(0x260);
func_80041C70(0x266);
break;
case 2:
func_80041C70(0x261);
if (D_800FCCB0 == 1) {
func_80041C70(0x265);
} else {
func_80041C70(0x267);
}
break;
case 3:
func_80041C70(0x262);
func_80041C70(0x264);
break;
default:
func_80041C70(0x271);
break;
}
D_800FCCB0 = 0;
return;
}
switch (D_80078390[0]) {
case 2:
func_80041C70(0x25E);
if (D_800FCCB0 == 2) {
func_80041C70(0x265);
} else {
func_80041C70(0x267);
}
break;
case 3:
func_80041C70(0x25C);
func_80041C70(0x264);
break;
default:
func_80041C70(0x271);
break;
}
D_800FCCB0 = 0;
return;
}
if (D_800FCCB1 != 0) {
if (__ull_rem(osGetTime(), 2) != 0) {
D_800FCCB0 = 0;
func_800420C0(D_80077E10);
return;
}
}
if (D_800FCB18[0]->unk_1C != D_800FCB18[1]->unk_1C) {
if (D_800FCB18[0]->unk_1C != D_800FCB18[1]->unk_1D) {
if ((D_800FCB18[0]->unk_1D != D_800FCB18[1]->unk_1C) &&
(D_800FCB18[0]->unk_1D != D_800FCB18[1]->unk_1D)) {
D_800FCCB0 = 0;
func_800420C0(D_80077E18);
return;
}
}
}
D_800FCCB0 = 0;
switch (D_80078390[0]) {
case 2:
switch (D_80078390[1]) {
case 2:
func_80041C70(0x25D);
func_80041C70(0x268);
return;
case 3:
func_80041C70(0x25F);
func_80041C70(0x263);
return;
default:
func_80041C70(0x271);
return;
}
break;
case 3:
if (D_80078390[1] == 2) {
func_80041C70(0x25B);
func_80041C70(0x263);
return;
}
func_80041C70(0x271);
return;
default:
if (D_80078400 == 0) {
func_800420C0(D_80077E78);
return;
}
func_800420C0(D_80077DF0);
return;
}
} else {
if (D_800FCCB3 != 0) {
func_800420C0(D_80077E38);
D_800FCCB3 = 0;
return;
}
if (D_800FCCB4 != 0) {
func_800420C0(D_80077E40);
D_800FCCB4 = 0;
return;
}
if (D_800FCCB5 != 0) {
func_800420C0(D_80077E50);
D_800FCCB5 = 0;
return;
}
if ((D_800FCB18[0]->unk_28 * 0.5f) < (D_800FCB48[0].unk_00[(D_800FCB48[0].unk_24 - 1) & 0xF] -
D_800FCB48[0].unk_00[D_800FCB48[0].unk_24 & 0xF])) {
if ((D_800FCB18[1]->unk_28 * 0.5f) < (D_800FCB48[1].unk_00[(D_800FCB48[1].unk_24 - 1) & 0xF] -
D_800FCB48[1].unk_00[(D_800FCB48[1].unk_24 & 0xF)])) {
if ((((D_800FCB18[0]->unk_0C * 0x64u) / D_800FCB18[0]->unk_28) < 0x14u) &&
(((D_800FCB18[1]->unk_0C * 0x64u) / D_800FCB18[1]->unk_28) < 0x14u)) {
func_800420C0(D_80077E60);
} else {
func_800420C0(D_80077E58);
}
return;
}
}
if (D_800FCB18[0]->unk_0C >= D_800FCB18[1]->unk_0C) {
var_v0 = D_800FCB18[0]->unk_0C - D_800FCB18[1]->unk_0C;
} else {
var_v0 = D_800FCB18[1]->unk_0C - D_800FCB18[0]->unk_0C;
}
if ((D_800FCB18[var_t0]->unk_28 * D_8007C7E0) < var_v0) {
if ((((D_800FCB18[var_t5]->unk_0C * 0x64u) / D_800FCB18[var_t5]->unk_28) >= 0x47) &&
(D_800FCB18[0]->unk_0C != D_800FCB18[0]->unk_28) &&
(D_800FCB18[1]->unk_0C != D_800FCB18[1]->unk_28)) {
if ((D_800FCB18[var_t5]->unk_28 * D_8007C7E8) < D_800FCB18[var_t5]->unk_0C) {
if (D_800FCB18[var_t0]->unk_0C < (D_800FCB18[var_t0]->unk_28 * D_8007C7F0)) {
func_800420C0(D_80077E20);
return;
}
}
}
}
if (D_800FCB18[0]->unk_0C >= D_800FCB18[1]->unk_0C) {
var_v0 = D_800FCB18[0]->unk_0C - D_800FCB18[1]->unk_0C;
} else {
var_v0 = D_800FCB18[1]->unk_0C - D_800FCB18[0]->unk_0C;
}
if (var_v0 < 0xA) {
if ((D_800FCB18[0]->unk_28 * 0.5) < D_800FCB18[0]->unk_0C) {
if (((D_800FCB18[1]->unk_28 * 0.5) < D_800FCB18[1]->unk_0C) &&
(D_800FCB18[0]->unk_0C < D_800FCB18[0]->unk_28) &&
(D_800FCB18[1]->unk_0C < D_800FCB18[1]->unk_28)) {
func_800420C0(D_80077E30);
return;
}
}
}
if (D_800FCB18[0]->unk_0C >= D_800FCB18[1]->unk_0C) {
var_v0 = D_800FCB18[0]->unk_0C - D_800FCB18[1]->unk_0C;
} else {
var_v0 = D_800FCB18[1]->unk_0C - D_800FCB18[0]->unk_0C;
}
if (var_v0 < 0xA) {
if (D_800FCB18[0]->unk_0C < (D_800FCB18[0]->unk_28 * D_8007C7F8)) {
if (D_800FCB18[1]->unk_0C < (D_800FCB18[1]->unk_28 * D_8007C7F8)) {
func_800420C0(D_80077E28);
return;
}
}
}
if (D_80078400 == 0) {
func_800420C0(D_80077E78);
} else {
func_800420C0(D_80077DF0);
}
return;
}
}
}
} else {
temp_v0 = osSetIntMask(1);
D_800783BC = 0;
osSetIntMask(temp_v0);
func_80037234(0x5A, 0);
func_80037234(0x5B, 0);
if (D_800FCB18[0] != NULL) {
D_800FCB28 = D_800FCB18[0]->unk_0C;
}
if (D_800FCB18[1] != NULL) {
D_800FCB2C = D_800FCB18[1]->unk_0C;
}
D_800783CC++;
for (i = 0; i < 2; i++) {
D_800FCB48[i].unk_78++;
if (D_800FCB48[i].unk_7C != 0) {
D_800FCB48[i].unk_7C++;
}
}
D_800FCCB4 = 0;
D_800FCCB3 = 0;
D_800FCCB5 = 0;
D_800783E4 = 0;
if ((D_800FCB18[0] != NULL) && (D_800FCB18[1] != NULL) && (D_8007840C != 0) && (D_800FCB18[0]->unk_0C != 0) &&
(D_800FCB18[1]->unk_0C != 0) && (func_80044E54(1) == 0)) {
if (__ull_rem(osGetTime(), 2) == 0) {
func_800420C0(D_800780A8);
}
}
}
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003DB84.s")
#endif
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_8003EB40.s")
@@ -60,23 +654,162 @@
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_800416BC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041A98.s")
#ifdef NON_MATCHING
void func_80041A98(void) {
s32 i;
s32 j;
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041C70.s")
D_800783CC = 0;
for (i = 0; i < 2; i++) {
for (j = 0; j < 8; j++) {
D_800FCB38[i][j] = 0;
}
}
D_8007839C[0] = 0;
D_8007839C[1] = 0;
D_800FCCA1 = 0;
D_800FCCA0 = 0;
D_800FCCA2 = 0;
D_800FCCA4 = 0;
D_800FCCAC = 0;
D_800783E0 = 0;
D_800FCCAF = 0;
D_800FCCB0 = 0;
D_800FCCB2 = 0;
D_800FCCB3 = 0;
D_800FCCB4 = 0;
D_800FCCB5 = 0;
D_800FCCB7 = 0;
D_800FCCB6 = 0;
D_800783E4 = 0;
D_800783E8 = 0;
D_800783EC = 0;
D_800783F0 = 0;
D_800783F4 = 0;
D_800783F8 = 0;
for (i = 0; i < 21; i++) {
D_800FCCD8[i] = 0;
}
for (i = 0; i < 80; i++) {
D_800FCC50[i] = 0;
}
for (i = 0; i < 2; i++) {
D_800FCCB8[i] = 0;
D_800FCCBA[i] = 0;
D_800FCCBC[i] = 0;
D_800FCCBE[i] = 0;
D_800FCCC0[i] = 0;
D_800FCCC2[i] = 0;
D_800FCCD4[i] = 0;
D_800FCCD6[i] = 0;
}
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041A98.s")
#endif
void func_80041C70(u32 arg0) {
u32 temp_v0;
if ((D_80078388 != 0) && (D_800783FC != 0) && (arg0 != 0)) {
temp_v0 = osSetIntMask(1);
D_800783A4[D_800783B8 & 3] = arg0;
D_800783B8++;
osSetIntMask(temp_v0);
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041CEC.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041D50.s")
void func_80041D50(u8* arg0, u8* arg1) {
u8 temp_v0 = *arg0;
u8 temp_v1 = *arg1;
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041D70.s")
if (temp_v1 != temp_v0) {
*arg0 = temp_v1;
*arg1 = temp_v0;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041DF4.s")
u16 func_80041D70(u16 arg0) {
s32 i;
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041E40.s")
for (i = 0; i < 20; i++) {
if (arg0 == D_800FCC50[i]) {
return 0;
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_80041EF4.s")
return arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_800420C0.s")
void func_80041DF4(u16 arg0) {
u16 i;
for (i = 0; i < 19; i++) {
D_800FCC50[i] = D_800FCC50[i + 1];
}
D_800FCC50[19] = arg0;
}
void func_80041E40(u16 arg0) {
u32 i;
for (i = arg0; i > 0; i--) {
D_800FCC50[i] = D_800FCC50[i - 1];
}
D_800FCC50[0] = 0;
}
u32 func_80041EF4(u16* arg0) {
u16 temp_v0 = *arg0;
u32 i;
u32 j;
u16 sp5A;
for (i = 0; i < temp_v0; i++) {
D_800FCD18[i] = i + 1;
}
for (i = 0; i < temp_v0 << 1; i++) {
func_80041D50(D_800FCD18, D_800FCD18 + __ull_rem(osGetTime(), (s32)temp_v0));
}
for (i = 0; i < temp_v0; i++) {
sp5A = func_80041D70(arg0[D_800FCD18[i]]);
if (sp5A != 0) {
func_80041DF4(sp5A);
return sp5A;
}
}
for (i = 0; i < 20; i++) {
for (j = 1; j <= temp_v0; j++) {
if (D_800FCC50[i] == arg0[j]) {
func_80041E40(i);
func_80041DF4(arg0[j]);
return arg0[j];
}
}
}
return 0;
}
void func_800420C0(u16* arg0) {
u32 temp_v0 = func_80041EF4(arg0);
if (temp_v0 != 0) {
func_80041C70(temp_v0);
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/3D140/func_800420F0.s")

17
src/3D140.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef _3D140_H_
#define _3D140_H_
#include "global.h"
void func_8003D918(u32 arg0, u32 arg1);
void func_8003DB84(s32 arg0);
void func_80041A98(void);
void func_80041C70(u32 arg0);
void func_80041D50(u8* arg0, u8* arg1);
u16 func_80041D70(u16 arg0);
void func_80041DF4(u16 arg0);
void func_80041E40(u16 arg0);
u32 func_80041EF4(u16* arg0);
void func_800420C0(u16* arg0);
#endif // _3D140_H_

View File

@@ -29,25 +29,25 @@
// PERSJPEG header
struct UnkInputStruct80003C80 {
char filler0[0x8];
u32 unk8;
u32 unkC;
char filler0[0x8];
u32 unk8;
u32 unkC;
};
s32 func_80003C80(s32 arg0, struct UnkInputStruct80003C80* arg1, s32 side) {
s32 addr = main_pool_alloc(arg1->unkC + 0x100, side);
s32 addr = main_pool_alloc(arg1->unkC + 0x100, side);
if (addr != 0) {
s32 size = func_80003680(addr, arg1->unkC + 0x100, (u32)arg1 + arg1->unk8, arg1);
if (size == 0) {
main_pool_try_free(addr);
addr = NULL;
} else if (side == 0) {
main_pool_realloc(addr, size);
}
}
main_pool_try_free(arg0);
return addr;
if (addr != 0) {
s32 size = func_80003680(addr, arg1->unkC + 0x100, (u32)arg1 + arg1->unk8, arg1);
if (size == 0) {
main_pool_try_free(addr);
addr = NULL;
} else if (side == 0) {
main_pool_realloc(addr, size);
}
}
main_pool_try_free(arg0);
return addr;
}
// PERS-SZP header

View File

@@ -1,4 +1,4 @@
#include "global.h"
#include "45720.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/45720/func_80044B20.s")

10
src/45720.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef _45720_H_
#define _45720_H_
#include "global.h"
void func_80044D78(s32, s32);
s32 func_80044E54(s32);
void func_80044E80(s32);
#endif // _45720_H_

View File

@@ -1,5 +1,49 @@
#include "global.h"
#include "4B940.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/4B940/func_8004AD40.s")
static OSMesgQueue D_800FF990;
static OSPiHandle* D_800FF9A8;
static OSMesg D_800FF9AC;
#pragma GLOBAL_ASM("asm/us/nonmatchings/4B940/func_8004ADB0.s")
void func_8004AD40(s32 arg0) {
switch (arg0) {
case 1:
D_800FF9A8 = osDriveRomInit();
break;
case 2:
default:
D_800FF9A8 = osCartRomInit();
break;
}
osCreateMesgQueue(&D_800FF990, &D_800FF9AC, 1);
}
void func_8004ADB0(u32 dev_addr, u32 dram_addr, u32 size) {
OSIoMesg msg;
u32 dev = dev_addr;
u32 dram = dram_addr;
s32 var_s0;
while (size != 0) {
if (size > 0x4000) {
var_s0 = 0x4000;
} else {
var_s0 = size;
}
msg.hdr.pri = 0;
msg.hdr.retQueue = &D_800FF990;
msg.dramAddr = dram;
msg.devAddr = dev;
msg.size = var_s0;
osInvalDCache(msg.dramAddr, var_s0);
osEPiStartDma(D_800FF9A8, &msg, 0);
osRecvMesg(&D_800FF990, NULL, 1);
dev += var_s0;
dram += var_s0;
size -= var_s0;
}
}

8
src/4B940.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef _4B940_H_
#define _4B940_H_
#include "global.h"
void func_8004ADB0(u32 dev_addr, u32 dram_addr, u32 size);
#endif // _4B940_H_

View File

@@ -1,14 +1,600 @@
#include "global.h"
#include "4BDC0.h"
#include "src/38BB0.h"
#include "src/4BA90.h"
#include "src/4CBC0.h"
#include "src/4B940.h"
#include "src/45720.h"
#include "src/50CC0.h"
#include "src/3D140.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004B1C0.s")
static s32 D_800FF9B0;
static s32 D_800FF9B4;
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004B1CC.s")
void func_8004B1C0(s32 arg0) {
D_80078EC8 = arg0;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004B9C4.s")
s32 func_8004B1CC(s32 arg0) {
u32 sp2C;
s32 var_a2;
UNUSED s32 pad;
s32 sp20;
s32 sp1C;
sp20 = arg0;
sp1C = 0x80;
func_80044E80(1);
func_800398F0(1);
D_800FF9B4 = arg0;
if (arg0 == 0x50) {
D_80078E78 = 0;
D_80078E7C = 0;
if (D_80078ED0 == 1) {
func_80039B88(D_80078ECC, 0, 0x80, 0x50);
D_80078ED0 = 2;
return 0;
}
func_80039940();
D_80078E70 = 0;
func_800392A8(D_80078ECC, 1);
D_80078ED0 = 0;
D_80078ECC = func_8004DDA4(0x01000003, 0, 0);
arg0 = 0x28;
D_80078ED0 = 2;
} else if (arg0 == 0x28) {
D_80078E78 = 0;
if (D_80078ED0 == 2) {
func_80039B88(D_80078ECC, 0x80, 0, 0x50);
D_80078ED0 = 1;
return 0;
}
func_80039940();
D_80078E70 = 0;
func_800392A8(D_80078ECC, 1);
D_80078ED0 = 0;
D_80078ECC = func_8004DDA4(0x01000003, 0, 0);
func_800393DC(D_80078ECC, 0);
D_80078ED0 = 1;
} else {
func_80039940();
D_80078E70 = 0;
func_800392A8(D_80078ECC, 1);
D_80078ED0 = 0;
}
if (arg0 == 0x32) {
if ((D_80078404 < 0xC) && (D_80078390[0] > 0) && (D_80078390[1] == 0) && (D_80078408 == 8)) {
arg0 = 0x3C;
} else if ((D_80078404 == 0xD) && (D_80078390[0] > 0) && (D_80078390[1] == 0) && (D_80078408 == 5)) {
arg0 = 0x3E;
D_800FF9B4 = 0x3E;
} else if ((D_80078404 == 0xF) && (D_80078390[0] > 0) && (D_80078390[1] == 0)) {
arg0 = 0x40;
}
}
if ((arg0 == 0x3F) && (D_80078404 == 0xD) && (D_80078408 == 5)) {
arg0 = 0x41;
}
if ((arg0 == 0x31) && (D_80078E78 != 0)) {
arg0 = 0x46;
}
if ((arg0 == 0x3A) && (D_80078E7C != 0)) {
arg0 = 0x48;
}
sp2C = arg0;
switch (arg0) {
case 0x0:
D_80078E78 = 0;
D_80078E7C = 0;
D_80078E80 = 1;
sp20 = 0x98;
break;
case 0x1:
sp20 = 0x68;
D_80078E80 = 1;
func_8003D918(0, 0xF);
break;
case 0x9:
sp20 = 0x50;
break;
case 0x7:
sp20 = 0x78;
break;
case 0x8:
sp20 = 0xA0;
break;
case 0xF:
sp20 = 0x60;
break;
case 0xA:
sp20 = 0x60;
break;
case 0x11:
sp20 = 0x60;
break;
case 0x17:
sp20 = 0x60;
break;
case 0x18:
sp20 = 0x60;
break;
case 0x19:
sp20 = 0x58;
break;
case 0x1C:
sp20 = 0x60;
break;
case 0x1D:
sp20 = D_80078E74;
break;
case 0x1E:
sp20 = 0x65;
break;
case 0x1F:
sp20 = 0x70;
break;
case 0x20:
sp20 = 0x70;
break;
case 0x21:
sp20 = 0x50;
break;
case 0x1A:
sp20 = 0x60;
func_8004B154();
break;
case 0x1B:
sp20 = 0x58;
func_8004B154();
break;
case 0x2C:
sp20 = 0x70;
break;
case 0x13:
sp20 = 0x68;
break;
case 0x38:
sp20 = 0x60;
break;
case 0x15:
sp20 = 0x60;
break;
case 0x2D:
sp20 = 0x60;
break;
case 0x16:
sp20 = 0x60;
break;
case 0x10:
sp20 = 0x68;
break;
case 0x2A:
sp20 = 0x60;
break;
case 0x27:
sp20 = 0x58;
break;
case 0x2B:
sp20 = 0x60;
break;
case 0x30:
D_80078E78 = 1;
sp20 = 0x64;
break;
case 0x28:
D_80078E78 = 0;
D_80078E7C = 0;
sp20 = 0x48;
break;
case 0x29:
D_80078E78 = 0;
D_80078E7C = 0;
sp20 = 0x78;
sp1C = 0x87;
break;
case 0x31:
sp20 = 0x60;
break;
case 0x33:
sp20 = 0x60;
break;
case 0x46:
sp20 = 0x60;
break;
case 0x32:
sp20 = 0x60;
break;
case 0x3C:
sp20 = 0x60;
break;
case 0x3D:
sp20 = 0x88;
break;
case 0x3E:
sp20 = 0x60;
break;
case 0x3F:
sp20 = 0x60;
break;
case 0x40:
sp20 = 0x50;
break;
case 0x41:
sp20 = 0x60;
break;
case 0x45:
sp20 = 0x60;
break;
case 0x44:
sp20 = 0x90;
break;
case 0x47:
sp20 = 0x88;
D_80078E7C = 1;
break;
case 0x5B:
sp20 = 0x78;
sp2C = 1;
break;
case 0x3A:
sp20 = 0x68;
func_8003D918(0, 0xF);
func_8004DF94(0x01100016, 0, 0);
break;
case 0x48:
func_8003D918(0, 0xF);
func_8004DF94(0x01100016, 0, 0);
sp20 = 0x70;
break;
case 0x49:
sp20 = 0x68;
break;
case 0x4A:
sp20 = 0xA8;
break;
case 0x4B:
sp20 = 0x60;
break;
case 0x42:
D_80078E78 = 0;
D_80078E7C = 0;
sp20 = 0x80;
break;
case 0x43:
D_80078E78 = 0;
D_80078E7C = 0;
sp20 = 0x80;
break;
case 0x22:
sp20 = 0x48;
break;
case 0x24:
sp20 = 0x48;
break;
case 0x26:
sp20 = 0x40;
break;
case 0x23:
sp20 = 0x50;
break;
case 0x25:
sp20 = 0x50;
break;
case 0xE:
sp20 = 0x64;
break;
case 0xD:
sp20 = 0x48;
break;
case 0xB:
sp20 = 0x38;
break;
case 0xC:
sp20 = 0x38;
break;
case 0x12:
sp20 = 0x2E;
break;
case 0x36:
sp20 = 0x38;
break;
case 0x6:
sp20 = 0x38;
break;
case 0x37:
sp20 = 0x38;
break;
case 0x3B:
sp20 = 0x3C;
break;
case 0x39:
sp20 = 0x38;
break;
case 0x34:
sp20 = 0x60;
break;
case 0x2F:
sp20 = 0x58;
break;
case 0x2E:
sp20 = 0x54;
break;
case 0x35:
sp20 = 0x54;
break;
case 0x14:
sp20 = 0x58;
break;
case 0x2:
sp20 = 0x34;
break;
case 0x3:
sp20 = 0x44;
break;
case 0x4:
sp20 = 0x38;
break;
case 0x5:
sp20 = 0x34;
break;
case 0x5A:
sp20 = 0x50;
D_80078E80 = 0;
sp2C = 2;
break;
default:
return 0;
}
if (sp2C < D_800FC6E4->unk_08 - 1) {
var_a2 = D_800FC6E4->unk_0C[sp2C + 1] - D_800FC6E4->unk_0C[sp2C];
} else if (sp2C == D_800FC6E4->unk_08 - 1) {
var_a2 = D_800FC6E0->unk_08 - D_800FC6E4->unk_0C[sp2C];
} else {
return 0;
}
func_8004ADB0(D_800FC6E4->unk_0C[sp2C], D_800FC6DC, var_a2);
func_80050B40(D_800FC6DC, D_800FC680, 0x98D8);
if (D_80078EC8 <= 0) {
D_80078E70 = func_80038F30(D_800FC684, D_800FC680);
} else {
D_80078E70 = func_80039A7C(D_800FC684, D_800FC680, D_80078EC8 ^ 0);
}
D_80078EC8 = -1;
func_800393DC(D_80078E70, sp20);
if (sp1C != 0x80) {
func_800395FC(D_80078E70, sp1C);
}
if (arg0 == 0x1D) {
D_800FF9B0 = D_80078E70;
}
return D_80078E70;
}
void func_8004B9C4(s32 arg0) {
s32 i;
if (arg0 == 0) {
arg0 = 1;
}
func_800392A8(D_80078E70, arg0);
D_80078EC8 = -1;
func_800392A8(D_80078ECC, arg0);
D_80078ED0 = 0;
D_8007840C = 0;
func_800392A8(D_80078FA8, arg0);
func_80044E80(0);
func_8003DB84(0);
if (D_800FF9B4 != 0x50) {
for (i = 0; i < 2; i++) {
func_80044D78(i, arg0);
}
}
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004BA88.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004BC84.s")
s32 func_8004BC84(s32 arg0, u32 arg1) {
s32 var_a3;
#pragma GLOBAL_ASM("asm/us/nonmatchings/4BDC0/func_8004BFB0.s")
switch (arg0) {
case 30:
switch (D_80078ED4) {
case 0:
D_80078ED4 = 1;
return func_8004B1CC(0x1E);
case 1:
return 0;
case 2:
return 0;
case 3:
if (func_80039354(D_80078EDC) == 0) {
D_80078ED4 = 1;
if (arg1 == 0) {
return func_8004B1CC(0x1E);
}
return 0;
}
return 0;
}
return 0;
case 31:
D_80078ED4 = 2;
switch (arg1) {
case 0:
var_a3 = (arg1 * 0x48) + 0xD6;
break;
case 1:
var_a3 = (arg1 * 0x48) + 0xD6;
break;
case 2:
var_a3 = (arg1 * 0x48) + 0xD6;
break;
case 3:
var_a3 = (arg1 * 0x48) + 0xD6;
break;
case 4:
var_a3 = (arg1 * 0x48) + 0xD6;
break;
default:
var_a3 = 0xD6;
break;
}
switch (arg1) {
case 0:
func_8004D9B0(0x9000D, 0, 0);
break;
case 1:
func_8004D9B0(0x9000E, 0, 0);
break;
case 2:
func_8004D9B0(0x9000F, 0, 0);
break;
case 3:
func_8004D9B0(0x90010, 0, 0);
break;
case 4:
func_8004D9B0(0x90011, 0, 0);
break;
}
func_8004B1C0(var_a3);
D_80078ED8 = func_8004B1CC(0x1F);
return D_80078ED8;
case 32:
switch (D_80078ED4) {
case 0:
return 0;
case 1:
return 0;
case 2:
if (func_80039354(D_80078ED8) == 0) {
if (arg1 == 0) {
D_80078ED4 = 3;
D_80078EDC = 0;
} else {
func_8004B1C0(0x46);
D_80078ED4 = 3;
D_80078EDC = func_8004B1CC(0x20);
return D_80078EDC;
}
}
return 0;
case 3:
return 0;
}
return 0;
}
}
u32 func_8004BFB0(void) {
return D_80078ED4;
}

View File

@@ -4,8 +4,8 @@
#include "global.h"
void func_8004B9C4(s32);
void func_8004B1CC(s32);
void func_8004BC84(s32, u32);
s32 func_8004B1CC(s32);
s32 func_8004BC84(s32, u32);
u32 func_8004BFB0(void);
#endif // _4BDC0_H_

File diff suppressed because it is too large Load Diff

View File

@@ -3,6 +3,11 @@
#include "global.h"
extern s32 D_80078FA8;
extern u32 D_80079014;
s32 func_8004D9B0(s32 arg0, s32 arg1, s32 arg2);
s32 func_8004DDA4(s32, s32, s32);
s32 func_8004DF94(s32, s32, s32);
#endif // _4CBC0_H_

View File

@@ -1,4 +1,4 @@
#include "global.h"
#include "50860.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/50860/func_8004FC60.s")

8
src/50860.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef _50860_H_
#define _50860_H_
#include "global.h"
void func_8004FC60(s32, s32);
#endif // _50860_H_

View File

@@ -1,4 +1,4 @@
#include "global.h"
#include "50CC0.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/50CC0/func_800500C0.s")

8
src/50CC0.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef _50CC0_H_
#define _50CC0_H_
#include "global.h"
void func_80050B40(s32, s32, s32);
#endif // _50CC0_H_

View File

@@ -98,10 +98,10 @@
- [0x49DC0, c]
- [0x4A360, c]
- [0x4A3E0, c]
- [0x4B940, c]
- [0x4B940, c, 4B940]
- [0x4BA90, c, 4BA90]
- [0x4BDC0, c]
- [0x4CBC0, c]
- [0x4BDC0, c, 4BDC0]
- [0x4CBC0, c, 4CBC0]
- [0x4F410, c]
- [0x4F7F0, c]
- [0x4F870, c]
@@ -331,6 +331,8 @@
- [0x6A3E0, data, rom_data_6A3E0]
- [0x6A3F0, .data, math_util]
- [0x6FC00, data, rom_data_6FC00]
- [0x79AE0, .data, 4CBC0]
- [0x79C70, data, rom_data_79C70]
# libleo
- [0x7A180, .data, libleo/driverominit]
@@ -396,8 +398,8 @@
- [0x7DFD0, rodata, rom_rodata_7DFD0]
- [0x7E0D0, rodata, rom_rodata_7E0D0]
- [0x7E0E0, .rodata, 4BA90]
- [0x7E110, rodata, rom_rodata_7E110]
- [0x7E2F0, rodata, rom_rodata_7E2F0]
- [0x7E110, .rodata, 4BDC0]
- [0x7E2F0, .rodata, 4CBC0]
- [0x7E560, rodata, rom_rodata_7E560]
- [0x7E5D0, rodata, rom_rodata_7E5D0]
- [0x7E600, rodata, rom_rodata_7E600]
@@ -446,6 +448,9 @@
- {vram: 0x800A74C0, type: .bss, name: crash_screen}
- {vram: 0x800A7EA0, type: .bss, name: profiler}
- {vram: 0x800A8100, type: bss, name: unk_bss_2}
- {vram: 0x800FF990, type: .bss, name: 4B940}
- {vram: 0x800FF9B0, type: .bss, name: 4BDC0}
- {vram: 0x800FF9C0, type: bss, name: unk_bss_10}
# libleo
- {vram: 0x80100740, type: .bss, name: libleo/driverominit}