23 #ifndef ENVELOPEGENERATOR_H
24 #define ENVELOPEGENERATOR_H
26 #include "siddefs-fp.h"
53 ATTACK, DECAY_SUSTAIN, RELEASE
70 int exponential_counter;
76 int exponential_counter_period;
98 bool envelope_pipeline;
104 unsigned char envelope_counter;
113 void set_exponential_counter();
126 static const int adsrtable[16];
148 short output()
const {
return dac[envelope_counter]; }
156 exponential_counter(0),
157 exponential_counter_period(1),
164 envelope_pipeline(false),
166 envelope_counter(0) {}
200 unsigned char readENV()
const {
return envelope_counter; }
205 #if RESID_INLINING || defined(ENVELOPEGENERATOR_CPP)
213 if (envelope_pipeline)
216 envelope_pipeline =
false;
218 set_exponential_counter();
236 const int feedback = ((lfsr << 14) ^ (lfsr << 13)) & 0x4000;
237 lfsr = (lfsr >> 1) | feedback;
247 if (state == ATTACK || ++exponential_counter == exponential_counter_period)
250 exponential_counter = 0;
268 if (envelope_counter == (
unsigned char) 0xff)
270 state = DECAY_SUSTAIN;
271 rate = adsrtable[decay];
284 if (envelope_counter == (
unsigned char)(sustain << 4 | sustain))
299 if (exponential_counter_period != 1)
302 envelope_pipeline =
true;
311 set_exponential_counter();
void clock()
Definition: EnvelopeGenerator.h:211
void reset()
Definition: EnvelopeGenerator.cpp:119
void setChipModel(ChipModel chipModel)
Definition: EnvelopeGenerator.cpp:97
void writeCONTROL_REG(unsigned char control)
Definition: EnvelopeGenerator.cpp:140
short output() const
Definition: EnvelopeGenerator.h:148
unsigned char readENV() const
Definition: EnvelopeGenerator.h:200
EnvelopeGenerator()
Definition: EnvelopeGenerator.h:153
Definition: EnvelopeGenerator.h:44
void writeSUSTAIN_RELEASE(unsigned char sustain_release)
Definition: EnvelopeGenerator.cpp:185
void writeATTACK_DECAY(unsigned char attack_decay)
Definition: EnvelopeGenerator.cpp:170