You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
* 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>
116 lines
2.7 KiB
C
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
|