C64: use full cutoff/duty range

this means .dmf becomes a second-class citizen since it only supports a
range of 0-100 (yeah) for arbitrary reasons...

the last bit to do is add effect that allows you to use the full range
This commit is contained in:
tildearrow 2022-01-09 17:00:52 -05:00
parent 4bbfc22c2a
commit 9b6db75d4f
4 changed files with 19 additions and 15 deletions

View file

@ -691,7 +691,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ins->c64.s=reader.readC();
ins->c64.r=reader.readC();
ins->c64.duty=reader.readC();
ins->c64.duty=(reader.readC()*4095)/100;
ins->c64.ringMod=reader.readC();
ins->c64.oscSync=reader.readC();
@ -704,7 +704,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ins->c64.initFilter=reader.readC();
ins->c64.res=reader.readC();
ins->c64.cut=reader.readC();
ins->c64.cut=(reader.readC()*2047)/100;
ins->c64.hp=reader.readC();
ins->c64.bp=reader.readC();
ins->c64.lp=reader.readC();
@ -1534,7 +1534,7 @@ SafeWriter* DivEngine::saveFur() {
w->writeC(ins->c64.d);
w->writeC(ins->c64.s);
w->writeC(ins->c64.r);
w->writeS((ins->c64.duty*4096)/100);
w->writeS(ins->c64.duty);
w->writeC(ins->c64.ringMod);
w->writeC(ins->c64.oscSync);
w->writeC(ins->c64.toFilter);
@ -1545,7 +1545,7 @@ SafeWriter* DivEngine::saveFur() {
w->writeC(ins->c64.bp);
w->writeC(ins->c64.hp);
w->writeC(ins->c64.ch3off);
w->writeS((ins->c64.cut*2047)/100);
w->writeS(ins->c64.cut);
w->writeC(ins->c64.dutyIsAbs);
w->writeC(ins->c64.filterIsAbs);
@ -1783,7 +1783,8 @@ SafeWriter* DivEngine::saveDMF() {
w->writeC(i->c64.s);
w->writeC(i->c64.r);
w->writeC(i->c64.duty);
logW("duty and cutoff precision will be lost!\n");
w->writeC((i->c64.duty*100)/4095);
w->writeC(i->c64.ringMod);
w->writeC(i->c64.oscSync);
@ -1793,7 +1794,7 @@ SafeWriter* DivEngine::saveDMF() {
w->writeC(i->c64.initFilter);
w->writeC(i->c64.res);
w->writeC(i->c64.cut);
w->writeC((i->c64.cut*100)/2047);
w->writeC(i->c64.hp);
w->writeC(i->c64.bp);
w->writeC(i->c64.lp);