mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +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)
|
else if (addr == 0x2d00)
|
||||||
{
|
{
|
||||||
AICA->IRQL = val;
|
AICA->IRQL = val;
|
||||||
|
popmessage("AICA: write to IRQL?");
|
||||||
}
|
}
|
||||||
else if (addr == 0x2d04)
|
else if (addr == 0x2d04)
|
||||||
{
|
{
|
||||||
AICA->IRQR = val;
|
AICA->IRQR = val;
|
||||||
|
|
||||||
if (val)
|
if (val & 1)
|
||||||
{
|
{
|
||||||
AICA->IntARMCB(0);
|
AICA->IntARMCB(0);
|
||||||
}
|
}
|
||||||
|
if (val & 0x100)
|
||||||
|
popmessage("AICA: SH-4 write protection enabled!");
|
||||||
|
|
||||||
|
if (val & 0xfefe)
|
||||||
|
popmessage("AICA: IRQR %04x!",val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1026,6 +1032,35 @@ static void AICA_w16(aica_state *AICA,address_space &space,unsigned int addr,uns
|
|||||||
aica_dsp_start(&AICA->DSP);
|
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)
|
else if (addr == 0x2d04)
|
||||||
{
|
{
|
||||||
|
//popmessage("AICA: read to IRQR?");
|
||||||
return AICA->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));
|
v= *((unsigned short *) (AICA->DSP.MADRS+(addr-0x3200)/2));
|
||||||
else if(addr<0x3c00)
|
else if(addr<0x3c00)
|
||||||
v= *((unsigned short *) (AICA->DSP.MPRO+(addr-0x3400)/2));
|
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)
|
// else if (addr<0x700)
|
||||||
// v=AICA->RINGBUF[(addr-0x600)/2];
|
// v=AICA->RINGBUF[(addr-0x600)/2];
|
||||||
|
@ -154,7 +154,7 @@
|
|||||||
EXT Input (0202)
|
EXT Input (0202)
|
||||||
ok
|
ok
|
||||||
DSP Data (0203)
|
DSP Data (0203)
|
||||||
NG (ADDR=0xa0704000 W=0xff R=0x00)
|
ok
|
||||||
S_Clock (03xx)
|
S_Clock (03xx)
|
||||||
50MSEC (0301)
|
50MSEC (0301)
|
||||||
NG
|
NG
|
||||||
|
Loading…
Reference in New Issue
Block a user