Match OdemiExi2 (#575)
* name audio.c and board/audio.c * fix audio, complete board/basic_space, battle * revert changes that broke build * completely finish New and NewMore.cp, for some reason NewMore fails checksum * finally match NewMore.cp * match NMWException.cpp * match mem_TRK * match TRK with correct linker, uses Revo's notify func * match TRKReadUARTPoll * match OdemiExi2 * undo git's stupidness * testing * naively match REV 1 for real this time
This commit is contained in:
parent
91d6eb5428
commit
4fdca137cd
3 changed files with 335 additions and 360 deletions
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
|
@ -68,7 +68,8 @@
|
||||||
"roll.h": "c",
|
"roll.h": "c",
|
||||||
"msghndlr.h": "c",
|
"msghndlr.h": "c",
|
||||||
"dispatch.h": "c",
|
"dispatch.h": "c",
|
||||||
"trk.h": "c"
|
"trk.h": "c",
|
||||||
|
"debuggerdriver.h": "c"
|
||||||
},
|
},
|
||||||
"search.useIgnoreFiles": false,
|
"search.useIgnoreFiles": false,
|
||||||
"search.exclude": {
|
"search.exclude": {
|
||||||
|
|
|
||||||
|
|
@ -252,8 +252,7 @@ cflags_trk = [
|
||||||
|
|
||||||
cflags_odemuexi = [
|
cflags_odemuexi = [
|
||||||
*cflags_base,
|
*cflags_base,
|
||||||
"-inline auto,deferred"
|
"-inline deferred"
|
||||||
# TODO figure out flags
|
|
||||||
]
|
]
|
||||||
|
|
||||||
cflags_amcstub = [
|
cflags_amcstub = [
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
#if VERSION == 0
|
|
||||||
|
|
||||||
#include <dolphin/exi.h>
|
#include <dolphin/exi.h>
|
||||||
#include <dolphin/hw_regs.h>
|
#include <dolphin/hw_regs.h>
|
||||||
#include <dolphin/os.h>
|
#include <dolphin/os.h>
|
||||||
|
|
@ -24,18 +22,18 @@
|
||||||
#define IS_FALSE(x) !IS_TRUE(x)
|
#define IS_FALSE(x) !IS_TRUE(x)
|
||||||
#define ROUND_UP(x, align) (((x) + (align)-1) & (-(align)))
|
#define ROUND_UP(x, align) (((x) + (align)-1) & (-(align)))
|
||||||
|
|
||||||
// functions
|
#if VERSION == VERSION_NO_ENG0
|
||||||
|
|
||||||
|
static void DBGEXIInit();
|
||||||
|
static u32 DBGEXISelect(u32 v);
|
||||||
static void CheckMailBox(void);
|
static void CheckMailBox(void);
|
||||||
static void MWCallback(u32 a, OSContext *b);
|
static void MWCallback(u32 a, OSContext *b);
|
||||||
static void DBGHandler(s16 a, OSContext *b);
|
static void DBGHandler(s16 a, OSContext *b);
|
||||||
static u32 DBGEXISelect(u32 v);
|
|
||||||
static void DBGEXIInit();
|
|
||||||
|
|
||||||
void DBClose(void) { }
|
void DBClose(void) { }
|
||||||
|
|
||||||
void DBOpen(void) { }
|
void DBOpen(void) { }
|
||||||
|
|
||||||
|
|
||||||
BOOL DBWrite(void *src, u32 size)
|
BOOL DBWrite(void *src, u32 size)
|
||||||
{
|
{
|
||||||
u32 v;
|
u32 v;
|
||||||
|
|
@ -102,7 +100,7 @@
|
||||||
return RecvDataLeng;
|
return RecvDataLeng;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckMailBox(void)
|
inline static void CheckMailBox(void)
|
||||||
{
|
{
|
||||||
u32 v;
|
u32 v;
|
||||||
DBGReadStatus(&v);
|
DBGReadStatus(&v);
|
||||||
|
|
@ -143,6 +141,25 @@
|
||||||
OSRestoreInterrupts(interrupts);
|
OSRestoreInterrupts(interrupts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline static BOOL _DBGReadStatus(u32 *p1)
|
||||||
|
{
|
||||||
|
BOOL total = FALSE;
|
||||||
|
u32 v;
|
||||||
|
|
||||||
|
DBGEXISelect(4);
|
||||||
|
|
||||||
|
v = 1 << 30;
|
||||||
|
total |= IS_FALSE(DBGEXIImm(&v, 2, 1));
|
||||||
|
total |= IS_FALSE(DBGEXISync());
|
||||||
|
|
||||||
|
total |= IS_FALSE(DBGEXIImm(p1, 4, 0));
|
||||||
|
total |= IS_FALSE(DBGEXISync());
|
||||||
|
|
||||||
|
total |= IS_FALSE(DBGEXIDeselect());
|
||||||
|
|
||||||
|
return IS_FALSE(total);
|
||||||
|
}
|
||||||
|
|
||||||
static void DBGHandler(s16 a, OSContext *b)
|
static void DBGHandler(s16 a, OSContext *b)
|
||||||
{
|
{
|
||||||
*__PIRegs = 0x1000;
|
*__PIRegs = 0x1000;
|
||||||
|
|
@ -167,25 +184,6 @@
|
||||||
}
|
}
|
||||||
#pragma pop
|
#pragma pop
|
||||||
|
|
||||||
static BOOL _DBGReadStatus(u32 *p1)
|
|
||||||
{
|
|
||||||
BOOL total = FALSE;
|
|
||||||
u32 v;
|
|
||||||
|
|
||||||
DBGEXISelect(4);
|
|
||||||
|
|
||||||
v = 0x40000000;
|
|
||||||
total |= !(DBGEXIImm(&v, 2, 1));
|
|
||||||
total |= !(DBGEXISync());
|
|
||||||
|
|
||||||
total |= !(DBGEXIImm(p1, 4, 0));
|
|
||||||
total |= !(DBGEXISync());
|
|
||||||
|
|
||||||
total |= !(DBGEXIDeselect());
|
|
||||||
|
|
||||||
return !(total);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL DBGWrite(u32 count, void *buffer, s32 param3)
|
static BOOL DBGWrite(u32 count, void *buffer, s32 param3)
|
||||||
{
|
{
|
||||||
BOOL total = FALSE;
|
BOOL total = FALSE;
|
||||||
|
|
@ -244,30 +242,31 @@
|
||||||
return IS_FALSE(total);
|
return IS_FALSE(total);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define TO_BOOL(x) (((u32)__cntlzw((x)) >> 5))
|
||||||
#pragma push
|
#pragma push
|
||||||
#pragma dont_inline on
|
#pragma dont_inline on
|
||||||
static BOOL DBGReadMailbox(u32* p1)
|
static BOOL DBGReadMailbox(u32* p1)
|
||||||
{
|
{
|
||||||
long cmd;
|
u32 v;
|
||||||
long v;
|
u32 total = 0;
|
||||||
|
u32 stack0, stack1, stack2;
|
||||||
|
|
||||||
DBGEXISelect(4);
|
DBGEXISelect(4);
|
||||||
|
|
||||||
v = 0x60000000;
|
v = 0x60000000;
|
||||||
cmd = 0;
|
total |= !(DBGEXIImm(&v, 2, 1) != 0);
|
||||||
cmd |= !(DBGEXIImm(&v, 2, 1));
|
DBGEXISync();
|
||||||
cmd |= !(DBGEXISync());
|
|
||||||
|
|
||||||
cmd |= !(DBGEXIImm(p1, 4, 0));
|
total |= !(DBGEXIImm(p1, 4, 0) != 0);
|
||||||
cmd |= !(DBGEXISync());
|
DBGEXISync();
|
||||||
|
|
||||||
cmd |= !(DBGEXIDeselect());
|
DBGEXIDeselect();
|
||||||
|
total = TO_BOOL(total);
|
||||||
return !(cmd);
|
return total;
|
||||||
}
|
}
|
||||||
#pragma pop
|
#pragma pop
|
||||||
|
|
||||||
static BOOL DBGWriteMailbox(u32 p1)
|
inline static BOOL DBGWriteMailbox(u32 p1)
|
||||||
{
|
{
|
||||||
u32 cmd = 0xc0000000;
|
u32 cmd = 0xc0000000;
|
||||||
u32 v;
|
u32 v;
|
||||||
|
|
@ -313,7 +312,7 @@
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL DBGEXISync()
|
inline static BOOL DBGEXISync()
|
||||||
{
|
{
|
||||||
while (__EXIRegs[13] & 1)
|
while (__EXIRegs[13] & 1)
|
||||||
;
|
;
|
||||||
|
|
@ -321,13 +320,13 @@
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL DBGEXIDeselect(void)
|
inline BOOL DBGEXIDeselect(void)
|
||||||
{
|
{
|
||||||
__EXIRegs[10] &= 0x405;
|
__EXIRegs[10] &= 0x405;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 DBGEXISelect(u32 v)
|
inline static u32 DBGEXISelect(u32 v)
|
||||||
{
|
{
|
||||||
u32 regs = __EXIRegs[10];
|
u32 regs = __EXIRegs[10];
|
||||||
regs &= 0x405;
|
regs &= 0x405;
|
||||||
|
|
@ -336,45 +335,21 @@
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DBGEXIInit()
|
inline static void DBGEXIInit()
|
||||||
{
|
|
||||||
__OSMaskInterrupts(0x18000);
|
|
||||||
__EXIRegs[10] = 0;
|
|
||||||
}
|
|
||||||
#elif VERSION == 1
|
|
||||||
#include <dolphin/exi.h>
|
|
||||||
#include <dolphin/hw_regs.h>
|
|
||||||
#include <dolphin/os.h>
|
|
||||||
|
|
||||||
typedef void (*MTRCallbackType)(int);
|
|
||||||
|
|
||||||
static MTRCallbackType MTRCallback;
|
|
||||||
|
|
||||||
static void (*DBGCallback)(u32, OSContext *);
|
|
||||||
|
|
||||||
static u32 SendMailData;
|
|
||||||
|
|
||||||
static s32 RecvDataLeng;
|
|
||||||
|
|
||||||
static u8 *pEXIInputFlag;
|
|
||||||
|
|
||||||
static u8 EXIInputFlag;
|
|
||||||
|
|
||||||
static u8 SendCount = 0x80;
|
|
||||||
|
|
||||||
#define IS_TRUE(x) ((x) != FALSE)
|
|
||||||
#define IS_FALSE(x) !IS_TRUE(x)
|
|
||||||
#define ROUND_UP(x, align) (((x) + (align)-1) & (-(align)))
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
|
|
||||||
void DBGEXIInit()
|
|
||||||
{
|
{
|
||||||
__OSMaskInterrupts(0x18000);
|
__OSMaskInterrupts(0x18000);
|
||||||
__EXIRegs[10] = 0;
|
__EXIRegs[10] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 DBGEXISelect(u32 v)
|
#else
|
||||||
|
|
||||||
|
inline void DBGEXIInit()
|
||||||
|
{
|
||||||
|
__OSMaskInterrupts(0x18000);
|
||||||
|
__EXIRegs[10] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static u32 DBGEXISelect(u32 v)
|
||||||
{
|
{
|
||||||
u32 regs = __EXIRegs[10];
|
u32 regs = __EXIRegs[10];
|
||||||
regs &= 0x405;
|
regs &= 0x405;
|
||||||
|
|
@ -383,13 +358,13 @@ static u32 DBGEXISelect(u32 v)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL DBGEXIDeselect(void)
|
inline BOOL DBGEXIDeselect(void)
|
||||||
{
|
{
|
||||||
__EXIRegs[10] &= 0x405;
|
__EXIRegs[10] &= 0x405;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL DBGEXISync()
|
inline static BOOL DBGEXISync()
|
||||||
{
|
{
|
||||||
while (__EXIRegs[13] & 1)
|
while (__EXIRegs[13] & 1)
|
||||||
;
|
;
|
||||||
|
|
@ -427,7 +402,7 @@ static BOOL DBGEXIImm(void *buffer, s32 bytecounter, u32 write)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL DBGWriteMailbox(u32 p1)
|
inline static BOOL DBGWriteMailbox(u32 p1)
|
||||||
{
|
{
|
||||||
u32 cmd = 0xc0000000;
|
u32 cmd = 0xc0000000;
|
||||||
u32 v;
|
u32 v;
|
||||||
|
|
@ -522,7 +497,7 @@ static BOOL DBGWrite(u32 count, void *buffer, s32 param3)
|
||||||
return IS_FALSE(total);
|
return IS_FALSE(total);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL _DBGReadStatus(u32 *p1)
|
inline static BOOL _DBGReadStatus(u32 *p1)
|
||||||
{
|
{
|
||||||
BOOL total = FALSE;
|
BOOL total = FALSE;
|
||||||
u32 v;
|
u32 v;
|
||||||
|
|
@ -541,10 +516,12 @@ static BOOL _DBGReadStatus(u32 *p1)
|
||||||
return IS_FALSE(total);
|
return IS_FALSE(total);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma dont_inline on
|
||||||
static BOOL DBGReadStatus(u32 *p1)
|
static BOOL DBGReadStatus(u32 *p1)
|
||||||
{
|
{
|
||||||
return _DBGReadStatus(p1);
|
return _DBGReadStatus(p1);
|
||||||
}
|
}
|
||||||
|
#pragma dont_inline reset
|
||||||
|
|
||||||
static void MWCallback(u32 a, OSContext *b)
|
static void MWCallback(u32 a, OSContext *b)
|
||||||
{
|
{
|
||||||
|
|
@ -587,7 +564,7 @@ void DBInitInterrupts(void)
|
||||||
__OSUnmaskInterrupts(0x40);
|
__OSUnmaskInterrupts(0x40);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckMailBox(void)
|
inline static void CheckMailBox(void)
|
||||||
{
|
{
|
||||||
u32 v;
|
u32 v;
|
||||||
DBGReadStatus(&v);
|
DBGReadStatus(&v);
|
||||||
|
|
@ -673,6 +650,4 @@ void DBOpen(void) { }
|
||||||
|
|
||||||
void DBClose(void) { }
|
void DBClose(void) { }
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue