32#include "siddefs-fp.h"
33#include "ExternalFilter.h"
57 const char* getMessage()
const {
return message; }
75 Filter8580*
const filter8580;
78 std::unique_ptr<Resampler> resampler;
99 unsigned int nextVoiceSync;
101 unsigned int offset_6581;
117 uint8_t paddleX = 0xff;
118 uint8_t paddleY = 0xff;
144 void ageBusValue(
int n);
152 void voiceSync(
bool sync);
155 inline void clockWaveGen()
157 voice[0].wave()->
clock();
158 voice[1].wave()->
clock();
159 voice[2].wave()->
clock();
163 inline void clockEnvGen()
165 voice[0].envelope()->
clock();
166 voice[1].envelope()->
clock();
167 voice[2].envelope()->
clock();
171 inline int32_t clockFilt()
173 uint16_t filtOutput = filter->
clock(voice[0], voice[1], voice[2]);
174 int32_t exFiltInput =
static_cast<int32_t
>(filtOutput) + INT16_MIN;
175 return externalFilter.
clock(exFiltInput);
180 SID& operator=(
const SID&) =
delete;
220 void input(
int value);
228 uint8_t
peek(
int offset)
const;
250 uint8_t
read(
int offset);
258 void write(
int offset, uint8_t value);
285 double clockFrequency,
287 double samplingFrequency
297 int clock(
unsigned int cycles, int16_t* buf);
306 int clock(int16_t* buf,
int bufSize);
370 void setDacLeakage(
double level);
375 void setOffset6581(
double offset);
380 void setDCBRes(
double res);
385#if RESIDFP_INLINING || defined(SID_CPP)
389#include "resample/Resampler.h"
395void SID::ageBusValue(
int n)
397 if (likely(busValueTtl != 0))
401 if (unlikely(busValueTtl <= 0))
419 unsigned int delta_t = std::min(nextVoiceSync, cycles);
421 if (likely(delta_t > 0))
423 for (
unsigned int i = 0; i < delta_t; i++)
428 int32_t output = clockFilt();
429 if (unlikely(resampler->input(output)))
431 buf[s++] = resampler->getOutput(scaleFactor);
436 nextVoiceSync -= delta_t;
439 if (unlikely(nextVoiceSync == 0))
456 for (
int s = 0; s < bufSize;)
458 unsigned int delta_t = nextVoiceSync;
460 if (likely(delta_t > 0))
469 int32_t output = clockFilt();
470 if (unlikely(resampler->input(output)))
472 buf[s++] = resampler->getOutput(scaleFactor);
473 if (unlikely(s == bufSize))
485 if (likely(nextVoiceSync == 0))
void clock()
Definition EnvelopeGenerator.h:181
Definition ExternalFilter.h:87
int32_t clock(int32_t input)
Definition ExternalFilter.h:150
Definition Filter6581.h:321
uint16_t clock(Voice &voice1, Voice &voice2, Voice &voice3)
Definition Filter.h:216
void setChipModel(ChipModel model)
Definition SID.cpp:239
uint8_t peek(int offset) const
Definition SID.cpp:356
void input(int value)
Definition SID.cpp:350
int clock(unsigned int cycles, int16_t *buf)
Definition SID.h:410
void setSamplingParameters(double clockFrequency, SamplingMethod method, double samplingFrequency)
Definition SID.cpp:531
void setFilter6581Range(double adjustment)
Definition SID.cpp:181
void setPaddle(uint8_t x, uint8_t y)
Definition SID.cpp:622
ChipModel getChipModel() const
Definition SID.h:197
void clockDigital(unsigned int cycles)
Definition SID.cpp:557
uint8_t read(int offset)
Definition SID.cpp:377
void setCombinedWaveforms(CombinedWaveforms cws)
Definition SID.cpp:305
void setFilter6581Curve(double filterCurve)
Definition SID.cpp:175
void setFilter8580Curve(double filterCurve)
Definition SID.cpp:187
void enableOld6581caps(bool enable)
Definition SID.cpp:199
void enableFilter(bool enable)
Definition SID.cpp:193
void reset()
Definition SID.cpp:329
void write(int offset, uint8_t value)
Definition SID.cpp:412
void clockSilent(unsigned int cycles)
Definition SID.cpp:588
SamplingMethod
Definition residfp_defs.h:67
CombinedWaveforms
Definition residfp_defs.h:62
ChipModel
Definition residfp_defs.h:54