goto end;\r
case 2:\r
d = (Pico_mcd->s68k_regs[a]<<8) | (Pico_mcd->s68k_regs[a+1]&0xc7);\r
- dprintf("m68k_regs r3: %02x @%06x", (u8)d, SekPc);\r
+ // the DMNA delay must only be visible on s68k side (Lunar2, Silpheed)\r
+ if (Pico_mcd->m.state_flags&2) { d &= ~1; d |= 2; }\r
+ //printf("m68k_regs r3: %02x @%06x\n", (u8)d, SekPc);\r
goto end;\r
case 4:\r
d = Pico_mcd->s68k_regs[4]<<8;\r
return;\r
case 3: {\r
u32 dold = Pico_mcd->s68k_regs[3]&0x1f;\r
- dprintf("m68k_regs w3: %02x @%06x", (u8)d, SekPc);\r
+ //printf("m68k_regs w3: %02x @%06x\n", (u8)d, SekPc);\r
d &= 0xc2;\r
if ((dold>>6) != ((d>>6)&3))\r
dprintf("m68k: prg bank: %i -> %i", (Pico_mcd->s68k_regs[a]>>6), ((d>>6)&3));\r
return ((Pico_mcd->s68k_regs[0]&3)<<8) | 1; // ver = 0, not in reset state\r
case 2:\r
d = (Pico_mcd->s68k_regs[a]<<8) | (Pico_mcd->s68k_regs[a+1]&0x1f);\r
- dprintf("s68k_regs r3: %02x @%06x", (u8)d, SekPcS68k);\r
+ //printf("s68k_regs r3: %02x @%06x\n", (u8)d, SekPcS68k);\r
goto poll_detect;\r
case 6:\r
return CDC_Read_Reg();\r
return; // only m68k can change WP\r
case 3: {\r
int dold = Pico_mcd->s68k_regs[3];\r
- dprintf("s68k_regs w3: %02x @%06x", (u8)d, SekPcS68k);\r
+ //printf("s68k_regs w3: %02x @%06x\n", (u8)d, SekPcS68k);\r
d &= 0x1d;\r
d |= dold&0xc2;\r
if (d&4) {\r
// prg RAM\r
if ((a&0xfe0000)==0x020000 && (Pico_mcd->m.busreq&2)) {\r
u8 *prg_bank = Pico_mcd->prg_ram_b[Pico_mcd->s68k_regs[3]>>6];\r
+ wrdprintf("m68k_prgram r16: [%i,%06x] @%06x", Pico_mcd->s68k_regs[3]>>6, a, SekPc);\r
d = *(u16 *)(prg_bank+(a&0x1fffe));\r
+ wrdprintf("ret = %04x", d);\r
goto end;\r
}\r
\r
// prg RAM\r
if ((a&0xfe0000)==0x020000 && (Pico_mcd->m.busreq&2)) {\r
u8 *prg_bank = Pico_mcd->prg_ram_b[Pico_mcd->s68k_regs[3]>>6];\r
+ wrdprintf("m68k_prgram w16: [%i,%06x] %04x @%06x", Pico_mcd->s68k_regs[3]>>6, a, d, SekPc);\r
*(u16 *)(prg_bank+(a&0x1fffe))=d;\r
return;\r
}\r
\r
// prg RAM\r
if (a < 0x80000) {\r
+ wrdprintf("s68k_prgram r16: [%06x] @%06x", a, SekPcS68k);\r
d = *(u16 *)(Pico_mcd->prg_ram+a);\r
+ wrdprintf("ret = %04x", d);\r
goto end;\r
}\r
\r
d = Pico_mcd->word_ram1M[bank][((a+0)^1)&0x1ffff] << 16;\r
d |= Pico_mcd->word_ram1M[bank][((a+1)^1)&0x1ffff];\r
d |= d << 4; d &= 0x0f0f0f0f;\r
- dprintf("FIXME: decode");\r
} else {\r
// allow access in any mode, like Gens does\r
u16 *pm=(u16 *)(Pico_mcd->word_ram2M+(a&0x3fffe)); d = (pm[0]<<16)|pm[1];\r
d &= 0x0f;\r
if (!(a&1)) d <<= 4;\r
\r
- //dprintf("FIXME: decode, r3 = %02x", r3);\r
-\r
if (r3 == 8) {\r
if ((!(*pd & (~oldmask))) && d) goto do_it;\r
} else if (r3 > 8) {\r
} else {\r
*pd = d;\r
}\r
-\r
- //dprintf("FIXME: decode");\r
}\r
#endif\r
\r
// -----------------------------------------------------------------\r
\r
-//void PicoWriteS68k8_(u32 a,u8 d);\r
-//void PicoWriteS68k8__(u32 a,u8 d);\r
#ifdef _ASM_CD_MEMORY_C\r
void PicoWriteS68k8(u32 a,u8 d);\r
#else\r
#endif\r
\r
a&=0xffffff;\r
-#if 0\r
- PicoWriteS68k8_(a, d);\r
-/* if ((a&0xfc0000)!=0x080000) {\r
- PicoWriteS68k8_(a, d);\r
- return;\r
- }\r
- printf("r3: %02x\n", Pico_mcd->s68k_regs[3]);\r
- PicoWriteS68k8__(a,d);*/\r
- return;\r
-#endif\r
\r
// prg RAM\r
if (a < 0x80000) {\r
\r
// prg RAM\r
if (a < 0x80000) {\r
+ wrdprintf("s68k_prgram w16: [%06x] %04x @%06x", a, d, SekPcS68k);\r
*(u16 *)(Pico_mcd->prg_ram+a)=d;\r
return;\r
}\r