The first commit
This commit is contained in:
160
src/core2/code_CF3E0.c
Normal file
160
src/core2/code_CF3E0.c
Normal file
@@ -0,0 +1,160 @@
|
||||
#include <ultra64.h>
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
|
||||
typedef struct {
|
||||
s16 a;
|
||||
s16 b;
|
||||
} unkD_80372730;
|
||||
// Needs to be a struct to match, s16 array doesn't work
|
||||
extern unkD_80372730 D_80372730[];
|
||||
extern unkD_80372730 D_80372798[];
|
||||
|
||||
s32 func_80356370(unkD_80372730 *arg0, s32 arg1) {
|
||||
s32 phi_v1 = 0;
|
||||
|
||||
while (arg0[phi_v1].a >= 0) {
|
||||
if (arg1 == arg0[phi_v1].a) {
|
||||
return phi_v1;
|
||||
}
|
||||
phi_v1++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 func_803563B8(s32 arg0, s32 arg1) {
|
||||
s32 temp_v0;
|
||||
|
||||
if (func_8031FF1C(arg0) != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
temp_v0 = func_80356370(D_80372730, arg0);
|
||||
if (temp_v0 != -1) {
|
||||
if (func_80311480(D_80372730[temp_v0].b, arg1, 0, 0, 0, 0) != 0) {
|
||||
func_80320004(arg0, 1);
|
||||
}
|
||||
return func_8031FF1C(arg0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8035644C(s32 arg0){
|
||||
func_803563B8(arg0, 0);
|
||||
}
|
||||
|
||||
void func_8035646C(s32 arg0) {
|
||||
func_803563B8(arg0, 4);
|
||||
}
|
||||
|
||||
s32 func_8035648C(s32 arg0, s32 arg1) {
|
||||
s32 temp_v0;
|
||||
|
||||
if (func_803203FC() != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
temp_v0 = func_80356370(D_80372798, arg0);
|
||||
if (temp_v0 != -1) {
|
||||
if (func_80311480(D_80372798[temp_v0].b, arg1, 0, 0, 0, 0) != 0) {
|
||||
func_803204E4(arg0, 1);
|
||||
}
|
||||
return func_803203FC(arg0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80356520(s32 arg0) {
|
||||
func_8035648C(arg0, 0);
|
||||
}
|
||||
|
||||
void func_80356540(s32 arg0) {
|
||||
func_8035648C(arg0, 4);
|
||||
}
|
||||
|
||||
void func_80356560(s32 arg0) {
|
||||
func_8035648C(arg0, 0xE);
|
||||
}
|
||||
|
||||
//THIS VALUE
|
||||
#ifndef CORE2_CODE_CRC2
|
||||
#define CORE2_CODE_CRC2 0
|
||||
#endif
|
||||
|
||||
// bk_boot segment start (skipping entry function)
|
||||
extern u8 D_00001050[];
|
||||
// bk_boot segment end
|
||||
extern u8 D_00005E70[];
|
||||
|
||||
// bk_boot segment crc next word
|
||||
s32 D_803727F0 = 0;
|
||||
s32 D_803727F4 = CORE2_CODE_CRC2;
|
||||
s32 D_803727F8 = 0;
|
||||
s32 D_803727FC = 0;
|
||||
|
||||
// bk_boot segment crc values
|
||||
s32 D_80372800 = 0;
|
||||
s32 D_80372804 = 0;
|
||||
|
||||
// bk_boot segment crc remaining words
|
||||
s32 D_80372808 = 0;
|
||||
|
||||
// init bk_boot crc
|
||||
void func_80356580(void) {
|
||||
D_803727FC = (s32) D_00001050;
|
||||
D_80372800 = 0;
|
||||
D_80372804 = -1;
|
||||
D_80372808 = (s32) (D_00005E70 - D_00001050);
|
||||
}
|
||||
|
||||
// advance bk_boot crc by one word
|
||||
s32 func_803565BC(void) {
|
||||
u32 crc1;
|
||||
u32 crc2;
|
||||
u8 romBytes[4];
|
||||
u8 curByte;
|
||||
|
||||
if (D_803727FC != 0) {
|
||||
if (D_80372808 != 0) {
|
||||
crc1 = D_80372800;
|
||||
crc2 = D_80372804;
|
||||
osPiReadIo(D_803727FC, (u32*)romBytes);
|
||||
curByte = romBytes[0];
|
||||
crc1 += curByte;
|
||||
crc2 ^= curByte << (crc1 & 0x17);
|
||||
curByte = romBytes[1];
|
||||
crc1 += curByte;
|
||||
crc2 ^= curByte << (crc1 & 0x17);
|
||||
curByte = romBytes[2];
|
||||
crc1 += curByte;
|
||||
crc2 ^= curByte << (crc1 & 0x17);
|
||||
curByte = romBytes[3];
|
||||
crc1 += curByte;
|
||||
crc2 ^= curByte << (crc1 & 0x17);
|
||||
D_80372800 = crc1;
|
||||
D_80372804 = crc2;
|
||||
D_803727FC = D_803727FC + 4;
|
||||
D_80372808 = D_80372808 - 4;
|
||||
} else {
|
||||
D_803727FC = 0;
|
||||
osPiReadIo((u32)D_00005E70 + 0, &crc1);
|
||||
if (crc1 != D_80372800)
|
||||
return 0;
|
||||
osPiReadIo((u32)D_00005E70 + 4, &crc2);
|
||||
if (crc2 != D_80372804)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void func_80356714(void) {
|
||||
func_80356580();
|
||||
}
|
||||
|
||||
void func_80356734(void) {
|
||||
func_803565BC();
|
||||
if (func_803565BC() == 0) {
|
||||
func_80295864(0x10);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user