1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
2002-01-19 Dag Lem <resid@nimrod.no>
* Version 0.13 released.
* configure.in: Replaced AC_TRY_COMPILER with AC_TRY_COMPILE,
removed AC_PROG_RANLIB.
* envelope.h (clock): Reset rate_step on state change.
* extfilt.cc (set_chip_model): New calculation of maximum mixer DC
level.
* filter.cc (set_chip_model): Moved calculation of voice_DC to
voice.cc, corrected calculation of mixer_DC.
* filter.h (Filter::output): Mixer output is not inverted.
* sid.cc (set_chip_model): Call voice.set_chip_model instead of
voice.wave.set_chip_model.
* voice.cc (Voice::Voice): Call set_chip_model.
(Voice::set_chip_model): New function; model both waveform D/A
converter and envelope multiplying D/A converter DC offsets.
* voice.h (Voice::output): Add both waveform D/A converter and
envelope multiplying D/A converter DC offsets.
* wave.h (WaveformGenerator::output____): Reverted to output
minimum wave level when no waveform is selected. The maximum and
minimum wave output levels are interchanged in C= Hacking Issue #20.
2001-10-20 Dag Lem <resid@nimrod.no>
* Version 0.12 released.
* envelope.cc, envelope.h, filter.cc, filter.h, wave.cc, wave.h:
Removed bool usage. This avoids unnecessary conversion to 1/0.
* filter.cc (Filter::set_chip_model): New function; selects voice
and mixer DC offsets and mapping from the FC registers to filter
cutoff frequency. The voice and mixer DC offsets for the MOS6581 are
calculated from measurements made by Hársfalvi, Levente in
C= Hacking Issue #20.
(Filter::Filter): Call set_chip_model.
(Filter::f0_6581, Filter::f0_8580): Separate FC mapping tables.
(Filter::f0_points_6581, Filter::f0_points_8580): Separate FC mapping
points.
* extfilt.cc, extfilt.h (ExternalFilter::set_chip_model): New
function supporting separate DC correction for MOS6581 and MOS8580.
* sid.cc, sid.h (SID::adjust_sampling_frequency): New function for
on-the-fly adjustment of sampling frequency.
(SID::clock_fast): Corrected sample calculation.
(SID::set_chip_model): Set filter chip model.
(SID::output): Added audio clipping.
(SID::clock, SID::clock_fast, SID::clock_interpolate,
SID::clock_resample): Added sample interleaving.
* spline.h (interpolate): Generalized to accept repeated points to
introduce points of non-differentiability and discontinuity.
* wave.h (WaveformGenerator::output____): No selected waveform
yields maximum wave output level. This was found by Hársfalvi,
Levente in C= Hacking Issue #20.
(WaveformGenerator::clock): Optimized for speed (no division).
2001-03-10 Dag Lem <resid@nimrod.no>
* Version 0.11 released.
* configure.in: Disable building of shared library by default.
Control inlining with RESID_INLINING (0 or 1) and RESID_INLINE
(blank or "inline").
* envelope.h, extfilt.h, filter.h, voice.h, wave.h: inline keyword
in both function declarations and function definitions.
* samp2src.pl: Beautified Perl code.
* sid.h, sid.cc: Replaced voice variables with array. Removed
filter variables from SID::State.
(SID::clock): New audio sample generating interface. Three
clocking methods are available; clocking at output sample
frequency, clocking at cycle frequency with linear sample
interpolation, and clocking at cycle frequency with audio
resampling.
(SID::clock_fast, SID::clock_interpolate, SID::clock_resample):
New functions called by SID::clock.
(SID::set_sampling_parameters): New function to set up SID for
sample generation. The FIR table used in SID::clock_resample is
calculated here.
(SID::I0): 0th order modified Bessel function to calculate Kaiser
window.
* siddefs.h: Control inlining with RESID_INLINING (0 or 1) and
RESID_INLINE (blank or "inline"). Added enum sampling_method.
* voice.h, voice.cc (Voice::set_sync_source): Moved setting of
sync source from constructor.
* wave.h, wave.cc (WaveformGenerator::set_sync_source): Moved
setting of sync source from constructor.
2000-11-22 Dag Lem <resid@nimrod.no>
* Version 0.10 released.
* configure.in, Makefile.am: Use libtool to build library. The
hack to "disable" install is removed.
* extfilt.h, filter.h: Moved filter stability code from sid.cc.
* sid.cc (SID::clock): Moved filter stability code to
extfilt.h/filter.h. Don't clock the rest of the chip more
frequently than necessary.
* wave.cc: Typecast for pedantic (and probably incorrect)
compilers.
2000-05-18 Dag Lem <resid@nimrod.no>
* Version 0.9 released.
* filter.h (Filter::output): The sum of the filter outputs is no
longer weighted.
1999-06-24 Dag Lem <resid@nimrod.no>
* Version 0.8 released.
* filter.h, filter.cc, wave.h, wave.cc: Typecasts for pedantic
compilers.
* filter.h (Filter::clock): Voice 3 is only silenced by voice3off
if it is not routed through the filter.
* sid.cc (SID::State): Added constructor for proper initalization.
* spline.h: Inlined template functions to avoid problems at link
time with certain compilers.
1999-02-25 Dag Lem <resid@nimrod.no>
* Version 0.7 released.
* configure.in: Check whether compiler supports bool.
* extfilt.h, extfilt.cc: Implementation of C64 filter, external to
the SID chip.
* filter.h (Filter::clock): Optimized filter routing using a switch.
(Filter::output): Optimized filter mixing using a switch, avoiding
integer division. Corrected sign of filtered output, which is
inverted compared to unfiltered output.
* filter.cc (Filter::set_w0): Removed use of M_PI and math.h
functions. Use spline table to map fc to w0.
(Filter::fc_default): Return array of FC spline interpolation points.
(Filter::fc_plotter): Return FC spline plotter object.
* sid.h (SID::enable_external_filter): Enable/disable external
filter.
(SID::fc_default): Return array of FC spline interpolation points.
(SID::fc_plotter): Return FC spline plotter object.
(SID::State, SID::read_state, SID::write_state): Read and write
complete SID state.
* sid.cc (SID::clock): Age bus value. Clock external filter.
(SID::enable_external_filter): Enable/disable external filter.
* spline.h: Spline implementation. Used to specify mapping from
the FC register to filter cutoff frequency.
1998-11-14 Dag Lem <resid@nimrod.no>
* Version 0.6 released.
* configure.in: Allow compilation in a separate directory.
* wave.h (WaveformGenerator::synchronize): Handle special case when a
sync source is synced itself on the same cycle as its MSB is set
high.
* sid.cc (SID::clock): Only clock on MSB on/off for hard sync.
1998-09-06 Dag Lem <resid@nimrod.no>
* Version 0.5 released.
* version.cc (resid_version_string): Version string with C linkage.
* wave.cc (WaveformGenerator::set_chip_model): Emulation of MOS8580
combined waveforms.
1998-08-28 Dag Lem <resid@nimrod.no>
* Version 0.4 released.
* envelope.h (EnvelopeGenerator::clock): Count up to rate_period twice
during ADSR delay bug, and add one extra rate counter step.
* filter.cc (Filter::bsd_copysign): Renamed copysign function for
compilation on platforms where copysign is implemented as a macro.
1998-08-23 Dag Lem <resid@nimrod.no>
* Version 0.3 released.
* envelope.h (EnvelopeGenerator::clock): Handle ADSR boundary bug.
* envelope.cc (EnvelopeGenerator::rate_counter_period,
EnvelopeGenerator::exponential_counter_period): Corrected counter
periods.
* filter.h (Filter::clock): Optimized for speed (division by shifting).
* sid.h (SID::clock): New one-cycle optimized overload of the clock()
function.
* wave.h (WaveformGenerator::output_P_T): Combined waveform
pulse+triangle indexing corrected.
(WaveformGenerator::output_P__): Check for test bit to handle
pulse+test bit samples.
(WaveformGenerator::output): Optimized for speed (inlining).
1998-07-28 Dag Lem <resid@nimrod.no>
* Version 0.2 released.
* envelope.h (EnvelopeGenerator::clock): Start decay cycle immediately
at envelope counter 0xff. New sustain value is zero if the sustain
level is raised above the current envelope counter value.
(EnvelopeGenerator::step_envelope): Handle ADSR delay bug.
* envelope.cc (EnvelopeGenerator::rate_counter_period,
EnvelopeGenerator::exponential_counter_period): Corrected counter
periods.
(EnvelopeGenerator::writeCONTROL_REG): Do not modify rate counter.
* filter.cc (Filter::set_Q): Constrain Q to keep filter stable.
* sid.h (SID::read, SID::write, SID::bypass_filter): Simplified API
routing register access through the SID class.
* sid.cc (SID::output): Corrected variable-bit audio output return.
(SID::read, SID::write): Allow read of write only registers.
1998-06-09 Dag Lem <resid@nimrod.no>
* Version 0.1 released.
|