Fixed a bug in r4884, simplified implementation and added equivalent code to hwWrite16

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4886 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
sudonim1@gmail.com 2011-08-29 18:41:45 +00:00
parent 3d04b20ec8
commit 605f9cbc78
1 changed files with 18 additions and 45 deletions

View File

@ -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<page>(mem & ~3, (u32)value << (mem & 3));
return;
}
u32 merged = _hwRead32<page,false>(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<page>(mem & ~3, (u32)value << (mem & 3));
return;
}
u32 merged = _hwRead32<page,false>(mem & ~0x03);
((u16*)&merged)[(mem>>1) & 0x1] = value;