}\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
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
\r
add_job_940(JOB940_YM2612UPDATEONE);\r
\r
- return 1;\r
+ return ym_active_chs;\r
}\r
\r
\r