Get osreport.c linked

This commit is contained in:
Cuyler36
2023-03-15 16:46:43 -04:00
parent 2252184a87
commit 3b150d408d
19 changed files with 976 additions and 93 deletions
+1
View File
@@ -2,6 +2,7 @@
#define JSYSTEM_H
#include "dolphin/os.h"
#include "libforest/osreport.h"
#include "JSystem/JKernel/JKRAram.h"
//#include "JSystem/JUtility/JUTException.h"
+3 -3
View File
@@ -5,7 +5,7 @@
#include "va_args.h"
void vprintf(const char*, va_list);
void print(const char*, ...);
extern void vprintf(const char*, va_list);
extern void printf(const char*, ...);
#endif
#endif
+15 -3
View File
@@ -3,8 +3,11 @@
#include "types.h"
#include "dolphin/os/OSContext.h"
#include "dolphin/os/OSInterrupt.h"
#include "dolphin/os/OSMessage.h"
#include "libforest/osreport.h" /* OSReport funcs */
#include "va_args.h"
#ifdef __cplusplus
extern "C" {
#endif
@@ -15,8 +18,8 @@ extern void __OSFPRInit();
extern void __OSCacheInit();
void OSPanic(const char *file, int line, const char *message, ...);
void OSReport(const char*, ...);
void OSVReport(const char* format, va_list list);
void OSVReport(const char* fmt, va_list list);
void OSReport(const char* fmt, ...);
extern void __OSPSInit();
extern void __OSCacheInit();
@@ -24,6 +27,15 @@ extern void __OSCacheInit();
#define OSErrorLine(line, ...) \
OSPanic(__FILE__, line, __VA_ARGS__)
#ifdef DOLPHIN_DEBUG
#define DOLPHIN_ASSERTLINE(assertion, line) \
(void) ((assertion) || (OSErrorLine(line, "Failed assertion " #assertion), 0))
#define DOLPHIN_ASSERT(assertion) \
(void) ((assertion) || (OSPanic(__FILE__, __LINE__, "Failed assertion " #assertion), 0))
#else
#define DOLPHIN_ASSERTLINE(assertion, line)
#define DOLPHIN_ASSERT(assertion)
#endif
void OSResetSystem(u32, u32, u32); // goes in reset, but eh
void OSInit(void);
@@ -33,6 +45,6 @@ typedef void (*OSExceptionHandler)(u8, OSContext*);
OSExceptionHandler __OSSetExceptionHandler(u8, OSExceptionHandler);
#ifdef __cplusplus
};
}
#endif
#endif
+12 -12
View File
@@ -5,18 +5,18 @@
extern "C" {
#endif
asm void DCEnable(void);
asm void DCInvalidateRange(void*, u32);
asm void DCFlushRange(void*, u32);
asm void DCStoreRange(void*, u32);
asm void DCFlushRangeNoSync(void*, u32);
asm void DCStoreRangeNoSync(void*, u32);
asm void DCZeroRange(void*, u32);
asm void DCTouchRange(void*, u32 len);
asm void ICInvalidateRange(void*, u32);
asm void ICFlashInvalidate(void);
asm void ICEnable(void);
asm void LCDisable(void);
void DCEnable(void);
void DCInvalidateRange(void*, u32);
void DCFlushRange(void*, u32);
void DCStoreRange(void*, u32);
void DCFlushRangeNoSync(void*, u32);
void DCStoreRangeNoSync(void*, u32);
void DCZeroRange(void*, u32);
void DCTouchRange(void*, u32 len);
void ICInvalidateRange(void*, u32);
void ICFlashInvalidate(void);
void ICEnable(void);
void LCDisable(void);
//void L2GlobalInvalidate(void);
+9
View File
@@ -0,0 +1,9 @@
#ifndef DOLPHIN_OSEXCEPTION_H
#define DOLPHIN_OSEXCEPTION_H
typedef enum OSException {
OS_EXCEPTION_FLOATING_POINT = 7,
OS_EXCEPTION_COUNT = 15,
} OSException;
#endif
+72
View File
@@ -0,0 +1,72 @@
#ifndef DOLPHIN_OSEXI_H
#define DOLPHIN_OSEXI_H
#include "dolphin/os/OSContext.h"
#include "dolphin/os/OSInterrupt.h"
#include "types.h"
typedef enum {
EXI_STATE_DMA_ACCESS = (1 << 0),
EXI_STATE_IMM_ACCESS = (1 << 1),
EXI_STATE_SELECTED = (1 << 2),
EXI_STATE_ATTACHED = (1 << 3),
EXI_STATE_LOCKED = (1 << 4),
EXI_STATE_BUSY = EXI_STATE_DMA_ACCESS | EXI_STATE_IMM_ACCESS
} EXIState;
typedef enum {
EXI_CHAN_0,
EXI_CHAN_1,
EXI_CHAN_2,
EXI_MAX_CHAN
} EXIChannel;
typedef enum {
EXI_READ,
EXI_WRITE,
EXI_TYPE_2,
EXI_MAX_TYPE
} EXIType;
typedef void (*EXICallback)(EXIChannel, OSContext*);
typedef struct EXIControl {
EXICallback exiCallback;
EXICallback tcCallback;
EXICallback extCallback;
vu32 state;
int immLen;
u8* immBuf;
u32 dev;
u32 id;
s32 idTime;
int items;
struct {
u32 dev;
EXICallback callback;
} queue[3];
} EXIControl;
#define EXI_REG_MAX 5
extern vu32 __EXIRegs[EXI_MAX_CHAN][EXI_REG_MAX] AT_ADDRESS(0xCC006800);
void SetExiInterruptMask(EXIChannel, volatile EXIControl*);
BOOL EXIImm(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
BOOL EXIImmEx(EXIChannel, void* buf, s32 len, u32 mode);
BOOL EXIDma(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
BOOL EXISync(EXIChannel);
u32 EXIClearInterrupts(EXIChannel, BOOL exi, BOOL tc, BOOL ext);
EXICallback EXISetExiCallback(EXIChannel, EXICallback exiCallback);
BOOL EXIProbe(EXIChannel);
s32 EXIProbeEx(EXIChannel);
BOOL EXIAttach(EXIChannel, EXICallback);
BOOL EXIDetach(EXIChannel);
BOOL EXISelect(EXIChannel, u32 dev, u32 freq);
BOOL EXIDeselect(EXIChannel);
void EXIInit(void);
BOOL EXILock(EXIChannel, u32 dev, EXICallback unlockedCallback);
BOOL EXIUnlock(EXIChannel);
u32 EXIGetState(EXIChannel);
s32 EXIGetID(EXIChannel, u32 dev, u32* id);
#endif
+120 -6
View File
@@ -1,13 +1,127 @@
#ifndef OS_INTERRUPT_H
#define OS_INTERRUPT_H
#ifndef DOLPHIN_OSINTERRUPT_H
#define DOLPHIN_OSINTERRUPT_H
#include "dolphin/os/OSContext.h"
#include "dolphin/os/OSException.h"
#include "types.h"
typedef s16 __OSInterrupt;
typedef u32 OSInterruptMask;
BOOL OSDisableInterrupts(void);
BOOL OSEnableInterrupts(void);
BOOL OSRestoreInterrupts(BOOL status);
typedef enum OSInterruptType {
OS_INTR_MEM_0,
OS_INTR_MEM_1,
OS_INTR_MEM_2,
OS_INTR_MEM_3,
OS_INTR_MEM_ADDRESS,
OS_INTR_DSP_AI,
OS_INTR_DSP_ARAM,
OS_INTR_DSP_DSP,
OS_INTR_AI_AI,
OS_INTR_EXI_0_EXI,
OS_INTR_EXI_0_TC,
OS_INTR_EXI_0_EXT,
OS_INTR_EXI_1_EXI,
OS_INTR_EXI_1_TC,
OS_INTR_EXI_1_EXT,
OS_INTR_EXI_2_EXI,
OS_INTR_EXI_2_TC,
OS_INTR_PI_CP,
OS_INTR_PI_PE_TOKEN,
OS_INTR_PI_PE_FINISH,
OS_INTR_PI_SI,
OS_INTR_PI_DI,
OS_INTR_PI_RSW,
OS_INTR_PI_ERROR,
OS_INTR_PI_VI,
OS_INTR_PI_DEBUG,
OS_INTR_PI_HSP,
OS_INTR_PI_ACR,
OS_INTR_28,
OS_INTR_29,
OS_INTR_30,
OS_INTR_31,
OS_INTR_MAX
} OSInterruptType;
#define OS_INTRMASK_MEM_0 (0x80000000U >> OS_INTR_MEM_0)
#define OS_INTRMASK_MEM_1 (0x80000000U >> OS_INTR_MEM_1)
#define OS_INTRMASK_MEM_2 (0x80000000U >> OS_INTR_MEM_2)
#define OS_INTRMASK_MEM_3 (0x80000000U >> OS_INTR_MEM_3)
#define OS_INTRMASK_MEM_ADDRESS (0x80000000U >> OS_INTR_MEM_ADDRESS)
#define OS_INTRMASK_DSP_AI (0x80000000U >> OS_INTR_DSP_AI)
#define OS_INTRMASK_DSP_ARAM (0x80000000U >> OS_INTR_DSP_ARAM)
#define OS_INTRMASK_DSP_DSP (0x80000000U >> OS_INTR_DSP_DSP)
#define OS_INTRMASK_AI_AI (0x80000000U >> OS_INTR_AI_AI)
#define OS_INTRMASK_EXI_0_EXI (0x80000000U >> OS_INTR_EXI_0_EXI)
#define OS_INTRMASK_EXI_0_TC (0x80000000U >> OS_INTR_EXI_0_TC)
#define OS_INTRMASK_EXI_0_EXT (0x80000000U >> OS_INTR_EXI_0_EXT)
#define OS_INTRMASK_EXI_1_EXI (0x80000000U >> OS_INTR_EXI_1_EXI)
#define OS_INTRMASK_EXI_1_TC (0x80000000U >> OS_INTR_EXI_1_TC)
#define OS_INTRMASK_EXI_1_EXT (0x80000000U >> OS_INTR_EXI_1_EXT)
#define OS_INTRMASK_EXI_2_EXI (0x80000000U >> OS_INTR_EXI_2_EXI)
#define OS_INTRMASK_EXI_2_TC (0x80000000U >> OS_INTR_EXI_2_TC)
#define OS_INTRMASK_PI_CP (0x80000000U >> OS_INTR_PI_CP)
#define OS_INTRMASK_PI_PE_TOKEN (0x80000000U >> OS_INTR_PI_PE_TOKEN)
#define OS_INTRMASK_PI_PE_FINISH (0x80000000U >> OS_INTR_PI_PE_FINISH)
#define OS_INTRMASK_PI_SI (0x80000000U >> OS_INTR_PI_SI)
#define OS_INTRMASK_PI_DI (0x80000000U >> OS_INTR_PI_DI)
#define OS_INTRMASK_PI_RSW (0x80000000U >> OS_INTR_PI_RSW)
#define OS_INTRMASK_PI_ERROR (0x80000000U >> OS_INTR_PI_ERROR)
#define OS_INTRMASK_PI_VI (0x80000000U >> OS_INTR_PI_VI)
#define OS_INTRMASK_PI_DEBUG (0x80000000U >> OS_INTR_PI_DEBUG)
#define OS_INTRMASK_PI_HSP (0x80000000U >> OS_INTR_PI_HSP)
#define OS_INTRMASK_MEM \
(OS_INTRMASK_MEM_0 | OS_INTRMASK_MEM_1 | OS_INTRMASK_MEM_2 | \
OS_INTRMASK_MEM_3 | OS_INTRMASK_MEM_ADDRESS)
#define OS_INTRMASK_AI (OS_INTRMASK_AI_AI)
#define OS_INTRMASK_DSP \
(OS_INTRMASK_DSP_AI | OS_INTRMASK_DSP_ARAM | OS_INTRMASK_DSP_DSP)
#define OS_INTRMASK_EXI_0 \
(OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT)
#define OS_INTRMASK_EXI_1 \
(OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT)
#define OS_INTRMASK_EXI_2 (OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
#define OS_INTRMASK_EXI \
(OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT | \
OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT | \
OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
#define OS_INTRMASK_PI \
(OS_INTRMASK_PI_CP | OS_INTRMASK_PI_SI | OS_INTRMASK_PI_DI | \
OS_INTRMASK_PI_RSW | OS_INTRMASK_PI_ERROR | OS_INTRMASK_PI_VI | \
OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH | \
OS_INTRMASK_PI_DEBUG | OS_INTRMASK_PI_HSP)
#define OS_INTRMASK_PI_PE (OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH)
typedef void (*OSInterruptHandler)(__OSInterrupt, OSContext*);
extern volatile u32 __OSLastInterruptSrr0;
extern volatile s16 __OSLastInterrupt;
extern volatile s64 __OSLastInterruptTime;
void __RAS_OSDisableInterrupts_begin(void);
void __RAS_OSDisableInterrupts_end(void);
#endif
BOOL OSDisableInterrupts(void);
BOOL OSEnableInterrupts(void);
BOOL OSRestoreInterrupts(BOOL);
OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt, OSInterruptHandler);
OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt);
void __OSInterruptInit(void);
u32 __OSMaskInterrupts(u32);
u32 __OSUnmaskInterrupts(u32);
u32 SetInterruptMask(OSInterruptMask mask, OSInterruptMask current);
void __OSDispatchInterrupt(OSException exception, OSContext* context);
#endif
+107 -5
View File
@@ -1,9 +1,111 @@
#ifndef OS_RTC_H
#define OS_RTC_H
#ifndef DOLPHIN_OSRTC_H
#define DOLPHIN_OSTRC_H
#include "types.h"
#include "dolphin/os/OSExi.h"
u32 __OSSyncSram(void);
void __OSSetBootMode(u8);
#ifdef __cplusplus
extern "C" {
#endif
#endif
#define OS_SOUND_MODE_MONO 0
#define OS_SOUND_MODE_STEREO 1
#define OS_PROGRESSIVE_MODE_OFF 0
#define OS_PROGRESSIVE_MODE_ON 1
#define OS_BOOT_MODE_DEBUG (0 << 7)
#define OS_BOOT_MODE_RETAIL (1 << 7)
#define RTC_CMD_READ 0x20000000
#define RTC_CMD_WRITE 0xA0000000
#define RTC_SRAM_ADDR 0x00000100
#define RTC_SRAM_SIZE 64
#define RTC_CHAN EXI_CHAN_0
#define RTC_DEVICE 1
#define RTC_FREQUENCY 3
typedef struct OSSram_s {
u16 checkSum;
u16 checkSumInv;
u32 ead0;
u32 ead1;
u32 counterBias;
s8 displayOffsetH;
u8 ntd;
u8 language;
u8 flags;
} OSSram;
typedef struct OSSramEx_s {
u8 flashID[2][12];
u32 wirelessKeyboardID;
u16 wirelessPadID[4];
u8 dvdErrorCode;
u8 pad0;
u8 flashIDCheckSum[2];
u16 gbs;
u8 pad1[2];
} OSSramEx;
typedef struct SramControlBlock_s {
u8 sram[RTC_SRAM_SIZE];
u32 offset;
BOOL enabled;
BOOL locked;
BOOL sync;
void (*callback)(void);
} SramControlBlock;
// static void GetRTC();
// extern void __OSGetRTC();
// extern void __OSSetRTC();
static inline BOOL ReadSram(void* buffer);
static void WriteSramCallback(EXIChannel chan, OSContext* ctx);
static BOOL WriteSram(void* buffer, u32 offset, u32 size);
extern void __OSInitSram();
static inline void* LockSram(u32 offset);
extern OSSram* __OSLockSram();
extern OSSramEx* __OSLockSramEx();
static BOOL UnlockSram(BOOL commit, u32 offset);
extern void __OSUnlockSram(BOOL commit);
extern void __OSUnlockSramEx(BOOL commit);
extern BOOL __OSSyncSram();
// extern void __OSCheckSram();
// extern void __OSReadROM();
// extern void __OSReadROMCallback();
// extern void __OSReadROMAsync();
extern u32 OSGetSoundMode();
extern void OSSetSoundMode(u32 mode);
extern u32 OSGetProgressiveMode();
extern void OSSetProgressiveMode(u32 on);
// extern void OSGetVideoMode();
// extern void OSSetVideoMode();
// extern void OSGetLanguage();
// extern void OSSetLanguage();
// extern void __OSGetBootMode();
extern void __OSSetBootMode(u8 mode);
// extern void OSGetEuRgb60Mode();
// extern void OSSetEuRgb60Mode();
extern u16 OSGetWirelessID(u32 chan);
extern void OSSetWirelessID(u32 chan, u16 id);
#define GET_SOUNDMODE(flags) ((flags) & (1 << 2))
#define CLR_SOUNDMODE(flags) ((flags) & (~(1 << 2)))
#define SET_SOUNDMODE(mode) (((mode) & 1) << 2)
#define GET_PROGMODE(flags) ((flags) & (1 << 7))
#define CLR_PROGMODE(flags) ((flags) & (~(1 << 7)))
#define SET_PROGMODE(mode) (((mode) & 1) << 7)
#define GET_BOOTMODE(flags) ((flags) & (1 << 7))
#define CLR_BOOTMODE(flags) ((flags) & (~(1 << 7)))
#define SET_BOOTMODE(mode) (mode)
#ifdef __cplusplus
}
#endif
#endif
+30 -10
View File
@@ -1,19 +1,39 @@
#ifndef LIB_OS_REPORT_H
#define LIB_OS_REPORT_H
#ifndef OSREPORT_H
#define OSREPORT_H
#include "types.h"
#include "va_args.h"
#include "dolphin/os/OSMutex.h"
#include "dolphin/os/OSThread.h"
void OSReportDisable(void);
void OSReportEnable(void);
#define DEBUG_MODE 0
#define RETAIL_MODE 1
void OSVReport(const char*, va_list);
/* Causes DSI exception */
#define OSThrow() (*(int*)0 = 0)
void OSReport(const char*,...);
void OSPanic(const char*, u32, const char*,...);
extern void my_fopen(); /* @unused */
extern void my_fgets(); /* @unused */
extern void my_fclose(); /* @unused */
extern void print_section(); /* @unused */
extern void* OSGetCallerPC(); /* @unused */
extern void OSDumpStackTrace(); /* @unused */
extern s32 OSGetActiveThreadID(); /* @unused */
extern void OSReportMonopoly(); /* @unused */
void OSChangeBootMode(u32);
extern void OSReportDisable();
extern void OSReportEnable();
//void OSVReport(const char* fmt, va_list list);
//void OSReport(const char* fmt, ...);
//void OSPanic(const char* file, u32 line, const char* fmt, ...);
extern void OSChangeBootMode(u32 mode);
extern void OSDVDFatalError();
void OSDVDFatalError(void);
#define OSChangeToRetail() (OSChangeBootMode(RETAIL_MODE))
#define OSChangeToDebug() (OSChangeBootMode(DEBUG_MODE))
#endif
static BOOL __OSReport_disable;
static OSThread* __OSReport_MonopolyThread;
static u8 print_mutex_initialized;
#endif
+12
View File
@@ -38,6 +38,18 @@ typedef u32 unknown;
#define NULL ((void*)0)
#define nullptr 0
#define AT_ADDRESS(x) : (x)
#ifndef ATTRIBUTE_ALIGN
#if defined(__MWERKS__) || defined(__GNUC__)
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
#elif defined(_MSC_VER)
#define ATTRIBUTE_ALIGN(num)
#else
#error unknown compiler
#endif
#endif
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))