dev115 - automatic system detection

This commit is contained in:
tildearrow 2022-09-21 19:27:42 -05:00
parent a17f499384
commit e22d7484cb
11 changed files with 150 additions and 12 deletions

View file

@ -46,8 +46,8 @@
#define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock();
#define BUSY_END isBusy.unlock(); softLocked=false;
#define DIV_VERSION "dev114"
#define DIV_ENGINE_VERSION 114
#define DIV_VERSION "dev115"
#define DIV_ENGINE_VERSION 115
// for imports
#define DIV_VERSION_MOD 0xff01
#define DIV_VERSION_FC 0xff02

View file

@ -1085,6 +1085,9 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
if (ds.version<113) {
ds.jumpTreatment=1;
}
if (ds.version<115) {
ds.autoSystem=false;
}
ds.isDMF=false;
reader.readS(); // reserved
@ -1512,7 +1515,12 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
} else {
reader.readC();
}
for (int i=0; i<4; i++) {
if (ds.version>=115) {
ds.autoSystem=reader.readC();
} else {
reader.readC();
}
for (int i=0; i<3; i++) {
reader.readC();
}
}
@ -1549,6 +1557,7 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
ds.categoryJ=reader.readString();
} else {
ds.systemName=getSongSystemLegacyName(ds,!getConfInt("noMultiSystem",0));
ds.autoSystem=true;
}
// read subsongs
@ -3751,7 +3760,8 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) {
w->writeC(song.snNoLowPeriods);
w->writeC(song.delayBehavior);
w->writeC(song.jumpTreatment);
for (int i=0; i<4; i++) {
w->writeC(song.autoSystem);
for (int i=0; i<3; i++) {
w->writeC(0);
}

View file

@ -72,9 +72,10 @@ void DivInstrument::putInsData(SafeWriter* w) {
w->writeC(op.ksr);
w->writeC(op.enable);
w->writeC(op.kvs);
// reserved
for (int k=0; k<11; k++) {
for (int k=0; k<10; k++) {
w->writeC(0);
}
}
@ -724,8 +725,15 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
reader.readC();
}
if (version>=115) {
op.kvs=reader.readC();
} else {
op.kvs=2;
reader.readC();
}
// reserved
for (int k=0; k<11; k++) reader.readC();
for (int k=0; k<10; k++) reader.readC();
}
// GB

View file

@ -87,6 +87,7 @@ struct DivInstrumentFM {
bool enable;
unsigned char am, ar, dr, mult, rr, sl, tl, dt2, rs, dt, d2r, ssgEnv;
unsigned char dam, dvb, egt, ksl, sus, vib, ws, ksr; // YMU759/OPL/OPZ
unsigned char kvs;
Operator():
enable(true),
am(0),
@ -108,7 +109,8 @@ struct DivInstrumentFM {
sus(0),
vib(0),
ws(0),
ksr(0) {}
ksr(0),
kvs(2) {}
} op[4];
DivInstrumentFM():
alg(0),

View file

@ -511,6 +511,7 @@ struct DivSong {
bool e1e2StopOnSameNote;
bool brokenPortaArp;
bool snNoLowPeriods;
bool autoSystem;
std::vector<DivInstrument*> ins;
std::vector<DivWavetable*> wave;
@ -614,7 +615,8 @@ struct DivSong {
brokenOutVol(false),
e1e2StopOnSameNote(false),
brokenPortaArp(false),
snNoLowPeriods(false) {
snNoLowPeriods(false),
autoSystem(true) {
for (int i=0; i<32; i++) {
system[i]=DIV_SYSTEM_NULL;
systemVol[i]=64;