1.31 release
[picodrive.git] / Pico / cd / Memory.c
index fc25081..08a4486 100644 (file)
@@ -52,7 +52,9 @@ static u32 m68k_reg_read16(u32 a)
       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
@@ -117,7 +119,7 @@ void m68k_reg_write8(u32 a, u32 d)
       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
@@ -207,7 +209,7 @@ u32 s68k_reg_read16(u32 a)
       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
@@ -279,7 +281,7 @@ void s68k_reg_write8(u32 a, u32 d)
       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
@@ -482,7 +484,9 @@ static u16 PicoReadM68k16(u32 a)
   // 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
@@ -655,6 +659,7 @@ static void PicoWriteM68k16(u32 a,u16 d)
   // 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
@@ -863,7 +868,9 @@ static u16 PicoReadS68k16(u32 a)
 \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
@@ -979,7 +986,6 @@ static u32 PicoReadS68k32(u32 a)
       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
@@ -1058,8 +1064,6 @@ static void decode_write8(u32 a, u8 d, int r3)
   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
@@ -1097,15 +1101,11 @@ static void decode_write16(u32 a, u16 d, int r3)
   } 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
@@ -1116,16 +1116,6 @@ static void PicoWriteS68k8(u32 a,u8 d)
 #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
@@ -1205,6 +1195,7 @@ static void PicoWriteS68k16(u32 a,u16 d)
 \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