313 lines
11 KiB
Text
313 lines
11 KiB
Text
2004-06-11 Dag Lem <resid@nimrod.no>
|
||
|
||
* Version 0.16 released.
|
||
|
||
* envelope.h (EnvelopeGenerator::clock): Corrected off-by-one
|
||
error in check for ADSR delay bug in delta_t cycle interface.
|
||
|
||
* filter.cc (Filter::set_chip_model): Initialize filter cutoff
|
||
mappings before call to set_chip_model.
|
||
|
||
* sid.cc (SID::set_sampling_parameters): Build shifted FIR tables
|
||
with samples according to the sampling frequency.
|
||
(SID::clock_resample_interpolate): New function; factorized linear
|
||
interpolation out from filter convolutions, and made convolutions
|
||
vectorizable.
|
||
(SID::clock_resample_fast): New function; single convolution, same
|
||
accuracy as with interpolation by using more filter tables.
|
||
(SID::State, SID::read_state, SID::write_state): Read and write
|
||
rate_counter_period and exponential_counter_period. Read sustain
|
||
value.
|
||
|
||
2003-10-20 Dag Lem <resid@nimrod.no>
|
||
|
||
* Version 0.15 released.
|
||
|
||
* envelope.h (EnvelopeGenerator): Added public State enum.
|
||
(EnvelopeGenerator::clock): Rate counter is 15 bits, count
|
||
rate_period - 1 after wrapping from 0x8000 to 0 in ADSR delay bug.
|
||
|
||
* sid.cc, sid.h (SID::State): Added envelope_state.
|
||
(SID::State::write_state): Restore register 0x18.
|
||
(SID::set_sampling_parameters): Scale resampling filter to avoid
|
||
clipping.
|
||
(SID::clock_resample): Saturated arithmetics to avoid clipping.
|
||
|
||
2002-12-31 Dag Lem <resid@nimrod.no>
|
||
|
||
* Version 0.14 released.
|
||
|
||
* envelope.h (EnvelopeGenerator::clock): Corrected one cycle error
|
||
in ADSR delay bug. Only load the exponential counter period at the
|
||
envelope counter values 255, 93, 54, 26, 14, 6, 0.
|
||
|
||
* filter.cc (Filter::set_chip_model): Call set_w0() and set_Q() to
|
||
update filter settings.
|
||
(Filter::set_w0): Limit cutoff frequency for both 1 cycle and
|
||
delta_t cycle filter.
|
||
|
||
* filter.h (Filter::clock): Mix in external audio input.
|
||
|
||
* sid.cc, sid.h (SID::input): New function; accepts external audio
|
||
input sample.
|
||
|
||
* spline.h (PointPlotter::operator ()): Clamp negative values to
|
||
zero.
|
||
|
||
* voice.cc, voice.h: Changed misleading name wave_DC to wave_zero.
|
||
|
||
* wave.h (WaveformGenerator::clock): Corrected bug in check for
|
||
accumulator bit 19 in noise register shift.
|
||
|
||
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 (EnvelopeGenerator::clock): Reset rate_step on state
|
||
change.
|
||
|
||
* extfilt.cc (ExternalFilter::set_chip_model): New calculation of
|
||
maximum mixer DC level.
|
||
|
||
* filter.cc (Filter::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 (SID::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.
|