SSBM Decomp
Loading...
Searching...
No Matches
targimpl.c File Reference
#include "metrotrk.h"
#include <dolphin/os.h>

Data Structures

struct  TRKExceptionStatus
 
struct  TRKStepStatus
 

Macros

#define BOOTINFO   0x80000000
 
#define MEM2_CACHED   0x90000000
 
#define DB_EXCEPTION_MASK   0x44
 
#define INSTR_NOP   0x60000000
 
#define INSTR_BLR   0x4E800020
 
#define INSTR_PSQ_ST(psr, offset, rDest, w, gqr)
 
#define INSTR_PSQ_L(psr, offset, rSrc, w, gqr)
 
#define INSTR_STW(rSrc, offset, rDest)    (0x90000000 | (rSrc << 21) | (rDest << 16) | offset)
 
#define INSTR_LWZ(rDest, offset, rSrc)    (0x80000000 | (rDest << 21) | (rSrc << 16) | offset)
 
#define INSTR_STFD(fprSrc, offset, rDest)    (0xD8000000 | (fprSrc << 21) | (rDest << 16) | offset)
 
#define INSTR_LFD(fprDest, offset, rSrc)    (0xC8000000 | (fprDest << 21) | (rSrc << 16) | offset)
 
#define INSTR_MFSPR(rDest, spr)
 
#define INSTR_MTSPR(spr, rSrc)
 
#define ALTIVEC_VECTOR_REG_ACCESS_MIN   0
 
#define ALTIVEC_VECTOR_REG_ACCESS_MAX   31
 
#define ALTIVEC_VSCR_ACCESS   32
 
#define ALTIVEC_VRSAVE_SPR_ACCESS   33
 
#define SUPPORT_TRAP   0x0FE00000
 
#define CURRENT_CONTEXT_ADDR   0xD4
 
#define FPU_CONTEXT_ADDR   0xD8
 
#define ROOT_THREAD_ADDR   0xDC
 
#define PREVIOUS_THREAD_ADDR   0xE0
 
#define CURRENT_THREAD_ADDR   0xE4
 
#define FP_FPSCR_ACCESS   32
 
#define FP_FPECR_ACCESS   33
 
#define ACTIVE_THREAD_QUEUE   (BOOTINFO + ROOT_THREAD_ADDR)
 
#define CURRENT_THREAD   (BOOTINFO + CURRENT_THREAD_ADDR)
 
#define INVALID_THREAD(thread)
 

Typedefs

typedef void(* RegAccessFunc) (void *srcDestPtr, u128 val)
 

Functions

static bool TRKTargetCheckStep (void)
 
OSThreadQueue __OSActiveThreadQueue AT_ADDRESS (0x800000DC)
 
OSThread *__OSCurrentThread AT_ADDRESS (0x800000E4)
 
static void TRKExceptionHandler (u16)
 
void TRKInterruptHandlerEnableInterrupts (void)
 
static void GetThreadInfo (int *, int *)
 
ASM u32 __TRK_get_MSR (void)
 
ASM void __TRK_set_MSR (register u32 val)
 
static DSError TRKValidMemory32 (const void *addr, size_t length, int readWriteable)
 
static ASM void TRK_ppc_memcpy (void *dest, const void *src, int n, u32 param_4, u32 param_5)
 
DSError TRKTargetAccessMemory (void *data, u32 start, size_t *length, MemoryAccessOptions accessOptions, bool read)
 
static DSError TRKTargetReadInstruction (void *data, u32 start)
 
DSError TRKTargetAccessDefault (u32 firstRegister, u32 lastRegister, MessageBuffer *b, size_t *registersLengthPtr, bool read)
 
DSError TRKTargetAccessFP (u32 firstRegister, u32 lastRegister, MessageBuffer *b, size_t *registerStorageSize, s32 read)
 
DSError TRKTargetAccessExtended1 (u32 firstRegister, u32 lastRegister, MessageBuffer *b, size_t *registerStorageSize, s32 read)
 
DSError TRKTargetAccessExtended2 (u32 firstRegister, u32 lastRegister, MessageBuffer *b, size_t *registersLengthPtr, bool read)
 
DSError TRKTargetVersions (DSVersions *version)
 
DSError TRKTargetSupportMask (DSSupportMask *mask)
 
DSError TRKTargetCPUType (DSCPUType *cpuType)
 
