2929
3030#include "vice.h"
3131
32- #if defined(UNIX_COMPILE ) || defined(WINDOWS_COMPILE ) || defined(WINDOWS_COMPILE )
3332#if defined(HAVE_USBSID )
3433
35- /* #define USBSID_DEBUG */
36- #ifdef USBSID_DEBUG
37- #define DBG (...) printf(__VA_ARGS__)
38- #else
39- #define DBG (...) ((void)0)
40- #endif
41-
4234#include <fcntl.h>
4335#include <unistd.h>
4436#include <stdio.h>
6153
6254#include "USBSIDInterface.h"
6355
64- #ifdef US_NOOPT
65- #pragma GCC push_options
66- #pragma GCC optimize ("O3")
67- #endif
68-
6956static int rc = -1 , sids_found = -1 , no_sids = -1 ;
7057static int r_audiomode = -1 , audiomode = -1 ;
7158static int r_readmode = -1 , readmode = -1 ;
@@ -95,10 +82,10 @@ void us_device_reset(bool us_reset)
9582 alarm_set (usid_alarm , (usid_main_clk + raster_rate ));
9683 if (us_reset ) {
9784 reset_USBSID (usbsid );
98- log_message (usbsid_log , "Reset sent\r " );
85+ log_message (usbsid_log , "Reset sent" );
9986 }
10087 no_sids = -1 ;
101- log_message (usbsid_log , "Clocks reset\r " );
88+ log_message (usbsid_log , "Clocks reset" );
10289 }
10390 return ;
10491}
@@ -117,56 +104,63 @@ int us_device_open(void)
117104
118105 sids_found = 0 ;
119106
120- log_message (usbsid_log , "Detecting boards\r " );
107+ log_message (usbsid_log , "Detecting boards" );
121108
122109 if (usbsid == NULL ) {
123110 usbsid = create_USBSID ();
124111 if (usbsid ) {
112+ /* Gather settings from resources */
125113 resources_get_int ("SidUSBSIDReadMode" , & r_readmode );
126- // log_message(usbsid_log, "SidUSBSIDReadMode: %d, readmode: %d\r", r_readmode, readmode);
127- readmode = r_readmode ;
128114 resources_get_int ("SidUSBSIDAudioMode" , & r_audiomode );
129- // log_message(usbsid_log, "SidUSBSIDAudioMode: %d, readmode: %d\r", r_audiomode, audiomode);
130- audiomode = r_audiomode ;
131115 resources_get_int ("SidUSBSIDDiffSize" , & r_readmode );
132- // log_message(usbsid_log, "SidUSBSIDReadMode: %d, readmode: %d\r", r_readmode, readmode);
133- diffsize = r_diffsize ;
134- if (diffsize >= 16 ) setdiffsize_USBSID (usbsid , diffsize );
135116 resources_get_int ("SidUSBSIDBufferSize" , & r_diffsize );
136- // log_message(usbsid_log, "SidUSBSIDAudioMode: %d, readmode: %d\r", r_audiomode, audiomode);
117+ /* Apply settings to local variables */
118+ readmode = r_readmode ;
119+ audiomode = r_audiomode ;
120+ diffsize = r_diffsize ;
137121 buffsize = r_buffsize ;
138- if (buffsize >= 256 ) setbuffsize_USBSID (usbsid , buffsize );
122+ /* Update diff and buff size if needed */
123+ if (diffsize >= 16 ) {
124+ setdiffsize_USBSID (usbsid , diffsize );
125+ }
126+ if (buffsize >= 256 ) {
127+ setbuffsize_USBSID (usbsid , buffsize );
128+ }
139129 }
140130
141131 if (readmode == 1 ) {
142- log_message (usbsid_log , "Starting in read mode\r" );
143132 rc = init_USBSID (usbsid , false, false); /* threading and cycles disabled */
133+ if (rc >= 0 ) {
134+ log_message (usbsid_log , "Starting in read mode" );
135+ }
144136 } else { /* (readmode == 0 || readmode == -1) */
145137 /* NOTICE: Digitunes only play with threaded cycles */
146- log_message (usbsid_log , "Starting in normal mode\r" );
147138 rc = init_USBSID (usbsid , true, true); /* threading and cycles enabled */
139+ if (rc >= 0 ) {
140+ log_message (usbsid_log , "Starting in normal mode" );
141+ }
148142 }
149143 if (rc < 0 ) {
150- return -1 ;
144+ return rc ;
151145 }
152146 }
153147
154- log_message (usbsid_log , "Set audio mode to %s\r " , (audiomode == 1 ? "Stereo" : "Mono" ));
148+ log_message (usbsid_log , "Set audio mode to %s" , (audiomode == 1 ? "Stereo" : "Mono" ));
155149 setstereo_USBSID (usbsid , (audiomode == 1 ? audiomode : 0 ));
156150
157151 usid_alarm = alarm_new (maincpu_alarm_context , "usbsid" , usbsid_alarm_handler , NULL );
158152 sids_found = getnumsids_USBSID (usbsid );
159153 no_sids = 0 ;
160- log_message (usbsid_log , "Alarm set, reset sids\r " );
154+ log_message (usbsid_log , "Alarm set, reset sids" );
161155 us_device_reset (false); /* No reset on init! */
162- log_message (usbsid_log , "Opened\r " );
156+ log_message (usbsid_log , "Opened" );
163157
164158 return rc ;
165159}
166160
167161int us_device_close (void )
168162{
169- log_message (usbsid_log , "Start device closing\r " );
163+ log_message (usbsid_log , "Start device closing" );
170164 if (usbsid ) {
171165 mute_USBSID (usbsid );
172166 close_USBSID (usbsid );
@@ -179,25 +173,23 @@ int us_device_close(void)
179173 no_sids = -1 ;
180174 rc = -1 ;
181175 usbsid = NULL ;
182- log_message (usbsid_log , "Closed\r " );
176+ log_message (usbsid_log , "Closed" );
183177 return 0 ;
184178}
185179
186180int us_device_read (uint16_t addr , int chipno )
187181{ /* NOTICE: Disabled, unneeded */
188182 if (chipno < US_MAXSID ) {
183+ addr = ((addr & 0x1F ) + (chipno * 0x20 ));
189184 if (readmode == 1 ) {
190- uint8_t n_addr = ((addr & 0x1F ) + (chipno * 0x20 ));
191- sidbuf [addr ] = read_USBSID (usbsid , n_addr );
192- return sidbuf [addr ];
193- } else {
194- return 0x0 ;
185+ sidbuf [addr ] = read_USBSID (usbsid , addr );
195186 }
187+ return sidbuf [addr ];
196188 }
197189 return 0x0 ;
198190}
199191
200- int_fast32_t us_delay (void )
192+ CLOCK us_delay (void )
201193{ /* ISSUE: This should return an unsigned 64 bit integer but that makes vice stall indefinately on negative integers */
202194 if (maincpu_clk < usid_main_clk ) { /* Sync reset */
203195 usid_main_clk = maincpu_clk ;
@@ -206,9 +198,8 @@ int_fast32_t us_delay(void)
206198 /* Without substracting 1 cycle this
207199 * can cause a clicking noise in cycle exact tunes
208200 * create audible skips in digitunes like Sky Buster */
209- int_fast32_t cycles = maincpu_clk - usid_main_clk - 1 ;
210- while (cycles > 0xffff )
211- {
201+ CLOCK cycles = maincpu_clk - usid_main_clk - 1 ;
202+ while (cycles > 0xffff ) {
212203 cycles -= 0xffff ;
213204 }
214205 usid_main_clk = maincpu_clk ;
@@ -220,8 +211,8 @@ void us_device_store(uint16_t addr, uint8_t val, int chipno) /* max chipno = 1 *
220211 if (chipno < US_MAXSID ) { /* remove 0x20 address limitation */
221212 addr = ((addr & 0x1F ) + (chipno * 0x20 ));
222213 if (readmode == 0 ) {
223- uint_fast32_t cycles = us_delay ();
224- writeringcycled_USBSID (usbsid , addr , val , cycles );
214+ CLOCK cycles = us_delay ();
215+ writeringcycled_USBSID (usbsid , addr , val , ( uint16_t ) cycles );
225216 } else if (readmode == 1 ) {
226217 write_USBSID (usbsid , addr , val );
227218 }
@@ -233,23 +224,23 @@ void us_device_store(uint16_t addr, uint8_t val, int chipno) /* max chipno = 1 *
233224
234225void us_set_machine_parameter (long cycles_per_sec )
235226{
236- setclockrate_USBSID (usbsid , cycles_per_sec , true); /* TESTING */
227+ setclockrate_USBSID (usbsid , cycles_per_sec , true);
237228 raster_rate = getrasterrate_USBSID (usbsid );
238- log_message (usbsid_log , "Clockspeed set to: %ld and rasterrate set to: %ld\r " , cycles_per_sec , raster_rate );
229+ log_message (usbsid_log , "Clockspeed set to: %ld and rasterrate set to: %ld" , cycles_per_sec , raster_rate );
239230 return ;
240231}
241232
242233unsigned int us_device_available (void )
243234{
244- log_message (usbsid_log , "%d SIDs available\r " , sids_found );
235+ log_message (usbsid_log , "%d SIDs available" , sids_found );
245236 return sids_found ;
246237}
247238
248239void us_set_readmode (int val )
249240{
250241 resources_get_int ("SidUSBSIDReadMode" , & r_readmode );
251242 if (readmode != val ) {
252- log_message (usbsid_log , "Set read mode from %d to %d (resource: %d)\r " , readmode , val , r_readmode );
243+ log_message (usbsid_log , "Set read mode from %d to %d (resource: %d)" , readmode , val , r_readmode );
253244 readmode = val ;
254245 if (val == 0 ) enablethread_USBSID (usbsid );
255246 if (val == 1 ) disablethread_USBSID (usbsid );
@@ -260,7 +251,7 @@ void us_set_readmode(int val)
260251void us_set_audiomode (int val )
261252{ /* Gets set by x64sc from SID settings and by VSID at SID file change */
262253 resources_get_int ("SidUSBSIDAudioMode" , & r_audiomode );
263- log_message (usbsid_log , "Audio mode is '%s' (resource:%d val:%d)\r " , (r_audiomode == 1 ? "Stereo" : "Mono" ), r_audiomode , val );
254+ log_message (usbsid_log , "Audio mode is '%s' (resource:%d val:%d)" , (r_audiomode == 1 ? "Stereo" : "Mono" ), r_audiomode , val );
264255 audiomode = r_audiomode ;
265256
266257 setstereo_USBSID (usbsid , audiomode );
@@ -269,7 +260,7 @@ void us_set_audiomode(int val)
269260void us_restart_ringbuffer (void )
270261{ /* Restarts the ringbuffer with a new value */
271262 if (buffsize != d_buffsize ) {
272- log_message (usbsid_log , "Restarting ringbuffer with buffer size:%d & diff size:%d\r " , buffsize , diffsize );
263+ log_message (usbsid_log , "Restarting ringbuffer with buffer size:%d & diff size:%d" , buffsize , diffsize );
273264 restartringbuffer_USBSID (usbsid );
274265 }
275266}
@@ -279,7 +270,7 @@ void us_set_buffsize(int val)
279270 resources_get_int ("SidUSBSIDBufferSize" , & r_buffsize );
280271 buffsize = r_buffsize ;
281272 if (r_buffsize != d_buffsize ) {
282- log_message (usbsid_log , "Setting ringbuffer size to: %d (val:%d default:%d)\r " , buffsize , val , d_buffsize );
273+ log_message (usbsid_log , "Setting ringbuffer size to: %d (val:%d default:%d)" , buffsize , val , d_buffsize );
283274 setbuffsize_USBSID (usbsid , buffsize );
284275 us_restart_ringbuffer ();
285276 }
@@ -290,7 +281,7 @@ void us_set_diffsize(int val)
290281 resources_get_int ("SidUSBSIDDiffSize" , & r_diffsize );
291282 diffsize = r_diffsize ;
292283 if (r_diffsize != d_diffsize ) {
293- log_message (usbsid_log , "Setting ringbuffer diff size to: %d (val:%d default:%d)\r " , diffsize , val , d_diffsize );
284+ log_message (usbsid_log , "Setting ringbuffer diff size to: %d (val:%d default:%d)" , diffsize , val , d_diffsize );
294285 setdiffsize_USBSID (usbsid , diffsize );
295286 }
296287
@@ -315,7 +306,6 @@ static void usbsid_alarm_handler(CLOCK offset, void *data)
315306
316307void us_device_state_read (int chipno , struct sid_us_snapshot_state_s * sid_state )
317308{
318- log_message (usbsid_log , "%s\r" , __func__ );
319309 sid_state -> usid_main_clk = (uint32_t )usid_main_clk ;
320310 sid_state -> usid_alarm_clk = (uint32_t )usid_alarm_clk ;
321311 sid_state -> lastaccess_clk = 0 ;
@@ -330,13 +320,8 @@ void us_device_state_read(int chipno, struct sid_us_snapshot_state_s *sid_state)
330320
331321void us_device_state_write (int chipno , struct sid_us_snapshot_state_s * sid_state )
332322{
333- log_message (usbsid_log , "%s\r" , __func__ );
334323 usid_main_clk = (CLOCK )sid_state -> usid_main_clk ;
335324 usid_alarm_clk = (CLOCK )sid_state -> usid_alarm_clk ;
336325}
337326
338- #ifdef US_NOOPT
339- #pragma GCC pop_options
340- #endif
341327#endif /* HAVE_USBSID */
342- #endif /* UNIX_COMPILE || WINDOWS_COMPILE */
0 commit comments