yay + prepare for sample system changes

This commit is contained in:
tildearrow 2022-02-23 22:00:12 -05:00
parent ccfed873e8
commit 92e1553014
3 changed files with 39 additions and 7 deletions

View File

@ -1471,6 +1471,9 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
if (song.system[0]==DIV_SYSTEM_SMS && song.system[1]==DIV_SYSTEM_OPLL) {
isFlat=true;
}
if (song.system[0]==DIV_SYSTEM_NES && song.system[1]==DIV_SYSTEM_VRC7) {
isFlat=true;
}
}
// fail if more than one system
if (!isFlat && song.systemLen!=1) {
@ -1490,6 +1493,12 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
lastError="Master System FM expansion not supported in 1.0/legacy .dmf!";
return NULL;
}
// fail if the system is NES+VRC7 and version<25
if (version<25 && song.system[0]==DIV_SYSTEM_NES && song.system[1]==DIV_SYSTEM_VRC7) {
logE("NES + VRC7 not supported in 1.0/legacy .dmf!\n");
lastError="NES + VRC7 not supported in 1.0/legacy .dmf!";
return NULL;
}
// fail if the system is Furnace-exclusive
if (!isFlat && systemToFile(song.system[0])&0x80) {
logE("cannot save Furnace-exclusive system song!\n");
@ -1519,6 +1528,9 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
} else if (song.system[0]==DIV_SYSTEM_SMS && song.system[1]==DIV_SYSTEM_OPLL) {
w->writeC(systemToFile(DIV_SYSTEM_SMS_OPLL));
sys=DIV_SYSTEM_SMS_OPLL;
} else if (song.system[0]==DIV_SYSTEM_NES && song.system[1]==DIV_SYSTEM_VRC7) {
w->writeC(systemToFile(DIV_SYSTEM_NES_VRC7));
sys=DIV_SYSTEM_NES_VRC7;
} else {
w->writeC(systemToFile(song.system[0]));
sys=song.system[0];
@ -1599,12 +1611,12 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
w->writeC(op.rr);
w->writeC(op.sl);
w->writeC(op.tl);
if (sys==DIV_SYSTEM_SMS_OPLL && j==0) {
if ((sys==DIV_SYSTEM_SMS_OPLL || sys==DIV_SYSTEM_NES_VRC7) && j==0) {
w->writeC(i->fm.opllPreset);
} else {
w->writeC(op.dt2);
}
if (sys==DIV_SYSTEM_SMS_OPLL) {
if (sys==DIV_SYSTEM_SMS_OPLL || sys==DIV_SYSTEM_NES_VRC7) {
w->writeC(op.ksr);
w->writeC(op.vib);
w->writeC(op.ksl);

View File

@ -24,15 +24,34 @@ struct DivSample {
int length, rate, centerRate, loopStart, loopOffP;
signed char vol, pitch;
// valid values are:
// - 0: ZX Spectrum overlay drum (1-bit PCM)
// - 1: 1-bit NES DPCM
// - 4: BRR
// - 5: raw ADPCM-A
// - 6: raw ADPCM-B
// - 0: ZX Spectrum overlay drum (1-bit)
// - 1: 1-bit NES DPCM (1-bit)
// - 4: QSound ADPCM ()
// - 5: ADPCM-A
// - 6: ADPCM-B
// - 7: X68000 ADPCM
// - 8: 8-bit PCM
// - 9: BRR (SNES)
// - 10: VOX
// - 16: 16-bit PCM
unsigned char depth;
// TODO: drop
short* data;
// these are the new data structures.
signed char* data8;
short* data16;
unsigned char* data1;
unsigned char* dataDPCM;
unsigned char* dataQSound;
unsigned char* dataA;
unsigned char* dataB;
unsigned char* dataX68;
unsigned char* dataBRR;
unsigned char* dataVOX;
unsigned int rendLength, adpcmRendLength, rendOff, rendOffP, rendOffContiguous, rendOffQsound;
short* rendData;
unsigned char* adpcmRendData;

View File

@ -816,6 +816,7 @@ bool DivEngine::isFMSystem(DivSystem sys) {
return (sys==DIV_SYSTEM_GENESIS ||
sys==DIV_SYSTEM_GENESIS_EXT ||
sys==DIV_SYSTEM_SMS_OPLL ||
sys==DIV_SYSTEM_NES_VRC7 ||
sys==DIV_SYSTEM_ARCADE ||
sys==DIV_SYSTEM_YM2610 ||
sys==DIV_SYSTEM_YM2610_EXT ||