mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-30 13:58:03 +03:00
DSPLLE: sort of semi-working breakpoints and stepping, if you flip an #ifdef. more work to do, for some reason it gets very slow when you enable it atm
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3573 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
b406203794
commit
04105baf4e
19 changed files with 841 additions and 774 deletions
|
@ -32,12 +32,12 @@ void Update_SR_Register64(s64 _Value)
|
|||
|
||||
if (_Value < 0)
|
||||
{
|
||||
g_dsp.r[DSP_REG_SR] |= 0x8;
|
||||
g_dsp.r[DSP_REG_SR] |= SR_SIGN;
|
||||
}
|
||||
|
||||
if (_Value == 0)
|
||||
{
|
||||
g_dsp.r[DSP_REG_SR] |= 0x4;
|
||||
g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO;
|
||||
}
|
||||
|
||||
// weird
|
||||
|
@ -53,12 +53,12 @@ void Update_SR_Register16(s16 _Value)
|
|||
|
||||
if (_Value < 0)
|
||||
{
|
||||
g_dsp.r[DSP_REG_SR] |= 0x8;
|
||||
g_dsp.r[DSP_REG_SR] |= SR_SIGN;
|
||||
}
|
||||
|
||||
if (_Value == 0)
|
||||
{
|
||||
g_dsp.r[DSP_REG_SR] |= 0x4;
|
||||
g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO;
|
||||
}
|
||||
|
||||
// weird
|
||||
|
@ -90,92 +90,51 @@ int GetMultiplyModifier()
|
|||
}
|
||||
|
||||
inline bool isCarry() {
|
||||
return (g_dsp.r[DSP_REG_SR] & 0x01) ? true : false;
|
||||
return (g_dsp.r[DSP_REG_SR] & SR_CARRY) ? true : false;
|
||||
}
|
||||
inline bool isSign() {
|
||||
return ((g_dsp.r[DSP_REG_SR] & 0x02) != (g_dsp.r[DSP_REG_SR] & 0x08));
|
||||
return ((g_dsp.r[DSP_REG_SR] & SR_2) != (g_dsp.r[DSP_REG_SR] & SR_SIGN));
|
||||
}
|
||||
|
||||
inline bool isZero() {
|
||||
return (g_dsp.r[DSP_REG_SR] & 0x04) ? true : false;
|
||||
return (g_dsp.r[DSP_REG_SR] & SR_ARITH_ZERO) ? true : false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//see gdsp_registers.h for flags
|
||||
bool CheckCondition(u8 _Condition)
|
||||
{
|
||||
bool taken = false;
|
||||
switch (_Condition & 0xf)
|
||||
{
|
||||
case 0x0: //NS - NOT SIGN
|
||||
if (! isSign())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return !isSign();
|
||||
case 0x1: // S - SIGN
|
||||
if (isSign())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return isSign();
|
||||
case 0x2: // G - GREATER
|
||||
if (! isSign() && !isZero())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return !isSign() && !isZero();
|
||||
case 0x3: // LE - LESS EQUAL
|
||||
if (isSign() || isZero())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return isSign() || isZero();
|
||||
case 0x4: // NZ - NOT ZERO
|
||||
|
||||
if (!isZero())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return !isZero();
|
||||
case 0x5: // Z - ZERO
|
||||
|
||||
if (isZero())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return isZero();
|
||||
case 0x6: // L - LESS
|
||||
// Should be that once we set 0x01
|
||||
if (!isCarry())
|
||||
return !isCarry();
|
||||
// if (isSign())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
case 0x7: // GE - GREATER EQUAL
|
||||
// Should be that once we set 0x01
|
||||
if (isCarry())
|
||||
return isCarry();
|
||||
// if (! isSign() || isZero())
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
case 0xc: // LNZ - LOGIC NOT ZERO
|
||||
|
||||
if (!(g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO))
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
return !(g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO);
|
||||
case 0xd: // LZ - LOGIC ZERO
|
||||
return (g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO) != 0;
|
||||
|
||||
if (g_dsp.r[DSP_REG_SR] & SR_LOGIC_ZERO)
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
case 0xf: // Empty
|
||||
taken = true;
|
||||
break;
|
||||
|
||||
case 0xf: // Empty - always true.
|
||||
return true;
|
||||
default:
|
||||
ERROR_LOG(DSPLLE, "Unknown condition check: 0x%04x\n", _Condition & 0xf);
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
|
||||
return taken;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue