some more risky timing changes
[picodrive.git] / pico / memory.c
index 0907696..5d1d25f 100644 (file)
@@ -539,7 +539,6 @@ static void PicoWrite8_z80(u32 a, u32 d)
   }\r
 \r
   if ((a & 0x4000) == 0x0000) { // z80 RAM\r
-    SekCyclesBurnRun(2); // FIXME hack\r
     Pico.zram[a & 0x1fff] = (u8)d;\r
     return;\r
   }\r
@@ -703,10 +702,21 @@ void PicoWrite16_io(u32 a, u32 d)
 \r
 // VDP area (0xc00000 - 0xdfffff)\r
 // TODO: verify if lower byte goes to PSG on word writes\r
-static u32 PicoRead8_vdp(u32 a)\r
+u32 PicoRead8_vdp(u32 a)\r
 {\r
-  if ((a & 0x00e0) == 0x0000)\r
-    return PicoVideoRead8(a);\r
+  if ((a & 0x00f0) == 0x0000) {\r
+    switch (a & 0x0d)\r
+    {\r
+      case 0x00: return PicoVideoRead8DataH();\r
+      case 0x01: return PicoVideoRead8DataL();\r
+      case 0x04: return PicoVideoRead8CtlH();\r
+      case 0x05: return PicoVideoRead8CtlL();\r
+      case 0x08:\r
+      case 0x0c: return PicoVideoRead8HV_H();\r
+      case 0x09:\r
+      case 0x0d: return PicoVideoRead8HV_L();\r
+    }\r
+  }\r
 \r
   elprintf(EL_UIO|EL_ANOMALY, "68k bad read [%06x] @%06x", a, SekPc);\r
   return 0;\r
@@ -1184,8 +1194,21 @@ void PicoWrite16_32x(u32 a, u32 d) {}
 \r
 static unsigned char z80_md_vdp_read(unsigned short a)\r
 {\r
-  if ((a & 0x00e0) == 0x0000)\r
-    return PicoVideoRead8(a); // FIXME: depends on 68k cycles\r
+  z80_subCLeft(2);\r
+\r
+  if ((a & 0x00f0) == 0x0000) {\r
+    switch (a & 0x0d)\r
+    {\r
+      case 0x00: return PicoVideoRead8DataH();\r
+      case 0x01: return PicoVideoRead8DataL();\r
+      case 0x04: return PicoVideoRead8CtlH();\r
+      case 0x05: return PicoVideoRead8CtlL();\r
+      case 0x08:\r
+      case 0x0c: return get_scanline(1); // FIXME: make it proper\r
+      case 0x09:\r
+      case 0x0d: return Pico.m.rotate++;\r
+    }\r
+  }\r
 \r
   elprintf(EL_ANOMALY, "z80 invalid r8 [%06x] %02x", a, 0xff);\r
   return 0xff;\r
@@ -1196,8 +1219,10 @@ static unsigned char z80_md_bank_read(unsigned short a)
   unsigned int addr68k;\r
   unsigned char ret;\r
 \r
-  addr68k = Pico.m.z80_bank68k<<15;\r
-  addr68k += a & 0x7fff;\r
+  z80_subCLeft(3);\r
+\r
+  addr68k = Pico.m.z80_bank68k << 15;\r
+  addr68k |= a & 0x7fff;\r
 \r
   ret = m68k_read8(addr68k);\r
 \r