void _fastcall r4300i_SWC1 (void) {
	DWORD Address =  GPR[Opcode.base].UW[0] + (short)Opcode.offset;
	TEST_COP1_USABLE_EXCEPTION
	if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); }

	if (!r4300i_SW_VAddr(Address,*(DWORD *)FPRFloatLocation[Opcode.ft])) {
		DisplayError("SWC1 TLB: %X",Address);
	}
}
Beispiel #2
0
void r4300i_SW (void)
{
    uint32_t Address =  GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset;
    if ((Address & 3) != 0)
    {
        ADDRESS_ERROR_EXCEPTION(Address,0);
    }
    if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0]))
    {
        DisplayError("SW TLB: %X",Address);
    }
}
void _fastcall r4300i_SC (void) {
	DWORD Address =  GPR[Opcode.base].UW[0] + (short)Opcode.offset;	
	if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); }
#if (!defined(EXTERNAL_RELEASE))
	Log_SW(PROGRAM_COUNTER,Address,GPR[Opcode.rt].UW[0]);
#endif
	if (LLBit == 1) {
		if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0])) {
			DisplayError("SW TLB: %X",Address);
		}
	}
	GPR[Opcode.rt].UW[0] = LLBit;
}
Beispiel #4
0
void r4300i_SWC1 (void)
{
    uint32_t Address =  GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset;
    TEST_COP1_USABLE_EXCEPTION
    if ((Address & 3) != 0)
    {
        ADDRESS_ERROR_EXCEPTION(Address,0);
    }

    if (!r4300i_SW_VAddr(Address,*(uint32_t *)FPRFloatLocation[Opcode.ft]))
    {
    }
}
void _fastcall r4300i_SW (void) {
	DWORD Address =  GPR[Opcode.base].UW[0] + (short)Opcode.offset;	
	if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); }
#if (!defined(EXTERNAL_RELEASE))
	Log_SW(PROGRAM_COUNTER,Address,GPR[Opcode.rt].UW[0]);
#endif
	if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0])) {
		DisplayError("SW TLB: %X",Address);
	}
	//TranslateVaddr(&Address);
	//if (Address == 0x00090AA0) {
	//	LogMessage("%X: Write %X to %X",PROGRAM_COUNTER,GPR[Opcode.rt].UW[0],GPR[Opcode.base].UW[0] + (short)Opcode.offset);
	//}
}
void _fastcall r4300i_SWR (void) {
	DWORD Offset, Address, Value;
	
	Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset;
	Offset  = Address & 3;

	if (!r4300i_LW_VAddr((Address & ~3),&Value)) {
		DisplayError("SWL TLB: %X",Address);
		return;
	}
	
	Value &= SWR_MASK[Offset];
	Value += GPR[Opcode.rt].UW[0] << SWR_SHIFT[Offset];

	if (!r4300i_SW_VAddr((Address & ~0x03),Value)) {
		DisplayError("SWL TLB: %X",Address);
	}
}
Beispiel #7
0
void  r4300i_SWL (void) {
	s32 Offset;
	u32 Address, Value;

	Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset;
	Offset  = Address & 3;

	if (!r4300i_LW_VAddr((Address & ~3),&Value)) {
		//DisplayError("SWL TLB: %X",Address);
		return;
	}

	Value &= SWL_MASK[Offset];
	Value += GPR[Opcode.rt].UW[0] >> SWL_SHIFT[Offset];

	if (!r4300i_SW_VAddr((Address & ~0x03),Value)) {
		//DisplayError("SWL TLB: %X",Address);
	}
}
Beispiel #8
0
void r4300i_SWR (void)
{
    uint32_t Offset, Address, Value;

    Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset;
    Offset  = Address & 3;

    if (!r4300i_LW_VAddr((Address & ~3),&Value))
    {
        return;
    }

    Value &= SWR_MASK[Offset];
    Value += GPR[Opcode.rt].UW[0] << SWR_SHIFT[Offset];

    if (!r4300i_SW_VAddr((Address & ~0x03),Value))
    {
    }
}
Beispiel #9
0
void _fastcall r4300i_SWL (void) {
	DWORD Offset, Address, Value;
	
	Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset;
	Offset  = Address & 3;

	if (!r4300i_LW_VAddr((Address & ~3),&Value)) {
#ifndef EXTERNAL_RELEASE
		DisplayError("SWL TLB: %X",Address);
#endif
		return;
	}
	
	Value &= SWL_MASK[Offset];
	Value += GPR[Opcode.rt].UW[0] >> SWL_SHIFT[Offset];

	if (!r4300i_SW_VAddr((Address & ~0x03),Value)) {
#ifndef EXTERNAL_RELEASE
		DisplayError("SWL TLB: %X",Address);
#endif
	}
}