You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
10 KiB
272 lines
10 KiB
9 years ago
|
Changes in reSID version 0.16
|
||
|
-----------------------------
|
||
|
|
||
|
An off-by-one error in the emulation of the ADSR delay bug has been
|
||
|
fixed in the fast version of the envelope clocking.
|
||
|
|
||
|
An initialization bug in the Filter class which caused floating point
|
||
|
exceptions on some platforms has been fixed.
|
||
|
|
||
|
Missing fields have been added to SID::State for correct snapshots.
|
||
|
|
||
|
By building shifted FIR tables with samples according to the sampling
|
||
|
frequency, the resampling code dramatically reduces the computational
|
||
|
effort in the filter convolutions, without any loss of accuracy. The
|
||
|
filter convolutions are now also vectorizable on current hardware. The
|
||
|
implementation builds on ideas by Laurent Ganier.
|
||
|
|
||
|
The resampling code has been split into two functions, one using
|
||
|
interpolation and a small set of shifted filter tables, and one using
|
||
|
direct lookup and a large set of shifted filter tables. The accuracy
|
||
|
is the same, the difference is that the direct lookup runs has the
|
||
|
potential of running at almost twice the speed (depending on cache
|
||
|
size and memory bandwidth) using approximately 16MB more memory. It is
|
||
|
now possible to run high quality resampling in real time on quite
|
||
|
modest hardware, provided that a vectorizing compiler is used.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.15
|
||
|
-----------------------------
|
||
|
|
||
|
An error in the emulation of the ADSR delay bug has been fixed. When
|
||
|
emulation of the ADSR delay bug was introduced in reSID 0.2, the delay
|
||
|
was one cycle too long. One cycle was subtracted from the delay in
|
||
|
reSID 0.4, however unfortunately one rate counter period was added as
|
||
|
well, thus increasing the error. At the time there was no method to
|
||
|
fully synchronize the CPU with envelope 3, so the measurements relied
|
||
|
on averaging. Because of pipelining in the envelope logic the effects
|
||
|
of a write are delayed, and this caused the test code to miss the
|
||
|
target by exactly one rate counter period on a real SID. The current
|
||
|
test code does achieve full synchronization with envelope 3, so this
|
||
|
time the delay should be 100% correct. There are still side effects
|
||
|
caused by pipelining which are not implemented in reSID, however these
|
||
|
effects are not controllable without full synchronization with the
|
||
|
envelope, something which is hard to achieve with envelope 3, and
|
||
|
impossible with envelope 1 and 2.
|
||
|
|
||
|
The envelope state (ADSR) has been added to the SID state, and the
|
||
|
volume setting is now restored from the SID state.
|
||
|
|
||
|
Filter scaling and clipping has been added to avoid sample overflows
|
||
|
in the resampling filter.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.14
|
||
|
-----------------------------
|
||
|
|
||
|
The SID external audio input is now emulated. This can be used e.g. to
|
||
|
simulate the hack of connecting a resistor from EXT IN to GND to boost
|
||
|
the sample volume on the MOS8580. Calling sid.input(-32768) makes the
|
||
|
MOS8580 sound more or less like the MOS6581 with respect to samples.
|
||
|
The interface could also be used to mix in an external audio signal,
|
||
|
but note that to do this correctly you should really resample the
|
||
|
audio signal to 1MHz first.
|
||
|
|
||
|
The filter settings are now updated immediately when the chip model is
|
||
|
changed. Earlier the filter cutoff frequency would not change until
|
||
|
the FC registers were updated.
|
||
|
|
||
|
A one cycle error in the fast version of the envelope clocking has
|
||
|
been fixed. This bug was introduced in reSID 0.13 and could affect the
|
||
|
ADSR delay emulation.
|
||
|
|
||
|
The exponential counter period is now only loaded at the envelope
|
||
|
counter values 255, 93, 54, 26, 14, 6, 0. The period can be different
|
||
|
for the same envelope counter value, depending on whether the envelope
|
||
|
has been rising (attack -> release) or sinking (decay/release).
|
||
|
|
||
|
A bug in the fast version of the noise register shift routine has been
|
||
|
corrected. This bug caused too low noise frequency in some cases.
|
||
|
|
||
|
The filter cutoff frequency is limited to 16kHz to keep the filter stable.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.13
|
||
|
-----------------------------
|
||
|
|
||
|
The internal DC levels of the MOS6581 have been double checked and
|
||
|
corrected. The reason for the asymmetric scaling of the voice output
|
||
|
has been found; there is a DC offset from the waveform D/A converter
|
||
|
in addition to the DC offset from the envelope multiplying D/A
|
||
|
converter. No selected waveform (N=P=S=T=0) yields minimum wave output
|
||
|
level again.
|
||
|
|
||
|
A bug in the fast version of the envelope clocking has been corrected.
|
||
|
This bug could incorrectly invoke the ADSR delay emulation.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.12
|
||
|
-----------------------------
|
||
|
|
||
|
A bug causing incorrect sample spacing in the new SAMPLE_FAST sample
|
||
|
calculation has been corrected.
|
||
|
|
||
|
Audio clipping has been added to guard against sample overflows.
|
||
|
|
||
|
To support multi-channel sampling, sample interleaving has been added
|
||
|
to the clock() interface.
|
||
|
|
||
|
To support synchronization with an external timer, an interface for
|
||
|
sample rate adjustment has been added.
|
||
|
|
||
|
The internal DC levels have been corrected. No selected waveform
|
||
|
(N=P=S=T=0) yields maximum wave output level. Furthermore, each voice
|
||
|
in the MOS6581 independently contributes to the DC level in the mixer,
|
||
|
and the mixer itself has a small DC offset as well. The MOS8580 has no
|
||
|
DC offsets.
|
||
|
|
||
|
The spline interpolation routine has been generalized to accept
|
||
|
repeated points to introduce points of non-differentiability and
|
||
|
discontinuity.
|
||
|
|
||
|
A separate mapping from the FC registers to filter cutoff frequency
|
||
|
has been included for the MOS8580, and the mapping for the MOS6581 has
|
||
|
been refined.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.11
|
||
|
-----------------------------
|
||
|
|
||
|
A new clock() interface has been added. This function generates audio
|
||
|
samples into a buffer, greatly simplifying the task of writing driver
|
||
|
code for reSID. It also facilitates more advanced audio sample
|
||
|
generation, as described below.
|
||
|
|
||
|
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.
|
||
|
|
||
|
Clocking at output sample frequency is fast, and yields acceptable
|
||
|
sound quality, except for the SID combined waveforms, which have a
|
||
|
very high frequency content.
|
||
|
|
||
|
Clocking at cycle frequency with linear sample interpolation is
|
||
|
approximately five to ten times slower at 44.1kHz sampling frequency,
|
||
|
but the sound quality is improved because of the linear sample
|
||
|
interpolation, and because some sampling noise is removed by the SID
|
||
|
external filter, which attenuates signals above 16kHz.
|
||
|
|
||
|
Finally, clocking at cycle frequency with audio resampling has a work
|
||
|
rate which is independent of the sampling frequency; it is rather
|
||
|
inversely proportional to the percentage of the bandwidth allocated
|
||
|
to the filter transition band. This implies that e.g. with the
|
||
|
transition band starting at ~ 20kHz, it is faster to generate 48kHz
|
||
|
than 44.1kHz samples.
|
||
|
|
||
|
Audio resampling is the theoretically correct method for sample
|
||
|
generation, and delivers SID sound quality previously unheard of. This
|
||
|
should make connoisseurs nod in appreciation, and for some time to
|
||
|
come it could possibly also make people tear their hair over having to
|
||
|
buy state of the art hardware to handle the obscene workload in real
|
||
|
time. By trading off passband bandwidth for speed, real time
|
||
|
processing is possible on current hardware. A 60% passband bandwidth
|
||
|
is within the reach of reasonably fast machines, while maximum sound
|
||
|
quality at 90% passband bandwidth, requiring four times the processing
|
||
|
power, is not. Yet.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.10
|
||
|
-----------------------------
|
||
|
|
||
|
Libtool is now used to build the library.
|
||
|
|
||
|
To keep the filters stable it is necessary to clock them at above
|
||
|
sample rate. The chip clocking code has been modified to only
|
||
|
"overclock" the filters, not the whole chip. This yields a
|
||
|
considerable speedup without noticeably lowering sound quality. Note
|
||
|
that this is aimed at slow hardware, if possible the 1 cycle clock
|
||
|
interface should be used to eliminate sampling noise.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.9
|
||
|
----------------------------
|
||
|
|
||
|
The sum of the filter outputs is no longer weighted.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.8
|
||
|
----------------------------
|
||
|
|
||
|
voice3off has no effect if voice 3 is routed through the filter.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.7
|
||
|
----------------------------
|
||
|
|
||
|
The audio output filter in the C64, external to the SID chip, has been
|
||
|
modeled.
|
||
|
|
||
|
The mapping function between the FC register and filter cutoff frequency can
|
||
|
now be specified with spline interpolation points. This facilitates
|
||
|
interactive modification of the mapping function by graphical presentation of
|
||
|
the interpolation curve. The implementation of this novel spline design is
|
||
|
fast and general purpose, and should be well suited for use in other projects
|
||
|
as well.
|
||
|
|
||
|
Filtered output has been inverted compared to unfiltered output.
|
||
|
|
||
|
Aging of the bus value obtained when reading write only registers has been
|
||
|
partly implemented.
|
||
|
|
||
|
To facilitate offline storage the complete state of SID can be read and
|
||
|
written.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.6
|
||
|
----------------------------
|
||
|
|
||
|
A special case in synchronization has been implemented.
|
||
|
|
||
|
The Autoconf script is cleaned up to allow compilation in a separate directory.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.5
|
||
|
----------------------------
|
||
|
|
||
|
Emulation of MOS8580 combined waveforms.
|
||
|
|
||
|
Version string resid_version_string provided for e.g. Autoconf tests.
|
||
|
The string has C linkage.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.4
|
||
|
----------------------------
|
||
|
|
||
|
The implementation of the ADSR delay bug has been refined and should now be
|
||
|
cycle exact.
|
||
|
|
||
|
The patch for VICE has been removed since VICE 0.15 will include reSID support.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.3
|
||
|
----------------------------
|
||
|
|
||
|
The reSID library has changed name from libmos6581.a to libresid.a
|
||
|
|
||
|
The pulse+sawtooth combined waveform has been corrected.
|
||
|
|
||
|
Pulse+test bit samples are implemented.
|
||
|
|
||
|
The envelope rate periods have finally been exactly determined.
|
||
|
|
||
|
A new SID bug, the ADSR boundary bug, has been discovered and implemented.
|
||
|
This bug makes it possible to step from envelope level 0x00 to 0xff or from
|
||
|
0xff to 0x00 in one step.
|
||
|
|
||
|
One-cycle optimized overloads of the clock() functions have been implemented
|
||
|
to facilitate sampling at 1MHz.
|
||
|
|
||
|
The code has been further optimized for speed.
|
||
|
|
||
|
|
||
|
Changes in reSID version 0.2
|
||
|
----------------------------
|
||
|
|
||
|
The implementation of the Envelope Generator has been rewritten to handle
|
||
|
the infamous ADSR delay bug. All known envelope related bugs have been
|
||
|
corrected.
|
||
|
|
||
|
The maximum filter resonance is lowered to keep the filter stable.
|
||
|
|
||
|
The reSID API has been simplified. Reading write only registers is allowed.
|