X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2F940ctl.c;h=bcbb09b8893cb08c5748d728225b40e11c5107bd;hb=17fa1e44f6759e1060af69b9d3a452a89554f87b;hp=5c53761ed1fba1f29e9de1d56fc4b222d3f8b3b4;hpb=4dfd9f4230a2677501756b6121024593f1b37d86;p=libpicofe.git diff --git a/gp2x/940ctl.c b/gp2x/940ctl.c index 5c53761..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); } } @@ -563,6 +572,12 @@ void mp3_start_play(FILE *f, int pos) // pos is 0-1023 if (loaded_mp3 != f) { // printf("loading mp3... "); fflush(stdout); + if (PicoMessage != NULL) + { + fseek(f, 0, SEEK_END); + if (ftell(f) > 2*1024*1024) + PicoMessage("Loading MP3..."); + } fseek(f, 0, SEEK_SET); fread(mp3_mem, 1, MP3_SIZE_MAX, f); // if (feof(f)) printf("done.\n"); @@ -575,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..