code940 now plays mp3s
[libpicofe.git] / gp2x / 940ctl_ym2612.c
index d8a10b2..35bf4a7 100644 (file)
@@ -7,7 +7,7 @@
 #include <fcntl.h>\r
 #include <errno.h>\r
 \r
-#include "940shared.h"\r
+#include "code940/940shared.h"\r
 #include "gp2x.h"\r
 #include "emu.h"\r
 #include "menu.h"\r
@@ -235,11 +235,11 @@ static void wait_busy_940(void)
        printf("wait iterations: %i\n", i);\r
 #else\r
        for (i = 0; shared_ctl->busy && i < 0x10000; i++)\r
-               spend_cycles(4*1024);\r
+               spend_cycles(8*1024); // tested to be best for mp3 dec\r
        if (i < 0x10000) return;\r
 \r
        /* 940 crashed */\r
-       printf("940 crashed (cnt: %i, wc: %i, ve: ", shared_ctl->loopc, shared_ctl->waitc);\r
+       printf("940 crashed (cnt: %i, ve: ", shared_ctl->loopc);\r
        for (i = 0; i < 8; i++)\r
                printf("%i ", shared_ctl->vstarts[i]);\r
        printf(")\n");\r
@@ -250,9 +250,10 @@ static void wait_busy_940(void)
 }\r
 \r
 \r
-static void add_job_940(int job)\r
+static void add_job_940(int job0, int job1)\r
 {\r
-       shared_ctl->job = job;\r
+       shared_ctl->jobs[0] = job0;\r
+       shared_ctl->jobs[1] = job1;\r
        shared_ctl->busy = 1;\r
        gp2x_memregs[0x3B3E>>1] = 0xffff; // cause an IRQ for 940\r
 }\r
@@ -276,7 +277,7 @@ void YM2612PicoStateLoad_940(void)
 \r
        addr_A1 = old_A1;\r
 \r
-       add_job_940(JOB940_PICOSTATELOAD);\r
+       add_job_940(JOB940_PICOSTATELOAD, 0);\r
 }\r
 \r
 \r
@@ -299,10 +300,9 @@ extern char **g_argv;
 void YM2612Init_940(int baseclock, int rate)\r
 {\r
        printf("YM2612Init_940()\n");\r
-       //printf("sizeof(*shared_data): %i (%x)\n", sizeof(*shared_data), sizeof(*shared_data));\r
-       //printf("sizeof(*shared_ctl): %i (%x)\n", sizeof(*shared_ctl), sizeof(*shared_ctl));\r
+       printf("Mem usage: shared_data: %i, shared_ctl: %i\n", sizeof(*shared_data), sizeof(*shared_ctl));\r
 \r
-       Reset940(1);\r
+       Reset940(1, 2);\r
        Pause940(1);\r
 \r
        gp2x_memregs[0x3B46>>1] = 0xffff; // clear pending DUALCPU interrupts for 940\r
@@ -312,7 +312,7 @@ void YM2612Init_940(int baseclock, int rate)
 \r
        if (shared_mem == NULL)\r
        {\r
-               shared_mem = (unsigned char *) mmap(0, 0x210000, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0x3000000);\r
+               shared_mem = (unsigned char *) mmap(0, 0x210000, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0x2000000);\r
                if(shared_mem == MAP_FAILED)\r
                {\r
                        printf("mmap(shared_data) failed with %i\n", errno);\r
@@ -373,11 +373,12 @@ void YM2612Init_940(int baseclock, int rate)
        /* now cause 940 to init it's ym2612 stuff */\r
        shared_ctl->baseclock = baseclock;\r
        shared_ctl->rate = rate;\r
-       shared_ctl->job = JOB940_YM2612INIT;\r
+       shared_ctl->jobs[0] = JOB940_INITALL;\r
+       shared_ctl->jobs[1] = 0;\r
        shared_ctl->busy = 1;\r
 \r
        /* start the 940 */\r
-       Reset940(0);\r
+       Reset940(0, 2);\r
        Pause940(0);\r
 \r
        // YM2612ResetChip_940(); // will be done on JOB940_YM2612INIT\r
@@ -396,7 +397,7 @@ void YM2612ResetChip_940(void)
 \r
        internal_reset();\r
 \r
-       add_job_940(JOB940_YM2612RESETCHIP);\r
+       add_job_940(JOB940_YM2612RESETCHIP, 0);\r
 }\r
 \r
 \r
@@ -444,7 +445,7 @@ void YM2612UpdateOne_940(short *buffer, int length, int stereo)
        shared_ctl->writebuffsel ^= 1;\r
        shared_ctl->length = length;\r
        shared_ctl->stereo = stereo;\r
-       add_job_940(JOB940_YM2612UPDATEONE);\r
+       add_job_940(JOB940_YM2612UPDATEONE, 0);\r
        //spend_cycles(512);\r
        //printf("SRCPND: %08lx, INTMODE: %08lx, INTMASK: %08lx, INTPEND: %08lx\n",\r
        //      gp2x_memregl[0x4500>>2], gp2x_memregl[0x4504>>2], gp2x_memregl[0x4508>>2], gp2x_memregl[0x4510>>2]);\r