daedalus/Source/OSHLE/patch_regs_hle.inl
2021-10-23 21:48:59 +11:00

127 lines
3.4 KiB
C++

#define TEST_DISABLE_REG_FUNCS DAEDALUS_PROFILE(__FUNCTION__);
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osDisableInt_Mario()
{
TEST_DISABLE_REG_FUNCS
u32 CurrSR = gCPUState.CPUControl[C0_SR]._u32;
gCPUState.CPUControl[C0_SR]._u32 = CurrSR & ~SR_IE;
gGPR[REG_v0]._s64 = (s64)(CurrSR & SR_IE);
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osDisableInt_Zelda()
{
TEST_DISABLE_REG_FUNCS
// Same as the above
u32 CurrSR = gCPUState.CPUControl[C0_SR]._u32;
gCPUState.CPUControl[C0_SR]._u32 = CurrSR & ~SR_IE;
gGPR[REG_v0]._s64 = (s64)(CurrSR & SR_IE);
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
// This patch gives alot of speed!
u32 Patch___osRestoreInt()
{
TEST_DISABLE_REG_FUNCS
gCPUState.CPUControl[C0_SR]._u32 |= gGPR[REG_a0]._u32_0;
// Check if interrupts are pending, fixes Doom 64
// ToDo, check if interrupts are enabled? ERL/EXL, or call R4300_SetSR?
if (gCPUState.CPUControl[C0_SR]._u32 & gCPUState.CPUControl[C0_CAUSE]._u32 & CAUSE_IPMASK)
{
gCPUState.AddJob( CPU_CHECK_INTERRUPTS );
}
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch_osGetCount()
{
TEST_DISABLE_REG_FUNCS
gGPR[REG_v0]._s64 = (s64)gCPUState.CPUControl[C0_COUNT]._u32;
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osGetCause()
{
TEST_DISABLE_REG_FUNCS
gGPR[REG_v0]._s64 = (s64)gCPUState.CPUControl[C0_CAUSE]._u32;
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osSetCompare()
{
TEST_DISABLE_REG_FUNCS
CPU_SetCompare( gGPR[REG_a0]._u32_0 );
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osSetSR()
{
TEST_DISABLE_REG_FUNCS
R4300_SetSR(gGPR[REG_a0]._u32_0);
//DBGConsole_Msg(0, "__osSetSR()");
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osGetSR()
{
TEST_DISABLE_REG_FUNCS
gGPR[REG_v0]._s64 = (s64)gCPUState.CPUControl[C0_SR]._u32;
//DBGConsole_Msg(0, "__osGetSR()");
return PATCH_RET_JR_RA;
}
//*****************************************************************************
//
//*****************************************************************************
u32 Patch___osSetFpcCsr()
{
TEST_DISABLE_REG_FUNCS
gGPR[REG_v0]._s64 = (s64)gCPUState.FPUControl[31]._u32;
gCPUState.FPUControl[31]._u32 = gGPR[REG_a0]._u32_0;
#ifdef DAEDALUS_DEBUG_CONSOLE
DBGConsole_Msg(0, "__osSetFpcCsr()");
#endif
return PATCH_RET_JR_RA;
}