void TRKUARTInterruptHandler (void)
 
ASM void TRKInterruptHandler (register u16 val)
 
static ASM void TRKExceptionHandler (register u16 id)
 
void TRKPostInterruptEvent (void)
 
ASM void TRKSwapAndGo (void)
 
DSError TRKTargetInterrupt (NubEvent *event)
 
DSError TRKTargetAddStopInfo (MessageBuffer *arg0)
 
void TRKTargetAddExceptionInfo (MessageBuffer *b)
 
static DSError TRKTargetEnableTrace (bool enable)
 
bool TRKTargetStepDone (void)
 
DSError TRKTargetDoStep (void)
 
DSError TRKTargetSingleStep (u32 count, bool stepOver)
 
DSError TRKTargetStepOutOfRange (u32 rangeStart, u32 rangeEnd, bool stepOver)
 
u32 TRKTargetGetPC (void)
 
DSError TRKTargetSupportRequest (void)
 
DSError TRKTargetFlushCache (u8 arg0, u32 arg1, u32 arg2)
 
bool TRKTargetStopped ()
 
void TRKTargetSetStopped (bool val)
 
DSError TRKTargetStop ()
 
DSError TRKPPCAccessSPR (void *srcDestPtr, u32 spr, bool read)
 
DSError TRKPPCAccessPairedSingleRegister (void *srcDestPtr, u32 psr, bool read)
 
DSError TRKPPCAccessFPRegister (void *srcDestPtr, u32 fpr, bool read)
 
DSError TRKPPCAccessSpecialReg (void *srcDestPtr, u32 *instructionData, bool read)
 
void TRKTargetSetInputPendingPtr (void *ptr)
 
u32 ConvertAddress (u32 addr)
 

Variables

ProcessorState_PPC gTRKCPUState
 
ProcessorRestoreFlags_PPC gTRKRestoreFlags = { false, false }
 
TRKState_PPC gTRKState
 
static TRKExceptionStatus gTRKExceptionStatus = { { 0, 0, 0 }, true, false }
 
static TRKStepStatus gTRKStepStatus = { 0, kDSStepIntoCount, 0, 0, 0 }
 
u128 TRKvalue128_temp
 
static u16 TRK_saved_exceptionID = 0
 
Default_PPC gTRKSaveState
 

Macro Definition Documentation

◆ BOOTINFO

#define BOOTINFO   0x80000000

◆ MEM2_CACHED

#define MEM2_CACHED   0x90000000

◆ DB_EXCEPTION_MASK

#define DB_EXCEPTION_MASK   0x44

◆ INSTR_NOP

#define INSTR_NOP   0x60000000

◆ INSTR_BLR

#define INSTR_BLR   0x4E800020

◆ INSTR_PSQ_ST

#define INSTR_PSQ_ST (   psr,
  offset,
  rDest,
  w,
  gqr 
)
Value:
(0xF0000000 | (psr << 21) | (rDest << 16) | (w << 15) | (gqr << 12) | \
offset)

◆ INSTR_PSQ_L

#define INSTR_PSQ_L (   psr,
  offset,
  rSrc,
  w,
  gqr 
)
Value:
(0xE0000000 | (psr << 21) | (rSrc << 16) | (w << 15) | (gqr << 12) | \
offset)

◆ INSTR_STW

#define INSTR_STW (   rSrc,
  offset,
  rDest 
)     (0x90000000 | (rSrc << 21) | (rDest << 16) | offset)

◆ INSTR_LWZ

#define INSTR_LWZ (   rDest,
  offset,
  rSrc 
)     (0x80000000 | (rDest << 21) | (rSrc << 16) | offset)

◆ INSTR_STFD

#define INSTR_STFD (   fprSrc,
  offset,
  rDest 
)     (0xD8000000 | (fprSrc << 21) | (rDest << 16) | offset)

◆ INSTR_LFD

#define INSTR_LFD (   fprDest,
  offset,
  rSrc 
)     (0xC8000000 | (fprDest << 21) | (rSrc << 16) | offset)

◆ INSTR_MFSPR

#define INSTR_MFSPR (   rDest,
  spr 
)
Value:
(0x7C000000 | (rDest << 21) | ((spr & 0xFE0) << 6) | \
((spr & 0x1F) << 16) | 0x2A6)

◆ INSTR_MTSPR

