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