Array bounds patrol (nw)

This commit is contained in:
R. Belmont 2014-02-26 20:00:07 +00:00
parent 01089de733
commit 0caa890cca
2 changed files with 15 additions and 3 deletions

View File

@ -372,6 +372,11 @@ READ8_MEMBER( asc_device::read )
m_regs[0x2f] = m_incr[3]; m_regs[0x2f] = m_incr[3];
} }
if (offset > 0x800)
{
return 0xff;
}
return m_regs[offset-0x800]; return m_regs[offset-0x800];
} }
@ -582,6 +587,9 @@ WRITE8_MEMBER( asc_device::write )
break; break;
} }
m_regs[offset-0x800] = data; if (offset < 0x800)
{
m_regs[offset-0x800] = data;
}
} }
} }

View File

@ -982,8 +982,10 @@ static void SCSP_w16(scsp_state *scsp,address_space &space,unsigned int addr,uns
//DSP //DSP
if(addr<0x780) //COEF if(addr<0x780) //COEF
*((unsigned short *) (scsp->DSP.COEF+(addr-0x700)/2))=val; *((unsigned short *) (scsp->DSP.COEF+(addr-0x700)/2))=val;
else if(addr<0x800) else if(addr<0x7c0)
*((unsigned short *) (scsp->DSP.MADRS+(addr-0x780)/2))=val; *((unsigned short *) (scsp->DSP.MADRS+(addr-0x780)/2))=val;
else if(addr<0x800) // MADRS is mirrored twice
*((unsigned short *) (scsp->DSP.MADRS+(addr-0x7c0)/2))=val;
else if(addr<0xC00) else if(addr<0xC00)
{ {
*((unsigned short *) (scsp->DSP.MPRO+(addr-0x800)/2))=val; *((unsigned short *) (scsp->DSP.MPRO+(addr-0x800)/2))=val;
@ -1022,8 +1024,10 @@ static unsigned short SCSP_r16(scsp_state *scsp, address_space &space, unsigned
//DSP //DSP
if(addr<0x780) //COEF if(addr<0x780) //COEF
v= *((unsigned short *) (scsp->DSP.COEF+(addr-0x700)/2)); v= *((unsigned short *) (scsp->DSP.COEF+(addr-0x700)/2));
else if(addr<0x800) else if(addr<0x7c0)
v= *((unsigned short *) (scsp->DSP.MADRS+(addr-0x780)/2)); v= *((unsigned short *) (scsp->DSP.MADRS+(addr-0x780)/2));
else if(addr<0x800)
v= *((unsigned short *) (scsp->DSP.MADRS+(addr-0x7c0)/2));
else if(addr<0xC00) else if(addr<0xC00)
v= *((unsigned short *) (scsp->DSP.MPRO+(addr-0x800)/2)); v= *((unsigned short *) (scsp->DSP.MPRO+(addr-0x800)/2));
else if(addr<0xE00) else if(addr<0xE00)