From 3ebcf05f22a7f6cb51c3a9d187c97432491ace4c Mon Sep 17 00:00:00 2001 From: shibbo Date: Thu, 1 Sep 2022 20:22:32 -0400 Subject: [PATCH] db.o 100% --- libs/RVL_SDK/csv/db.csv | 10 +++---- libs/RVL_SDK/data/SDK.json | 2 +- libs/RVL_SDK/docs/PROGRESS.md | 2 +- libs/RVL_SDK/docs/lib/db.md | 12 ++++----- libs/RVL_SDK/include/revolution/db.h | 10 +++++++ libs/RVL_SDK/include/revolution/os.h | 13 +++++---- libs/RVL_SDK/source/revolution/db/db.c | 37 ++++++++++++++++++++++++++ 7 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 libs/RVL_SDK/source/revolution/db/db.c diff --git a/libs/RVL_SDK/csv/db.csv b/libs/RVL_SDK/csv/db.csv index f057a71b..3c90723e 100644 --- a/libs/RVL_SDK/csv/db.csv +++ b/libs/RVL_SDK/csv/db.csv @@ -1,6 +1,6 @@ Symbol Name, Object File, Library Archive, Matching -DBInit,db.o,db.a,false -__DBExceptionDestinationAux,db.o,db.a,false -__DBExceptionDestination,db.o,db.a,false -__DBIsExceptionMarked,db.o,db.a,false -DBPrintf,db.o,db.a,false +DBInit,db.o,db.a,true +__DBExceptionDestinationAux,db.o,db.a,true +__DBExceptionDestination,db.o,db.a,true +__DBIsExceptionMarked,db.o,db.a,true +DBPrintf,db.o,db.a,true diff --git a/libs/RVL_SDK/data/SDK.json b/libs/RVL_SDK/data/SDK.json index ec7e9708..53d32222 100644 --- a/libs/RVL_SDK/data/SDK.json +++ b/libs/RVL_SDK/data/SDK.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "SDK", - "message": "1.0903174326110265%", + "message": "1.126474328603845%", "color": "blue" } \ No newline at end of file diff --git a/libs/RVL_SDK/docs/PROGRESS.md b/libs/RVL_SDK/docs/PROGRESS.md index 0ddaa387..8b6c5e28 100644 --- a/libs/RVL_SDK/docs/PROGRESS.md +++ b/libs/RVL_SDK/docs/PROGRESS.md @@ -7,7 +7,7 @@ | [axfx](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/axfx.md) | 0.0% | | [base](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/base.md) | 0.0% | | [bte](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/bte.md) | 0.0% | -| [db](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/db.md) | 0.0% | +| [db](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/db.md) | 100.0% | | [dsp](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/dsp.md) | 100.0% | | [dvd](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/dvd.md) | 0.0% | | [esp](https://github.com/shibbo/Petari/tree/master/libs/RVL_SDK/docs/lib/esp.md) | 0.0% | diff --git a/libs/RVL_SDK/docs/lib/db.md b/libs/RVL_SDK/docs/lib/db.md index 626459fc..b6eede50 100644 --- a/libs/RVL_SDK/docs/lib/db.md +++ b/libs/RVL_SDK/docs/lib/db.md @@ -8,16 +8,16 @@ | Object | Percentage (of Bytes) | Functions Done / Total Functions | Percentage (Functions) | Status | ------------- | ------------- | ------------- | ------------- | ------------- -| db.o | 0.0% | 0 / 5 | 0.0% | :x: +| db.o | 100.0% | 5 / 5 | 100.0% | :white_check_mark: # db.o | Symbol | Decompiled? | | ------------- | ------------- | -| DBInit | :x: | -| __DBExceptionDestinationAux | :x: | -| __DBExceptionDestination | :x: | -| __DBIsExceptionMarked | :x: | -| DBPrintf | :x: | +| DBInit | :white_check_mark: | +| __DBExceptionDestinationAux | :white_check_mark: | +| __DBExceptionDestination | :white_check_mark: | +| __DBIsExceptionMarked | :white_check_mark: | +| DBPrintf | :white_check_mark: | diff --git a/libs/RVL_SDK/include/revolution/db.h b/libs/RVL_SDK/include/revolution/db.h index 8705fa67..bf4f4db4 100644 --- a/libs/RVL_SDK/include/revolution/db.h +++ b/libs/RVL_SDK/include/revolution/db.h @@ -5,6 +5,16 @@ extern "C" { #endif +#include + +typedef struct DBInterface { + u32 _0; + u32 mask; + void (*exceptionDestination)(void); + void* exceptionReturn; +} DBInterface; + +void DBInit(void); void DBPrintf(char *, ...); #ifdef __cplusplus diff --git a/libs/RVL_SDK/include/revolution/os.h b/libs/RVL_SDK/include/revolution/os.h index 6bbaa9a2..423d2409 100644 --- a/libs/RVL_SDK/include/revolution/os.h +++ b/libs/RVL_SDK/include/revolution/os.h @@ -22,16 +22,19 @@ u32 __OSBusClock : (0x8000 << 16 | 0x00F8); #define OSNanosecondsToTicks( nsec ) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000) +void* OSPhysicalToUncached(u32); +u32 OSCachedToPhysical(const void* caddr); + +#define OS_CACHED_REGION_PREFIX 0x8000 +#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16) +#define OSPhysicalToCached(paddr) ((void*)((u32)(paddr) + OS_BASE_CACHED)) +#define OSCachedToPhysical(caddr) ((u32)((u8*)(caddr) - OS_BASE_CACHED)) + OSTick OSGetTick(void); OSTime OSGetTime(void); void OSRegisterVersion(const char *); -inline void* OSPhysicalToCached(u32 addr) { - return (void*)(addr | 0x8000 << 16); -} -void* OSPhysicalToUncached(u32); - void OSReport(const char *, ...); void OSVReport(const char *, va_list); void OSPanic(const char *, int, const char *, ...); diff --git a/libs/RVL_SDK/source/revolution/db/db.c b/libs/RVL_SDK/source/revolution/db/db.c new file mode 100644 index 00000000..170fe5c0 --- /dev/null +++ b/libs/RVL_SDK/source/revolution/db/db.c @@ -0,0 +1,37 @@ +#include +#include + +DBInterface* __DBInterface = NULL; +BOOL DBVerbose; + +void __DBExceptionDestination(void); + +void DBInit(void) { + __DBInterface = (DBInterface*)OSPhysicalToCached(0x40); + __DBInterface->exceptionDestination = (void*)OSCachedToPhysical(__DBExceptionDestination); + DBVerbose = 1; +} + +void __DBExceptionDestinationAux(void) { + u32* context_addr = (void*)0xC0; + OSContext* context = (OSContext*)(0x80000000 + *context_addr); + OSReport("DBExceptionDestination\n"); + OSDumpContext(context); + PPCHalt(); +} + +asm void __DBExceptionDestination(void) { + nofralloc + mfmsr r3 + ori r3, r3, 0x30 + mtmsr r3 + b __DBExceptionDestinationAux +} + +BOOL __DBIsExceptionMarked(__OSException ex) { + return __DBInterface->mask & (1 << ex); +} + +void DBPrintf(char *, ...) { + va_list list; +} \ No newline at end of file