#define INSTR_MTSPR (   spr,
  rSrc 
)
Value:
(0x7C000000 | (rSrc << 21) | ((spr & 0xFE0) << 6) | \
((spr & 0x1F) << 16) | 0x3A6)

◆ ALTIVEC_VECTOR_REG_ACCESS_MIN

#define ALTIVEC_VECTOR_REG_ACCESS_MIN   0

◆ ALTIVEC_VECTOR_REG_ACCESS_MAX

#define ALTIVEC_VECTOR_REG_ACCESS_MAX   31

◆ ALTIVEC_VSCR_ACCESS

#define ALTIVEC_VSCR_ACCESS   32

◆ ALTIVEC_VRSAVE_SPR_ACCESS

#define ALTIVEC_VRSAVE_SPR_ACCESS   33

◆ SUPPORT_TRAP

#define SUPPORT_TRAP   0x0FE00000

◆ CURRENT_CONTEXT_ADDR

#define CURRENT_CONTEXT_ADDR   0xD4

◆ FPU_CONTEXT_ADDR

#define FPU_CONTEXT_ADDR   0xD8

◆ ROOT_THREAD_ADDR

#define ROOT_THREAD_ADDR   0xDC

◆ PREVIOUS_THREAD_ADDR

#define PREVIOUS_THREAD_ADDR   0xE0

◆ CURRENT_THREAD_ADDR

#define CURRENT_THREAD_ADDR   0xE4

◆ FP_FPSCR_ACCESS

#define FP_FPSCR_ACCESS   32

◆ FP_FPECR_ACCESS

#define FP_FPECR_ACCESS   33

◆ ACTIVE_THREAD_QUEUE

#define ACTIVE_THREAD_QUEUE   (BOOTINFO + ROOT_THREAD_ADDR)

◆ CURRENT_THREAD

#define CURRENT_THREAD   (BOOTINFO + CURRENT_THREAD_ADDR)

◆ INVALID_THREAD

#define INVALID_THREAD (   thread)
Value:
((u32) thread == 0xFFFFFFFF || thread == NULL || \
(u32) thread == 0x80000000)
unsigned long u32
An unsigned 32-bit integer.
Definition platform.h:26
#define NULL
A null pointer.
Definition stddef.h:19

Typedef Documentation

◆ RegAccessFunc

typedef void(* RegAccessFunc) (void *srcDestPtr, u128 val)

Function Documentation

◆ TRKTargetCheckStep()

static bool TRKTargetCheckStep ( void  )
static

◆ AT_ADDRESS() [1/2]

OSThreadQueue __OSActiveThreadQueue AT_ADDRESS ( 0x800000DC  )
extern

◆ AT_ADDRESS() [2/2]

OSThread *__OSCurrentThread AT_ADDRESS ( 0x800000E4  )
extern

◆ TRKExceptionHandler() [1/2]

static void TRKExceptionHandler ( u16  )
static

◆ TRKInterruptHandlerEnableInterrupts()

ASM void TRKInterruptHandlerEnableInterrupts ( void  )

◆ GetThreadInfo()

static void GetThreadInfo ( int *  r3,
int *  r4 
)
static

◆ __TRK_get_MSR()

ASM u32 __TRK_get_MSR ( void  )

◆ __TRK_set_MSR()

ASM void __TRK_set_MSR ( register u32  val)

◆ TRKValidMemory32()

static DSError TRKValidMemory32 ( const void *  addr,
size_t  length,
int  readWriteable 
)
static

◆ TRK_ppc_memcpy()

static ASM void TRK_ppc_memcpy ( void *  dest,
const void *  src,
int  n,
u32  param_4,
u32  param_5 
)
static

◆ TRKTargetAccessMemory()

DSError TRKTargetAccessMemory ( void *  data,
u32  start,
size_t length,
MemoryAccessOptions  accessOptions,
bool  read 
)

◆ TRKTargetReadInstruction()

static DSError TRKTargetReadInstruction ( void *  data,
u32  start 
)
static

◆ TRKTargetAccessDefault()

DSError TRKTargetAccessDefault ( u32  firstRegister,
u32  lastRegister,
MessageBuffer b,
size_t registersLengthPtr,
bool  read 
)

◆ TRKTargetAccessFP()

DSError TRKTargetAccessFP ( u32  firstRegister,
u32  lastRegister,
MessageBuffer b,
size_t registerStorageSize,
s32  read 
)

◆ TRKTargetAccessExtended1()

