Skip to content

Commit 2a42809

Browse files
authored
Merge pull request #97 from Kelebek1/stage_loader
stage_loader
2 parents eef09bb + 4bf7635 commit 2a42809

21 files changed

+1318
-582
lines changed

include/color.h

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#ifndef COLOR_H
2+
#define COLOR_H
3+
4+
#include "PR/ultratypes.h"
5+
6+
// For checking the alpha bit in an RGBA16 pixel
7+
#define RGBA16_PIXEL_OPAQUE 1
8+
9+
typedef struct {
10+
/* 0x0 */ u8 r;
11+
/* 0x1 */ u8 g;
12+
/* 0x2 */ u8 b;
13+
} Color_RGB8; // size = 0x3
14+
15+
typedef struct {
16+
/* 0x0 */ u8 r;
17+
/* 0x1 */ u8 g;
18+
/* 0x2 */ u8 b;
19+
/* 0x3 */ u8 a;
20+
} Color_RGBA8; // size = 0x4
21+
22+
typedef struct {
23+
/* 0x0 */ s16 r;
24+
/* 0x2 */ s16 g;
25+
/* 0x4 */ s16 b;
26+
} Color_RGB16; // size = 0x6
27+
28+
// only use when necessary for alignment purposes
29+
typedef union Color_RGBA8_u32 {
30+
struct {
31+
u8 r, g, b, a;
32+
};
33+
u32 rgba;
34+
} Color_RGBA8_u32;
35+
36+
typedef struct {
37+
f32 r, g, b, a;
38+
} Color_RGBAf;
39+
40+
typedef struct {
41+
u32 r, g, b, a;
42+
} Color_RGBAu32;
43+
44+
typedef union {
45+
struct {
46+
u16 r : 5;
47+
u16 g : 5;
48+
u16 b : 5;
49+
u16 a : 1;
50+
};
51+
u16 rgba;
52+
} Color_RGBA16;
53+
54+
typedef union {
55+
struct {
56+
u32 r : 5;
57+
u32 g : 5;
58+
u32 b : 5;
59+
u32 a : 1;
60+
};
61+
u16 rgba;
62+
} Color_RGBA16_2;
63+
64+
typedef union{
65+
struct {
66+
u32 r : 3;
67+
u32 g : 3;
68+
u32 b : 3;
69+
u32 a : 5;
70+
};
71+
u16 rgba;
72+
} Color_RGBA14;
73+
74+
#define RGBA8(r, g, b, a) ((((r) & 0xFF) << 24) | (((g) & 0xFF) << 16) | (((b) & 0xFF) << 8) | (((a) & 0xFF) << 0))
75+
76+
#define RGBA16_GET_R(pixel) ((((pixel) & 0xF800) >> 11) & 0xFF)
77+
#define RGBA16_GET_G(pixel) ((((pixel) & 0x7C0) >> 6) & 0xFF)
78+
#define RGBA16_GET_B(pixel) ((((pixel) & 0x3E) >> 1) & 0xFF)
79+
80+
#endif

include/common.h

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "functions.h"
77
#include "variables.h"
88
#include "gfx.h"
9+
#include "color.h"
910

