Mario Kart 64
main.h
Go to the documentation of this file.
1 #ifndef MAIN_H
2 #define MAIN_H
3 
4 #include "types.h"
5 
6 // Message IDs
7 #define MESG_SP_COMPLETE 100
8 #define MESG_DP_COMPLETE 101
9 #define MESG_VI_VBLANK 102
10 #define MESG_START_GFX_SPTASK 103
11 #define MESG_NMI_REQUEST 104
12 
13 #define MTX_HUD_POOL_SIZE 800
14 
15 #ifdef AVOID_UB
16 #define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE
17 #else
18 #define MTX_HUD_POOL_SIZE_MAX MTX_HUD_POOL_SIZE - 50
19 #endif
20 
21 #define MTX_OBJECT_POOL_SIZE 128
22 
23 // TODO: Verify with proper documentation
24 // functions called by mtxShadow multiply by 8
25 // 8 CPU Players * 4 real players in coop
26 #define MTX_SHADOW_POOL_SIZE 8 * 4
27 
28 // TODO: Verify with proper documentation
29 // functions called by mtxKart multiply by 8
30 // 8 CPU Players * 4 real players in coop
31 #define MTX_KART_POOL_SIZE 8 * 4
32 
33 #define MTX_EFFECT_POOL_SIZE 660
34 
35 // func_80095BD0 sets an OOB pool size max check (760)
36 #ifdef AVOID_UB
37 #define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE
38 #else
39 #define MTX_EFFECT_POOL_SIZE_MAX MTX_EFFECT_POOL_SIZE + 100
40 #endif
41 
42 #define GFX_POOL_SIZE 7500
43 
44 struct GfxPool {
45  /* 0x00000 */ Mtx mtxScreen; // Matrix for skybox and startup logo
46  /* 0x00040 */ Mtx mtxPersp[4]; // Matrix for perspective screen modes
47  /* 0x00140 */ Mtx mtxOrtho; // Matrix for ortho hud screen modes
48  /* 0x00180 */ Mtx mtxUnk; // Matrix unused
49  /* 0x001C0 */ Mtx mtxLookAt[4]; // Matrix for lookat screen modes
50  /* 0x002C0 */ Mtx mtxHud[MTX_HUD_POOL_SIZE]; // Matrix hud elements and 2D related effects
51  /* 0x0CAC0 */ Mtx mtxObject[MTX_OBJECT_POOL_SIZE]; // Matrix course objects
52  /* 0x0EAC0 */ Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]; // Matrix shadow characters
53  /* 0x0F2C0 */ Mtx mtxKart[MTX_KART_POOL_SIZE]; // Matrix kart characters
54  /* 0x0FAC0 */ Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]; // Matrix misc effects
55  /* 0x19FC0 */ Mtx mtxArr[4]; // Matrix unused array
56  /* 0x1A0C0 */ Gfx gfxPool[GFX_POOL_SIZE];
57  /* 0x28B20 */ struct SPTask spTask;
58 }; // size = 0x28B70
59 
63 };
64 
65 void create_thread(OSThread*, OSId, void (*entry)(void *), void*, void*, OSPri);
66 void main_func(void);
67 void thread1_idle(void*);
68 void setup_mesg_queues(void);
69 void start_sptask(s32);
70 void create_gfx_task_structure(void);
71 void init_controllers(void);
73 void read_controllers(void);
74 void func_80000BEC(void);
75 void dispatch_audio_sptask(struct SPTask*);
76 void exec_display_list(struct SPTask*);
77 void init_rcp(void);
78 void end_master_display_list(void);
79 void *clear_framebuffer(s32);
80 void rendering_init(void);
81 void config_gfx_pool(void);
82 void display_and_vsync(void);
84 void init_segment_racing(void);
85 void dma_copy(u8*, u8*, u32);
86 void setup_game_memory(void);
88 void race_logic_loop(void);
89 void game_state_handler(void);
90 void interrupt_gfx_sptask(void);
91 void receive_new_tasks(void);
92 void set_vblank_handler(s32, struct VblankHandler*, OSMesgQueue*, OSMesg*);
93 void start_gfx_sptask(void);
94 void handle_vblank(void);
95 void handle_dp_complete(void);
96 void handle_sp_complete(void);
97 void thread3_video(void*);
98 void func_800025D4(void);
99 void func_80002600(void);
100 void func_8000262C(void);
101 void func_80002658(void);
102 void update_gamestate(void);
103 void thread5_game_loop(void*);
104 void thread4_audio(void*);
105 
106 
107 extern struct VblankHandler *gVblankHandler1;
108 extern struct VblankHandler *gVblankHandler2;
109 
110 extern struct SPTask *gActiveSPTask;
111 extern struct SPTask *sCurrentAudioSPTask;
112 extern struct SPTask* sCurrentDisplaySPTask;
113 extern struct SPTask* sNextAudioSPTask;
114 extern struct SPTask* sNextDisplaySPTask;
115 
116 extern struct Controller gControllers[];
117 extern struct Controller *gControllerOne;
118 extern struct Controller *gControllerTwo;
119 extern struct Controller *gControllerThree;
120 extern struct Controller *gControllerFour;
121 extern struct Controller *gControllerFive;
122 extern struct Controller *gControllerSix;
123 extern struct Controller *gControllerSeven;
124 extern struct Controller *gControllerEight;
125 
126 extern Player gPlayers[];
127 extern Player *gPlayerOne;
128 extern Player *gPlayerTwo;
129 extern Player *gPlayerThree;
130 extern Player *gPlayerFour;
131 extern Player *gPlayerFive;
132 extern Player *gPlayerSix;
133 extern Player *gPlayerSeven;
134 extern Player *gPlayerEight;
135 
136 extern Player *gPlayerOneCopy;
137 extern Player *gPlayerTwoCopy;
138 
139 extern s32 D_800FD850[];
140 extern struct GfxPool gGfxPools[];
141 extern struct GfxPool *gGfxPool;
142 
143 extern s32 gfxPool_padding;
144 extern struct VblankHandler gGameVblankHandler;
145 extern struct VblankHandler sSoundVblankHandler;
147 extern OSMesgQueue sSoundMesgQueue;
148 extern OSMesg sSoundMesgBuf[];
149 extern OSMesg gDmaMesgBuf[], gGameMesgBuf;
150 extern OSMesg gGfxMesgBuf[];
151 extern OSMesg gIntrMesgBuf[], gSPTaskMesgBuf[];
152 extern OSMesg gMainReceivedMesg;
153 extern OSIoMesg gDmaIoMesg;
154 extern OSMesgQueue gSIEventMesgQueue;
155 extern OSMesg gSIEventMesgBuf[];
156 
157 extern OSContStatus gControllerStatuses[];
158 
159 extern OSContPad gControllerPads[];
160 extern u8 gControllerBits;
161 
162 extern struct UnkStruct_8015F584 D_8014F110[];
163 extern u16 gNumActors;
164 extern u16 gMatrixObjectCount;
165 extern s32 gTickSpeed;
166 extern f32 D_80150118;
167 extern u16 wasSoftReset;
168 extern u16 D_8015011E;
169 
170 extern s32 D_80150120;
172 extern f32 gCameraZoom[];
173 
174 extern f32 D_80150148;
175 extern f32 D_8015014C;
176 extern f32 D_80150150;
177 
178 extern struct D_80150158 gD_80150158[];
179 extern uintptr_t gSegmentTable[];
180 extern Gfx *gDisplayListHead;
181 extern struct SPTask *gGfxSPTask;
182 extern s32 D_801502A0;
183 extern s32 D_801502A4;
184 extern u16 *gPhysicalFramebuffers[];
185 extern u32 D_801502B4;
186 extern Mat4 D_801502C0;
187 
188 extern s32 padding[];
189 
190 extern u16 D_80152300[];
191 extern u16 D_80152308;
192 
193 extern OSThread gIdleThread;
194 extern ALIGNED8 u8 gIdleThreadStack[];
195 extern OSThread gVideoThread;
196 extern ALIGNED8 u8 gVideoThreadStack[];
199 extern OSThread gAudioThread;
200 extern ALIGNED8 u8 gAudioThreadStack[];
201 
202 extern u8 gGfxSPTaskYieldBuffer[];
203 extern u32 gGfxSPTaskStack[];
204 extern OSMesg gPIMesgBuf[];
205 extern OSMesgQueue gPIMesgQueue;
206 
207 extern s32 gGamestate;
208 #ifndef STRANGE_MAIN_HEADER_H
209 extern s32 D_800DC510;
210 #endif
211 extern u16 creditsRenderMode;
212 extern u16 gDemoMode;
213 extern u16 gEnableDebugMode;
214 extern s32 gGamestateNext;
215 extern s32 gActiveScreenMode;
218 
219 extern s32 gModeSelection;
220 extern s32 D_800DC540;
221 extern s32 D_800DC544;
222 extern s32 gCCSelection;
223 extern s32 gGlobalTimer;
226 extern s32 D_800DC568;
227 extern s32 D_800DC56C[];
228 extern s16 sNumVBlanks;
229 extern f32 gVBlankTimer;
230 extern f32 gCourseTimer;
231 
232 // end of definition of main.c variables
233 
237 extern u64 gspF3DEXDataStart[];
238 extern u64 gspF3DLXDataStart[];
239 
240 extern u64 gGfxSPTaskOutputBuffer[];
242 
248 extern u32 *D_801978D0; // Segment? Keeps track of segmented addresses?
249 
251 extern s16 gCurrentCourseId;
252 
253 extern s16 gMatrixEffectCount;
254 extern u16 gIsGamePaused; // 1 if the game is paused and 0 if the game is not paused
256 
257 extern struct UnkStruct_800DC5EC *D_800DC5EC;
258 
259 extern u16 D_800DC5B0;
260 extern s32 gPlayerWinningIndex;
261 
262 #endif
f32 Mat4[4][4]
Definition: common_structs.h:13
unsigned long long int u64
Definition: llconv.c:2
#define ALIGNED8
Definition: macros.h:45
OSMesg gPIMesgBuf[]
Definition: main.c:164
Player * gPlayerOne
Definition: main.c:70
void init_segment_racing(void)
Definition: main.c:474
u64 rspbootTextStart[]
OSMesgQueue gDmaMesgQueue
Definition: main.c:91
void dispatch_audio_sptask(struct SPTask *)
Definition: main.c:365
struct SPTask * sNextDisplaySPTask
Definition: main.c:56
u64 rspbootTextEnd[]
Definition: main.h:234
OSMesg gDmaMesgBuf[]
Definition: main.c:94
s16 gCurrentCourseId
OSMesg gSIEventMesgBuf[]
Definition: main.c:101
struct Controller * gControllerTwo
Definition: main.c:61
void interrupt_gfx_sptask(void)
Definition: main.c:901
Gfx * gDisplayListHead
Definition: main.c:133
void func_80002600(void)
Definition: main.c:1097
OSMesgQueue unused_gMsgQueue
Definition: main.h:146
OSMesgQueue gGameVblankQueue
Definition: main.h:146
s32 D_800DC544
Definition: main.c:183
Player * gPlayerTwoCopy
Definition: main.c:80
void thread4_audio(void *)
u32 gGfxSPTaskOutputBufferSize
Definition: synthesis.c:38
u16 gIsGamePaused
Definition: code_800029B0.c:49
s32 D_80150120
Definition: main.c:116
struct UnkStruct_8015F584 D_8014F110[]
Definition: main.c:108
f32 D_80150150
Definition: main.c:128
OSMesg gGfxMesgBuf[]
Definition: main.c:95
void func_8000262C(void)
Definition: main.c:1103
OSIoMesg gDmaIoMesg
Definition: main.c:99
u64 gspF3DLXTextEnd[]
Definition: main.h:236
void receive_new_tasks(void)
Definition: main.c:908
s32 padding[]
Definition: main.c:143
f32 D_80150118
Definition: main.c:112
u16 gIsInQuitToMenuTransition
void thread3_video(void *)
struct D_80150158 gD_80150158[]
Definition: main.c:131
Player * gPlayerSix
Definition: main.c:75
u16 wasSoftReset
Definition: main.c:113
f32 gCourseTimer
Definition: main.c:198
#define MTX_OBJECT_POOL_SIZE
Definition: main.h:21
s16 sNumVBlanks
Definition: main.c:195
void exec_display_list(struct SPTask *)
Definition: main.c:370
u16 sRenderingFramebuffer
Definition: main.c:191
void func_80002658(void)
Definition: main.c:1109
#define MTX_EFFECT_POOL_SIZE
Definition: main.h:33
u32 * D_801978D0
#define MTX_KART_POOL_SIZE
Definition: main.h:31
s32 D_800DC540
Definition: main.c:182
u8 _data_segment2SegmentRomStart[]
struct SPTask * sNextAudioSPTask
Definition: main.c:55
s32 gGlobalTimer
Definition: main.c:185
OSMesgQueue gPIMesgQueue
Definition: main.c:165
u8 _data_segment2SegmentRomEnd[]
u64 gGfxSPTaskOutputBuffer[]
Definition: synthesis.c:36
void handle_dp_complete(void)
Definition: main.c:994
u8 _common_texturesSegmentRomEnd[]
s32 D_801502A0
Definition: main.c:135
OSMesg gMainReceivedMesg
Definition: main.c:98
void start_sptask(s32)
Definition: main.c:248
struct Controller * gControllerThree
Definition: main.c:62
void main_func(void)
Definition: main.c:206
u16 * gPhysicalFramebuffers[]
Definition: main.c:137
Mat4 D_801502C0
Definition: main.c:141
void read_controllers(void)
Definition: main.c:343
OSContStatus gControllerStatuses[]
Definition: main.c:103
struct Controller * gControllerFour
Definition: main.c:63
s32 D_800DC510
Definition: main.c:169
u32 D_801502B4
Definition: main.c:138
u16 D_80152308
Definition: main.c:146
u64 gspF3DEXTextStart[]
s32 gGamestateNext
Definition: main.c:174
s32 gfxPool_padding
Definition: main.c:88
Player * gPlayerFour
Definition: main.c:73
Player * gPlayerOneCopy
Definition: main.c:79
void end_master_display_list(void)
Definition: main.c:397
struct Controller gControllers[]
Definition: main.c:59
void dma_copy(u8 *, u8 *, u32)
Definition: main.c:482
struct VblankHandler sSoundVblankHandler
Definition: main.c:90
void * clear_framebuffer(s32)
TODO: Why did void* work for matching.
Definition: main.c:405
void func_80000BEC(void)
Definition: main.c:361
s32 gPlayerCountSelection1
Definition: main.c:179
f32 D_80150148
Definition: main.c:126
OSMesgQueue gSPTaskMesgQueue
Definition: main.h:146
void handle_vblank(void)
Definition: main.c:955
s16 gCurrentlyLoadedCourseId
void game_init_clear_framebuffer(void)
Definition: main.c:550
ALIGNED8 u8 gGameLoopThreadStack[]
Definition: main.c:156
u8 gGfxSPTaskYieldBuffer[]
Definition: main.c:162
u16 D_800DC5B0
void thread1_idle(void *)
Definition: main.c:218
Player * gPlayerFive
Definition: main.c:74
s32 gScreenModeSelection
Definition: main.c:177
u64 gspF3DEXDataStart[]
OSMesg sSoundMesgBuf[]
Definition: main.c:93
OSMesgQueue gGfxVblankQueue
Definition: main.h:146
u16 D_8015011E
Definition: main.c:114
OSMesg gGameMesgBuf
Definition: main.h:149
s32 gPlayerWinningIndex
Definition: code_800029B0.c:42
s32 gMenuSelectionFromQuit
Definition: main.c:117
void func_800025D4(void)
Definition: main.c:1091
void setup_game_memory(void)
Definition: main.c:501
Player * gPlayerTwo
Definition: main.c:71
#define GFX_POOL_SIZE
Definition: main.h:42
u16 gNumActors
Definition: main.c:109
#define MTX_SHADOW_POOL_SIZE
Definition: main.h:26
struct SPTask * gGfxSPTask
Definition: main.c:134
Player gPlayers[]
Definition: main.c:69
void config_gfx_pool(void)
Definition: main.c:433
OSMesg gIntrMesgBuf[]
Definition: main.c:97
struct Controller * gControllerFive
Definition: main.c:64
s32 gGamestate
Definition: main.c:167
ALIGNED8 u8 gIdleThreadStack[]
Definition: main.c:150
u8 _data_802BA370SegmentRomStart[]
s32 D_801502A4
Definition: main.c:136
struct Controller * gControllerSeven
Definition: main.c:66
struct GfxPool * gGfxPool
Definition: main.c:86
void init_segment_ending_sequences(void)
Definition: main.c:466
OSThread gGameLoopThread
Definition: main.c:155
u64 gspF3DLXTextStart[]
void display_and_vsync(void)
Definition: main.c:446
u16 gMatrixObjectCount
Definition: main.c:110
s32 D_800DC568
Definition: main.c:193
struct GfxPool gGfxPools[]
Definition: main.c:85
void update_controller(s32)
Definition: main.c:307
struct VblankHandler * gVblankHandler2
Definition: main.c:50
OSMesgQueue sSoundMesgQueue
Definition: main.c:92
Player * gPlayerSeven
Definition: main.c:76
void rendering_init(void)
Definition: main.c:420
OSThread gVideoThread
Definition: main.c:151
struct SPTask * sCurrentAudioSPTask
Definition: main.c:53
u64 gspF3DEXTextEnd[]
Definition: main.h:235
s16 gMatrixEffectCount
void create_gfx_task_structure(void)
Definition: main.c:263
s32 gTickSpeed
Definition: main.c:111
s32 D_800FD850[]
Definition: main.c:84
u8 _common_texturesSegmentRomStart[]
OSMesgQueue gIntrMesgQueue
Definition: main.h:146
void handle_sp_complete(void)
Definition: main.c:1004
#define MTX_HUD_POOL_SIZE
Definition: main.h:13
struct SPTask * sCurrentDisplaySPTask
Definition: main.c:54
Player * gPlayerEight
Definition: main.c:77
struct SPTask * gActiveSPTask
Definition: main.c:52
OSContPad gControllerPads[]
Definition: main.c:105
struct UnkStruct_800DC5EC * D_800DC5EC
Definition: code_800029B0.c:45
struct Controller * gControllerSix
Definition: main.c:65
u16 D_80152300[]
Definition: main.c:145
void update_gamestate(void)
Definition: main.c:1120
s32 gCCSelection
Definition: main.c:184
u16 gDemoMode
Definition: main.c:172
s32 D_800DC56C[]
Definition: main.c:194
struct VblankHandler gGameVblankHandler
Definition: main.c:89
u32 gGfxSPTaskStack[]
Definition: main.c:163
void thread5_game_loop(void *)
u16 gEnableDebugMode
Definition: main.c:173
void set_vblank_handler(s32, struct VblankHandler *, OSMesgQueue *, OSMesg *)
Definition: main.c:934
s32 gActiveScreenMode
Definition: main.c:176
void setup_mesg_queues(void)
Definition: main.c:239
struct Controller * gControllerEight
Definition: main.c:67
void game_state_handler(void)
Definition: main.c:857
OSMesg gSPTaskMesgBuf[]
Definition: main.h:151
ALIGNED8 u8 gAudioThreadStack[]
Definition: main.c:158
struct VblankHandler * gVblankHandler1
Definition: main.c:49
u16 creditsRenderMode
Definition: main.c:171
void init_controllers(void)
Definition: main.c:296
Player * gPlayerThree
Definition: main.c:72
OSMesgQueue gSIEventMesgQueue
Definition: main.c:100
f32 gVBlankTimer
Definition: main.c:197
OSThread gAudioThread
Definition: main.c:157
u16 sRenderedFramebuffer
Definition: main.c:190
uintptr_t gSegmentTable[]
Definition: main.c:132
struct Controller * gControllerOne
Definition: main.c:60
void start_gfx_sptask(void)
Definition: main.c:947
f32 gCameraZoom[]
Definition: main.c:120
f32 D_8015014C
Definition: main.c:127
OSThread gIdleThread
Definition: main.c:149
ALIGNED8 u8 gVideoThreadStack[]
Definition: main.c:152
void create_thread(OSThread *, OSId, void(*entry)(void *), void *, void *, OSPri)
Definition: main.c:200
u8 gControllerBits
Definition: main.c:106
u64 gspF3DLXDataStart[]
s32 gModeSelection
Definition: main.c:181
void init_rcp(void)
Definition: main.c:386
void race_logic_loop(void)
Definition: main.c:555
s32 OSId
Definition: os_thread.h:22
s32 OSPri
Definition: os_thread.h:21
Definition: types.h:37
Definition: types.h:30
Definition: main.h:44
Mtx mtxHud[MTX_HUD_POOL_SIZE]
Definition: main.h:50
Mtx mtxLookAt[4]
Definition: main.h:49
Mtx mtxKart[MTX_KART_POOL_SIZE]
Definition: main.h:53
Mtx mtxObject[MTX_OBJECT_POOL_SIZE]
Definition: main.h:51
Mtx mtxEffect[MTX_EFFECT_POOL_SIZE]
Definition: main.h:54
Mtx mtxPersp[4]
Definition: main.h:46
struct SPTask spTask
Definition: main.h:57
Gfx gfxPool[GFX_POOL_SIZE]
Definition: main.h:56
Mtx mtxOrtho
Definition: main.h:47
Mtx mtxShadow[MTX_SHADOW_POOL_SIZE]
Definition: main.h:52
Mtx mtxUnk
Definition: main.h:48
Mtx mtxScreen
Definition: main.h:45
Mtx mtxArr[4]
Definition: main.h:55
Definition: os_pi.h:53
Definition: os_thread.h:51
Definition: common_structs.h:247
Definition: types.h:17
Definition: types.h:48
Definition: main.h:60
u16 unk0
Definition: main.h:61
u16 unk2
Definition: main.h:62
Definition: types.h:25
signed int s32
Definition: ultratypes.h:15
unsigned int u32
Definition: ultratypes.h:16
signed short int s16
Definition: ultratypes.h:13
float f32
Definition: ultratypes.h:32
unsigned short int u16
Definition: ultratypes.h:14
unsigned char u8
Definition: ultratypes.h:12