6666#pragma GCC optimize ("O3")
6767#endif
6868
69- static int rc = -1 , sids_found = -1 , no_sids = -1 , soc_audio = -1 , r_readmode = -1 , readmode = -1 ;
69+ static int rc = -1 , sids_found = -1 , no_sids = -1 ;
70+ static int r_audiomode = -1 , audiomode = -1 ;
71+ static int r_readmode = -1 , readmode = -1 ;
7072static uint8_t sidbuf [0x20 * US_MAXSID ];
7173
7274static CLOCK usid_main_clk ;
@@ -118,23 +120,29 @@ int us_device_open(void)
118120 usbsid = create_USBSID ();
119121 if (usbsid ) {
120122 resources_get_int ("SidUSBSIDReadMode" , & r_readmode );
121- log_message (usbsid_log , "SidUSBSIDReadMode: %d, readmode: %d\r" , r_readmode , readmode );
123+ // log_message(usbsid_log, "SidUSBSIDReadMode: %d, readmode: %d\r", r_readmode, readmode);
122124 readmode = r_readmode ;
125+ resources_get_int ("SidUSBSIDAudioMode" , & r_audiomode );
126+ // log_message(usbsid_log, "SidUSBSIDAudioMode: %d, readmode: %d\r", r_audiomode, audiomode);
127+ audiomode = r_audiomode ;
123128 }
124- /* NOTICE: Digitunes only play with threaded cycles */
125- if (readmode == 0 ) {
126- log_message (usbsid_log , "Starting in normal mode\r" );
127- rc = init_USBSID (usbsid , true, true); /* threading and cycles enabled */
128- } else if (readmode == 1 ) {
129+
130+ if (readmode == 1 ) {
129131 log_message (usbsid_log , "Starting in read mode\r" );
130132 rc = init_USBSID (usbsid , false, false); /* threading and cycles disabled */
133+ } else { /* (readmode == 0 || readmode == -1) */
134+ /* NOTICE: Digitunes only play with threaded cycles */
135+ log_message (usbsid_log , "Starting in normal mode\r" );
136+ rc = init_USBSID (usbsid , true, true); /* threading and cycles enabled */
131137 }
132-
133138 if (rc < 0 ) {
134139 return -1 ;
135140 }
136141 }
137142
143+ log_message (usbsid_log , "Set audio mode to %s\r" , (audiomode == 1 ? "Stereo" : "Mono" ));
144+ setstereo_USBSID (usbsid , (audiomode == 1 ? audiomode : 0 ));
145+
138146 usid_alarm = alarm_new (maincpu_alarm_context , "usbsid" , usbsid_alarm_handler , NULL );
139147 sids_found = getnumsids_USBSID (usbsid );
140148 no_sids = 0 ;
@@ -224,30 +232,6 @@ unsigned int us_device_available(void)
224232 return sids_found ;
225233}
226234
227- void us_set_audio (int val )
228- { /* Gets set by x64sc from SID settings and by VSID at SID file change */
229- resources_get_int ("SoundOutput" , & soc_audio );
230- log_message (usbsid_log , "Global audio type is '%s'\r" , (soc_audio == 2 ? "Stereo" : soc_audio == 1 ? "Mono" : "System" ));
231-
232-
233- int stereo = 0 ;
234- no_sids = val + 1 ; /* Number of SIDs requested +1 (val = 0 if 1 single SID is requested) */
235-
236- log_message (usbsid_log , "Set requested audio type for no. SIDs %d (No. SIDs available: %d)\r" , no_sids , sids_found );
237-
238- stereo
239- /* Number of requested SIDs equals no. available SIDs */
240- = (no_sids == sids_found && soc_audio != 1 )
241- ? (no_sids == 2 || no_sids == 4 ) /* 2 or 4 SIDs requested */
242- ? 1 /* then Stereo */
243- : 0 /* else Mono */
244- /* else number of requested SIDs does not equal no. available SIDs */
245- : 0 ; /* fallback to Mono */
246-
247- log_message (usbsid_log , "Audio type set to '%s' for %d requested SIDs\r" , (stereo == 1 ? "Stereo" : "Mono" ), no_sids );
248- setstereo_USBSID (usbsid , stereo );
249- }
250-
251235void us_set_readmode (int val )
252236{
253237 resources_get_int ("SidUSBSIDReadMode" , & r_readmode );
@@ -260,6 +244,15 @@ void us_set_readmode(int val)
260244 return ;
261245}
262246
247+ void us_set_audiomode (int val )
248+ { /* Gets set by x64sc from SID settings and by VSID at SID file change */
249+ resources_get_int ("SidUSBSIDAudioMode" , & r_audiomode );
250+ log_message (usbsid_log , "Audio mode is '%s'\r" , (r_audiomode == 1 ? "Stereo" : "Mono" ));
251+ audiomode = r_audiomode ;
252+
253+ setstereo_USBSID (usbsid , audiomode );
254+ }
255+
263256static void usbsid_alarm_handler (CLOCK offset , void * data )
264257{
265258 CLOCK cycles = (usid_alarm_clk + offset ) - usid_main_clk ;
0 commit comments