Files
Microtransactions64/src/game/main.h
someone2639 42cbaed631 Track whether the RCP hang timer has started to prevent double setting (#689)
* Track whether the RCP hang timer has started to prevent double setting

* removed single letter struct field

* remove debug lines

---------

Co-authored-by: someone2639 <someone2639@gmail.com>
2023-09-22 08:35:17 -05:00

116 lines
2.7 KiB
C

#ifndef MAIN_H
#define MAIN_H
#include "config.h"
enum VIModes {
MODE_NTSC,
MODE_MPAL,
MODE_PAL,
};
#define THREAD1_STACK 0x100
#define THREAD2_STACK 0x800
#define THREAD3_STACK 0x200
#define THREAD4_STACK 0x2000
#define THREAD5_STACK 0x2000
#define THREAD6_STACK 0x400
enum ThreadID {
THREAD_0,
THREAD_1_IDLE,
THREAD_2_CRASH_SCREEN,
THREAD_3_MAIN,
THREAD_4_SOUND,
THREAD_5_GAME_LOOP,
THREAD_6_RUMBLE,
THREAD_7_HVQM,
THREAD_8_TIMEKEEPER,
THREAD_9_DA_COUNTER,
};
struct RumbleData {
u8 comm;
u8 level;
s16 time;
s16 decay;
};
struct RumbleSettings {
s16 event;
s16 level;
s16 timer;
s16 count;
s16 start;
s16 slip;
s16 vibrate;
s16 decay;
};
extern struct Config gConfig;
// extern OSThread gUnkThread;
extern OSThread gIdleThread;
extern OSThread gMainThread;
extern OSThread gGameLoopThread;
extern OSThread gSoundThread;
extern OSThread hvqmThread;
#if ENABLE_RUMBLE
extern OSThread gRumblePakThread;
extern OSPfs gRumblePakPfs;
#endif
extern OSMesgQueue gPIMesgQueue;
extern OSMesgQueue gIntrMesgQueue;
extern OSMesgQueue gSPTaskMesgQueue;
#if ENABLE_RUMBLE
extern OSMesgQueue gRumblePakSchedulerMesgQueue;
extern OSMesgQueue gRumbleThreadVIMesgQueue;
#endif
extern OSMesg gDmaMesgBuf[1];
extern OSMesg gPIMesgBuf[32];
extern OSMesg gSIEventMesgBuf[1];
extern OSMesg gIntrMesgBuf[16];
extern OSMesg gUnknownMesgBuf[16];
extern OSIoMesg gDmaIoMesg;
extern OSMesg gMainReceivedMesg;
extern OSMesgQueue gDmaMesgQueue;
extern OSMesgQueue gSIEventMesgQueue;
#if ENABLE_RUMBLE
extern OSMesg gRumblePakSchedulerMesgBuf[1];
extern OSMesg gRumbleThreadVIMesgBuf[1];
extern struct RumbleData gRumbleDataQueue[3];
extern struct RumbleSettings gCurrRumbleSettings;
#endif
extern struct VblankHandler *gVblankHandler1;
extern struct VblankHandler *gVblankHandler2;
extern struct SPTask *gActiveSPTask;
extern s8 gAudioEnabled;
extern u32 gNumVblanks;
extern s8 gResetTimer;
extern s8 gNmiResetBarsTimer;
extern s8 gDebugLevelSelect;
#ifdef VANILLA_DEBUG
extern s8 gShowDebugText;
#endif
// Special struct that keeps track of whether its timer has been set.
// Without this check, there is a bug at high CPU loads in which
// the RCP timer gets set twice and the game tries to
// insert __osBaseTimer into a ring buffer that only contains itself,
// causing a particularly messy crash.
typedef struct {
u8 started;
OSTimer timer;
} OSTimerEx;
void set_vblank_handler(s32 index, struct VblankHandler *handler, OSMesgQueue *queue, OSMesg *msg);
void dispatch_audio_sptask(struct SPTask *spTask);
void exec_display_list(struct SPTask *spTask);
void change_vi(OSViMode *mode, int width, int height);
#endif // MAIN_H