fixed mp3 buffer overlapping of GP2X sound buffer
authornotaz <notasas@gmail.com>
Sat, 12 May 2007 15:06:44 +0000 (15:06 +0000)
committernotaz <notasas@gmail.com>
Sat, 12 May 2007 15:06:44 +0000 (15:06 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@129 be3aeb3a-fb24-0410-a615-afba39da0efa

platform/gp2x/940ctl.c
platform/gp2x/code940/940.c
platform/gp2x/code940/940init.s
platform/readme.txt

index 6c52cca..8b3c7fe 100644 (file)
@@ -29,7 +29,7 @@ static _940_data_t *shared_data = 0;
 _940_ctl_t *shared_ctl = 0;\r
 unsigned char *mp3_mem = 0;\r
 \r
 _940_ctl_t *shared_ctl = 0;\r
 unsigned char *mp3_mem = 0;\r
 \r
-#define MP3_SIZE_MAX (0x1000000 - 4*640*480)\r
+#define MP3_SIZE_MAX (0x400000 + 0x800000) // 12M\r
 \r
 int crashed_940 = 0;\r
 \r
 \r
 int crashed_940 = 0;\r
 \r
@@ -360,7 +360,7 @@ void sharedmem_init(void)
        shared_data = (_940_data_t *) (shared_mem+0x100000);\r
        /* this area must not get buffered on either side */\r
        shared_ctl =  (_940_ctl_t *)  (shared_mem+0x200000);\r
        shared_data = (_940_data_t *) (shared_mem+0x100000);\r
        /* this area must not get buffered on either side */\r
        shared_ctl =  (_940_ctl_t *)  (shared_mem+0x200000);\r
-       mp3_mem = (unsigned char *) mmap(0, MP3_SIZE_MAX, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0x3000000);\r
+       mp3_mem = (unsigned char *) mmap(0, MP3_SIZE_MAX, PROT_READ|PROT_WRITE, MAP_SHARED, memdev, 0x2400000);\r
        if (mp3_mem == MAP_FAILED)\r
        {\r
                printf("mmap(mp3_mem) failed with %i\n", errno);\r
        if (mp3_mem == MAP_FAILED)\r
        {\r
                printf("mmap(mp3_mem) failed with %i\n", errno);\r
@@ -599,7 +599,6 @@ void mp3_start_play(FILE *f, int pos) // pos is 0-1023
 \r
        if (loaded_mp3 != f)\r
        {\r
 \r
        if (loaded_mp3 != f)\r
        {\r
-               // printf("loading mp3... "); fflush(stdout);\r
                if (PicoMessage != NULL)\r
                {\r
                        fseek(f, 0, SEEK_END);\r
                if (PicoMessage != NULL)\r
                {\r
                        fseek(f, 0, SEEK_END);\r
@@ -608,8 +607,7 @@ void mp3_start_play(FILE *f, int pos) // pos is 0-1023
                }\r
                fseek(f, 0, SEEK_SET);\r
                fread(mp3_mem, 1, MP3_SIZE_MAX, f);\r
                }\r
                fseek(f, 0, SEEK_SET);\r
                fread(mp3_mem, 1, MP3_SIZE_MAX, f);\r
-               // if (feof(f)) printf("done.\n");\r
-               // else printf("done. mp3 too large, not all data loaded.\n");\r
+               if (!feof(f)) printf("Warning: mp3 was too large, not all data loaded.\n");\r
                shared_ctl->mp3_len = ftell(f);\r
                loaded_mp3 = f;\r
 \r
                shared_ctl->mp3_len = ftell(f);\r
                loaded_mp3 = f;\r
 \r
index 4c7082a..97a3b5c 100644 (file)
@@ -5,7 +5,7 @@
 \r
 static _940_data_t *shared_data = (_940_data_t *)   0x00100000;\r
 static _940_ctl_t  *shared_ctl  = (_940_ctl_t *)    0x00200000;\r
 \r
 static _940_data_t *shared_data = (_940_data_t *)   0x00100000;\r
 static _940_ctl_t  *shared_ctl  = (_940_ctl_t *)    0x00200000;\r
-static unsigned char *mp3_data  = (unsigned char *) 0x01000000;\r
+static unsigned char *mp3_data  = (unsigned char *) 0x00400000;\r
 YM2612 *ym2612_940;\r
 \r
 // from init.s\r
 YM2612 *ym2612_940;\r
 \r
 // from init.s\r
index 1a12399..201ee86 100644 (file)
@@ -87,19 +87,25 @@ code940:
     mcr p15, 0, r0, c6, c3, 0\r
     mcr p15, 0, r0, c6, c3, 1\r
 \r
     mcr p15, 0, r0, c6, c3, 0\r
     mcr p15, 0, r0, c6, c3, 1\r
 \r
-    @ set up region 4: 16M 0x01000000-0x02000000 (mp3 area)\r
-    mov r0, #(0x17<<1)|1\r
-    orr r0, r0, #0x01000000\r
+    @ region 4: 4K 0x00000000-0x00001000 (boot code protection region)\r
+    mov r0, #(0x0b<<1)|1\r
     mcr p15, 0, r0, c6, c4, 0\r
     mcr p15, 0, r0, c6, c4, 1\r
 \r
     mcr p15, 0, r0, c6, c4, 0\r
     mcr p15, 0, r0, c6, c4, 1\r
 \r
-    @ region 5: 4K 0x00000000-0x00001000 (boot code protection region)\r
-    mov r0, #(0x0b<<1)|1\r
+    @ region 5: 4M 0x00400000-0x00800000 (mp3 area part1)\r
+    mov r0, #(0x15<<1)|1\r
+    orr r0, r0, #0x00400000\r
     mcr p15, 0, r0, c6, c5, 0\r
     mcr p15, 0, r0, c6, c5, 1\r
 \r
     mcr p15, 0, r0, c6, c5, 0\r
     mcr p15, 0, r0, c6, c5, 1\r
 \r
-    @ set regions 1, 4 and 5 to be cacheable (so the first 2M and mp3 area will be cacheable)\r
-    mov r0, #(1<<1)|(1<<4)|(1<<5)\r
+    @ region 6: 8M 0x00800000-0x01000000 (mp3 area part2)\r
+    mov r0, #(0x16<<1)|1\r
+    orr r0, r0, #0x00800000\r
+    mcr p15, 0, r0, c6, c6, 0\r
+    mcr p15, 0, r0, c6, c6, 1\r
+\r
+    @ set regions 1, 4, 5 and 6 to be cacheable (so the first 2M and mp3 area will be cacheable)\r
+    mov r0, #(1<<1)|(1<<4)|(1<<5)|(1<<6)\r
     mcr p15, 0, r0, c2, c0, 0\r
     mcr p15, 0, r0, c2, c0, 1\r
 \r
     mcr p15, 0, r0, c2, c0, 0\r
     mcr p15, 0, r0, c2, c0, 1\r
 \r
@@ -108,12 +114,13 @@ code940:
     mcr p15, 0, r0, c3, c0, 0\r
 \r
     @ set access protection\r
     mcr p15, 0, r0, c3, c0, 0\r
 \r
     @ set access protection\r
-    @ data: [no, full, full, full, full, no access] for regions [5 4 3 2 1 0]\r
-    mov r0, #(0<<10)|(3<<8)|(3<<6)|(3<<4)|(3<<2)|(0)\r
+    @ data: [full, full, no, full, full, full, no access] for regions [6 5 4 3 2 1 0]\r
+    mov r0,     #       (3<<12)|(3<<10)|(0<<8)\r
+    orr r0, r0, #(3<<6)|(3<< 4)|(3<< 2)|(0<<0)\r
     mcr p15, 0, r0, c5, c0, 0\r
     mcr p15, 0, r0, c5, c0, 0\r
-    @ instructions: [full, no access, no, no, full, no]\r
-    mov r0,         #(0<< 6)|(0<<4)|(3<<2)|(0)\r
-    orr r0, r0,     #(3<<10)|(0<<8)\r
+    @ instructions: [no, no, full, no, no, full, no]\r
+    mov r0,     #       (0<<12)|(0<<10)|(3<<8)\r
+    orr r0, r0, #(0<<6)|(0<< 4)|(3<< 2)|(0<<0)\r
     mcr p15, 0, r0, c5, c0, 1\r
 \r
     mrc p15, 0, r0, c1, c0, 0   @ fetch current control reg\r
     mcr p15, 0, r0, c5, c0, 1\r
 \r
     mrc p15, 0, r0, c1, c0, 0   @ fetch current control reg\r
index ffe2d94..881480c 100644 (file)
@@ -89,8 +89,8 @@ Other important stuff
   Badly encoded mp3s can cause various kind of problems, like noises, incorrect\r
   playback speeds, not repeating music or even prevent game from starting.\r
 * Use lower bitrate for better performance (96 or 128kbps CBRs recommended).\r
   Badly encoded mp3s can cause various kind of problems, like noises, incorrect\r
   playback speeds, not repeating music or even prevent game from starting.\r
 * Use lower bitrate for better performance (96 or 128kbps CBRs recommended).\r
-* Due to internal implementation mp3s must not be larger that ~15MB\r
-  (15548416 bytes). Larger mp3s will not be fully loaded.\r
+* Due to internal implementation mp3s must not be larger that 12MB\r
+  (12582912 bytes). Larger mp3s will not be fully loaded.\r
 * RAM timings option is good for dualcore operation (it is disabled by\r
   default because it doesn't work on every GP2X, so enable it in advanced\r
   options).\r
 * RAM timings option is good for dualcore operation (it is disabled by\r
   default because it doesn't work on every GP2X, so enable it in advanced\r
   options).\r
@@ -224,6 +224,13 @@ Symbian:
 \r
 Changelog\r
 ---------\r
 \r
 Changelog\r
 ---------\r
+1.321\r
+  * Sometimes stray sounds were played after loading a savestate. Fixed.\r
+  * Fixed a problem where >6MB mp3s were corrupted in memory (sound glitches in\r
+    Snatcher).\r
+  * PD no longer overwrites video player code in memory, video player now can be\r
+    used after PicoDrive.\r
+\r
 1.32\r
   + Added some new scaling options.\r
   + Added ability to reload CD images while game is running (needed for games\r
 1.32\r
   + Added some new scaling options.\r
   + Added ability to reload CD images while game is running (needed for games\r