DSPLLE: fixed 0x20 handling, we still don't know what it is good for

though:(


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3980 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee 2009-08-14 10:40:35 +00:00
parent 153ec6836e
commit c4dda436c6
3 changed files with 12 additions and 8 deletions

View file

@ -28,6 +28,7 @@ namespace DSPInterpreter {
void Update_SR_Register64(s64 _Value)
{
// TODO: Should also set 0x10 and 0x01
g_dsp.r[DSP_REG_SR] &= ~SR_CMP_MASK;
if (_Value < 0)
@ -40,17 +41,20 @@ void Update_SR_Register64(s64 _Value)
g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO;
}
// weird
if ((_Value >> 62) == 0)
// Checks if top bits are equal, what is it good for?
if ((_Value >> 62) == 0 || _Value >> 62 == 3)
{
g_dsp.r[DSP_REG_SR] |= 0x20;
g_dsp.r[DSP_REG_SR] |= SR_TOP2BITS;
}
}
void Update_SR_Register16(s16 _Value)
{
g_dsp.r[DSP_REG_SR] &= ~SR_CMP_MASK;
// Only sets those 3 bits
if (_Value < 0)
{
g_dsp.r[DSP_REG_SR] |= SR_SIGN;
@ -61,10 +65,10 @@ void Update_SR_Register16(s16 _Value)
g_dsp.r[DSP_REG_SR] |= SR_ARITH_ZERO;
}
// weird
if ((_Value >> 14) == 0)
// Checks if top bits are equal, what is it good for?
if ((_Value >> 14) == 0 || _Value >> 14 == 3)
{
g_dsp.r[DSP_REG_SR] |= 0x20;
g_dsp.r[DSP_REG_SR] |= SR_TOP2BITS;
}
}