Initial gcc Support (#568)

* Added GCC
This commit is contained in:
MegaMech
2024-04-15 10:53:58 -06:00
committed by GitHub
parent 3dd4c071e1
commit d9c1ebb626
39 changed files with 1149 additions and 678 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
#include <PR/ultratypes.h>
#include <macros.h>
#include "data.h"
#include "effects.h"
@@ -440,4 +441,4 @@ u16 D_803B7192; // unconfirmed
u32 gAudioRandom;
s32 gAudioErrorFlags;
u32 D_803B71A0[4]; // unconfirmed
u8 D_803B71B0[4]; // unconfirmed
ALIGNED8 u8 D_803B71B0[4]; // unconfirmed
+2 -2
View File
@@ -56,8 +56,8 @@ extern s16 gAiBufferLengths[NUMAIBUFFERS]; // osAiSetNextBuffer nbytes
extern u16 D_803B7192; // unconfirmed
extern u32 gAudioRandom;
extern s32 gAudioErrorFlags;
extern u32 D_803B71A0[4]; // unconfirmed
extern u8 D_803B71B0[4]; // unconfirmed
extern u32 D_803B71A0[]; // unconfirmed
extern u8 D_803B71B0[]; // unconfirmed
extern struct ReverbSettingsEU sReverbSettings[];
extern struct AudioSessionSettingsEU gAudioSessionPresets[];
-1
View File
@@ -116,7 +116,6 @@ void *unk_pool1_lookup(s32 poolIdx, s32 id);
void func_800BA8B0(s32, s32);
extern s32 D_800EA5D0;
extern u8 D_803B71B0[];
extern s32 gMaxAudioCmds;
extern s16 gTempoInternalToExternal;
+2 -3
View File
@@ -26,7 +26,6 @@
extern s32 D_802BA038;
extern s16 D_802BA048;
s16 gCurrentCourseId = 0;
s16 gCurrentlyLoadedCourseId = 0xFF;
u16 D_800DC5A8 = 0;
@@ -52,7 +51,7 @@ u16 D_800DC5E4 = 0;
//! @todo gPlayerWinningIndex (D_800DC5E8) accessed as word, D_800DC5EB as u8
s32 gPlayerWinningIndex = 0;
struct UnkStruct_800DC5EC D_8015F480[4];
ALIGNED16 struct UnkStruct_800DC5EC D_8015F480[4];
struct UnkStruct_800DC5EC *D_800DC5EC = &D_8015F480[0];
struct UnkStruct_800DC5EC *D_800DC5F0 = &D_8015F480[1];
struct UnkStruct_800DC5EC *D_800DC5F4 = &D_8015F480[2];
@@ -66,7 +65,7 @@ Lights1 D_800DC610[] = {
gdSPDefLights1(175, 175, 175, 255, 255, 255, 0, 0, 120),
gdSPDefLights1(115, 115, 115, 255, 255, 255, 0, 0, 120),
};
static s32 pad_800029B0 = 0x80000000;
UNUSED s32 pad_800029B0 = 0x80000000;
s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY;
s16 gPlaceItemBoxes = 1;
+7 -4
View File
@@ -5722,7 +5722,7 @@ void func_8006A7C0(Player *player, f32 arg1, f32 arg2, s8 arg3, s8 arg4) {
}
}
void func_8006AFD0(Player *player, s8 arg1, s16 arg2, s8 arg3) {
void render_battle_balloon(Player *player, s8 arg1, s16 arg2, s8 arg3) {
Mat4 sp140;
Vec3f sp134;
Vec3s sp12C;
@@ -5848,16 +5848,19 @@ void func_8006B9CC(Player* player, s8 arg1) {
void func_8006BA94(Player* player, s8 playerIndex, s8 arg2) {
if (gPlayerBalloonStatus[playerIndex][0] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 0, arg2);
render_battle_balloon(player, playerIndex, 0, arg2);
}
if (gPlayerBalloonStatus[playerIndex][1] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 1, arg2);
render_battle_balloon(player, playerIndex, 1, arg2);
}
if (gPlayerBalloonStatus[playerIndex][2] != BALLOON_STATUS_GONE) {
func_8006AFD0(player, playerIndex, 2, arg2);
render_battle_balloon(player, playerIndex, 2, arg2);
}
}
/**
* Used in podium ceremony.
*/
void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) {
Mat4 sp108;
Vec3f spFC;
+1 -1
View File
@@ -221,7 +221,7 @@ void func_8006A01C(Player*, s8, s16, s8);
void func_8006A280(Player*, s8, s16, s8);
void func_8006A50C(Player*, f32, f32, s8, s8, s16);
void func_8006A7C0(Player*, f32, f32, s8, s8);
void func_8006AFD0(Player*, s8, s16, s8);
void render_battle_balloon(Player*, s8, s16, s8);
void func_8006B7E4(Player*, s8);
void func_8006B87C(Player*, s8);
+1 -1
View File
@@ -616,7 +616,7 @@ void init_cloud_object(s32 objectIndex, s32 arg1, CloudData *arg2) {
temp_v0->unk_09E = arg2->posY;
temp_v0->sizeScaling = (f32) arg2->scalePercent / 100.0;
temp_v0->activeTexture = &D_8018D220[arg2->subType];
func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0);
func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0[0]);
temp_v0->primAlpha = 0x00FF;
}
+17 -5
View File
@@ -90,7 +90,7 @@ s32 gControllerPak1NumPagesFree;
s32 gControllerPak1FileNote;
s32 gControllerPak2FileNote;
s32 code_80091750_bss_pad2;
SaveData gSaveData;
ALIGNED8 SaveData gSaveData;
u8 D_8018ED90;
u8 D_8018ED91;
@@ -1152,7 +1152,7 @@ s32 D_800E84A0[] = {
};
Vtx *D_800E84C0[] = {
D_02007BB8, D_02007CD8, D_02007DF8,
&D_02007BB8[0], &D_02007BB8[18], &D_02007BB8[36],
};
Gfx *D_800E84CC[] = {
@@ -2791,6 +2791,15 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else {
index = ((gTextColor * 2) + ((s32) gGlobalTimer % 2)) - 4;
}
#ifdef AVOID_UB
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == &D_02007BB8[18]) {
gSPDisplayList(displayListHead++, D_800E84EC[index]);
} else if (arg1 == &D_02007BB8[36]) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
#else
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == D_02007CD8) {
@@ -2798,6 +2807,9 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else if (arg1 == D_02007DF8) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
#endif
return displayListHead;
}
@@ -2863,16 +2875,16 @@ func_80095BD0_label2:
gDPLoadTextureTile_4b(displayListHead++, arg1, G_IM_FMT_I, arg4, 0, 0, 0, arg4, arg5, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
switch (arg4) {
default:
var_a1 = D_02007CD8;
var_a1 = &D_02007BB8[18];
break;
case 16:
var_a1 = D_02007CD8;
var_a1 = &D_02007BB8[18];
break;
case 26:
var_a1 = D_02007BB8;
break;
case 30:
var_a1 = D_02007DF8;
var_a1 = &D_02007BB8[36];
break;
}
+2 -3
View File
@@ -211,8 +211,7 @@ void thread9_crash_screen(UNUSED void *arg0)
// Run only on the first iteration.
if (sCounter == 0) {
crash_screen_draw_square(pFramebuffer);
//#define SKIP_DRAW_SQUARE
#ifndef SKIP_DRAW_SQUARE
#ifndef DEBUG
while(TRUE)
{
read_controllers();
@@ -231,7 +230,7 @@ void thread9_crash_screen(UNUSED void *arg0)
}
}
#endif
#ifdef CRASH_SCREEN_ENHANCEMENT
#if DEBUG
crash_screen_draw(thread);
#else
crash_screen_draw_info(pFramebuffer, thread);
+100 -43
View File
@@ -3,7 +3,7 @@
#include <PR/ultratypes.h>
#include <PR/gbi.h>
#include "data_segment2.h"
#include <assets/startup_logo.h>"
#include <assets/startup_logo.h>
Gfx D_02007650[] = {
gsDPPipeSync(),
@@ -104,168 +104,168 @@ Gfx D_02007818[] = {
Gfx D_02007838[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007BD8, 2, 2),
gsSPVertex(&D_02007BB8[2], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007858[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007BF8, 2, 2),
gsSPVertex(&D_02007BB8[4], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007878[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C18, 2, 2),
gsSPVertex(&D_02007BB8[6], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007898[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C38, 2, 2),
gsSPVertex(&D_02007BB8[8], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078B8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C58, 2, 2),
gsSPVertex(&D_02007BB8[10], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078D8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C78, 2, 2),
gsSPVertex(&D_02007BB8[12], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078F8[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007C98, 2, 2),
gsSPVertex(&D_02007BB8[14], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007918[] = {
gsSPVertex(D_02007BB8, 2, 0),
gsSPVertex(D_02007CB8, 2, 2),
gsSPVertex(&D_02007BB8[16], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007938[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007CF8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[20], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007958[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D18, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[22], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007978[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D38, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[24], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007998[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D58, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[26], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079B8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D78, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[28], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079D8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007D98, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[30], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079F8[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007DB8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[32], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A18[] = {
gsSPVertex(D_02007CD8, 2, 0),
gsSPVertex(D_02007DD8, 2, 2),
gsSPVertex(&D_02007BB8[18], 2, 0),
gsSPVertex(&D_02007BB8[34], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A38[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E18, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[38], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A58[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E38, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[40], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A78[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E58, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[42], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A98[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E78, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[44], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AB8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007E98, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[46], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AD8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007EB8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[48], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AF8[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007ED8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[50], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007B18[] = {
gsSPVertex(D_02007DF8, 2, 0),
gsSPVertex(D_02007EF8, 2, 2),
gsSPVertex(&D_02007BB8[36], 2, 0),
gsSPVertex(&D_02007BB8[52], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
@@ -281,8 +281,64 @@ UNUSED Vtx D_02007B38[] = {
{{{ 0, 0, 0}, 0, { 0, 448}, {0xff, 0x00, 0x00, 0xff}}},
};
//! @todo Place all these vertices in a single array
// Access the correct vertex using sym[value]
#ifdef AVOID_UB
Vtx D_02007BB8[] = {
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{16, 65520, 0}, 0, {960, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 65504, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{30, 65504, 0}, 0, {1856, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0x00, 0xff, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0x00, 0xff, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0xff, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0xff, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0xff, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
};
#else
Vtx D_02007BB8[] = {
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
@@ -417,6 +473,7 @@ Vtx D_02007EF8[] = {
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
};
#endif
Gfx D_02007F18[] = {
gsDPPipeSync(),
+13
View File
@@ -0,0 +1,13 @@
#include <ultra64.h>
#include <macros.h>
/**
* Trig tables get loaded into memory at this location.
* See trig_tables.c for the real file.
*/
#ifdef VERSION_EU
ALIGNED8 u8 trigTablesPadding[0x5750];
#else
ALIGNED8 u8 trigTablesPadding[0x5810];
#endif
+3
View File
@@ -51,6 +51,7 @@ extern Gfx D_02008058[];
extern Gfx common_rectangle_display[];
extern Vtx D_02007BB8[];
#ifndef AVOID_UB
extern Vtx D_02007BD8[];
extern Vtx D_02007BF8[];
extern Vtx D_02007C18[];
@@ -77,5 +78,7 @@ extern Vtx D_02007E98[];
extern Vtx D_02007EB8[];
extern Vtx D_02007ED8[];
extern Vtx D_02007EF8[];
#endif
#endif
+9 -10
View File
@@ -1,4 +1,6 @@
#define STRANGE_MAIN_HEADER_H
#ifndef GCC
#define D_800DC510_AS_U16
#endif
#include <ultra64.h>
#include <PR/os.h>
#include <PR/ucode.h>
@@ -83,11 +85,11 @@ Player *gPlayerTwoCopy = &gPlayers[1];
UNUSED Player *gPlayerThreeCopy = &gPlayers[2];
UNUSED Player *gPlayerFourCopy = &gPlayers[3];
s32 D_800FD850[3];
UNUSED s32 D_800FD850[3];
struct GfxPool gGfxPools[2];
struct GfxPool *gGfxPool;
s32 gfxPool_padding; // is this necessary?
UNUSED s32 gfxPool_padding; // is this necessary?
struct VblankHandler gGameVblankHandler;
struct VblankHandler sSoundVblankHandler;
OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
@@ -103,15 +105,14 @@ OSMesgQueue gSIEventMesgQueue;
OSMesg gSIEventMesgBuf[3];
OSContStatus gControllerStatuses[4];
OSContPad gControllerPads[4];
u8 gControllerBits;
struct UnkStruct_8015F584 D_8014F110[1024];
u16 gNumActors;
u16 gMatrixObjectCount;
s32 gTickSpeed;
f32 D_80150118;
u16 wasSoftReset;
u16 D_8015011E;
@@ -120,9 +121,6 @@ s32 gGotoMode;
UNUSED s32 D_80150128;
UNUSED s32 D_8015012C;
f32 gCameraZoom[4]; // look like to be the fov of each character
//f32 D_80150134;
//f32 D_80150138;
//f32 D_8015013C;
UNUSED s32 D_80150140;
UNUSED s32 D_80150144;
f32 gScreenAspect;
@@ -133,6 +131,7 @@ UNUSED f32 D_80150154;
struct D_80150158 gD_80150158[16];
uintptr_t gSegmentTable[16];
Gfx *gDisplayListHead;
struct SPTask *gGfxSPTask;
s32 D_801502A0;
s32 D_801502A4;
@@ -161,8 +160,8 @@ ALIGNED8 u8 gAudioThreadStack[STACKSIZE];
UNUSED OSThread D_8015CD30;
UNUSED ALIGNED8 u8 D_8015CD30_Stack[STACKSIZE / 2];
u8 gGfxSPTaskYieldBuffer[4352];
u32 gGfxSPTaskStack[256];
ALIGNED8 u8 gGfxSPTaskYieldBuffer[4352];
ALIGNED8 u32 gGfxSPTaskStack[256];
OSMesg gPIMesgBuf[32];
OSMesgQueue gPIMesgQueue;
+15 -9
View File
@@ -136,23 +136,21 @@ extern Player *gPlayerEight;
extern Player *gPlayerOneCopy;
extern Player *gPlayerTwoCopy;
extern s32 D_800FD850[];
extern struct GfxPool gGfxPools[];
extern struct GfxPool *gGfxPool;
extern s32 gfxPool_padding;
extern struct VblankHandler gGameVblankHandler;
extern struct VblankHandler sSoundVblankHandler;
extern OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
extern OSMesgQueue sSoundMesgQueue;
extern OSMesg sSoundMesgBuf[];
extern OSMesg gDmaMesgBuf[], gGameMesgBuf;
extern OSMesg sSoundMesgBuf[1];
extern OSMesg gDmaMesgBuf[1], gGameMesgBuf;
extern OSMesg gGfxMesgBuf[];
extern OSMesg gIntrMesgBuf[], gSPTaskMesgBuf[];
extern OSMesg gIntrMesgBuf[16], gSPTaskMesgBuf[16];
extern OSMesg gMainReceivedMesg;
extern OSIoMesg gDmaIoMesg;
extern OSMesgQueue gSIEventMesgQueue;
extern OSMesg gSIEventMesgBuf[];
extern OSMesg gSIEventMesgBuf[3];
extern OSContStatus gControllerStatuses[];
@@ -203,11 +201,19 @@ extern u8 gGfxSPTaskYieldBuffer[];
extern u32 gGfxSPTaskStack[];
extern OSMesg gPIMesgBuf[];
extern OSMesgQueue gPIMesgQueue;
void race_logic_loop(void);
extern s32 gGamestate;
#ifndef STRANGE_MAIN_HEADER_H
extern s32 D_800DC510;
#ifndef D_800DC510_AS_U16
// Prevent overlapping writes in gcc
// Whether D_800DC510 was intended to be a separate variable in main.c from the rest of the game is unknown
#ifdef GCC
extern u16 D_800DC510;
#else
extern s32 D_800DC510;
#endif
#endif
extern u16 D_800DC514;
extern u16 creditsRenderMode;
extern u16 gDemoMode;
extern u16 gEnableDebugMode;
+6 -1
View File
@@ -1,10 +1,15 @@
#include "libultra_internal.h"
OSThreadTail __osThreadTail = {NULL, -1};
#ifndef AVOID_UB
OSThread *__osThreadTail = NULL;
u32 __osTest = -1;
OSThread *__osRunQueue = (OSThread *) &__osThreadTail;
OSThread *__osActiveQueue = (OSThread *) &__osThreadTail;
OSThread *__osRunningThread = NULL;
OSThread *__osFaultedThread = NULL;
#else
OSThread_ListHead __osThreadTail_fix = {NULL, -1, (OSThread *) &__osThreadTail_fix, (OSThread *) &__osThreadTail_fix, NULL, 0};
#endif
void __osDequeueThread(OSThread **queue, OSThread *thread) {
register OSThread **a2;
+1 -1
View File
@@ -1,8 +1,8 @@
#include "ultra64.h"
#include "osint.h"
#include "piint.h"
#include "libultra_internal.h"
extern OSThread *__osRunQueue;
static void __osLeoResume(void);
static void __osLeoAbnormalResume(void);
extern u8 leoDiskStack[OS_PIM_STACKSIZE]; //technically should have a OS_LEO_STACKSIZE or something..
+30 -3
View File
@@ -1,6 +1,7 @@
#ifndef _LIBULTRA_INTERNAL_H_
#define _LIBULTRA_INTERNAL_H_
#include <ultra64.h>
#include <PR/os_thread.h>
#include "macros.h"
typedef struct __OSEventState
@@ -15,15 +16,41 @@ typedef struct __osThreadTail
OSPri priority;
} OSThreadTail;
/*
* This define is needed because the original definitions in __osDequeueThread.c are declared
* seperately instead of part of a single struct, however some code alises over this memory
* assuming a unified structure. To fix this, we declare the full type here and then alias the
* symbol names to the correct members in AVOID_UB.
*/
typedef struct
{
/*0x00*/ struct OSThread_s *next;
/*0x04*/ OSPri priority;
/*0x08*/ struct OSThread_s *queue;
/*0x0C*/ struct OSThread_s *tlnext;
/*0x10*/ struct OSThread_s *unk10;
/*0x14*/ u32 unk14;
} OSThread_ListHead;
#ifdef AVOID_UB
// Now fix the symbols to the new one.
extern OSThread_ListHead __osThreadTail_fix;
#define __osThreadTail __osThreadTail_fix.next
#define D_80334894 __osThreadTail_fix.priority
#define __osRunQueue __osThreadTail_fix.queue
#define __osActiveQueue __osThreadTail_fix.tlnext
#define __osRunningThread __osThreadTail_fix.unk10
#else
// Original OSThread_ListHead definitions
extern OSThreadTail __osThreadTail;
extern OSThread *__osThreadTail;
extern OSThread *__osActiveQueue;
extern OSThread *__osRunQueue;
extern OSThread *__osRunningThread;
#endif
// Original EEPROM definitions
extern ALIGNED8 u32 D_80365E00[15];
extern u32 D_80365E00[15];
extern u32 D_80365E3C;
typedef struct {
+5 -5
View File
@@ -7,7 +7,7 @@ unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1)
return a0 % a1;
}
unsigned long long __ull_div(unsigned long long a0, unsigned long long a1)
{
{
return a0 / a1;
}
@@ -34,19 +34,19 @@ unsigned long long __ll_mul(unsigned long long a0, unsigned long long a1)
void __ull_divremi(unsigned long long *div, unsigned long long *rem, unsigned long long a2, unsigned short a3)
{
*div = a2 / a3;
*rem = a2 % a3;
}
*rem = a2 % a3;
}
long long __ll_mod(long long a0, long long a1)
{
long long tmp = a0 % a1;
if ((tmp < 0 && a1 > 0) || (tmp > 0 && a1 < 0))
{
tmp += a1;
tmp += a1;
}
return tmp;
}
long long __ll_rshift(long long a0, long long a1)
{
return a0 >> a1;
-1
View File
@@ -1,7 +1,6 @@
#include "libultra_internal.h"
void __osCleanupThread(void);
extern OSThread *__osActiveQueue;
// Don't warn about pointer->u64 cast
+1 -2
View File
@@ -1,8 +1,7 @@
#include "libultra_internal.h"
#include "controller.h"
extern u64 osClockRate;
extern u8 D_80365D20;
extern u8 _osContNumControllers;
extern OSTimer D_80196548;
extern OSMesgQueue _osContMesgQueue;
extern OSMesg _osContMesgBuff[4];
+2 -21
View File
@@ -1,30 +1,11 @@
#include "libultra_internal.h"
#include "controller.h"
#include "macros.h"
#include "controller.h"
extern u8 __osContLastCmd;
extern u8 _osLastSentSiCmd;
extern OSPifRam __osEepPifRam;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
u8 unk04;
u8 unk05;
u8 unk06;
u8 unk07;
} unkStruct3;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
unkStruct3 unk04;
} unkStruct2;
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepReadData(u8);
-19
View File
@@ -7,25 +7,6 @@ OSPifRam __osEepPifRam;
extern u8 __osContLastCmd;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
u8 unk04;
u8 unk05;
u8 unk06;
u8 unk07;
} unkStruct3;
typedef struct {
u8 unk00;
u8 unk01;
u8 unk02;
u8 unk03;
unkStruct3 unk04;
} unkStruct2;
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepWriteData(u8, u8 *);
+5
View File
@@ -1,6 +1,7 @@
#ifndef _OSINT_H
#define _OSINT_H
#include "libultra_internal.h"
#include <macros.h>
//maybe should be in exceptasm.h?
extern void __osEnqueueAndYield(OSThread **);
@@ -15,10 +16,14 @@ extern void __osTimerInterrupt(void);
extern u32 __osProbeTLB(void *);
extern int __osSpDeviceBusy(void);
#ifdef AVOID_UB
extern OSThread_ListHead __osThreadTail_fix;
#else
extern OSThread *__osRunningThread;
extern OSThread *__osActiveQueue;
extern OSThread *__osFaultedThread;
extern OSThread *__osRunQueue;
#endif
extern OSTimer *__osTimerList;
extern OSTimer __osBaseTimer;
+1
View File
@@ -7,6 +7,7 @@
#include <PR/rcp.h>
#include "buffers/trig_tables.h"
#include "math.h"
#include "memory.h"
#pragma intrinsic (sqrtf,fabs)
+1
View File
@@ -22,6 +22,7 @@ s32 render_set_position(Mat4, s32);
f32 func_802B51E8(Vec3f, Vec3f);
s32 get_angle_between_two_vectors(Vec3f, Vec3f);
u32 func_802B5258(Vec3f, Vec3s);
void func_802B5794(Mat4, Vec3f, Vec3f);
void vec3f_set(Vec3f, f32, f32, f32);
void vec3s_set(Vec3s, s16, s16, s16);
void *vec3f_copy_return(Vec3f, Vec3f);
+1
View File
@@ -26,6 +26,7 @@ struct UnkStruct_802B8CD4 D_802B8CD4[] = {
0
};
s32 D_802B8CE4 = 0; // pad
s32 memoryPadding[2];
/**
* @brief Returns the address of the next available memory location and updates the memory pointer
+7 -7
View File
@@ -563,19 +563,19 @@ UNUSED void func_80046C78(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
}
UNUSED void func_80046CDC(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
func_800464D0(arg0, arg1, arg2, arg3, texture, &D_0D005FB0, 64, 32, 64, 32);
func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D40(Vec3f arg0, Vec3su arg1, f32 arg2, u8 *texture) {
func_80046808(arg0, arg1, arg2, texture, &D_0D005FB0, 64, 32, 64, 32);
func_80046808(arg0, arg1, arg2, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D90(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D0060B0, 64, 64, 64, 32);
func_800464D0(arg0, arg1, arg2, arg3, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
UNUSED void func_80046DF4(s32 arg0, s32 arg1, u16 arg2, f32 arg3, s32 arg4, u8 *texture) {
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, D_0D0060B0, 64, 64, 64, 32);
func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
void load_texture_and_tlut(u8 *tlut, u8 *texture, s32 width, s32 height) {
@@ -3528,7 +3528,7 @@ void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
D_80183E80[2] = (s16) (temp_v0->unk_084[6] + 0x8000);
rsp_set_matrix_transformation(temp_v0->pos, (u16 *) D_80183E80, temp_v0->sizeScaling);
set_color_render((s32) temp_v0->unk_084[0], (s32) temp_v0->unk_084[1], (s32) temp_v0->unk_084[2], (s32) temp_v0->unk_084[3], (s32) temp_v0->unk_084[4], (s32) temp_v0->unk_084[5], (s32) temp_v0->primAlpha);
gSPVertex(gDisplayListHead++, &D_0D0060B0[vertexIndex], 4, 0);
gSPVertex(gDisplayListHead++, &common_vtx_hedgehog[vertexIndex], 4, 0);
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
}
}
@@ -3906,7 +3906,7 @@ void draw_crabs(s32 objectIndex, s32 cameraId) {
camera = &camera1[cameraId];
func_8004A6EC(objectIndex, 0.5f);
gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos);
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
@@ -4161,7 +4161,7 @@ void render_object_neon(s32 cameraId) {
object = &gObjectList[objectIndex];
if ((object->state >= 2) && (is_obj_index_flag_status_inactive(objectIndex, 0x00080000) != 0) && (is_object_visible_on_camera(objectIndex, camera, 0x2AABU) != 0)) {
object->orientation[1] = angle_between_object_camera(objectIndex, camera);
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
}
+8 -8
View File
@@ -2955,7 +2955,7 @@ void init_obj_lakitu_red_flag_countdown(s32 objectIndex, s32 arg1) {
D_8018D168 = 0;
}
init_texture_object(objectIndex, (u8 *) common_tlut_lakitu_countdown, gTextureLakituNoLights1, 0x38U, (u16) 0x00000048);
gObjectList[objectIndex].vertex = D_0D005EB0;
gObjectList[objectIndex].vertex = common_vtx_lakitu;
gObjectList[objectIndex].sizeScaling = 0.15f;
set_object_flag_status_false(objectIndex, 0x00000010);
func_80072488(objectIndex);
@@ -3048,7 +3048,7 @@ void init_obj_lakitu_red_flag(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_checkered_flag, gTextureLakituCheckeredFlag01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3298,7 +3298,7 @@ void func_8007A060(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_second_lap, gTextureLakituSecondLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3346,7 +3346,7 @@ void func_8007A228(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_final_lap, gTextureLakituFinalLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
temp_v0->vertex = D_0D006730;
temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3392,7 +3392,7 @@ void func_8007A3F0(s32 objectIndex, s32 arg1) {
func_800791F0(objectIndex, arg1);
init_texture_object(objectIndex, common_tlut_lakitu_reverse, gTextureLakituReverse01, 0x48U, (u16) 0x00000038);
gObjectList[objectIndex].activeTexture = D_8018C028;
gObjectList[objectIndex].vertex = D_0D006730;
gObjectList[objectIndex].vertex = common_vtx_also_lakitu;
gObjectList[objectIndex].pos[2] = var;
gObjectList[objectIndex].pos[1] = var;
gObjectList[objectIndex].pos[0] = var;
@@ -6698,7 +6698,7 @@ void func_8008311C(s32 objectIndex, s32 arg1) {
temp_s0 = &gObjectList[objectIndex];
temp_s0->activeTLUT = d_course_yoshi_valley_hedgehog_tlut;
temp_s0->activeTexture = d_course_yoshi_valley_hedgehog;
temp_s0->vertex = D_0D0060B0;
temp_s0->vertex = common_vtx_hedgehog;
temp_s0->sizeScaling = 0.2f;
temp_s0->itemDisplay = 0;
func_80072488(objectIndex);
@@ -6754,7 +6754,7 @@ void func_800833D0(s32 objectIndex, s32 arg1) {
break;
}
if (gObjectList[objectIndex].itemDisplay == 0) {
gObjectList[objectIndex].vertex = D_0D0060B0;
gObjectList[objectIndex].vertex = common_vtx_hedgehog;
} else {
gObjectList[objectIndex].vertex = D_0D006130;
}
@@ -6897,7 +6897,7 @@ void func_80083A94(s32 objectIndex) {
void func_80083B0C(s32 objectIndex) {
init_texture_object(objectIndex, d_course_frappe_snowland_snowman_tlut, d_course_frappe_snowland_snowman_body, 0x40U, (u16) 0x00000040);
gObjectList[objectIndex].vertex = D_0D0060B0;
gObjectList[objectIndex].vertex = common_vtx_hedgehog;
gObjectList[objectIndex].sizeScaling = 0.1f;
gObjectList[objectIndex].itemDisplay = 0;
func_80072488(objectIndex);