1011
typedef struct unk_D_86002F58_004 {
1112
/* 0x000 */ char pad0[0xC];

include/functions.h

-6
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@ extern void func_800052B4(void);
2121
extern void func_800053B4(void *, s32); // types unknown
2222
extern void func_80005328(void *); // types unknown
2323

24-
// 6BC0.s
25-
extern u32 func_80006314(s32, s32, s32, s32, s32); // types unknown
26-
27-
// 75F0.s
28-
extern void HAL_Printf(s32 x, s32 y, char *str, ...);
29-
3024
// C030.s
3125
extern s32 func_8000B4C4(void);
3226

include/string.h

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
#ifdef __cplusplus
44
extern "C" {
55
#endif
6+
#ifndef M2C
67
#ident "$Revision: 1.23 $"
8+
#endif
79
/*
810
*
911
* Copyright 1992, Silicon Graphics, Inc.

include/variables.h

+39
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,43 @@ extern unk_D_80068BA0* D_80068BA0[4];
4040
extern Gfx D_8006F518[];
4141
extern Gfx D_8006F630[];
4242

43+
typedef struct unk_D_800A7450 {
44+
/* 0x00 */ u8 unk_00;
45+
/* 0x01 */ u8 unk_01;
46+
/* 0x02 */ u8 unk_02;
47+
/* 0x03 */ u8 unk_03;
48+
/* 0x04 */ s32 unk_04;
49+
/* 0x08 */ s32 unk_08;
50+
/* 0x0C */ void* unk_0C;
51+
} unk_D_800A7450; // size >= 0x10
52+
extern unk_D_800A7450 D_800A7450;
53+
54+
extern Mtx D_800A7468;
55+
extern s32 gShowCPUProfiler;
56+
extern s32 gShowMEMProfiler;
57+
58+
59+
typedef struct unk_func_80007444 {
60+
/* 0x00 */ s16 unk_00;
61+
/* 0x02 */ s16 unk_02;
62+
/* 0x04 */ s16 unk_04;
63+
/* 0x06 */ s16 unk_06;
64+
/* 0x08 */ s16 unk_08;
65+
/* 0x0A */ s16 unk_0A;
66+
/* 0x0C */ s8 unk_0C;
67+
/* 0x0D */ s8 unk_0D;
68+
/* 0x0E */ s8 unk_0E;
69+
/* 0x0F */ s8 unk_0F;
70+
/* 0x10 */ s8 unk_10;
71+
/* 0x11 */ u8 unk_11;
72+
/* 0x12 */ u8 unk_12;
73+
/* 0x13 */ u8 unk_13;
74+
/* 0x14 */ u16 unk_14;
75+
/* 0x16 */ s8 unk_16;
76+
/* 0x18 */ void* unk_18[3];
77+
} unk_func_80007444; // size = 0x24
78+
extern unk_func_80007444* D_800A7464;
79+
80+
extern Gfx* D_800A74B0;
81+
4382
#endif

splat.yaml

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ segments:
4646
- [0x6430, c, controller] # controller code
4747
- [0x6A40, c]
4848
- [0x6BC0, c] #
49-
- [0x75F0, c] # stage loader
49+
- [0x75F0, c, stage_loader] # stage loader
50+
- [0x8EB0, c] # empty file/padding?
5051
- [0x8EC0, c, crash_screen] # crash handler
5152
- [0x9D20, c, profiler]
5253
- [0xAF00, c, math_util]
@@ -329,6 +330,7 @@ segments:
329330
# .data is somewhere in here
330331
- [0x69790, .data, util]
331332
- [0x697A0, bin, rom_data_697A0]
333+
- [0x697C0, .data, stage_loader]
332334
- [0x6A1B0, .data, crash_screen]
333335
- [0x6A3B0, .data, profiler]
334336
- [0x6A3D0, .data, gb_tower]

src/3FB0.c

+33-33
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void* func_80003DC4(uintptr_t romStart, uintptr_t romEnd, s32 arg2, s32 arg3) {
5252
func_80003B30(newaddr, romStart, romEnd, arg3);
5353
ret = func_80003D18(newaddr, newaddr, arg2);
5454
}
55-
// is PRESJPEG?
55+
// is PRESJPEG?
5656
} else if ((addr[0] == 'PRES') && (addr[1] == 'JPEG')) {
5757
newaddr = main_pool_alloc(ALIGN16(romEnd - romStart), side);
5858
if (newaddr != NULL) {
@@ -97,8 +97,8 @@ s32 func_80004258(s32 id, s32 arg1, s32 arg2, s32 arg3) {
9797

9898
#pragma GLOBAL_ASM("asm/nonmatchings/3FB0/func_800043BC.s")
9999

100-
void *func_80004454(s32 arg0, uintptr_t romStart, uintptr_t romEnd) {
101-
void *addr = func_80003DC4(romStart, romEnd, 0, 0);
100+
void* func_80004454(s32 arg0, uintptr_t romStart, uintptr_t romEnd) {
101+
void* addr = func_80003DC4(romStart, romEnd, 0, 0);
102102

103103
if (addr != NULL) {
104104
func_800043BC(arg0, addr);
@@ -116,42 +116,42 @@ void* func_800044F4(uintptr_t romStart, uintptr_t romEnd, s32 arg2, s32 arg3) {
116116

117117
ret = NULL;
118118
switch (arg2) {
119-
case 0:
120-
newaddr = func_80003DC4(romStart, romEnd, 0, 0);
121-
ret = newaddr;
122-
if (newaddr != NULL) {
123-
newaddr[0] |= 1;
124-
}
125-
break;
126-
case 1:
127-
newaddr = func_80003DC4(romStart, romStart + 0x20, 0, 0);
128-
ret = newaddr;
129-
if (newaddr != NULL) {
130-
sp28_2 = (ret[3] * 0x10) + 0x10;
131-
main_pool_try_free(ret);
132-
newaddr = func_80003DC4(romStart, romStart + sp28_2, 0, 0);
119+
case 0:
120+
newaddr = func_80003DC4(romStart, romEnd, 0, 0);
133121
ret = newaddr;
134122
if (newaddr != NULL) {
135-
*newaddr |= 2;
136-
if (arg3 == 1) {
137-
*newaddr |= 4;
123+
newaddr[0] |= 1;
124+
}
125+
break;
126+
case 1:
127+
newaddr = func_80003DC4(romStart, romStart + 0x20, 0, 0);
128+
ret = newaddr;
129+
if (newaddr != NULL) {
130+
sp28_2 = (ret[3] * 0x10) + 0x10;
131+
main_pool_try_free(ret);
132+
newaddr = func_80003DC4(romStart, romStart + sp28_2, 0, 0);
133+
ret = newaddr;
134+
if (newaddr != NULL) {
135+
*newaddr |= 2;
136+
if (arg3 == 1) {
137+
*newaddr |= 4;
138+
}
138139
}
139140
}
140-
}
141-
break;
142-
case 2:
143-
newaddr = func_80003DC4(romStart, romStart + 0x20, 1, 0);
144-
ret = newaddr;
145-
if (newaddr != NULL) {
146-
sp28 = (ret[3] * 0x10) + 0x10;
147-
main_pool_try_free(ret);
148-
newaddr = func_80003DC4(romStart, romStart + sp28, 1, 0);
141+
break;
142+
case 2:
143+
newaddr = func_80003DC4(romStart, romStart + 0x20, 1, 0);
149144
ret = newaddr;
150-
if ((newaddr != NULL) && (arg3 == 1)) {
151-
*newaddr |= 4;
145+
if (newaddr != NULL) {
146+
sp28 = (ret[3] * 0x10) + 0x10;
147+
main_pool_try_free(ret);
148+
newaddr = func_80003DC4(romStart, romStart + sp28, 1, 0);
149+
ret = newaddr;
150+
if ((newaddr != NULL) && (arg3 == 1)) {
151+
*newaddr |= 4;
152+
}
152153
}
153-
}
154-
break;
154+
break;
155155
}
156156
if (ret != NULL) {
157157
ret[1] = romStart;

src/6A40.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include "6A40.h"
33

44
struct UnkStruct800A7428 {
5-
u32 *unk0;
6-
u32 *unk4;
5+
u32* unk0;
6+
u32* unk4;
77
u32 unk8;
88
s32 unkC;
99
s16 unk10;
@@ -27,7 +27,7 @@ void func_80005EAC(void) {
2727
}
2828

2929
void func_80005EDC(void) {
30-
s32 *temp_v0 = (s32*)&D_800A7428;
30+
s32* temp_v0 = (s32*)&D_800A7428;
3131

3232
D_800A7428.unk10 ^= 1;
3333
temp_v0 += D_800A7428.unk10;
@@ -37,7 +37,7 @@ void func_80005EDC(void) {
3737
}
3838

3939
void func_80005F1C(s32* arg0, s32* arg1) {
40-
s32 *ptr = (s32*)&D_800A7428;
40+
s32* ptr = (s32*)&D_800A7428;
4141
*arg1 = (uintptr_t)gDisplayListHead - ptr[D_800A7428.unk10];
4242
*arg0 = ptr[D_800A7428.unk10];
4343
}

src/6BC0.h

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33

44
#include "common.h"
55

6+
void func_800060E0(Gfx**, s32, s32, s16, s16);
7+
void* func_80006314(s32, s32, s32, s32, s32);
8+
void func_80006414(void*, void*);
9+
void func_80006450(void);
10+
void func_80006498(Gfx**, void*);
611
void func_800067E4(Gfx**, s32, s32, s32, s32);
712

813

src/75F0.c

-80
This file was deleted.

0 commit comments

Comments
 (0)