Skip to content
This repository was archived by the owner on Sep 24, 2025. It is now read-only.

Commit 2a8ada5

Browse files
committed
Update hwsiddrv
1 parent 9fa98d7 commit 2a8ada5

File tree

3 files changed

+47
-70
lines changed

3 files changed

+47
-70
lines changed

vice/src/arch/shared/hwsiddrv/us-unixwin-device.c

Lines changed: 43 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,8 @@
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>
@@ -61,11 +53,6 @@
6153

6254
#include "USBSIDInterface.h"
6355

64-
#ifdef US_NOOPT
65-
#pragma GCC push_options
66-
#pragma GCC optimize ("O3")
67-
#endif
68-
6956
static int rc = -1, sids_found = -1, no_sids = -1;
7057
static int r_audiomode = -1, audiomode = -1;
7158
static 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

167161
int 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

186180
int 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

234225
void 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

242233
unsigned 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

248239
void 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)
260251
void 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)
269260
void 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

316307
void 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

331321
void 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 */

vice/src/arch/shared/hwsiddrv/us-unixwin.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@
3333
#include "sid-snapshot.h"
3434
#include "types.h"
3535

36-
#pragma GCC push_options
37-
#pragma GCC optimize ("O3")
38-
3936
#define US_MAXSID 4
4037

4138
int us_device_open(void);
@@ -46,7 +43,7 @@ void us_device_reset(bool us_reset);
4643

4744
int us_device_read(uint16_t addr, int chipno);
4845

49-
int_fast32_t us_delay(void);
46+
CLOCK us_delay(void);
5047

5148
void us_device_store(uint16_t addr, uint8_t val, int chipno);
5249

@@ -68,6 +65,4 @@ void us_device_state_read(int chipno, struct sid_us_snapshot_state_s *sid_state)
6865

6966
void us_device_state_write(int chipno, struct sid_us_snapshot_state_s *sid_state);
7067

71-
#pragma GCC pop_options
72-
7368
#endif /* VICE_US_UNIXWIN_H */

vice/src/arch/shared/hwsiddrv/usbsid-unixwin-drv.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929

3030
#include "vice.h"
3131

32-
#if defined(UNIX_COMPILE) || defined(WINDOWS_COMPILE) || defined(WINDOWS_COMPILE)
33-
3432
#ifdef HAVE_USBSID
3533

3634
#include "usbsid.h"
@@ -41,13 +39,13 @@ static int use_us_device = 0;
4139

4240
int usbsid_drv_open(void)
4341
{
44-
45-
if (!us_device_open()) {
42+
int rc = 0;
43+
if (!(rc = us_device_open())) {
4644
use_us_device = 1;
4745
return 0;
4846
}
4947

50-
return -1;
48+
return rc;
5149
}
5250

5351
int usbsid_drv_close(void)
@@ -151,4 +149,3 @@ void usbsid_drv_state_write(int chipno, struct sid_us_snapshot_state_s *sid_stat
151149
}
152150

153151
#endif /* HAVE_USBSID */
154-
#endif /* UNIX_COMPILE || WINDOWS_COMPILE */

0 commit comments

Comments
 (0)