mirror of
https://github.com/holub/mame
synced 2025-04-28 11:11:48 +03:00
AICA: fixed DSP r/w
This commit is contained in:
parent
cf3a84d62a
commit
45f68ceedd
@ -999,15 +999,21 @@ static void AICA_w16(aica_state *AICA,address_space &space,unsigned int addr,uns
|
||||
else if (addr == 0x2d00)
|
||||
{
|
||||
AICA->IRQL = val;
|
||||
popmessage("AICA: write to IRQL?");
|
||||
}
|
||||
else if (addr == 0x2d04)
|
||||
{
|
||||
AICA->IRQR = val;
|
||||
|
||||
if (val)
|
||||
if (val & 1)
|
||||
{
|
||||
AICA->IntARMCB(0);
|
||||
}
|
||||
if (val & 0x100)
|
||||
popmessage("AICA: SH-4 write protection enabled!");
|
||||
|
||||
if (val & 0xfefe)
|
||||
popmessage("AICA: IRQR %04x!",val);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1026,6 +1032,35 @@ static void AICA_w16(aica_state *AICA,address_space &space,unsigned int addr,uns
|
||||
aica_dsp_start(&AICA->DSP);
|
||||
}
|
||||
}
|
||||
else if(addr<0x4000)
|
||||
{
|
||||
popmessage("AICADSP write to undocumented reg %04x -> %04x",addr,val);
|
||||
}
|
||||
else if(addr<0x4400)
|
||||
{
|
||||
if(addr & 4)
|
||||
AICA->DSP.TEMP[(addr >> 3) & 0x7f] = (AICA->DSP.TEMP[(addr >> 3) & 0x7f] & 0xffff0000) | (val & 0xffff);
|
||||
else
|
||||
AICA->DSP.TEMP[(addr >> 3) & 0x7f] = (AICA->DSP.TEMP[(addr >> 3) & 0x7f] & 0xffff) | (val << 16);
|
||||
}
|
||||
else if(addr<0x4500)
|
||||
{
|
||||
if(addr & 4)
|
||||
AICA->DSP.MEMS[(addr >> 3) & 0x1f] = (AICA->DSP.MEMS[(addr >> 3) & 0x1f] & 0xffff0000) | (val & 0xffff);
|
||||
else
|
||||
AICA->DSP.MEMS[(addr >> 3) & 0x1f] = (AICA->DSP.MEMS[(addr >> 3) & 0x1f] & 0xffff) | (val << 16);
|
||||
}
|
||||
else if(addr<0x4580)
|
||||
{
|
||||
if(addr & 4)
|
||||
AICA->DSP.MIXS[(addr >> 3) & 0xf] = (AICA->DSP.MIXS[(addr >> 3) & 0xf] & 0xffff0000) | (val & 0xffff);
|
||||
else
|
||||
AICA->DSP.MIXS[(addr >> 3) & 0xf] = (AICA->DSP.MIXS[(addr >> 3) & 0xf] & 0xffff) | (val << 16);
|
||||
}
|
||||
else if(addr<0x45c0)
|
||||
*((unsigned short *) (AICA->DSP.EFREG+(addr-0x4580)/2))=val;
|
||||
else if(addr<0x45c8)
|
||||
*((unsigned short *) (AICA->DSP.EXTS+(addr-0x45c0)/2))=val;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1058,6 +1093,7 @@ static unsigned short AICA_r16(aica_state *AICA, address_space &space, unsigned
|
||||
}
|
||||
else if (addr == 0x2d04)
|
||||
{
|
||||
//popmessage("AICA: read to IRQR?");
|
||||
return AICA->IRQR;
|
||||
}
|
||||
}
|
||||
@ -1069,7 +1105,36 @@ static unsigned short AICA_r16(aica_state *AICA, address_space &space, unsigned
|
||||
v= *((unsigned short *) (AICA->DSP.MADRS+(addr-0x3200)/2));
|
||||
else if(addr<0x3c00)
|
||||
v= *((unsigned short *) (AICA->DSP.MPRO+(addr-0x3400)/2));
|
||||
|
||||
else if(addr<0x4000)
|
||||
{
|
||||
v= 0xffff;
|
||||
popmessage("AICADSP read to undocumented reg %04x",addr);
|
||||
}
|
||||
else if(addr<0x4400)
|
||||
{
|
||||
if(addr & 4)
|
||||
v= AICA->DSP.TEMP[(addr >> 3) & 0x7f] & 0xffff;
|
||||
else
|
||||
v= AICA->DSP.TEMP[(addr >> 3) & 0x7f] >> 16;
|
||||
}
|
||||
else if(addr<0x4500)
|
||||
{
|
||||
if(addr & 4)
|
||||
v= AICA->DSP.MEMS[(addr >> 3) & 0x1f] & 0xffff;
|
||||
else
|
||||
v= AICA->DSP.MEMS[(addr >> 3) & 0x1f] >> 16;
|
||||
}
|
||||
else if(addr<0x4580)
|
||||
{
|
||||
if(addr & 4)
|
||||
v= AICA->DSP.MIXS[(addr >> 3) & 0xf] & 0xffff;
|
||||
else
|
||||
v= AICA->DSP.MIXS[(addr >> 3) & 0xf] >> 16;
|
||||
}
|
||||
else if(addr<0x45c0)
|
||||
v = *((unsigned short *) (AICA->DSP.EFREG+(addr-0x4580)/2));
|
||||
else if(addr<0x45c8)
|
||||
v = *((unsigned short *) (AICA->DSP.EXTS+(addr-0x45c0)/2));
|
||||
}
|
||||
// else if (addr<0x700)
|
||||
// v=AICA->RINGBUF[(addr-0x600)/2];
|
||||
|
@ -154,7 +154,7 @@
|
||||
EXT Input (0202)
|
||||
ok
|
||||
DSP Data (0203)
|
||||
NG (ADDR=0xa0704000 W=0xff R=0x00)
|
||||
ok
|
||||
S_Clock (03xx)
|
||||
50MSEC (0301)
|
||||
NG
|
||||
|
Loading…
Reference in New Issue
Block a user