sf64/include/rmonint.h
Lywx 902dc0b829
Match Libultra (#120)
* 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>
2024-02-14 12:24:31 -03:00

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