diff --git a/pcsx2/HwWrite.cpp b/pcsx2/HwWrite.cpp index d8f4394453..02f7980f8b 100644 --- a/pcsx2/HwWrite.cpp +++ b/pcsx2/HwWrite.cpp @@ -239,52 +239,15 @@ void __fastcall _hwWrite8(u32 mem, u8 value) } return; } - - switch(mem) // Virtual on Marz sound effect hang. Broke in r3704 (handled in r3703 HwWrite.cpp line 352) - { //Didnt realise this got missed, whoopsy! This should cover everything needed. (Refraction) - //DMAC_STAT Status Flags - case(DMAC_STAT): - case(DMAC_STAT+1): - DevCon.Warning ( "8/16bit DMAC_STAT bottom write mem = %x value %x", mem, value ); - psHu8(mem) &= ~value; - return; - //DMAC_STAT Mask - case(DMAC_STAT+2): - case(DMAC_STAT+3): - DevCon.Warning ( "8/16bit DMAC_STAT top write mem = %x value %x", mem, value ); - psHu8(mem) ^= value; - cpuTestDMACInts(); - return; - //INTC_STAT - case(INTC_STAT): - case(INTC_STAT+1): - DevCon.Warning ( "8/16bit INTC_STAT write mem = %x value %x", mem, value ); - psHu8(mem) &= ~value; - return; - - //INTC_MASK - case(INTC_MASK): - case(INTC_MASK+1): - DevCon.Warning ( "8/16bit INTC_MASK write mem = %x value %x", mem, value ); - psHu8(INTC_MASK) ^= value; - cpuTestINTCInts(); - return; - - //Just in case :P - //FAKEDMAC_STAT Status - case(DMAC_FAKESTAT): - case(DMAC_FAKESTAT+1): - DevCon.Warning ( "8/16bit FAKEDMAC_STAT bottom write mem = %x value %x", mem, value ); - psHu8(mem) &= ~value; - return; - //FAKEDMAC_STAT Mask - case(DMAC_FAKESTAT+2): - case(DMAC_FAKESTAT+3): - DevCon.Warning ( "8/16bit FAKEDMAC_STAT top write mem = %x value %x", mem, value ); - psHu8(mem) ^= value; - cpuTestDMACInts(); - return; + switch(mem & ~3) + { + case DMAC_STAT: + case INTC_STAT: + case INTC_MASK: + case DMAC_FAKESTAT: + _hwWrite32(mem & ~3, (u32)value << (mem & 3)); + return; } u32 merged = _hwRead32(mem & ~0x03); @@ -305,6 +268,16 @@ void __fastcall _hwWrite16(u32 mem, u16 value) { pxAssume( (mem & 0x01) == 0 ); + switch(mem & ~3) + { + case DMAC_STAT: + case INTC_STAT: + case INTC_MASK: + case DMAC_FAKESTAT: + _hwWrite32(mem & ~3, (u32)value << (mem & 3)); + return; + } + u32 merged = _hwRead32(mem & ~0x03); ((u16*)&merged)[(mem>>1) & 0x1] = value;