menu changes
[libpicofe.git] / gp2x / 940ctl.c
index 48ebfa0..bcbb09b 100644 (file)
@@ -20,6 +20,7 @@
 extern volatile unsigned short *gp2x_memregs; /* from minimal library rlyeh */\r
 extern volatile unsigned long  *gp2x_memregl;\r
 \r
+extern int reset_timing;\r
 static unsigned char *shared_mem = 0;\r
 static _940_data_t *shared_data = 0;\r
 _940_ctl_t *shared_ctl = 0;\r
@@ -99,7 +100,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 +169,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 +195,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
@@ -581,6 +590,7 @@ void mp3_start_play(FILE *f, int pos) // pos is 0-1023
                        if (CHECK_BUSY(JOB940_MP3DECODE)) wait_busy_940(JOB940_MP3DECODE);\r
                        add_job_940(JOB940_INVALIDATE_DCACHE);\r
                }\r
+               reset_timing = 1;\r
        }\r
 \r
        // seek..\r