SNES: prepare for anti-click
This commit is contained in:
parent
160639cdec
commit
42f7755479
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
#define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} }
|
#define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} }
|
||||||
#define chWrite(c,a,v) {rWrite((a)+(c)*16,v)}
|
#define chWrite(c,a,v) {rWrite((a)+(c)*16,v)}
|
||||||
|
#define rWriteDelay(a,v,d) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v,d)); if (dumpWrites) {addWrite(a,v);} }
|
||||||
|
#define chWriteDelay(c,a,v,d) {rWrite((a)+(c)*16,v,d)}
|
||||||
#define sampleTableAddr(c) (sampleTableBase+(c)*4)
|
#define sampleTableAddr(c) (sampleTableBase+(c)*4)
|
||||||
#define waveTableAddr(c) (sampleTableBase+8*4+(c)*9*16)
|
#define waveTableAddr(c) (sampleTableBase+8*4+(c)*9*16)
|
||||||
|
|
||||||
|
@ -77,7 +79,7 @@ void DivPlatformSNES::acquire(short** buf, size_t len) {
|
||||||
dsp.write(w.addr,w.val);
|
dsp.write(w.addr,w.val);
|
||||||
regPool[w.addr&0x7f]=w.val;
|
regPool[w.addr&0x7f]=w.val;
|
||||||
writes.pop();
|
writes.pop();
|
||||||
delay=(w.addr==0x5c)?8:1;
|
delay=w.delay;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dsp.set_output(out,1);
|
dsp.set_output(out,1);
|
||||||
|
@ -253,7 +255,7 @@ void DivPlatformSNES::tick(bool sysTick) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (koff!=0) {
|
if (koff!=0) {
|
||||||
rWrite(0x5c,koff);
|
rWriteDelay(0x5c,koff,8);
|
||||||
}
|
}
|
||||||
if (writeControl) {
|
if (writeControl) {
|
||||||
unsigned char control=(noiseFreq&0x1f)|(echoOn?0:0x20);
|
unsigned char control=(noiseFreq&0x1f)|(echoOn?0:0x20);
|
||||||
|
@ -314,7 +316,7 @@ void DivPlatformSNES::tick(bool sysTick) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (koff!=0) {
|
if (koff!=0) {
|
||||||
rWrite(0x5c,0);
|
rWriteDelay(0x5c,0,8);
|
||||||
}
|
}
|
||||||
if (kon!=0) {
|
if (kon!=0) {
|
||||||
rWrite(0x4c,kon);
|
rWrite(0x4c,kon);
|
||||||
|
@ -1027,6 +1029,7 @@ void DivPlatformSNES::setFlags(const DivConfig& flags) {
|
||||||
initEchoMask=flags.getInt("echoMask",0);
|
initEchoMask=flags.getInt("echoMask",0);
|
||||||
|
|
||||||
interpolationOff=flags.getBool("interpolationOff",false);
|
interpolationOff=flags.getBool("interpolationOff",false);
|
||||||
|
antiClick=flags.getBool("antiClick",true);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivPlatformSNES::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {
|
int DivPlatformSNES::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {
|
||||||
|
|
|
@ -70,6 +70,7 @@ class DivPlatformSNES: public DivDispatch {
|
||||||
bool writeDryVol;
|
bool writeDryVol;
|
||||||
bool echoOn;
|
bool echoOn;
|
||||||
bool interpolationOff;
|
bool interpolationOff;
|
||||||
|
bool antiClick;
|
||||||
|
|
||||||
bool initEchoOn;
|
bool initEchoOn;
|
||||||
signed char initEchoVolL;
|
signed char initEchoVolL;
|
||||||
|
@ -82,8 +83,10 @@ class DivPlatformSNES: public DivDispatch {
|
||||||
struct QueuedWrite {
|
struct QueuedWrite {
|
||||||
unsigned char addr;
|
unsigned char addr;
|
||||||
unsigned char val;
|
unsigned char val;
|
||||||
QueuedWrite(): addr(0), val(0) {}
|
unsigned char delay;
|
||||||
QueuedWrite(unsigned char a, unsigned char v): addr(a), val(v) {}
|
unsigned char padding;
|
||||||
|
QueuedWrite(): addr(0), val(0), delay(0), padding(0) {}
|
||||||
|
QueuedWrite(unsigned char a, unsigned char v, unsigned char d=0): addr(a), val(v), delay(d), padding(0) {}
|
||||||
};
|
};
|
||||||
FixedQueue<QueuedWrite,256> writes;
|
FixedQueue<QueuedWrite,256> writes;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue