diff --git a/src/engine/engine.h b/src/engine/engine.h index 879603b40..d7ec90586 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ class DivWorkPool; #define DIV_UNSTABLE -#define DIV_VERSION "dev194" -#define DIV_ENGINE_VERSION 194 +#define DIV_VERSION "dev195" +#define DIV_ENGINE_VERSION 195 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index f55e10da8..525c3e2df 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -1033,11 +1033,12 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.systemFlags[0].set("dpcmMode",false); } - // C64 no key priority, reset time and multiply relative + // C64 no key priority, reset time, multiply relative and macro race if (ds.system[0]==DIV_SYSTEM_C64_8580 || ds.system[0]==DIV_SYSTEM_C64_6581) { ds.systemFlags[0].set("keyPriority",false); ds.systemFlags[0].set("initResetTime",1); ds.systemFlags[0].set("multiplyRel",true); + ds.systemFlags[0].set("macroRace",true); } // OPM broken pitch diff --git a/src/engine/fileOps/fur.cpp b/src/engine/fileOps/fur.cpp index a90643c15..5397a266c 100644 --- a/src/engine/fileOps/fur.cpp +++ b/src/engine/fileOps/fur.cpp @@ -2064,6 +2064,15 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } } + // C64 macro race + if (ds.version<195) { + for (int i=0; igetIns(chan[i].ins,DIV_INS_C64); if (ins->c64.filterIsAbs) { filtCut=MIN(2047,chan[i].std.alg.val); @@ -732,6 +732,7 @@ void DivPlatformC64::setFlags(const DivConfig& flags) { keyPriority=flags.getBool("keyPriority",true); no1EUpdate=flags.getBool("no1EUpdate",false); multiplyRel=flags.getBool("multiplyRel",false); + macroRace=flags.getBool("macroRace",false); testAD=((flags.getInt("testAttack",0)&15)<<4)|(flags.getInt("testDecay",0)&15); testSR=((flags.getInt("testSustain",0)&15)<<4)|(flags.getInt("testRelease",0)&15); initResetTime=flags.getInt("initResetTime",2); diff --git a/src/engine/platform/c64.h b/src/engine/platform/c64.h index c24ee3159..eb4426ca0 100644 --- a/src/engine/platform/c64.h +++ b/src/engine/platform/c64.h @@ -77,7 +77,7 @@ class DivPlatformC64: public DivDispatch { unsigned char sidCore; int filtCut, resetTime, initResetTime; - bool keyPriority, sidIs6581, needInitTables, no1EUpdate, multiplyRel; + bool keyPriority, sidIs6581, needInitTables, no1EUpdate, multiplyRel, macroRace; unsigned char chanOrder[3]; unsigned char testAD, testSR;