mirror of
https://github.com/n64decomp/mk64
synced 2026-07-28 23:25:37 -04:00
Doc setup_game_memory, label syms, add osSyncPrintf support, match funcs (#444)
* Doc setup_game_memory and label syms * match func_800132F4 * match func label defines * fix some fake ptrs * match more code * Matches * Add osSyncPrintf support and matches * Add func equiv to draw_square and add comment to is_debug
This commit is contained in:
+4
-4
@@ -85,11 +85,11 @@ u16 D_8015F702;
|
||||
f32 D_8015F704;
|
||||
Vec3f D_8015F708;
|
||||
UNUSED u32 D_8015F718[3]; // Likely held ptrs to segmented data.
|
||||
u32 gFreeMemorySize;
|
||||
u32 gNextFreeMemoryAddress;
|
||||
u32 gHeapEndPtr;
|
||||
size_t gFreeMemorySize;
|
||||
uintptr_t gNextFreeMemoryAddress;
|
||||
uintptr_t gHeapEndPtr;
|
||||
u32 D_8015F730;
|
||||
u32 gFreeMemoryResetAnchor;
|
||||
uintptr_t gFreeMemoryResetAnchor;
|
||||
Vec3f D_8015F738;
|
||||
Vec3f D_8015F748;
|
||||
Vec3f D_8015F758;
|
||||
|
||||
+4
-4
@@ -49,12 +49,12 @@ extern u16 D_8015F702;
|
||||
extern f32 D_8015F704;
|
||||
extern Vec3f D_8015F708;
|
||||
extern UNUSED u32 D_8015F718[3];
|
||||
extern u32 gFreeMemorySize;
|
||||
extern u32 gNextFreeMemoryAddress;
|
||||
extern u32 gHeapEndPtr;
|
||||
extern size_t gFreeMemorySize;
|
||||
extern uintptr_t gNextFreeMemoryAddress;
|
||||
extern uintptr_t gHeapEndPtr;
|
||||
|
||||
extern u32 D_8015F730;
|
||||
extern u32 gFreeMemoryResetAnchor;
|
||||
extern uintptr_t gFreeMemoryResetAnchor;
|
||||
extern Vec3f D_8015F738;
|
||||
extern Vec3f D_8015F748;
|
||||
extern Vec3f D_8015F758;
|
||||
|
||||
+484
-929
File diff suppressed because it is too large
Load Diff
+19
-4
@@ -25,8 +25,23 @@ struct unexpiredActors {
|
||||
s32 unk18;
|
||||
};
|
||||
|
||||
/* Function Prototypes */
|
||||
typedef struct {
|
||||
f32 unk0;
|
||||
f32 unk4;
|
||||
f32 unk8;
|
||||
f32 unkC;
|
||||
} Test;
|
||||
|
||||
extern Test D_801634F8[];
|
||||
|
||||
/* Function Prototypes */
|
||||
void func_80012190(void);
|
||||
void func_8000BA14(u16, f32, f32, s16);
|
||||
void func_80014BDC(void);
|
||||
void func_80014A88(void);
|
||||
void func_80014934(void);
|
||||
void func_800147E0(void);
|
||||
void func_800132F4(void);
|
||||
s16 func_80005FD0(Vec3f, Vec3f);
|
||||
void func_800100F0(s32);
|
||||
void func_800120C8(void);
|
||||
@@ -125,7 +140,7 @@ void func_80014D30(s32, s32);
|
||||
f32 func_80014EE4(f32 arg0, s32 arg1);
|
||||
|
||||
void func_8001530C(void);
|
||||
void func_80015314(s32, s32, s32);
|
||||
void func_80015314(s32, f32, s32);
|
||||
void func_80015390(Camera*, Player*, s32);
|
||||
|
||||
void func_8001968C(void);
|
||||
@@ -170,7 +185,7 @@ extern struct unexpiredActors gUnexpiredActorsList[];
|
||||
extern s16 D_8016348C;
|
||||
extern s32 D_801643E0[];
|
||||
extern s32 D_80164408[];
|
||||
extern s16 D_80164670;
|
||||
extern s16 D_80164670[];
|
||||
extern s16 D_80164672;
|
||||
extern s16 D_80164674;
|
||||
extern s16 D_80164676;
|
||||
@@ -180,7 +195,7 @@ extern s16 D_8016467C;
|
||||
extern s16 D_8016467E;
|
||||
extern s16 D_801632B8[];
|
||||
extern s16 D_801632D0[];
|
||||
extern s16 D_801632E8[];
|
||||
extern u16 D_801632E8[];
|
||||
extern s16 D_801646CC;
|
||||
extern u16 D_80163E2A;
|
||||
extern Gfx D_0D0076F8[];
|
||||
|
||||
+8
-44
@@ -140,13 +140,10 @@ u16 func_8001FD78(Player *player, f32 posX, UNUSED f32 arg2, f32 posZ) {
|
||||
}
|
||||
|
||||
void func_80020000(Player *player, Camera *camera, s8 arg2, s8 arg3) {
|
||||
s32 stackPadding0;
|
||||
s32 stackPadding1;
|
||||
s32 stackPadding2;
|
||||
s32 stackPadding3;
|
||||
s32 pad[4];
|
||||
s32 sp4C;
|
||||
s32 sp48;
|
||||
s32 stackPadding4;
|
||||
s32 pad2;
|
||||
s32 temp_v0;
|
||||
s32 temp_v0_2;
|
||||
|
||||
@@ -1315,25 +1312,9 @@ void func_80024374(Player *player, s8 arg1, s8 arg2) {
|
||||
}
|
||||
|
||||
void func_800248D0(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
s32 stackPadding00;
|
||||
s32 pad;
|
||||
Mat4 sp1A4;
|
||||
s32 stackPadding01;
|
||||
s32 stackPadding02;
|
||||
s32 stackPadding03;
|
||||
s32 stackPadding04;
|
||||
s32 stackPadding05;
|
||||
s32 stackPadding06;
|
||||
s32 stackPadding07;
|
||||
s32 stackPadding08;
|
||||
s32 stackPadding09;
|
||||
s32 stackPadding10;
|
||||
s32 stackPadding11;
|
||||
s32 stackPadding12;
|
||||
s32 stackPadding13;
|
||||
s32 stackPadding14;
|
||||
s32 stackPadding15;
|
||||
s32 stackPadding16;
|
||||
s32 stackPadding17;
|
||||
s32 pad2[17];
|
||||
Vec3f sp154;
|
||||
Vec3s sp14C;
|
||||
f32 sp148;
|
||||
@@ -1426,31 +1407,15 @@ void func_800248D0(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
}
|
||||
|
||||
void func_800256F4(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
s32 stackPadding00;
|
||||
s32 pad;
|
||||
Mat4 sp12C;
|
||||
s32 stackPadding01;
|
||||
s32 stackPadding02;
|
||||
s32 stackPadding03;
|
||||
s32 stackPadding04;
|
||||
s32 stackPadding05;
|
||||
s32 stackPadding06;
|
||||
s32 stackPadding07;
|
||||
s32 stackPadding08;
|
||||
s32 stackPadding09;
|
||||
s32 stackPadding10;
|
||||
s32 stackPadding11;
|
||||
s32 stackPadding12;
|
||||
s32 stackPadding13;
|
||||
s32 stackPadding14;
|
||||
s32 stackPadding15;
|
||||
s32 stackPadding16;
|
||||
s32 stackPadding17;
|
||||
s32 pad2[17];
|
||||
Vec3f spDC;
|
||||
Vec3s spD4;
|
||||
f32 spD0;
|
||||
f32 spCC;
|
||||
f32 spC8;
|
||||
s32 stackPadding18;
|
||||
s32 pad3;
|
||||
s16 spC2;
|
||||
s16 thing;
|
||||
|
||||
@@ -1559,8 +1524,7 @@ void func_800262E0(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
}
|
||||
|
||||
void func_800267AC(Player *player, s8 arg1, s8 arg2) {
|
||||
s32 stackPadding0;
|
||||
s32 stackPadding1;
|
||||
s32 pad[2];
|
||||
s32 temp_t1;
|
||||
s32 var_v1;
|
||||
OSMesg *sp34;
|
||||
|
||||
+59
-89
@@ -1625,76 +1625,60 @@ void func_80075714(s32 objectIndex) {
|
||||
func_8008BF18(objectIndex);
|
||||
}
|
||||
|
||||
#ifdef MIPS_TO_C
|
||||
//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022
|
||||
extern s32 D_801636A0;
|
||||
extern s32 D_801637AC;
|
||||
extern s16 D_8016578C;
|
||||
extern s16 D_80165790;
|
||||
extern ? D_8018C5F0;
|
||||
|
||||
void func_80075838(void) {
|
||||
s32 *var_s1;
|
||||
s32 *var_s1_2;
|
||||
s32 pad[2];
|
||||
s32 count;
|
||||
s32 i;
|
||||
s32 temp_a0;
|
||||
s32 temp_a0_2;
|
||||
s32 var_s2;
|
||||
s32 var_s2_2;
|
||||
struct_80165C18_entry *temp_s0;
|
||||
struct_80165C18_entry *temp_s0_2;
|
||||
|
||||
struct_80165C18_entry *temp;
|
||||
if (D_8016578C != 0) {
|
||||
D_8016578C -= 1;
|
||||
}
|
||||
if (D_80165790 != 0) {
|
||||
D_80165790 -= 1;
|
||||
}
|
||||
var_s2 = 0;
|
||||
if ((D_801636A0 != 0) || (D_8016578C != 0)) {
|
||||
var_s1 = D_8018C3F0;
|
||||
do {
|
||||
temp_a0 = *var_s1;
|
||||
if ((sTrains[0].someFlags != 0) || (D_8016578C != 0)) {
|
||||
count = 0;
|
||||
for (i = 0; i < 128; i++) {
|
||||
temp_a0 = D_8018C3F0[i];
|
||||
if (temp_a0 != -1) {
|
||||
temp_s0 = &D_80165C18[temp_a0];
|
||||
if (temp_s0->unk_0A6 != 0) {
|
||||
temp = &D_80165C18[temp_a0];
|
||||
if (temp->unk_0A6 != 0) {
|
||||
func_80075714(temp_a0);
|
||||
if (temp_s0->unk_0A6 == 0) {
|
||||
func_80072100(var_s1);
|
||||
if (temp->unk_0A6 == 0) {
|
||||
func_80072100(&D_8018C3F0[i]);
|
||||
}
|
||||
var_s2 += 1;
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
var_s1 += 4;
|
||||
} while (var_s1 != &D_8018C5F0);
|
||||
if (var_s2 != 0) {
|
||||
D_8016578C = 0x0064;
|
||||
}
|
||||
if (count != 0) {
|
||||
D_8016578C = 100;
|
||||
}
|
||||
}
|
||||
if ((D_801637AC != 0) || (D_80165790 != 0)) {
|
||||
var_s2_2 = 0;
|
||||
var_s1_2 = D_8018C630;
|
||||
do {
|
||||
temp_a0_2 = *var_s1_2;
|
||||
if (temp_a0_2 != -1) {
|
||||
temp_s0_2 = &D_80165C18[temp_a0_2];
|
||||
if (temp_s0_2->unk_0A6 != 0) {
|
||||
func_80075714(temp_a0_2);
|
||||
if (temp_s0_2->unk_0A6 == 0) {
|
||||
func_80072100(var_s1_2);
|
||||
if ((sTrains[1].someFlags != 0) || (D_80165790 != 0)) {
|
||||
count = 0;
|
||||
for (i = 0; i < 128; i++) {
|
||||
temp_a0 = D_8018C630[i];
|
||||
if (temp_a0 != -1) {
|
||||
temp = &D_80165C18[temp_a0];
|
||||
if (temp->unk_0A6 != 0) {
|
||||
func_80075714(temp_a0);
|
||||
if (temp->unk_0A6 == 0) {
|
||||
func_80072100(&D_8018C630[i]);
|
||||
}
|
||||
var_s2_2 += 1;
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
var_s1_2 += 4;
|
||||
} while (var_s1_2 != &D_8018C830);
|
||||
if (var_s2_2 != 0) {
|
||||
D_80165790 = 0x0064;
|
||||
}
|
||||
if (count != 0) {
|
||||
D_80165790 = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80071F00/func_80075838.s")
|
||||
#endif
|
||||
|
||||
void func_800759EC(s32 objectIndex, Vec3f arg1, f32 arg2) {
|
||||
struct_80165C18_entry *temp_v0;
|
||||
@@ -1765,76 +1749,62 @@ void func_80075B84(s32 arg0) {
|
||||
func_8008BF18(arg0);
|
||||
}
|
||||
|
||||
#ifdef MIPS_TO_C
|
||||
//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022
|
||||
extern s32 D_801637E8;
|
||||
extern s32 D_80163814;
|
||||
extern s16 D_8016578C;
|
||||
extern s16 D_80165790;
|
||||
extern ? D_8018C5F0;
|
||||
|
||||
void func_80075CA8(void) {
|
||||
s32 *var_s1;
|
||||
s32 *var_s1_2;
|
||||
s32 pad[2];
|
||||
s32 count;
|
||||
s32 i;
|
||||
s32 temp_a0;
|
||||
s32 temp_a0_2;
|
||||
s32 var_s2;
|
||||
s32 var_s2_2;
|
||||
struct_80165C18_entry *temp_s0;
|
||||
struct_80165C18_entry *temp_s0_2;
|
||||
|
||||
struct_80165C18_entry *temp;
|
||||
if (D_8016578C != 0) {
|
||||
D_8016578C -= 1;
|
||||
}
|
||||
if (D_80165790 != 0) {
|
||||
D_80165790 -= 1;
|
||||
}
|
||||
var_s2 = 0;
|
||||
if ((D_801637E8 != 0) || (D_8016578C != 0)) {
|
||||
var_s1 = D_8018C3F0;
|
||||
do {
|
||||
temp_a0 = *var_s1;
|
||||
count = 0;
|
||||
for (i = 0; i < 128; i++) {
|
||||
temp_a0 = D_8018C3F0[i];
|
||||
if (temp_a0 != -1) {
|
||||
temp_s0 = &D_80165C18[temp_a0];
|
||||
if (temp_s0->unk_0A6 != 0) {
|
||||
temp = &D_80165C18[temp_a0];
|
||||
if (temp->unk_0A6 != 0) {
|
||||
func_80075B84(temp_a0);
|
||||
if (temp_s0->unk_0A6 == 0) {
|
||||
func_80072100(var_s1);
|
||||
if (temp->unk_0A6 == 0) {
|
||||
func_80072100(&D_8018C3F0[i]);
|
||||
}
|
||||
var_s2 += 1;
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
var_s1 += 4;
|
||||
} while (var_s1 != &D_8018C5F0);
|
||||
if (var_s2 != 0) {
|
||||
D_8016578C = 0x0064;
|
||||
}
|
||||
if (count != 0) {
|
||||
D_8016578C = 100;
|
||||
}
|
||||
}
|
||||
if ((D_80163814 != 0) || (D_80165790 != 0)) {
|
||||
var_s2_2 = 0;
|
||||
var_s1_2 = D_8018C630;
|
||||
do {
|
||||
temp_a0_2 = *var_s1_2;
|
||||
if (temp_a0_2 != -1) {
|
||||
temp_s0_2 = &D_80165C18[temp_a0_2];
|
||||
if (temp_s0_2->unk_0A6 != 0) {
|
||||
func_80075B84(temp_a0_2);
|
||||
if (temp_s0_2->unk_0A6 == 0) {
|
||||
func_80072100(var_s1_2);
|
||||
count = 0;
|
||||
for (i = 0; i < 128; i++) {
|
||||
temp_a0 = D_8018C630[i];
|
||||
if (temp_a0 != -1) {
|
||||
temp = &D_80165C18[temp_a0];
|
||||
if (temp->unk_0A6 != 0) {
|
||||
func_80075B84(temp_a0);
|
||||
if (temp->unk_0A6 == 0) {
|
||||
func_80072100(&D_8018C630[i]);
|
||||
}
|
||||
var_s2_2 += 1;
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
var_s1_2 += 4;
|
||||
} while (var_s1_2 != &D_8018C830);
|
||||
if (var_s2_2 != 0) {
|
||||
D_80165790 = 0x0064;
|
||||
}
|
||||
if (count != 0) {
|
||||
D_80165790 = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80071F00/func_80075CA8.s")
|
||||
#endif
|
||||
|
||||
void func_80075E5C(s32 objectIndex, Vec3f arg1, u16 arg2, f32 arg3, s32 arg4) {
|
||||
struct_80165C18_entry *temp_v0;
|
||||
@@ -2300,7 +2270,7 @@ void func_80076F2C(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s16 D_800E6788[1]; // todo: fix this extern
|
||||
void func_80076FEC(s32 objectIndex, s32 flameIndex) {
|
||||
func_800723A4(objectIndex, 3);
|
||||
|
||||
+13
-29
@@ -56,9 +56,8 @@ void crash_screen_draw_glyph(u16 *framebuffer, s32 x, s32 y, s32 glyph) {
|
||||
}
|
||||
}
|
||||
|
||||
// Functionally Equivallent. At least, visually equivallent.
|
||||
// Functionally Equivallent.
|
||||
#ifdef NON_MATCHING
|
||||
//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de
|
||||
|
||||
// 0xRGBA (I think A maybe not).
|
||||
#define WHITE_COLOUR 0xFFFF
|
||||
@@ -75,36 +74,21 @@ void crash_screen_draw_glyph(u16 *framebuffer, s32 x, s32 y, s32 glyph) {
|
||||
**/
|
||||
void crash_screen_draw_square(u16 *framebuffer)
|
||||
{
|
||||
// s32 new_var;
|
||||
s32 s0_end;
|
||||
s32 s2_start;
|
||||
s32 row;
|
||||
s32 column;
|
||||
|
||||
s32 var_s0;
|
||||
s32 var_s2;
|
||||
s32 var_s3;
|
||||
s32 row;
|
||||
s32 column;
|
||||
s32 i;
|
||||
var_s0 = 0x2E;
|
||||
var_s2 = 0x28;
|
||||
var_s3 = 0x2C;
|
||||
// new_var = i;
|
||||
// for (i = 0; i < 2; i++)
|
||||
do // (var_s0 = 0x2E; var_s0 != 0x2C; var_s0--)
|
||||
{
|
||||
row = 0x2E - i;
|
||||
for (row = var_s2; row < var_s0; row++)
|
||||
{
|
||||
for (column = var_s2; column < var_s0; column++)
|
||||
{
|
||||
framebuffer[row * 320 + column] = i == 0 ? 0xF801 : 0xFFFF;
|
||||
}
|
||||
for (s2_start = 0x28, s0_end = s2_start + 6; s0_end != 0x2C; s0_end--, s2_start++) {
|
||||
for (row = s2_start; row < s0_end; row++) {
|
||||
for (column = s2_start; column < s0_end; column++) {
|
||||
framebuffer[row * 320 + column] = s0_end - s2_start == 6 ? 0xF801 : 0xFFFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
var_s0--;
|
||||
var_s2 = 6 + i;
|
||||
|
||||
} while(var_s0 != var_s3);
|
||||
|
||||
osWritebackDCacheAll();
|
||||
osViSwapBuffer(framebuffer);
|
||||
osWritebackDCacheAll();
|
||||
osViSwapBuffer(framebuffer);
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen_draw_square.s")
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
#include <macros.h>
|
||||
#include <mk64.h>
|
||||
#include <objects.h>
|
||||
#include <hardcoded_segments.h>
|
||||
#include <segments.h>
|
||||
#include <segment_symbols.h>
|
||||
#include <sounds.h>
|
||||
#include <trig_tables.h>
|
||||
#include <types.h>
|
||||
|
||||
+10
-11
@@ -130,17 +130,16 @@ void load_ceremony_cutscene(void) {
|
||||
D_800DC5C8 = (u16)0;
|
||||
gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress;
|
||||
// @bug these segmented addresses need to be symbols for mobility
|
||||
// This syntax is required to match
|
||||
set_vertex_data_with_default_section_id(0x70067E8, -1);
|
||||
set_vertex_data_with_default_section_id(0x700AEF8, -1);
|
||||
set_vertex_data_with_default_section_id(0x700A970, 8);
|
||||
set_vertex_data_with_default_section_id(0x700AC30, 8);
|
||||
set_vertex_data_with_default_section_id(0x7000CE0, 0x10);
|
||||
set_vertex_data_with_default_section_id(0x7000E88, 0x10);
|
||||
set_vertex_data_with_default_section_id(0x700A618, -1);
|
||||
set_vertex_data_with_default_section_id(0x700A618, -1);
|
||||
set_vertex_data_with_default_section_id(0x70023F8, 1);
|
||||
set_vertex_data_with_default_section_id(0x7002478, 1);
|
||||
set_vertex_data_with_default_section_id(0x070067E8, -1);
|
||||
set_vertex_data_with_default_section_id(0x0700AEF8, -1);
|
||||
set_vertex_data_with_default_section_id(0x0700A970, 8);
|
||||
set_vertex_data_with_default_section_id(0x0700AC30, 8);
|
||||
set_vertex_data_with_default_section_id(0x07000CE0, 0x10);
|
||||
set_vertex_data_with_default_section_id(0x07000E88, 0x10);
|
||||
set_vertex_data_with_default_section_id(0x0700A618, -1);
|
||||
set_vertex_data_with_default_section_id(0x0700A618, -1);
|
||||
set_vertex_data_with_default_section_id(0x070023F8, 1);
|
||||
set_vertex_data_with_default_section_id(0x07002478, 1);
|
||||
func_80295C6C();
|
||||
debug_switch_character_ceremony_cutscene();
|
||||
func_802818BC();
|
||||
|
||||
+60
-71
@@ -27,6 +27,7 @@
|
||||
#include "main.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "courses/all_course_data.h"
|
||||
#include <vehicles.h>
|
||||
|
||||
void func_800431B0(Vec3f arg0, Vec3su arg1, f32 arg2, Vtx *vtx) {
|
||||
func_80042E00(arg0, arg1, arg2);
|
||||
@@ -4642,47 +4643,47 @@ void func_800540CC(s32 objectIndex, s32 cameraId) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MIPS_TO_C
|
||||
//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022
|
||||
extern f32 D_801635A4;
|
||||
extern s32 D_801636A0;
|
||||
extern f32 D_801636B0;
|
||||
extern s32 D_801637AC;
|
||||
extern ? D_8018C5F0;
|
||||
|
||||
// Train smoke?
|
||||
void func_800541BC(s32 cameraId) {
|
||||
Camera *sp3C;
|
||||
Gfx *temp_v1;
|
||||
s32 *var_s0;
|
||||
s32 *var_s0_2;
|
||||
s32 pad;
|
||||
s32 j;
|
||||
Camera *camera;
|
||||
s32 i;
|
||||
|
||||
temp_v1 = gDisplayListHead;
|
||||
sp3C = &camera1[cameraId];
|
||||
gDisplayListHead = temp_v1 + 8;
|
||||
temp_v1->words.w0 = 0x06000000;
|
||||
temp_v1->words.w1 = (u32) D_0D007AE0;
|
||||
func_8004477C(D_0D029458, 0x00000020, 0x00000020);
|
||||
func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF);
|
||||
D_80183E80->unk0 = 0;
|
||||
D_80183E80->unk4 = 0x8000;
|
||||
if ((D_801636A0 != 0) && (func_80041980(&D_801635A4, sp3C, 0x4000U) != 0)) {
|
||||
var_s0 = D_8018C3F0;
|
||||
do {
|
||||
func_800540CC(*var_s0, cameraId);
|
||||
var_s0 += 4;
|
||||
} while (var_s0 != &D_8018C5F0);
|
||||
camera = &camera1[cameraId];
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007AE0)
|
||||
func_8004477C(D_0D029458, 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[2] = 0x8000;
|
||||
|
||||
// Render smoke for any number of trains. Don't know enough about these variables yet.
|
||||
#ifdef AVOID_UB_WIP
|
||||
for (j = 0; j < NUM_TRAINS; j++) {
|
||||
if ((sTrains[j].someFlags != 0) && (func_80041980(&sTrains[j].locomotive.position, camera, 0x4000U) != 0)) {
|
||||
|
||||
for (i = 0; i < 128; i++) {
|
||||
// Need to make a way to increase this array for each train.
|
||||
func_800540CC(D_8018C3F0[i], cameraId);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((D_801637AC != 0) && (func_80041980(&D_801636B0, sp3C, 0x4000U) != 0)) {
|
||||
var_s0_2 = D_8018C630;
|
||||
do {
|
||||
func_800540CC(*var_s0_2, cameraId);
|
||||
var_s0_2 += 4;
|
||||
} while (var_s0_2 != &D_8018C830);
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/hud_renderer/func_800541BC.s")
|
||||
|
||||
if ((sTrains[0].someFlags != 0) && (func_80041980(&sTrains[0].locomotive.position, camera, 0x4000U) != 0)) {
|
||||
|
||||
for (i = 0; i < D_8018C3F0_SIZE; i++) {
|
||||
func_800540CC(D_8018C3F0[i], cameraId);
|
||||
}
|
||||
|
||||
}
|
||||
if ((sTrains[1].someFlags != 0) && (func_80041980(&sTrains[1].locomotive.position, camera, 0x4000U) != 0)) {
|
||||
for (i = 0; i < D_8018C630_SIZE; i++) {
|
||||
func_800540CC(D_8018C630[i], cameraId);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void func_80054324(s32 objectIndex, s32 cameraId) {
|
||||
Camera *camera;
|
||||
@@ -4697,47 +4698,35 @@ void func_80054324(s32 objectIndex, s32 cameraId) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MIPS_TO_C
|
||||
//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022
|
||||
extern f32 D_801637C4;
|
||||
extern s32 D_801637E8;
|
||||
extern f32 D_801637F0;
|
||||
extern s32 D_80163814;
|
||||
extern ? D_8018C5F0;
|
||||
|
||||
// Likely smoke related.
|
||||
void func_80054414(s32 cameraId) {
|
||||
Camera *sp3C;
|
||||
Gfx *temp_v1;
|
||||
s32 *var_s0;
|
||||
s32 *var_s0_2;
|
||||
s32 pad[2];
|
||||
Camera *camera;
|
||||
s32 i;
|
||||
|
||||
camera = &camera1[cameraId];
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007AE0);
|
||||
|
||||
temp_v1 = gDisplayListHead;
|
||||
sp3C = &camera1[cameraId];
|
||||
gDisplayListHead = temp_v1 + 8;
|
||||
temp_v1->words.w0 = 0x06000000;
|
||||
temp_v1->words.w1 = (u32) D_0D007AE0;
|
||||
func_8004477C(D_0D029458, 0x00000020, 0x00000020);
|
||||
func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF);
|
||||
D_80183E80->unk0 = 0;
|
||||
D_80183E80->unk4 = 0x8000;
|
||||
if ((D_801637E8 != 0) && (func_80041980(&D_801637C4, sp3C, 0x4000U) != 0)) {
|
||||
var_s0 = D_8018C3F0;
|
||||
do {
|
||||
func_80054324(*var_s0, cameraId);
|
||||
var_s0 += 4;
|
||||
} while (var_s0 != &D_8018C5F0);
|
||||
func_8004477C(D_0D029458, 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[2] = 0x8000;
|
||||
if ((D_801637E8 != 0) && (func_80041980(&D_801637C4, camera, 0x4000U) != 0)) {
|
||||
for (i = 0; i < D_8018C3F0_SIZE; i++) {
|
||||
func_80054324(D_8018C3F0[i], cameraId);
|
||||
}
|
||||
}
|
||||
if ((D_80163814 != 0) && (func_80041980(&D_801637F0, sp3C, 0x4000U) != 0)) {
|
||||
var_s0_2 = D_8018C630;
|
||||
do {
|
||||
func_80054324(*var_s0_2, cameraId);
|
||||
var_s0_2 += 4;
|
||||
} while (var_s0_2 != &D_8018C830);
|
||||
if ((D_80163814 != 0) && (func_80041980(&D_801637F0, camera, 0x4000U) != 0)) {
|
||||
for (i = 0; i < D_8018C630_SIZE; i++) {
|
||||
func_80054324(D_8018C630[i], cameraId);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/hud_renderer/func_80054414.s")
|
||||
#endif
|
||||
|
||||
void func_8005457C(s32 objectIndex, s32 cameraId) {
|
||||
Camera *camera;
|
||||
@@ -4747,9 +4736,9 @@ void func_8005457C(s32 objectIndex, s32 cameraId) {
|
||||
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
|
||||
temp_s0 = &D_80165C18[objectIndex];
|
||||
if (temp_s0->unk_0D5 == 9) {
|
||||
func_8004B72C(0x000000FF, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A2, 0, 0, (s32) temp_s0->unk_0A0);
|
||||
func_8004B72C(255, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A2, 0, 0, (s32) temp_s0->unk_0A0);
|
||||
} else {
|
||||
func_8004B138(0x000000FF, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A0);
|
||||
func_8004B138(255, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A0);
|
||||
}
|
||||
D_80183E80[1] = func_800418AC(temp_s0->pos[0], temp_s0->pos[2], camera->pos);
|
||||
func_800431B0(temp_s0->pos, D_80183E80, temp_s0->sizeScaling, D_0D005AE0);
|
||||
@@ -4805,8 +4794,8 @@ void func_80054938(s32 cameraId) {
|
||||
|
||||
sp54 = &camera1[cameraId];
|
||||
gSPDisplayList(gDisplayListHead++, D_0D007AE0);
|
||||
func_8004477C(D_0D02BC58[D_80165598], 0x00000020, 0x00000020);
|
||||
func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF);
|
||||
func_8004477C(D_0D02BC58[D_80165598], 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[2] = 0x8000;
|
||||
for (var_s0 = 0; var_s0 < D_8018C870_SIZE; var_s0++) {
|
||||
|
||||
+3
-5
@@ -1707,8 +1707,7 @@ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
|
||||
}
|
||||
} else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) {
|
||||
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780U);
|
||||
// I think there's something off with the "player->unk_0A8 >> 8"
|
||||
// I don't like that right-shift
|
||||
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
|
||||
osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
} else {
|
||||
@@ -1734,8 +1733,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
|
||||
((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000))
|
||||
{
|
||||
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780);
|
||||
// I think there's something off with the "player->unk_0A8 >> 8"
|
||||
// I don't like that right-shift
|
||||
// player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number.
|
||||
osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue);
|
||||
} else {
|
||||
osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
|
||||
@@ -1746,7 +1744,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
|
||||
void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) {
|
||||
// Weird typecasting is being done here. We define D_802F1F80 as a 3-dimensional u32 array,
|
||||
// but its better to understand it as a 3-dimensional struct_D_802F1F80 array.
|
||||
struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[arg3][arg2][arg1 << 7];
|
||||
struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[arg3][arg2][arg1 * 0x80];
|
||||
switch(gActiveScreenMode) {
|
||||
case SCREEN_MODE_1P:
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
|
||||
|
||||
+41
-33
@@ -3,15 +3,14 @@
|
||||
#include <PR/os.h>
|
||||
#include <macros.h>
|
||||
#include <functions.h>
|
||||
#include "types.h"
|
||||
#include "config.h"
|
||||
#include <types.h>
|
||||
#include <config.h>
|
||||
#include "profiler.h"
|
||||
#include "main.h"
|
||||
#include "racing/memory.h"
|
||||
#include "menus.h"
|
||||
#include "segments.h"
|
||||
#include "segment_symbols.h"
|
||||
#include "common_structs.h"
|
||||
#include <segments.h>
|
||||
#include <common_structs.h>
|
||||
#include <defines.h>
|
||||
#include "framebuffers.h"
|
||||
#include "camera.h"
|
||||
@@ -203,9 +202,12 @@ void create_thread(OSThread *thread, OSId id, void (*entry)(void *), void *arg,
|
||||
thread->queue = NULL;
|
||||
osCreateThread(thread, id, entry, arg, sp, pri);
|
||||
}
|
||||
|
||||
void isPrintfInit(void);
|
||||
void main_func(void) {
|
||||
osInitialize();
|
||||
#ifdef DEBUG
|
||||
isPrintfInit(); // init osSyncPrintf
|
||||
#endif
|
||||
create_thread(&gIdleThread, 1, &thread1_idle, NULL, gIdleThreadStack + ARRAY_COUNT(gIdleThreadStack), 100);
|
||||
osStartThread(&gIdleThread);
|
||||
}
|
||||
@@ -462,19 +464,19 @@ void display_and_vsync(void) {
|
||||
}
|
||||
|
||||
void init_segment_ending_sequences(void) {
|
||||
bzero((void *) SEG_ENDING_SEQUENCES, 0xDF00);
|
||||
bzero((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE);
|
||||
osWritebackDCacheAll();
|
||||
dma_copy((u8 *) SEG_ENDING_SEQUENCES, (u8 *) &_endingSequencesSegmentRomStart, ALIGN16((u32)&_endingSequencesSegmentRomEnd - (u32)&_endingSequencesSegmentRomStart));
|
||||
osInvalICache((void *) SEG_ENDING_SEQUENCES, 0xDF00);
|
||||
osInvalDCache((void *) SEG_ENDING_SEQUENCES, 0xDF00);
|
||||
osInvalICache((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE);
|
||||
osInvalDCache((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE);
|
||||
}
|
||||
|
||||
void init_segment_racing(void) {
|
||||
bzero((void *) SEG_RACING, 0x2C470);
|
||||
bzero((void *) SEG_RACING, RACING_SEQUENCE_SIZE);
|
||||
osWritebackDCacheAll();
|
||||
dma_copy((u8 *) SEG_RACING, (u8 *) &_racingSegmentRomStart, ALIGN16((u32)&_racingSegmentRomEnd - (u32)&_racingSegmentRomStart));
|
||||
osInvalICache((void *) SEG_RACING, 0x2C470);
|
||||
osInvalDCache((void *) SEG_RACING, 0x2C470);
|
||||
osInvalICache((void *) SEG_RACING, RACING_SEQUENCE_SIZE);
|
||||
osInvalDCache((void *) SEG_RACING, RACING_SEQUENCE_SIZE);
|
||||
}
|
||||
|
||||
void dma_copy(u8 *dest, u8 *romAddr, u32 size) {
|
||||
@@ -498,40 +500,46 @@ void dma_copy(u8 *dest, u8 *romAddr, u32 size) {
|
||||
*/
|
||||
void setup_game_memory(void) {
|
||||
UNUSED u32 pad[2];
|
||||
u32 sp2C;
|
||||
u32 sp40;
|
||||
uintptr_t texture_seg;
|
||||
u32 sp38;
|
||||
ptrdiff_t commonCourseDataSize; // Compressed mio0 size
|
||||
uintptr_t textureSegSize;
|
||||
ptrdiff_t textureSegStart;
|
||||
uintptr_t allocatedMemory;
|
||||
UNUSED s32 unknown_padding;
|
||||
|
||||
init_segment_racing();
|
||||
gHeapEndPtr = SEG_RACING;
|
||||
gHeapEndPtr = (uintptr_t) SEG_RACING;
|
||||
set_segment_base_addr(0, (void *) SEG_START);
|
||||
|
||||
// Memory pool size of 0xAB630
|
||||
// todo: is it possible to shift this value?
|
||||
#ifdef AVOID_UB
|
||||
initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) (&_mainSegNoloadEnd[0] + 0xAB630));
|
||||
#else
|
||||
initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) 0x80242F00);
|
||||
#endif
|
||||
initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) MEMORY_POOL_END);
|
||||
|
||||
func_80000BEC();
|
||||
osInvalDCache((void *) SEG_802BA370, 0x5810);
|
||||
osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_data_802BA370SegmentRomStart, (void *) SEG_802BA370, 0x5810, &gDmaMesgQueue);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
set_segment_base_addr(2, (void *) load_data((uintptr_t) &_data_segment2SegmentRomStart, (uintptr_t) &_data_segment2SegmentRomEnd));
|
||||
sp2C = (u32)&_common_texturesSegmentRomEnd - (u32)&_common_texturesSegmentRomStart;
|
||||
sp2C = ALIGN16(sp2C);
|
||||
texture_seg = SEG_RACING-sp2C;
|
||||
osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_common_texturesSegmentRomStart, (void *) texture_seg, sp2C, &gDmaMesgQueue);
|
||||
|
||||
commonCourseDataSize = (uintptr_t)&_common_texturesSegmentRomEnd - (uintptr_t)&_common_texturesSegmentRomStart;
|
||||
commonCourseDataSize = ALIGN16(commonCourseDataSize);
|
||||
|
||||
#ifdef AVOID_UB
|
||||
textureSegStart = (ptrdiff_t) SEG_RACING[0] - commonCourseDataSize;
|
||||
#else
|
||||
textureSegStart = SEG_RACING - commonCourseDataSize;
|
||||
#endif
|
||||
osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_common_texturesSegmentRomStart, (void *) textureSegStart, commonCourseDataSize, &gDmaMesgQueue);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
|
||||
sp40 = *(u32 *)(texture_seg + 4);
|
||||
sp40 = ALIGN16(sp40);
|
||||
sp38 = gNextFreeMemoryAddress;
|
||||
mio0decode((u8 *) texture_seg, (u8 *) sp38);
|
||||
set_segment_base_addr(0xD, (void *) sp38);
|
||||
textureSegSize = *(uintptr_t *)(textureSegStart + 4);
|
||||
textureSegSize = ALIGN16(textureSegSize);
|
||||
allocatedMemory = gNextFreeMemoryAddress;
|
||||
mio0decode((u8 *) textureSegStart, (u8 *) allocatedMemory);
|
||||
set_segment_base_addr(0xD, (void *) allocatedMemory);
|
||||
|
||||
gNextFreeMemoryAddress += sp40;
|
||||
gNextFreeMemoryAddress += textureSegSize;
|
||||
|
||||
// Common course data does not get reloaded when the race state resets.
|
||||
// Therefore, only reset the memory ptr to after the common course data.
|
||||
gFreeMemoryResetAnchor = gNextFreeMemoryAddress;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
#include "libultra_internal.h"
|
||||
#include "libc/stdarg.h"
|
||||
#include <string.h>
|
||||
#include "printf.h"
|
||||
#include <PR/os.h>
|
||||
#include "hardware.h"
|
||||
|
||||
// Note: This file was very quickly strewn together from oot.
|
||||
// Not great but it works.
|
||||
|
||||
OSPiHandle* sISVHandle; // official name : is_Handle
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u32 magic; // IS64
|
||||
/* 0x04 */ u32 get;
|
||||
/* 0x08 */ u8 unk_08[0x14-0x08];
|
||||
/* 0x14 */ u32 put;
|
||||
/* 0x18 */ u8 unk_18[0x20-0x18];
|
||||
/* 0x20 */ u8 data[0x10000-0x20];
|
||||
} ISVDbg;
|
||||
|
||||
#define gISVDbgPrnAdrs ((ISVDbg*)0xB3FF0000)
|
||||
#define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0)))
|
||||
|
||||
void* is_proutSyncPrintf(void* arg, const char* str, u32 count);
|
||||
|
||||
s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *data) {
|
||||
register s32 stat;
|
||||
while (stat = HW_REG(PI_STATUS_REG, s32), stat & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) {
|
||||
;
|
||||
}
|
||||
*data = HW_REG(arg0->baseAddress | devAddr, s32);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 osEPiReadIo(OSPiHandle* handle, u32 devAddr, u32* data) {
|
||||
register s32 ret;
|
||||
|
||||
__osPiGetAccess();
|
||||
ret = __osEPiRawReadIo(handle, devAddr, data);
|
||||
__osPiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
s32 osEPiWriteIo(OSPiHandle* handle, u32 devAddr, u32 data) {
|
||||
register s32 ret;
|
||||
|
||||
__osPiGetAccess();
|
||||
ret = __osEPiRawWriteIo(handle, devAddr, data);
|
||||
__osPiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void isPrintfInit(void) {
|
||||
sISVHandle = osCartRomInit();
|
||||
osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, 0);
|
||||
osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->get, 0);
|
||||
osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->magic, ASCII_TO_U32('I', 'S', '6', '4'));
|
||||
}
|
||||
|
||||
void osSyncPrintfUnused(const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
_Printf(is_proutSyncPrintf, NULL, fmt, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void osSyncPrintf(const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
_Printf(is_proutSyncPrintf, NULL, fmt, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void print(const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
_Printf(is_proutSyncPrintf, NULL, fmt, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
// assumption
|
||||
void rmonPrintf(const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
_Printf(is_proutSyncPrintf, NULL, fmt, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void* is_proutSyncPrintf(void* arg, const char* str, u32 count) {
|
||||
u32 data;
|
||||
s32 pos;
|
||||
s32 start;
|
||||
s32 end;
|
||||
|
||||
osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->magic, &data);
|
||||
if (data != ASCII_TO_U32('I', 'S', '6', '4')) {
|
||||
return (void*)1;
|
||||
}
|
||||
osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->get, &data);
|
||||
pos = data;
|
||||
osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, &data);
|
||||
start = data;
|
||||
end = start + count;
|
||||
if (end >= 0xFFE0) {
|
||||
end -= 0xFFE0;
|
||||
if (pos < end || start < pos) {
|
||||
return (void*)1;
|
||||
}
|
||||
} else {
|
||||
if (start < pos && pos < end) {
|
||||
return (void*)1;
|
||||
}
|
||||
}
|
||||
while (count) {
|
||||
u32 addr = (u32)&gISVDbgPrnAdrs->data + (start & 0xFFFFFFC);
|
||||
s32 shift = ((3 - (start & 3)) * 8);
|
||||
|
||||
if (*str) {
|
||||
osEPiReadIo(sISVHandle, addr, &data);
|
||||
osEPiWriteIo(sISVHandle, addr, (*str << shift) | (data & ~(0xFF << shift)));
|
||||
|
||||
start++;
|
||||
if (start >= 0xFFE0) {
|
||||
start -= 0xFFE0;
|
||||
}
|
||||
}
|
||||
count--;
|
||||
str++;
|
||||
}
|
||||
osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, start);
|
||||
|
||||
return (void*)1;
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
#include "libultra_internal.h"
|
||||
#include "libc/stdarg.h"
|
||||
|
||||
// These funcs defined in is_debug.c
|
||||
#ifndef DEBUG
|
||||
|
||||
char *osSyncPrintf(char *arg0, const char *arg1, size_t size) {
|
||||
// ifdef'd formatting code?
|
||||
return (1);
|
||||
@@ -12,3 +15,5 @@ void rmonPrintf(const char *fmt, ...) {
|
||||
_Printf(osSyncPrintf, NULL, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#endif // DEBUG
|
||||
|
||||
+2
-2
@@ -1354,9 +1354,9 @@ u8 *load_course(s32 courseId) {
|
||||
unknown1 = gCourseTable[courseId].unknown1;
|
||||
|
||||
if ((gGamestate == ENDING_SEQUENCE) || (gGamestate == CREDITS_SEQUENCE)) {
|
||||
gHeapEndPtr = SEG_ENDING_SEQUENCES;
|
||||
gHeapEndPtr = (uintptr_t) SEG_ENDING_SEQUENCES;
|
||||
} else {
|
||||
gHeapEndPtr = SEG_RACING;
|
||||
gHeapEndPtr = (uintptr_t) SEG_RACING;
|
||||
}
|
||||
set_segment_base_addr(9, load_data((uintptr_t)offsetRomStart, (uintptr_t) offsetRomEnd));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user