bugfixes, cd/Memory.s
[picodrive.git] / platform / gp2x / 940ctl.c
index 48ebfa0..b035591 100644 (file)
@@ -99,7 +99,13 @@ int YM2612Write_940(unsigned int a, unsigned int v)
 \r
        switch( a ) {\r
        case 0: /* address port 0 */\r
+               if (!addr_A1 && ST_address == v)\r
+                       return 0;       /* address already selected, don't send this command to 940 */\r
                ST_address = v;\r
+               /* don't send DAC or timer related address changes to 940 */\r
+               if (!addr_A1 && (v & 0xf0) == 0x20 &&\r
+                       (v == 0x24 || v == 0x25 || v == 0x26 || v == 0x2a))\r
+                               return 0;\r
                addr_A1 = 0;\r
                //ret=0;\r
                break;\r
@@ -162,6 +168,8 @@ int YM2612Write_940(unsigned int a, unsigned int v)
                break;\r
 \r
        case 2: /* address port 1 */\r
+               if (addr_A1 && ST_address == v)\r
+                       return 0;\r
                ST_address = v;\r
                addr_A1 = 1;\r
                //ret=0;\r
@@ -186,7 +194,7 @@ int YM2612Write_940(unsigned int a, unsigned int v)
                                shared_ctl->writebuff1[writebuff_ptr++] = (a<<8)|v;\r
                        }\r
                } else {\r
-                       printf("warning: writebuff_ptr > 2047\n");\r
+                       printf("warning: writebuff_ptr > 2047 ([%i] %02x)\n", a, v);\r
                }\r
        }\r
 \r