mirror of
https://github.com/sonicdcer/sf64.git
synced 2024-11-23 04:50:05 +00:00
902dc0b829
* Matched perspective, contquery, contreaddata, recvmesg and sendmesg * Fixed libultra compilation flags * Matched viblack * Matched virepeatline, visetmode, visetspecial and viswapbuf * Matched cartrominit, dpsetstat, sptask, sptaskyield, visetevent, createthread, gettime, setthreadpri, settime, settimer and starthread * Fixed bss bs * Matched even more libultra stuff * Matched even more * __osRdbSend * Decompiled most of the functions of libultra <3 * Matched last functions * Added a separation to libultra macros * Removed ARRLEN from controller.h * Fix libultra warnings --------- Co-authored-by: Alejandro Javier Asenjo Nitti <alejandro.asenjo88@gmail.com>
170 lines
4.0 KiB
C
170 lines
4.0 KiB
C
#ifndef _RMONINT_H
|
|
#define _RMONINT_H
|
|
|
|
#include "dbgproto.h"
|
|
#include "PR/os_internal.h"
|
|
|
|
/* mips */
|
|
|
|
#define MIPS_LWC2_OPCODE 50
|
|
#define MIPS_SWC2_OPCODE 58
|
|
|
|
#define MIPS_LW_OPCODE 35
|
|
#define MIPS_SW_OPCODE 43
|
|
|
|
#define MIPS_BREAK_OPCODE 0xD
|
|
#define MIPS_BREAK_MASK 0xFC00003F
|
|
|
|
#define MIPS_BREAK(code) \
|
|
((((code) & 0xFFFFF) << 6) | MIPS_BREAK_OPCODE)
|
|
|
|
/* R4300 General Purpose Register Indices */
|
|
#define GREG_IDX_ZERO 0
|
|
#define GREG_IDX_AT 1
|
|
#define GREG_IDX_T9 25
|
|
#define GREG_IDX_K0 26
|
|
#define GREG_IDX_GP 28
|
|
#define GREG_IDX_RA 31
|
|
#define GREG_IDX_LO 32
|
|
#define GREG_IDX_HI 33
|
|
#define GREG_IDX_CAUSE 34
|
|
#define GREG_IDX_PC 35
|
|
#define GREG_IDX_SR 36
|
|
|
|
/* RSP Scalar Register Indices */
|
|
#define SREG_IDX_ZERO 0
|
|
#define SREG_IDX_RA 31
|
|
#define SREG_IDX_DRAM_ADDR (32 + 0)
|
|
#define SREG_IDX_MEM_ADDR (32 + 1)
|
|
#define SREG_IDX_RD_LEN (32 + 2)
|
|
#define SREG_IDX_PC (32 + 3)
|
|
#define SREG_IDX_WR_LEN (32 + 4)
|
|
#define SREG_IDX_STATUS (32 + 5)
|
|
#define SREG_IDX_DMA_FULL (32 + 6)
|
|
#define SREG_IDX_DMA_BUSY (32 + 7)
|
|
|
|
/* RSP Vector Register Properties */
|
|
#define VREG_NUM 32
|
|
#define VREG_SIZE 0x10
|
|
|
|
/* rmon */
|
|
|
|
#define RMON_MESG_CPU_BREAK 2
|
|
#define RMON_MESG_SP_BREAK 4
|
|
#define RMON_MESG_FAULT 8
|
|
|
|
#define RMON_CPU 0
|
|
#define RMON_RSP 1
|
|
|
|
/* "thread id" for rsp */
|
|
#define RMON_TID_RSP 1000
|
|
/* "thread priority" for rsp */
|
|
#define RMON_PRI_RSP 42
|
|
|
|
/* "thread id" for no thread running */
|
|
#define RMON_TID_NOTHREAD 1003
|
|
|
|
#define RMON_PID_CPU 1002
|
|
#define RMON_PID_RSP 1001
|
|
|
|
/* Largest serviceable read/write memory request */
|
|
#define RMON_MAX_XFER_SIZE 1024
|
|
|
|
/* rmonmain */
|
|
|
|
void __rmonSendHeader(KKHeader* const block, u32 blockSize, u32 type);
|
|
void __rmonSendReply(KKHeader* const block, u32 blockSize, u32 replyType);
|
|
void __rmonSendData(char* const block, unsigned int blockSize);
|
|
|
|
extern int __rmonActive;
|
|
|
|
/* rmonmisc */
|
|
|
|
void __rmonInit(void);
|
|
void __rmonPanic(void);
|
|
|
|
extern OSMesgQueue __rmonMQ;
|
|
|
|
/* rmonmem */
|
|
|
|
void __rmonWriteWordTo(u32* addr, u32 val);
|
|
u32 __rmonReadWordAt(u32* addr);
|
|
void __rmonMemcpy(u8* dest, u8* srce, u32 count);
|
|
void __rmonCopyWords(u32* dest, u32* srce, u32 count);
|
|
|
|
extern u8 __rmonUtilityBuffer[];
|
|
|
|
/* rmonsio */
|
|
|
|
void __rmonSendFault(OSThread* thread);
|
|
void __rmonIOflush(void);
|
|
void __rmonIOputw(u32 word);
|
|
void __rmonIOhandler(void);
|
|
|
|
extern void* __osRdb_DbgRead_Buf;
|
|
extern u8 rmonRdbReadBuf[];
|
|
|
|
/* rmonrcp */
|
|
|
|
int __rmonRCPrunning(void);
|
|
void __rmonIdleRCP(void);
|
|
void __rmonStepRCP(void);
|
|
void __rmonRunRCP(void);
|
|
|
|
/* rmonbrk */
|
|
|
|
u32 __rmonGetBranchTarget(int method, int thread, char* addr);
|
|
int __rmonSetSingleStep(int thread, u32* instptr);
|
|
void __rmonGetExceptionStatus(KKStatusEvent* reply);
|
|
void __rmonHitBreak(void);
|
|
void __rmonHitSpBreak(void);
|
|
void __rmonHitCpuFault(void);
|
|
|
|
extern u8 __rmonRcpAtBreak;
|
|
|
|
/* rmonregs */
|
|
|
|
u32 __rmonGetRegisterContents(int method, int threadNumber, int regNumber);
|
|
|
|
/* rmontask */
|
|
|
|
void __rmonMaskIdleThreadInts(void);
|
|
OSThread* __rmonGetTCB(int threadNumber);
|
|
int __rmonStopUserThreads(int whichThread);
|
|
int __rmonGetThreadStatus(int method, int id, KKStatusEvent* reply);
|
|
|
|
/* rmoncmds */
|
|
|
|
int __rmonExecute(KKHeader* request);
|
|
|
|
/* commands */
|
|
|
|
typedef int (*FUNPTR)(KKHeader*);
|
|
|
|
int __rmonLoadProgram(KKHeader* req);
|
|
int __rmonListProcesses(KKHeader* req);
|
|
int __rmonGetExeName(KKHeader* req);
|
|
int __rmonListThreads(KKHeader* req);
|
|
int __rmonThreadStatus(KKHeader* req);
|
|
int __rmonStopThread(KKHeader* req);
|
|
int __rmonRunThread(KKHeader* req);
|
|
int __rmonSetFault(KKHeader* req);
|
|
int __rmonGetRegionCount(KKHeader* req);
|
|
int __rmonGetRegions(KKHeader* req);
|
|
int __rmonGetGRegisters(KKHeader* req);
|
|
int __rmonSetGRegisters(KKHeader* req);
|
|
int __rmonGetFRegisters(KKHeader* req);
|
|
int __rmonSetFRegisters(KKHeader* req);
|
|
int __rmonReadMem(KKHeader* req);
|
|
int __rmonWriteMem(KKHeader* req);
|
|
int __rmonSetBreak(KKHeader* req);
|
|
int __rmonClearBreak(KKHeader* req);
|
|
int __rmonListBreak(KKHeader* req);
|
|
int __rmonSetComm(KKHeader* req);
|
|
int __rmonGetSRegs(KKHeader* req);
|
|
int __rmonSetSRegs(KKHeader* req);
|
|
int __rmonGetVRegs(KKHeader* req);
|
|
int __rmonSetVRegs(KKHeader* req);
|
|
|
|
#endif
|