clean up dac code a bit
[picodrive.git] / pico / memory.c
index 83fe181..fb5fa9b 100644 (file)
@@ -932,7 +932,7 @@ static int ym2612_write_local(u32 a, u32 d, int is_from_z80)
     int scanline = get_scanline(is_from_z80);\r
     //elprintf(EL_STATUS, "%03i -> %03i dac w %08x z80 %i", PsndDacLine, scanline, d, is_from_z80);\r
     ym2612.dacout = ((int)d - 0x80) << 6;\r
-    if (PsndOut && ym2612.dacen && scanline >= PsndDacLine)\r
+    if (ym2612.dacen)\r
       PsndDoDAC(scanline);\r
     return 0;\r
   }\r
@@ -1016,8 +1016,10 @@ static int ym2612_write_local(u32 a, u32 d, int is_from_z80)
         }\r
         case 0x2b: { /* DAC Sel  (YM2612) */\r
           int scanline = get_scanline(is_from_z80);\r
-          ym2612.dacen = d & 0x80;\r
-          if (d & 0x80) PsndDacLine = scanline;\r
+          if (ym2612.dacen != (d & 0x80)) {\r
+            ym2612.dacen = d & 0x80;\r
+            PsndDacLine = scanline;\r
+          }\r
 #ifdef __GP2X__\r
           if (PicoOpt & POPT_EXT_FM) YM2612Write_940(a, d, scanline);\r
 #endif\r
@@ -1165,7 +1167,9 @@ void PicoWrite16_32x(u32 a, u32 d) {}
 \r
 static unsigned char z80_md_vdp_read(unsigned short a)\r
 {\r
-  // TODO?\r
+  if ((a & 0x00e0) == 0x0000)\r
+    return PicoVideoRead8(a); // FIXME: depends on 68k cycles\r
+\r
   elprintf(EL_ANOMALY, "z80 invalid r8 [%06x] %02x", a, 0xff);\r
   return 0xff;\r
 }\r
@@ -1192,13 +1196,13 @@ static void z80_md_ym2612_write(unsigned int a, unsigned char data)
 \r
 static void z80_md_vdp_br_write(unsigned int a, unsigned char data)\r
 {\r
-  // TODO: allow full VDP access\r
   if ((a&0xfff9) == 0x7f11) // 7f11 7f13 7f15 7f17\r
   {\r
     if (PicoOpt & POPT_EN_PSG)\r
       SN76496Write(data);\r
     return;\r
   }\r
+  // at least VDP data writes hang my machine\r
 \r
   if ((a>>8) == 0x60)\r
   {\r