DSError TRKTargetAccessExtended1 ( u32  firstRegister,
u32  lastRegister,
MessageBuffer b,
size_t registerStorageSize,
s32  read 
)

◆ TRKTargetAccessExtended2()

DSError TRKTargetAccessExtended2 ( u32  firstRegister,
u32  lastRegister,
MessageBuffer b,
size_t registersLengthPtr,
bool  read 
)

◆ TRKTargetVersions()

DSError TRKTargetVersions ( DSVersions version)

◆ TRKTargetSupportMask()

DSError TRKTargetSupportMask ( DSSupportMask mask)

◆ TRKTargetCPUType()

DSError TRKTargetCPUType ( DSCPUType cpuType)

◆ TRKUARTInterruptHandler()

void TRKUARTInterruptHandler ( void  )

◆ TRKInterruptHandler()

ASM void TRKInterruptHandler ( register u16  val)

◆ TRKExceptionHandler() [2/2]

static ASM void TRKExceptionHandler ( register u16  id)
static

◆ TRKPostInterruptEvent()

void TRKPostInterruptEvent ( void  )

◆ TRKSwapAndGo()

ASM void TRKSwapAndGo ( void  )

◆ TRKTargetInterrupt()

DSError TRKTargetInterrupt ( NubEvent event)

◆ TRKTargetAddStopInfo()

DSError TRKTargetAddStopInfo ( MessageBuffer arg0)

◆ TRKTargetAddExceptionInfo()

void TRKTargetAddExceptionInfo ( MessageBuffer b)

◆ TRKTargetEnableTrace()

static DSError TRKTargetEnableTrace ( bool  enable)
static

◆ TRKTargetStepDone()

bool TRKTargetStepDone ( void  )

◆ TRKTargetDoStep()

DSError TRKTargetDoStep ( void  )

◆ TRKTargetSingleStep()

DSError TRKTargetSingleStep ( u32  count,
bool  stepOver 
)

◆ TRKTargetStepOutOfRange()

DSError TRKTargetStepOutOfRange ( u32  rangeStart,
u32  rangeEnd,
bool  stepOver 
)

◆ TRKTargetGetPC()

u32 TRKTargetGetPC ( void  )

◆ TRKTargetSupportRequest()

DSError TRKTargetSupportRequest ( void  )

◆ TRKTargetFlushCache()

DSError TRKTargetFlushCache ( u8  arg0,
u32  arg1,
u32  arg2 
)

◆ TRKTargetStopped()

bool TRKTargetStopped ( void  )

◆ TRKTargetSetStopped()

void TRKTargetSetStopped ( bool  val)

◆ TRKTargetStop()

DSError TRKTargetStop ( void  )

◆ TRKPPCAccessSPR()

DSError TRKPPCAccessSPR ( void *  srcDestPtr,
u32  spr,
bool  read 
)

◆ TRKPPCAccessPairedSingleRegister()

DSError TRKPPCAccessPairedSingleRegister ( void *  srcDestPtr,
u32  psr,
bool  read 
)

◆ TRKPPCAccessFPRegister()

DSError TRKPPCAccessFPRegister ( void *  srcDestPtr,
u32  fpr,
bool  read 
)

◆ TRKPPCAccessSpecialReg()

DSError TRKPPCAccessSpecialReg ( void *  srcDestPtr,
u32 instructionData,
bool  read 
)

◆ TRKTargetSetInputPendingPtr()

void TRKTargetSetInputPendingPtr ( void *  ptr)

◆ ConvertAddress()

u32 ConvertAddress ( u32  addr)

Variable Documentation

◆ gTRKCPUState

ProcessorState_PPC gTRKCPUState

◆ gTRKRestoreFlags

ProcessorRestoreFlags_PPC gTRKRestoreFlags = { false, false }

◆ gTRKState

TRKState_PPC gTRKState

◆ gTRKExceptionStatus

TRKExceptionStatus gTRKExceptionStatus = { { 0, 0, 0 }, true, false }
static

◆ gTRKStepStatus

TRKStepStatus gTRKStepStatus = { 0, kDSStepIntoCount, 0, 0, 0 }
static

◆ TRKvalue128_temp

u128 TRKvalue128_temp

◆ TRK_saved_exceptionID

u16 TRK_saved_exceptionID = 0
static

◆ gTRKSaveState

Default_PPC gTRKSaveState