mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-29 09:40:59 -04:00
Yoink MetroTRK from Pikmin & Mario Party 4 (thanks!)
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
#ifndef ODEMUEXI_DEBUGGER_DRIVER_H
|
||||
#define ODEMUEXI_DEBUGGER_DRIVER_H
|
||||
|
||||
#include <dolphin/os.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int Hu_IsStub();
|
||||
|
||||
void DBInitComm(volatile u8** param_1, __OSInterruptHandler param_2);
|
||||
void DBInitInterrupts(void);
|
||||
u32 DBQueryData(void);
|
||||
int DBRead(void* data, u32 size);
|
||||
int DBWrite(const void* data, u32 size);
|
||||
void DBOpen(void);
|
||||
void DBClose(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+2
-3
@@ -2,15 +2,14 @@
|
||||
#define TRK_CC_GDEV_H
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/os/OSInterrupt.h>
|
||||
// #include "NdevExi2A/DebuggerDriver.h"
|
||||
#include "NdevExi2A/DebuggerDriver.h"
|
||||
|
||||
// TODO: figure out what these values represent
|
||||
typedef enum { GDEV_RESULT_10009 = -10009, GDEV_RESULT_10005 = -10005, GDEV_RESULT_10001 = -10001 } UnkGdevEnum;
|
||||
|
||||
void OutputData();
|
||||
BOOL IsInitialized();
|
||||
int gdev_cc_initialize(u8** flagOut, __OSInterruptHandler handler);
|
||||
int gdev_cc_initialize(u8** flagOut, OSInterruptHandler handler);
|
||||
int gdev_cc_shutdown();
|
||||
int gdev_cc_open();
|
||||
int gdev_cc_close();
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef METROTRK_MEM_TRK_H
|
||||
#define METROTRK_MEM_TRK_H
|
||||
#include "TRK/dstypes.h"
|
||||
#include "TRK/trk.h"
|
||||
#include "PowerPC_EABI_Support/MetroTRK/dstypes.h"
|
||||
#include "PowerPC_EABI_Support/MetroTRK/trk.h"
|
||||
|
||||
typedef struct memRange {
|
||||
u8* start;
|
||||
@@ -1,43 +1,56 @@
|
||||
#ifndef _DOLPHIN_TRK_H
|
||||
#define _DOLPHIN_TRK_H
|
||||
|
||||
#include <dolphin/types.h>
|
||||
#include "TRK/trktypes.h"
|
||||
#include "TRK/ppc_reg.h"
|
||||
#include "types.h"
|
||||
#include "PowerPC_EABI_Support/MetroTRK/trktypes.h"
|
||||
#include "PowerPC_EABI_Support/MetroTRK/ppc_reg.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
////// MSG HANDLING FUNCTIONS //////
|
||||
DSError TRKDoConnect(MessageBuffer*);
|
||||
DSError TRKDoDisconnect(MessageBuffer*);
|
||||
DSError TRKDoReset(MessageBuffer*);
|
||||
DSError TRKDoVersions(MessageBuffer*);
|
||||
DSError TRKDoSupportMask(MessageBuffer*);
|
||||
DSError TRKDoOverride(MessageBuffer*);
|
||||
DSError TRKDoReadMemory(MessageBuffer*);
|
||||
DSError TRKDoWriteMemory(MessageBuffer*);
|
||||
DSError TRKDoReadRegisters(MessageBuffer*);
|
||||
DSError TRKDoWriteRegisters(MessageBuffer*);
|
||||
DSError TRKDoSetOption(MessageBuffer*);
|
||||
DSError TRKDoContinue(MessageBuffer*);
|
||||
DSError TRKDoStep(MessageBuffer*);
|
||||
DSError TRKDoStop(MessageBuffer*);
|
||||
DSError TRKDoUnsupported(MessageBuffer*);
|
||||
DSError TRKDoCPUType(MessageBuffer*);
|
||||
DSError TRKDoFlushCache(MessageBuffer*);
|
||||
DSError TRKDoConnect(TRKBuffer*);
|
||||
DSError TRKDoDisconnect(TRKBuffer*);
|
||||
DSError TRKDoReset(TRKBuffer*);
|
||||
DSError TRKDoVersions(TRKBuffer*);
|
||||
DSError TRKDoSupportMask(TRKBuffer*);
|
||||
DSError TRKDoOverride(TRKBuffer*);
|
||||
DSError TRKDoReadMemory(TRKBuffer*);
|
||||
DSError TRKDoWriteMemory(TRKBuffer*);
|
||||
DSError TRKDoReadRegisters(TRKBuffer*);
|
||||
DSError TRKDoWriteRegisters(TRKBuffer*);
|
||||
DSError TRKDoSetOption(TRKBuffer*);
|
||||
DSError TRKDoContinue(TRKBuffer*);
|
||||
DSError TRKDoStep(TRKBuffer*);
|
||||
DSError TRKDoStop(TRKBuffer*);
|
||||
DSError TRKDoUnsupported(TRKBuffer*);
|
||||
DSError TRKDoCPUType(TRKBuffer*);
|
||||
DSError TRKDoFlushCache(TRKBuffer*);
|
||||
|
||||
void SetBufferPosition(MessageBuffer*, u32);
|
||||
void __TRK_copy_vectors();
|
||||
|
||||
void SetBufferPosition(TRKBuffer*, u32);
|
||||
void SetTRKConnected(int);
|
||||
int GetTRKConnected(void);
|
||||
|
||||
DSError TRKGetFreeBuffer(int*, MessageBuffer**);
|
||||
DSError TRKGetFreeBuffer(int*, TRKBuffer**);
|
||||
void OutputData(void* data, int length);
|
||||
void TRKResetBuffer(MessageBuffer* msg, u8 keepData);
|
||||
void TRKResetBuffer(TRKBuffer* msg, u8 keepData);
|
||||
|
||||
DSError TRKReadBuffer1_ui64(MessageBuffer* buffer, u64* data);
|
||||
DSError TRKAppendBuffer1_ui64(MessageBuffer* buffer, const u64 data);
|
||||
DSError TRKReadBuffer_ui8(TRKBuffer* buffer, u8* data, int count);
|
||||
DSError TRKReadBuffer_ui32(TRKBuffer* buffer, u32* data, int count);
|
||||
|
||||
DSError TRKReadBuffer1_ui8(TRKBuffer* buffer, u8* data);
|
||||
DSError TRKReadBuffer1_ui16(TRKBuffer* buffer, u16* data);
|
||||
DSError TRKReadBuffer1_ui32(TRKBuffer* buffer, u32* data);
|
||||
DSError TRKReadBuffer1_ui64(TRKBuffer* buffer, u64* data);
|
||||
|
||||
DSError TRKAppendBuffer_ui8(TRKBuffer* buffer, const u8* data, int count);
|
||||
DSError TRKAppendBuffer_ui32(TRKBuffer* buffer, const u32* data, int count);
|
||||
DSError TRKAppendBuffer1_ui16(TRKBuffer* buffer, const u16 data);
|
||||
DSError TRKAppendBuffer1_ui32(TRKBuffer* buffer, const u32 data);
|
||||
DSError TRKAppendBuffer1_ui64(TRKBuffer* buffer, const u64 data);
|
||||
////////////////////////////////////
|
||||
|
||||
/////// DOLPHIN TRK FUNCTIONS //////
|
||||
@@ -100,7 +113,7 @@ void TRKConstructEvent(TRKEvent* event, int eventType);
|
||||
void TRKDestructEvent(TRKEvent* event);
|
||||
DSError TRKPostEvent(TRKEvent* event);
|
||||
BOOL TRKGetNextEvent(TRKEvent* event);
|
||||
DSError TRKDispatchMessage(MessageBuffer*);
|
||||
DSError TRKDispatchMessage(TRKBuffer*);
|
||||
void* TRKGetBuffer(int);
|
||||
void TRKReleaseBuffer(int);
|
||||
void TRKGetInput();
|
||||
@@ -115,10 +128,10 @@ DSError TRKTargetSupportRequest();
|
||||
////////////////////////////////////
|
||||
|
||||
////// NUB AND MEM FUNCTIONS ///////
|
||||
DSError TRKAppendBuffer_ui8(MessageBuffer*, const u8*, int);
|
||||
DSError TRKSetBufferPosition(MessageBuffer*, u32);
|
||||
DSError TRKAppendBuffer_ui8(TRKBuffer*, const u8*, int);
|
||||
DSError TRKSetBufferPosition(TRKBuffer*, u32);
|
||||
|
||||
DSError TRKMessageSend(MessageBuffer*);
|
||||
DSError TRKMessageSend(TRKBuffer*);
|
||||
void TRKSwapAndGo(void);
|
||||
DSError TRKInitializeNub(void);
|
||||
DSError TRKTerminateNub(void);
|
||||
@@ -156,10 +169,16 @@ DSError TRKRequestSend();
|
||||
u32 TRKAccessFile(u32, u32, u32*, u8*);
|
||||
////////////////////////////////////
|
||||
|
||||
///// SERIAL POLLING FUNCTIONS /////
|
||||
TRKBufferID TRKTestForPacker();
|
||||
void TRKGetInput();
|
||||
void TRKProcessInput(TRKBufferID bufID);
|
||||
////////////////////////////////////
|
||||
|
||||
////////// OTHER FUNCTIONS /////////
|
||||
DSError TRK_main(void);
|
||||
UARTError InitializeUART(UARTBaudRate baudRate);
|
||||
DSError TRKInitializeIntDrivenUART(u32, u32, u32, void*);
|
||||
DSError TRKInitializeIntDrivenUART(u32, u32, u32, volatile u8**);
|
||||
int TRKPollUART();
|
||||
UARTError TRKReadUARTN(void*, u32);
|
||||
UARTError TRKWriteUARTN(const void* bytes, u32 length);
|
||||
@@ -167,10 +186,12 @@ void usr_put_initialize();
|
||||
void TRKTargetSetInputPendingPtr(void*);
|
||||
void SetUseSerialIO(u8);
|
||||
u8 GetUseSerialIO(void);
|
||||
u8 TRKTargetCPUMinorType();
|
||||
|
||||
DSError TRKTargetAddStopInfo(MessageBuffer*);
|
||||
void TRKTargetAddExceptionInfo(MessageBuffer*);
|
||||
DSError TRKTargetAddStopInfo(TRKBuffer*);
|
||||
DSError TRKTargetAddExceptionInfo(TRKBuffer*);
|
||||
void TRKInterruptHandler();
|
||||
void TRKPostInterruptEvent();
|
||||
BOOL usr_puts_serial(const char* msg);
|
||||
////////////////////////////////////
|
||||
|
||||
@@ -181,11 +202,11 @@ extern ProcessorState_PPC gTRKCPUState;
|
||||
extern ProcessorRestoreFlags_PPC gTRKRestoreFlags;
|
||||
extern u8 gTRKInterruptVectorTable[];
|
||||
extern TRKState gTRKState;
|
||||
extern MessageBuffer gTRKMsgBufs[3];
|
||||
extern TRKBuffer gTRKMsgBufs[3];
|
||||
////////////////////////////////////
|
||||
|
||||
////////// USEFUL STATICS //////////
|
||||
static inline DSError TRKAppendBuffer1_ui8(MessageBuffer* buffer, const u8 data)
|
||||
static inline DSError TRKAppendBuffer1_ui8(TRKBuffer* buffer, const u8 data)
|
||||
{
|
||||
if (buffer->position >= 0x880) {
|
||||
return DS_MessageBufferOverflow;
|
||||
@@ -40,6 +40,17 @@ typedef enum {
|
||||
DS_Error800 = 0x800,
|
||||
} DSError;
|
||||
|
||||
typedef struct DSCPUType {
|
||||
u8 cpuMajor;
|
||||
u8 cpuMinor;
|
||||
u8 bigEndian;
|
||||
u8 defaultTypeSize;
|
||||
u8 fpTypeSize;
|
||||
u8 extended1TypeSize;
|
||||
u8 extended2TypeSize;
|
||||
} DSCPUType;
|
||||
DSError TRKTargetCPUType(DSCPUType* cpuType);
|
||||
|
||||
// Where to read/write.
|
||||
typedef enum {
|
||||
DS_Stdin = 0,
|
||||
@@ -2,8 +2,8 @@
|
||||
#define _METROTRK_TRKTYPES_H
|
||||
|
||||
#include "types.h"
|
||||
#include <dolphin/os/OSInterrupt.h>
|
||||
#include "TRK/trkenum.h"
|
||||
#include "Dolphin/OS/OSInterrupt.h"
|
||||
#include "PowerPC_EABI_Support/MetroTRK/trkenum.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -12,12 +12,12 @@ extern "C" {
|
||||
/////// TRK STRUCTS AND TYPES //////
|
||||
// Function types for DB communications.
|
||||
typedef int (*DBCommFunc)();
|
||||
typedef int (*DBCommInitFunc)(void*, __OSInterruptHandler);
|
||||
typedef int (*DBCommReadFunc)(u8*, int);
|
||||
typedef int (*DBCommWriteFunc)(const u8*, int);
|
||||
typedef void (*DBCommInitFunc)(volatile u8**, __OSInterruptHandler);
|
||||
typedef int (*DBCommReadFunc)(void*, u32);
|
||||
typedef int (*DBCommWriteFunc)(const void*, u32);
|
||||
|
||||
// Message buffer ID type.
|
||||
typedef int MessageBufferID;
|
||||
typedef int TRKBufferID;
|
||||
|
||||
// Nub event ID type.
|
||||
typedef u32 NubEventID;
|
||||
@@ -29,26 +29,23 @@ typedef int UARTError;
|
||||
#define TRKMSGBUF_SIZE (0x800 + 0x80)
|
||||
|
||||
// Struct for sending and receiving messages (size 0x88C).
|
||||
typedef struct MessageBuffer {
|
||||
u32 _00; // _00, unknown
|
||||
typedef struct TRKBuffer {
|
||||
u32 mutex; // _00
|
||||
BOOL isInUse; // _04
|
||||
u32 length; // _08
|
||||
u32 position; // _0C
|
||||
u8 data[TRKMSGBUF_SIZE]; // _10
|
||||
} MessageBuffer;
|
||||
} TRKBuffer;
|
||||
|
||||
// Struct for storing DB communication functions (size 0x28).
|
||||
// Struct for storing DB communication functions (size 0x1C).
|
||||
typedef struct DBCommTable {
|
||||
DBCommInitFunc initialize_func; // _00
|
||||
DBCommFunc init_interrupts_func; // _04
|
||||
DBCommFunc shutdown_func; // _08
|
||||
DBCommFunc peek_func; // _0C
|
||||
DBCommReadFunc read_func; // _10
|
||||
DBCommWriteFunc write_func; // _14
|
||||
DBCommFunc open_func; // _18
|
||||
DBCommFunc close_func; // _1C
|
||||
DBCommFunc pre_continue_func; // _20
|
||||
DBCommFunc post_stop_func; // _24
|
||||
DBCommFunc peek_func; // _08
|
||||
DBCommReadFunc read_func; // _0C
|
||||
DBCommWriteFunc write_func; // _10
|
||||
DBCommFunc open_func; // _14
|
||||
DBCommFunc close_func; // _18
|
||||
} DBCommTable;
|
||||
|
||||
// Struct for information on DS versions (kernel and protocol) (size 0x4)
|
||||
@@ -67,11 +64,11 @@ typedef struct TRKPacketSeq {
|
||||
|
||||
// Struct for receiving packets from serial poll (size 0x14).
|
||||
typedef struct TRKFramingState {
|
||||
MessageBufferID msgBufID; // _00
|
||||
MessageBuffer* buffer; // _04
|
||||
ReceiverState receiveState; // _08
|
||||
BOOL isEscape; // _0C
|
||||
u8 fcsType; // _10
|
||||
TRKBufferID msgBufID; // _00
|
||||
TRKBuffer* buffer; // _04
|
||||
u8 receiveState; // _08
|
||||
BOOL isEscape; // _0C
|
||||
u8 fcsType; // _10
|
||||
} TRKFramingState;
|
||||
|
||||
// Command reply information (size 0x40).
|
||||
@@ -91,9 +88,9 @@ typedef struct CommandReply {
|
||||
|
||||
// Nub event information (size 0xC).
|
||||
typedef struct TRKEvent {
|
||||
u8 eventType; // _00
|
||||
NubEventID eventID; // _04
|
||||
MessageBufferID msgBufID; // _08
|
||||
u8 eventType; // _00
|
||||
NubEventID eventID; // _04
|
||||
TRKBufferID msgBufID; // _08
|
||||
} TRKEvent;
|
||||
|
||||
// Event queue (size 0x28).
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef AMCEXI2STUBS_H
|
||||
#define AMCEXI2STUBS_H
|
||||
|
||||
#include "dolphin/os.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef __OSInterruptHandler AmcEXICallback;
|
||||
|
||||
typedef enum { AMC_EXI_NO_ERROR = 0, AMC_EXI_UNSELECTED } AmcExiError;
|
||||
|
||||
void EXI2_Init(volatile u8**, AmcEXICallback);
|
||||
void EXI2_EnableInterrupts(void);
|
||||
u32 EXI2_Poll(void);
|
||||
int EXI2_ReadN(void*, u32);
|
||||
int EXI2_WriteN(const void*, u32);
|
||||
void EXI2_Reserve(void);
|
||||
void EXI2_Unreserve(void);
|
||||
BOOL AMC_IsStub(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+18
-1
@@ -1,13 +1,30 @@
|
||||
#ifndef DB_H
|
||||
#define DB_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
#define OS_DBINTERFACE_ADDR 0x00000040
|
||||
|
||||
typedef struct DBInterface
|
||||
{
|
||||
u32 bPresent;
|
||||
u32 exceptionMask;
|
||||
void (*ExceptionDestination) ( void );
|
||||
void *exceptionReturn;
|
||||
} DBInterface;
|
||||
|
||||
extern DBInterface* __DBInterface;
|
||||
|
||||
void DBInit(void);
|
||||
void DBInitComm(int* inputFlagPtr, int* mtrCallback);
|
||||
static void __DBExceptionDestination(void);
|
||||
void DBPrintf(char* format, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef _DOLPHIN_TRK_H
|
||||
#define _DOLPHIN_TRK_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
unsigned int TRKTargetContinue(void);
|
||||
void TRKTargetSetStopped(unsigned int);
|
||||
void TRKSwapAndGo();
|
||||
|
||||
void UnreserveEXI2Port();
|
||||
void ReserveEXI2Port();
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif // ifdef __cplusplus
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user