Mario Kart 64
Loading...
Searching...
No Matches
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
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
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
44struct 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
64
65void create_thread(OSThread*, OSId, void (*entry)(void *), void*, void*, OSPri);
66void main_func(void);
67void thread1_idle(void*);
68void setup_mesg_queues(void);
69void start_sptask(s32);
71void init_controllers(void);
73void read_controllers(void);
74void func_80000BEC(void);
75void dispatch_audio_sptask(struct SPTask*);
76void exec_display_list(struct SPTask*);
77void init_rcp(void);
80void rendering_init(void);
81void config_gfx_pool(void);
82void display_and_vsync(void);
84void init_segment_racing(void);
85void dma_copy(u8*, u8*, size_t);
86void setup_game_memory(void);
88void race_logic_loop(void);
89void game_state_handler(void);
90void interrupt_gfx_sptask(void);
91void receive_new_tasks(void);
92void set_vblank_handler(s32, struct VblankHandler*, OSMesgQueue*, OSMesg*);
93void start_gfx_sptask(void);
94void handle_vblank(void);
95void handle_dp_complete(void);
96void handle_sp_complete(void);
97void thread3_video(void*);
98void func_800025D4(void);
99void func_80002600(void);
100void func_8000262C(void);
101void func_80002658(void);
102void update_gamestate(void);
104void thread4_audio(void*);
105
106
107extern struct VblankHandler *gVblankHandler1;
108extern struct VblankHandler *gVblankHandler2;
109
110extern struct SPTask *gActiveSPTask;
111extern struct SPTask *sCurrentAudioSPTask;
112extern struct SPTask* sCurrentDisplaySPTask;
113extern struct SPTask* sNextAudioSPTask;
114extern struct SPTask* sNextDisplaySPTask;
115
116extern struct Controller gControllers[];
117extern struct Controller *gControllerOne;
118extern struct Controller *gControllerTwo;
119extern struct Controller *gControllerThree;
120extern struct Controller *gControllerFour;
121extern struct Controller *gControllerFive;
122extern struct Controller *gControllerSix;
123extern struct Controller *gControllerSeven;
124extern struct Controller *gControllerEight;
125
126extern Player gPlayers[];
127extern Player *gPlayerOne;
128extern Player *gPlayerTwo;
129extern Player *gPlayerThree;
130extern Player *gPlayerFour;
131extern Player *gPlayerFive;
132extern Player *gPlayerSix;
133extern Player *gPlayerSeven;
134extern Player *gPlayerEight;
135
136extern Player *gPlayerOneCopy;
137extern Player *gPlayerTwoCopy;
138
139extern s32 D_800FD850[];
140extern struct GfxPool gGfxPools[];
141extern struct GfxPool *gGfxPool;
142
143extern s32 gfxPool_padding;
147extern OSMesgQueue sSoundMesgQueue;
148extern OSMesg sSoundMesgBuf[];
149extern OSMesg gDmaMesgBuf[], gGameMesgBuf;
150extern OSMesg gGfxMesgBuf[];
151extern OSMesg gIntrMesgBuf[], gSPTaskMesgBuf[];
152extern OSMesg gMainReceivedMesg;
153extern OSIoMesg gDmaIoMesg;
154extern OSMesgQueue gSIEventMesgQueue;
155extern OSMesg gSIEventMesgBuf[];
156
158
160extern u8 gControllerBits;
161
162extern struct UnkStruct_8015F584 D_8014F110[];
163extern u16 gNumActors;
165extern s32 gTickSpeed;
166extern f32 D_80150118;
167extern u16 wasSoftReset;
168extern u16 D_8015011E;
169
170extern s32 D_80150120;
171extern s32 gGotoMode;
172extern f32 gCameraZoom[];
173
174extern f32 gScreenAspect;
175extern f32 D_8015014C;
176extern f32 D_80150150;
177
178extern struct D_80150158 gD_80150158[];
179extern uintptr_t gSegmentTable[];
180extern Gfx *gDisplayListHead;
181extern struct SPTask *gGfxSPTask;
182extern s32 D_801502A0;
183extern s32 D_801502A4;
184extern u16 *gPhysicalFramebuffers[];
185extern u32 D_801502B4;
186extern Mat4 D_801502C0;
187
188extern s32 padding[];
189
190extern u16 D_80152300[];
191extern u16 D_80152308;
192
193extern OSThread gIdleThread;
194extern u8 gIdleThreadStack[];
196extern u8 gVideoThreadStack[];
198extern u8 gGameLoopThreadStack[];
200extern u8 gAudioThreadStack[];
201
203extern u32 gGfxSPTaskStack[];
204extern OSMesg gPIMesgBuf[];
205extern OSMesgQueue gPIMesgQueue;
206
207extern s32 gGamestate;
208#ifndef STRANGE_MAIN_HEADER_H
209extern s32 D_800DC510;
210#endif
212extern u16 gDemoMode;
213extern u16 gEnableDebugMode;
214extern s32 gGamestateNext;
218
219extern s32 gModeSelection;
220extern s32 D_800DC540;
221extern s32 D_800DC544;
222extern s32 gCCSelection;
223extern s32 gGlobalTimer;
226extern s32 D_800DC568;
227extern s32 D_800DC56C[];
228extern s16 sNumVBlanks;
229extern f32 gVBlankTimer;
230extern f32 gCourseTimer;
231
232// end of definition of main.c variables
233
236
237extern u32 *D_801978D0; // Segment? Keeps track of segmented addresses?
238
239#endif
s16 D_8015F6E8
Definition code_800029B0.c:86
f32 Mat4[4][4]
Definition common_structs.h:13
unsigned long long int u64
Definition llconv.c:2
OSMesg gPIMesgBuf[]
Definition main.c:166
Player * gPlayerOne
Definition main.c:72
void init_segment_racing(void)
Definition main.c:483
OSMesgQueue gDmaMesgQueue
Definition main.c:93
void dispatch_audio_sptask(struct SPTask *)
Definition main.c:374
struct SPTask * sNextDisplaySPTask
Definition main.c:58
OSMesg gDmaMesgBuf[]
Definition main.c:96
OSMesg gSIEventMesgBuf[]
Definition main.c:103
struct Controller * gControllerTwo
Definition main.c:63
void interrupt_gfx_sptask(void)
Definition main.c:913
Gfx * gDisplayListHead
Definition main.c:135
void func_80002600(void)
Definition main.c:1109
u8 gVideoThreadStack[]
Definition main.c:154
OSMesgQueue unused_gMsgQueue
Definition main.h:146
OSMesgQueue gGameVblankQueue
Definition main.h:146
s32 D_800DC544
Definition main.c:185
Player * gPlayerTwoCopy
Definition main.c:82
void thread4_audio(void *)
u32 gGfxSPTaskOutputBufferSize
Definition gfx_output_buffer.c:6
s32 D_80150120
Definition main.c:118
struct UnkStruct_8015F584 D_8014F110[]
Definition main.c:110
f32 D_80150150
Definition main.c:130
OSMesg gGfxMesgBuf[]
Definition main.c:97
void func_8000262C(void)
Definition main.c:1115
OSIoMesg gDmaIoMesg
Definition main.c:101
void receive_new_tasks(void)
Definition main.c:920
s32 padding[]
Definition main.c:145
f32 D_80150118
Definition main.c:114
void thread3_video(void *)
struct D_80150158 gD_80150158[]
Definition main.c:133
Player * gPlayerSix
Definition main.c:77
u16 wasSoftReset
Definition main.c:115
f32 gCourseTimer
Definition main.c:200
#define MTX_OBJECT_POOL_SIZE
Definition main.h:21
s16 sNumVBlanks
Definition main.c:197
void exec_display_list(struct SPTask *)
Definition main.c:379
u16 sRenderingFramebuffer
Definition main.c:193
void func_80002658(void)
Definition main.c:1121
#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:184
struct SPTask * sNextAudioSPTask
Definition main.c:57
s32 gGlobalTimer
Definition main.c:187
OSMesgQueue gPIMesgQueue
Definition main.c:167
u64 gGfxSPTaskOutputBuffer[]
Definition gfx_output_buffer.c:4
void handle_dp_complete(void)
Definition main.c:1006
s32 D_801502A0
Definition main.c:137
OSMesg gMainReceivedMesg
Definition main.c:100
void start_sptask(s32)
Definition main.c:257
struct Controller * gControllerThree
Definition main.c:64
void main_func(void)
Definition main.c:208
u8 gAudioThreadStack[]
Definition main.c:160
u16 * gPhysicalFramebuffers[]
Definition main.c:139
Mat4 D_801502C0
Definition main.c:143
void read_controllers(void)
Definition main.c:352
OSContStatus gControllerStatuses[]
Definition main.c:105
struct Controller * gControllerFour
Definition main.c:65
s32 D_800DC510
Definition main.c:171
f32 gScreenAspect
Definition main.c:128
u32 D_801502B4
Definition main.c:140
u16 D_80152308
Definition main.c:148
s32 gGamestateNext
Definition main.c:176
s32 gfxPool_padding
Definition main.c:90
Player * gPlayerFour
Definition main.c:75
Player * gPlayerOneCopy
Definition main.c:81
void end_master_display_list(void)
Definition main.c:406
struct Controller gControllers[]
Definition main.c:61
struct VblankHandler sSoundVblankHandler
Definition main.c:92
void func_80000BEC(void)
Definition main.c:370
s32 gPlayerCountSelection1
Definition main.c:181
OSMesgQueue gSPTaskMesgQueue
Definition main.h:146
void handle_vblank(void)
Definition main.c:967
void game_init_clear_framebuffer(void)
Definition main.c:562
u8 gGfxSPTaskYieldBuffer[]
Definition main.c:164
void thread1_idle(void *)
Definition main.c:223
Player * gPlayerFive
Definition main.c:76
s32 gScreenModeSelection
Definition main.c:179
OSMesg sSoundMesgBuf[]
Definition main.c:95
OSMesgQueue gGfxVblankQueue
Definition main.h:146
s32 gGotoMode
Definition main.c:119
u16 D_8015011E
Definition main.c:116
OSMesg gGameMesgBuf
Definition main.h:149
void func_800025D4(void)
Definition main.c:1103
void setup_game_memory(void)
Definition main.c:510
Player * gPlayerTwo
Definition main.c:73
#define GFX_POOL_SIZE
Definition main.h:42
u16 gNumActors
Definition main.c:111
#define MTX_SHADOW_POOL_SIZE
Definition main.h:26
void * clear_framebuffer(s32)
Definition main.c:414
struct SPTask * gGfxSPTask
Definition main.c:136
Player gPlayers[]
Definition main.c:71
void config_gfx_pool(void)
Definition main.c:442
OSMesg gIntrMesgBuf[]
Definition main.c:99
struct Controller * gControllerFive
Definition main.c:66
s32 gGamestate
Definition main.c:169
s32 D_801502A4
Definition main.c:138
struct Controller * gControllerSeven
Definition main.c:68
struct GfxPool * gGfxPool
Definition main.c:88
void init_segment_ending_sequences(void)
Definition main.c:475
OSThread gGameLoopThread
Definition main.c:157
u8 gIdleThreadStack[]
Definition main.c:152
void display_and_vsync(void)
Definition main.c:455
u16 gMatrixObjectCount
Definition main.c:112
s32 D_800DC568
Definition main.c:195
struct GfxPool gGfxPools[]
Definition main.c:87
void update_controller(s32)
Definition main.c:316
struct VblankHandler * gVblankHandler2
Definition main.c:52
OSMesgQueue sSoundMesgQueue
Definition main.c:94
Player * gPlayerSeven
Definition main.c:78
u8 gGameLoopThreadStack[]
Definition main.c:158
void rendering_init(void)
Definition main.c:429
OSThread gVideoThread
Definition main.c:153
struct SPTask * sCurrentAudioSPTask
Definition main.c:55
void create_gfx_task_structure(void)
Definition main.c:272
s32 gTickSpeed
Definition main.c:113
s32 D_800FD850[]
Definition main.c:86
OSMesgQueue gIntrMesgQueue
Definition main.h:146
void handle_sp_complete(void)
Definition main.c:1016
#define MTX_HUD_POOL_SIZE
Definition main.h:13
struct SPTask * sCurrentDisplaySPTask
Definition main.c:56
Player * gPlayerEight
Definition main.c:79
struct SPTask * gActiveSPTask
Definition main.c:54
OSContPad gControllerPads[]
Definition main.c:107
struct Controller * gControllerSix
Definition main.c:67
u16 D_80152300[]
Definition main.c:147
void update_gamestate(void)
Definition main.c:1132
s32 gCCSelection
Definition main.c:186
u16 gDemoMode
Definition main.c:174
s32 D_800DC56C[]
Definition main.c:196
struct VblankHandler gGameVblankHandler
Definition main.c:91
u32 gGfxSPTaskStack[]
Definition main.c:165
void thread5_game_loop(void *)
u16 gEnableDebugMode
Definition main.c:175
void set_vblank_handler(s32, struct VblankHandler *, OSMesgQueue *, OSMesg *)
Definition main.c:946
s32 gActiveScreenMode
Definition main.c:178
void setup_mesg_queues(void)
Definition main.c:248
struct Controller * gControllerEight
Definition main.c:69
void game_state_handler(void)
Definition main.c:869
OSMesg gSPTaskMesgBuf[]
Definition main.h:151
struct VblankHandler * gVblankHandler1
Definition main.c:51
u16 creditsRenderMode
Definition main.c:173
void init_controllers(void)
Definition main.c:305
Player * gPlayerThree
Definition main.c:74
OSMesgQueue gSIEventMesgQueue
Definition main.c:102
f32 gVBlankTimer
Definition main.c:199
OSThread gAudioThread
Definition main.c:159
void dma_copy(u8 *, u8 *, size_t)
Definition main.c:491
u16 sRenderedFramebuffer
Definition main.c:192
uintptr_t gSegmentTable[]
Definition main.c:134
struct Controller * gControllerOne
Definition main.c:62
void start_gfx_sptask(void)
Definition main.c:959
f32 gCameraZoom[]
Definition main.c:122
f32 D_8015014C
Definition main.c:129
OSThread gIdleThread
Definition main.c:151
void create_thread(OSThread *, OSId, void(*entry)(void *), void *, void *, OSPri)
Definition main.c:202
u8 gControllerBits
Definition main.c:108
s32 gModeSelection
Definition main.c:183
void init_rcp(void)
Definition main.c:395
void race_logic_loop(void)
Definition main.c:567
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:245
Definition types.h:17
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:33
unsigned short int u16
Definition ultratypes.h:14
unsigned char u8
Definition ultratypes.h:12