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
}\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
\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
\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