audio improvement wip
[libpicofe.git] / gp2x / 940ctl.c
similarity index 93%
rename from gp2x/940ctl_ym2612.c
rename to gp2x/940ctl.c
index bd88c71..5c53761 100644 (file)
@@ -333,6 +333,16 @@ void sharedmem_init(void)
 }\r
 \r
 \r
+void sharedmem_deinit(void)\r
+{\r
+       munmap(shared_mem, 0x210000);\r
+       munmap(mp3_mem, MP3_SIZE_MAX);\r
+       shared_mem = mp3_mem = NULL;\r
+       shared_data = NULL;\r
+       shared_ctl = NULL;\r
+}\r
+\r
+\r
 extern char **g_argv;\r
 \r
 /* none of the functions in this file should be called before this one */\r
@@ -433,19 +443,17 @@ void YM2612ResetChip_940(void)
 int YM2612UpdateOne_940(int *buffer, int length, int stereo, int is_buf_empty)\r
 {\r
        int *ym_buf = shared_data->ym_buffer;\r
+       int ym_active_chs;\r
 \r
        //printf("YM2612UpdateOne_940()\n");\r
 \r
        if (CHECK_BUSY(JOB940_YM2612UPDATEONE)) wait_busy_940(JOB940_YM2612UPDATEONE);\r
 \r
-       // mix in ym buffer\r
-       if (is_buf_empty) memcpy32(buffer, ym_buf, length<<stereo);\r
-       // else TODO\r
+       ym_active_chs = shared_ctl->ym_active_chs;\r
 \r
-//     for (len = length << stereo; len > 0; len--)\r
-//     {\r
-//             *dest_buf++ += *ym_buf++;\r
-//     }\r
+       // mix in ym buffer. is_buf_empty means nobody mixed there anything yet and it may contain trash\r
+       if (is_buf_empty && ym_active_chs) memcpy32(buffer, ym_buf, length<<stereo);\r
+       else memset32(buffer, 0, length<<stereo);\r
 \r
        if (shared_ctl->writebuffsel == 1) {\r
                shared_ctl->writebuff0[writebuff_ptr] = 0xffff;\r
@@ -467,7 +475,7 @@ int YM2612UpdateOne_940(int *buffer, int length, int stereo, int is_buf_empty)
 \r
        add_job_940(JOB940_YM2612UPDATEONE);\r
 \r
-       return 1;\r
+       return ym_active_chs;\r
 }\r
 \r
 \r