C64: finish it all

all modules play correctly, bar:
- motherfunksignal (almost)
- filters are a bit weird
This commit is contained in:
tildearrow 2021-12-07 01:23:57 -05:00
parent c26bb511d7
commit 3ee761fc87
13 changed files with 246 additions and 36 deletions

View file

@ -7,10 +7,11 @@
class DivPlatformC64: public DivDispatch {
struct Channel {
int freq, baseFreq, pitch, prevFreq, testWhen;
unsigned char ins, note, sweep, wave;
int freq, baseFreq, pitch, prevFreq, testWhen, note;
unsigned char ins, sweep, wave, attack, decay, sustain, release;
short duty;
bool active, insChanged, freqChanged, sweepChanged, keyOn, keyOff, inPorta;
bool active, insChanged, freqChanged, sweepChanged, keyOn, keyOff, inPorta, filter;
bool resetMask, resetFilter, resetDuty, ring, sync;
signed char vol, outVol;
DivMacroInt std;
Channel():
@ -19,10 +20,14 @@ class DivPlatformC64: public DivDispatch {
pitch(0),
prevFreq(65535),
testWhen(0),
ins(-1),
note(0),
ins(-1),
sweep(0),
wave(0),
attack(0),
decay(0),
sustain(0),
release(0),
duty(0),
active(false),
insChanged(true),
@ -31,13 +36,22 @@ class DivPlatformC64: public DivDispatch {
keyOn(false),
keyOff(false),
inPorta(false),
filter(false),
resetMask(false),
resetFilter(false),
resetDuty(false),
ring(false),
sync(false),
vol(15) {}
};
Channel chan[3];
unsigned char filtControl, filtRes, vol;
int filtCut, resetTime;
SID sid;
void updateWave();
void updateFilter();
public:
void acquire(short* bufL, short* bufR, size_t start, size_t len);
int dispatch(DivCommand c);