mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
152 lines
4.3 KiB
C
152 lines
4.3 KiB
C
#ifndef _JSYSTEM_JUT_JUTEXCEPTION_H
|
|
#define _JSYSTEM_JUT_JUTEXCEPTION_H
|
|
|
|
#include <dolphin/os.h>
|
|
#include "JSystem/JKernel/JKRThread.h"
|
|
#include "JSystem/JSupport/JSUList.h"
|
|
#include "JSystem/JUtility/JUTGamePad.h"
|
|
#include "JSystem/JUtility/JUTXfb.h"
|
|
#include "types.h"
|
|
|
|
struct JUTConsole;
|
|
struct JUTDirectPrint;
|
|
|
|
typedef void (*JUTErrorHandler)(OSError error, OSContext* context, u32 dsisr, u32 dar);
|
|
|
|
enum ExPrintFlags {
|
|
EXPRINTFLAG_GPR = 0x1,
|
|
EXPRINTFLAG_GPRMap = 0x2,
|
|
EXPRINTFLAG_Float = 0x4,
|
|
EXPRINTFLAG_Stack = 0x8,
|
|
EXPRINTFLAG_All = 0xFF,
|
|
};
|
|
|
|
/**
|
|
* @size{0xA4}
|
|
*/
|
|
struct JUTException : public JKRThread {
|
|
enum EInfoPage {
|
|
INFOPAGE_GPR = 1,
|
|
INFOPAGE_Float = 2,
|
|
INFOPAGE_Stack = 3,
|
|
INFOPAGE_GPRMap = 4,
|
|
|
|
};
|
|
|
|
// size: 0x14
|
|
struct JUTExMapFile {
|
|
inline JUTExMapFile(const char* fileName) : mLink(this) {
|
|
mFileName = (char*)fileName;
|
|
}
|
|
|
|
char* mFileName; // _00
|
|
JSULink<JUTExMapFile> mLink; // _04
|
|
};
|
|
|
|
/** @fabricated */
|
|
struct ExCallbackObject {
|
|
JUTErrorHandler mErrorHandler; // _00
|
|
s32 mError; // _04
|
|
OSContext* mContext; // _08
|
|
u32 _0C; // _0C
|
|
u32 _10; // _10
|
|
};
|
|
|
|
JUTException(JUTDirectPrint*); // unused/inlined
|
|
|
|
virtual ~JUTException() {}; // _08 (weak)
|
|
virtual void* run(); // _0C
|
|
|
|
void showFloat(OSContext*);
|
|
void showStack(OSContext*);
|
|
void showMainInfo(u16, OSContext*, u32, u32);
|
|
bool showMapInfo_subroutine(u32, bool);
|
|
void showGPRMap(OSContext*);
|
|
void printDebugInfo(JUTException::EInfoPage, u16, OSContext*, u32, u32);
|
|
bool readPad(u32*, u32*);
|
|
void printContext(u16, OSContext*, u32, u32);
|
|
void createFB();
|
|
|
|
static void waitTime(long);
|
|
static JUTErrorHandler setPreUserCallback(JUTErrorHandler);
|
|
static void appendMapFile(const char*);
|
|
static bool queryMapAddress(char*, u32, long, u32*, u32*, char*, u32, bool, bool);
|
|
static bool queryMapAddress_single(char*, u32, long, u32*, u32*, char*, u32, bool, bool);
|
|
|
|
static JUTException* create(JUTDirectPrint*);
|
|
static void createConsole(void* buffer, u32 bufferSize);
|
|
static void panic_f(const char* file, int line, const char* msg, ...);
|
|
static void errorHandler(u16, OSContext*, u32, u32);
|
|
static void setFPException(u32);
|
|
static bool searchPartialModule(u32, u32*, u32*, u32*, u32*);
|
|
|
|
// unused/inlined:
|
|
static void panic_f_va(const char*, int, const char*, va_list);
|
|
static JUTErrorHandler setPostUserCallback(JUTErrorHandler);
|
|
|
|
// Inline
|
|
static void panic(const char* file, int line, const char* msg) {
|
|
panic_f(file, line, "%s", msg);
|
|
}
|
|
|
|
void showFloatSub(int, f32);
|
|
void showGPR(OSContext*);
|
|
void showSRR0Map(OSContext*);
|
|
bool isEnablePad() const;
|
|
static u32 getFpscr();
|
|
void setFpscr(u32);
|
|
void enableFpuException();
|
|
void disableFpuException();
|
|
|
|
JUTExternalFB* getFrameMemory() const {
|
|
return mFrameMemory;
|
|
}
|
|
|
|
void setTraceSuppress(u32 supress) {
|
|
mTraceSuppress = supress;
|
|
}
|
|
|
|
void setGamePad(JUTGamePad* gamePad) {
|
|
mGamePad = gamePad;
|
|
mPadPort = JUTGamePad::Port_Invalid;
|
|
}
|
|
|
|
void enterAllPad() {
|
|
setGamePad((JUTGamePad*)-1);
|
|
}
|
|
|
|
static JUTException* getManager() {
|
|
return sErrorManager;
|
|
}
|
|
static JUTConsole* getConsole() {
|
|
return sConsole;
|
|
}
|
|
|
|
static JUTConsole* sConsole;
|
|
static void* sConsoleBuffer;
|
|
static size_t sConsoleBufferSize;
|
|
static JUTException* sErrorManager;
|
|
static OSMessageQueue sMessageQueue;
|
|
static void* sMessageBuffer[1];
|
|
static JUTErrorHandler sPreUserCallback;
|
|
static JUTErrorHandler sPostUserCallback;
|
|
static u32 msr;
|
|
static u32 fpscr;
|
|
static const char* sCpuExpName[16];
|
|
static JSUList<JUTExMapFile> sMapFileList;
|
|
|
|
// _00 = VTBL
|
|
// _00-_7C = JKRThread
|
|
JUTExternalFB* mFrameMemory; // _7C
|
|
JUTDirectPrint* mDirectPrint; // _80
|
|
JUTGamePad* mGamePad; // _84
|
|
JUTGamePad::EPadPort mPadPort; // _88
|
|
int mPrintWaitTime0; // _8C
|
|
int mPrintWaitTime1; // _90
|
|
u32 mTraceSuppress; // _94
|
|
u32 _98; // _98
|
|
u32 mPrintFlags; // _9C, see ExPrintFlags enum
|
|
};
|
|
|
|
#endif
|