mirror of https://github.com/PrimeDecomp/prime.git
Match and link db
This commit is contained in:
parent
4266e1c03c
commit
2806b45058
2
Makefile
2
Makefile
|
@ -151,6 +151,8 @@ $(DTK_FILES): MWCC_VERSION := 1.2.5
|
|||
$(DTK_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(SI_FILES): MWCC_VERSION := 1.2.5
|
||||
$(SI_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
$(DB_FILES): MWCC_VERSION := 1.2.5
|
||||
$(DB_FILES): CFLAGS := $(CFLAGS_BASE)
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Recipes
|
||||
|
|
|
@ -731,7 +731,9 @@ LIBS = [
|
|||
"lib": "db",
|
||||
"mwcc_version": "1.2.5",
|
||||
"cflags": "$cflags_base",
|
||||
"objects": ["Dolphin/db"],
|
||||
"objects": [
|
||||
["Dolphin/db", True],
|
||||
],
|
||||
},
|
||||
{
|
||||
"lib": "dsp",
|
||||
|
|
|
@ -7,18 +7,17 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ExceptionHookDestination 0x80000048
|
||||
#define IsDebuggerPresent 0x80000040
|
||||
#define OS_DBINTERFACE_ADDR 0x00000040
|
||||
|
||||
// static int __DBInterface;
|
||||
typedef struct DBInterface
|
||||
{
|
||||
u32 bPresent;
|
||||
u32 exceptionMask;
|
||||
void (*ExceptionDestination) ( void );
|
||||
void *exceptionReturn;
|
||||
} DBInterface;
|
||||
|
||||
struct DBInterface {
|
||||
u8 filler0[4];
|
||||
u32 unk4;
|
||||
};
|
||||
|
||||
static struct DBInterface* __DBInterface;
|
||||
static int DBVerbose;
|
||||
extern DBInterface* __DBInterface;
|
||||
|
||||
void DBInit(void);
|
||||
void DBInitComm(int* inputFlagPtr, int* mtrCallback);
|
||||
|
|
|
@ -643,7 +643,7 @@ BASE_FILES :=\
|
|||
$(BUILD_DIR)/src/Dolphin/PPCArch.o\
|
||||
|
||||
DB_FILES :=\
|
||||
$(BUILD_DIR)/asm/Dolphin/db.o\
|
||||
$(BUILD_DIR)/src/Dolphin/db.ep.o\
|
||||
|
||||
DSP_FILES :=\
|
||||
$(BUILD_DIR)/asm/Dolphin/dsp/dsp.o\
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
#include <dolphin/db.h>
|
||||
#include <dolphin/os.h>
|
||||
|
||||
DBInterface* __DBInterface = NULL;
|
||||
int DBVerbose;
|
||||
|
||||
extern void __DBExceptionStart();
|
||||
extern void __DBExceptionEnd();
|
||||
extern void __DBExceptionSetNumber();
|
||||
|
||||
void DBInit(void) {
|
||||
__DBInterface = (DBInterface*)OSPhysicalToCached(OS_DBINTERFACE_ADDR);
|
||||
__DBInterface->ExceptionDestination = (void (*)())OSCachedToPhysical(__DBExceptionDestination);
|
||||
DBVerbose = TRUE;
|
||||
}
|
||||
|
||||
void __DBExceptionDestinationAux(void) {
|
||||
u32* contextAddr = (void*)0x00C0;
|
||||
OSContext* context = (OSContext*)OSPhysicalToCached(*contextAddr);
|
||||
|
||||
OSReport("DBExceptionDestination\n");
|
||||
OSDumpContext(context);
|
||||
PPCHalt();
|
||||
}
|
||||
|
||||
/* clang-format off */
|
||||
asm void __DBExceptionDestination(void) {
|
||||
nofralloc
|
||||
mfmsr r3
|
||||
ori r3, r3, 0x10|0x20
|
||||
mtmsr r3
|
||||
|
||||
b __DBExceptionDestinationAux
|
||||
}
|
||||
/* clang-format on */
|
||||
|
||||
BOOL __DBIsExceptionMarked(__OSException exception) {
|
||||
u32 mask = 1 << exception;
|
||||
|
||||
return (BOOL)(__DBInterface->exceptionMask & mask);
|
||||
}
|
||||
|
||||
void DBPrintf(char* format, ...) {}
|
Loading…
Reference in New Issue