X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2F940ctl.c;h=bcbb09b8893cb08c5748d728225b40e11c5107bd;hb=17fa1e44f6759e1060af69b9d3a452a89554f87b;hp=48ebfa033df494b25a757b352f7a4a0185e4c9db;hpb=dfa4c846f44d3717288758b38d267d157858aaf7;p=libpicofe.git diff --git a/gp2x/940ctl.c b/gp2x/940ctl.c index 48ebfa0..bcbb09b 100644 --- a/gp2x/940ctl.c +++ b/gp2x/940ctl.c @@ -20,6 +20,7 @@ extern volatile unsigned short *gp2x_memregs; /* from minimal library rlyeh */ extern volatile unsigned long *gp2x_memregl; +extern int reset_timing; static unsigned char *shared_mem = 0; static _940_data_t *shared_data = 0; _940_ctl_t *shared_ctl = 0; @@ -99,7 +100,13 @@ int YM2612Write_940(unsigned int a, unsigned int v) switch( a ) { case 0: /* address port 0 */ + if (!addr_A1 && ST_address == v) + return 0; /* address already selected, don't send this command to 940 */ ST_address = v; + /* don't send DAC or timer related address changes to 940 */ + if (!addr_A1 && (v & 0xf0) == 0x20 && + (v == 0x24 || v == 0x25 || v == 0x26 || v == 0x2a)) + return 0; addr_A1 = 0; //ret=0; break; @@ -162,6 +169,8 @@ int YM2612Write_940(unsigned int a, unsigned int v) break; case 2: /* address port 1 */ + if (addr_A1 && ST_address == v) + return 0; ST_address = v; addr_A1 = 1; //ret=0; @@ -186,7 +195,7 @@ int YM2612Write_940(unsigned int a, unsigned int v) shared_ctl->writebuff1[writebuff_ptr++] = (a<<8)|v; } } else { - printf("warning: writebuff_ptr > 2047\n"); + printf("warning: writebuff_ptr > 2047 ([%i] %02x)\n", a, v); } } @@ -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); add_job_940(JOB940_INVALIDATE_DCACHE); } + reset_timing = 1; } // seek..