giga-refactor, part 20

convert compat SegaPCM to normal SegaPCM with 5 channels
convert Neo Geo CD to YM2610
This commit is contained in:
tildearrow 2025-11-21 04:58:56 -05:00
parent 26993d2b40
commit 47e2910498
16 changed files with 79 additions and 120 deletions

View file

@ -345,7 +345,6 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0);
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
dispatch=new DivPlatformYM2610;
if (isRender) {
@ -354,7 +353,6 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnbCore",1));
}
break;
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
dispatch=new DivPlatformYM2610Ext;
if (isRender) {
@ -599,7 +597,6 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
dispatch=new DivPlatformQSound;
break;
case DIV_SYSTEM_SEGAPCM:
case DIV_SYSTEM_SEGAPCM_COMPAT:
dispatch=new DivPlatformSegaPCM;
break;
case DIV_SYSTEM_X1_010:

View file

@ -2248,11 +2248,11 @@ int DivEngine::getEffectiveSampleRate(int rate) {
return 1278409/(1280000/rate);
case DIV_SYSTEM_PCE:
return 1789773/(1789773/rate);
case DIV_SYSTEM_SEGAPCM: case DIV_SYSTEM_SEGAPCM_COMPAT:
case DIV_SYSTEM_SEGAPCM:
return (31250*MIN(255,(rate*255/31250)))/255;
case DIV_SYSTEM_QSOUND:
return (24038*MIN(65535,(rate*4096/24038)))/4096;
case DIV_SYSTEM_YM2610: case DIV_SYSTEM_YM2610_EXT: case DIV_SYSTEM_YM2610_FULL: case DIV_SYSTEM_YM2610_FULL_EXT: case DIV_SYSTEM_YM2610B: case DIV_SYSTEM_YM2610B_EXT:
case DIV_SYSTEM_YM2610_FULL: case DIV_SYSTEM_YM2610_FULL_EXT: case DIV_SYSTEM_YM2610B: case DIV_SYSTEM_YM2610B_EXT:
return 18518;
case DIV_SYSTEM_VERA:
return (48828*MIN(128,(rate*128/48828)))/128;

View file

@ -56,7 +56,7 @@ class DivWorkPool;
#define DIV_UNSTABLE
#define DIV_VERSION "inf2/dev240 - DO NOT LOAD!"
#define DIV_VERSION "dev240"
#define DIV_ENGINE_VERSION 240
// for imports
#define DIV_VERSION_MOD 0xff01

View file

@ -397,7 +397,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
if (ds.system[0]==DIV_SYSTEM_C64_8580 || ds.system[0]==DIV_SYSTEM_C64_6581) {
ins->type=DIV_INS_C64;
}
if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT
if (ds.system[0]==DIV_SYSTEM_YM2610_CRAP || ds.system[0]==DIV_SYSTEM_YM2610_CRAP_EXT
|| ds.system[0]==DIV_SYSTEM_YM2610_FULL || ds.system[0]==DIV_SYSTEM_YM2610_FULL_EXT
|| ds.system[0]==DIV_SYSTEM_YM2610B || ds.system[0]==DIV_SYSTEM_YM2610B_EXT) {
if (!mode) {
@ -629,7 +629,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
}
// piece of crap offset by 1
if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT) {
if (ds.system[0]==DIV_SYSTEM_YM2610_CRAP || ds.system[0]==DIV_SYSTEM_YM2610_CRAP_EXT) {
ins->std.waveMacro.val[j]++;
}
}
@ -1169,8 +1169,21 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ds.systemFlags[0].set("brokenPitch",true);
}
ds.systemName=getSongSystemLegacyName(ds,!getConfInt("noMultiSystem",0));
ds.initDefaultSystemChans();
// flatten 5-channel SegaPCM and Neo Geo CD
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_SEGAPCM_COMPAT) {
ds.system[i]=DIV_SYSTEM_SEGAPCM;
} else if (ds.system[i]==DIV_SYSTEM_YM2610_CRAP) {
ds.system[i]=DIV_SYSTEM_YM2610_FULL;
} else if (ds.system[i]==DIV_SYSTEM_YM2610_CRAP_EXT) {
ds.system[i]=DIV_SYSTEM_YM2610_FULL_EXT;
}
}
ds.systemName=getSongSystemLegacyName(ds,!getConfInt("noMultiSystem",0));
ds.recalcChans();
if (active) quitDispatch();
@ -1209,6 +1222,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
lastError="invalid version to save in! this is a bug!";
return NULL;
}
int actualChans=song.chans;
// check whether system is compound
bool isFlat=false;
if (song.systemLen==2) {
@ -1218,8 +1232,10 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
if (song.system[0]==DIV_SYSTEM_YM2612_EXT && song.system[1]==DIV_SYSTEM_SMS) {
isFlat=true;
}
if (song.system[0]==DIV_SYSTEM_YM2151 && song.system[1]==DIV_SYSTEM_SEGAPCM_COMPAT) {
if (song.system[0]==DIV_SYSTEM_YM2151 && song.system[1]==DIV_SYSTEM_SEGAPCM) {
isFlat=true;
addWarning("only first 5 channels of SegaPCM.");
actualChans=13;
}
if (song.system[0]==DIV_SYSTEM_SMS && song.system[1]==DIV_SYSTEM_OPLL) {
isFlat=true;
@ -1235,6 +1251,10 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
addWarning("your song will sound different. I am not going to bother adding further compatibility.");
}
}
if (song.system[0]==DIV_SYSTEM_YM2610_FULL || song.system[0]==DIV_SYSTEM_YM2610_FULL_EXT) {
addWarning("ADPCM-B not supported.");
actualChans--;
}
// fail if more than one system
if (!isFlat && song.systemLen!=1) {
logE("cannot save multiple systems in this format!");
@ -1293,7 +1313,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
lastError="maximum number of wavetables in .dmf is 64";
return NULL;
}
for (int i=0; i<song.chans; i++) {
for (int i=0; i<actualChans; i++) {
for (int j=0; j<curSubSong->ordersLen; j++) {
if (curOrders->ord[i][j]>0x7f) {
logE("order %d, %d is out of range (0-127)!",i,j);
@ -1320,7 +1340,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
} else if (song.system[0]==DIV_SYSTEM_YM2612_EXT && song.system[1]==DIV_SYSTEM_SMS) {
w->writeC(systemToFileDMF(DIV_SYSTEM_GENESIS_EXT));
sys=DIV_SYSTEM_GENESIS_EXT;
} else if (song.system[0]==DIV_SYSTEM_YM2151 && song.system[1]==DIV_SYSTEM_SEGAPCM_COMPAT) {
} else if (song.system[0]==DIV_SYSTEM_YM2151 && song.system[1]==DIV_SYSTEM_SEGAPCM) {
w->writeC(systemToFileDMF(DIV_SYSTEM_ARCADE));
sys=DIV_SYSTEM_ARCADE;
} else if (song.system[0]==DIV_SYSTEM_SMS && song.system[1]==DIV_SYSTEM_OPLL) {
@ -1335,6 +1355,12 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
} else if (song.system[0]==DIV_SYSTEM_AY8910 && song.system[1]==DIV_SYSTEM_SCC) {
w->writeC(systemToFileDMF(DIV_SYSTEM_MSX2));
sys=DIV_SYSTEM_MSX2;
} else if (song.system[0]==DIV_SYSTEM_YM2610_FULL) {
w->writeC(systemToFileDMF(DIV_SYSTEM_YM2610_CRAP));
sys=DIV_SYSTEM_YM2610_CRAP;
} else if (song.system[0]==DIV_SYSTEM_YM2610_FULL_EXT) {
w->writeC(systemToFileDMF(DIV_SYSTEM_YM2610_CRAP_EXT));
sys=DIV_SYSTEM_YM2610_CRAP_EXT;
} else {
w->writeC(systemToFileDMF(song.system[0]));
sys=song.system[0];
@ -1360,7 +1386,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
w->writeI(curSubSong->patLen);
w->writeC(curSubSong->ordersLen);
for (int i=0; i<song.chans; i++) {
for (int i=0; i<actualChans; i++) {
for (int j=0; j<curSubSong->ordersLen; j++) {
w->writeC(curOrders->ord[i][j]);
if (version>=25) {
@ -1429,8 +1455,8 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
case DIV_SYSTEM_PCE:
i->type=DIV_INS_PCE;
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610_FULL_EXT:
i->type=DIV_INS_AY;
break;
default:
@ -1582,7 +1608,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
w->writeC(realWaveMacroLen);
for (int j=0; j<realWaveMacroLen; j++) {
// piece of crap offset by 1
if (song.system[0]==DIV_SYSTEM_YM2610 || song.system[0]==DIV_SYSTEM_YM2610_EXT) {
if (song.system[0]==DIV_SYSTEM_YM2610_FULL || song.system[0]==DIV_SYSTEM_YM2610_FULL_EXT) {
w->writeI(i->std.waveMacro.val[j]-1);
} else {
w->writeI(i->std.waveMacro.val[j]);
@ -1646,7 +1672,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
bool relWarning=false;
for (int i=0; i<getChannelCount(sys); i++) {
for (int i=0; i<actualChans; i++) {
short note, octave;
w->writeC(curPat[i].effectCols);
@ -1675,13 +1701,13 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
alwaysConvert=true;
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_CRAP:
if (i>=7) {
convertSampleUsage=true;
alwaysConvert=true;
}
break;
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_CRAP_EXT:
if (i>=10) {
convertSampleUsage=true;
alwaysConvert=true;

View file

@ -166,8 +166,8 @@ void DivEngine::convertOldFlags(unsigned int oldFlags, DivConfig& newFlags, DivS
break;
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_CRAP:
case DIV_SYSTEM_YM2610_CRAP_EXT:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610_FULL_EXT:
case DIV_SYSTEM_YM2610B:
@ -1234,6 +1234,17 @@ bool DivEngine::loadFur(unsigned char* file, size_t len, int variantID) {
ds.initDefaultSystemChans();
ds.chans=tchans;
// flatten 5-channel SegaPCM and Neo Geo CD
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_SEGAPCM_COMPAT) {
ds.system[i]=DIV_SYSTEM_SEGAPCM;
} else if (ds.system[i]==DIV_SYSTEM_YM2610_CRAP) {
ds.system[i]=DIV_SYSTEM_YM2610_FULL;
} else if (ds.system[i]==DIV_SYSTEM_YM2610_CRAP_EXT) {
ds.system[i]=DIV_SYSTEM_YM2610_FULL_EXT;
}
}
ds.name=reader.readString();
ds.author=reader.readString();
logI("%s by %s",ds.name.c_str(),ds.author.c_str());
@ -2095,8 +2106,6 @@ bool DivEngine::loadFur(unsigned char* file, size_t len, int variantID) {
case DIV_SYSTEM_OPZ:
opmCount++;
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610_FULL_EXT:
case DIV_SYSTEM_YM2610B:
@ -2131,7 +2140,6 @@ bool DivEngine::loadFur(unsigned char* file, size_t len, int variantID) {
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_YM2612_EXT ||
ds.system[i]==DIV_SYSTEM_YM2612_DUALPCM_EXT ||
ds.system[i]==DIV_SYSTEM_YM2610_EXT ||
ds.system[i]==DIV_SYSTEM_YM2610_FULL_EXT ||
ds.system[i]==DIV_SYSTEM_YM2610B_EXT ||
ds.system[i]==DIV_SYSTEM_YM2203_EXT ||
@ -2208,7 +2216,7 @@ bool DivEngine::loadFur(unsigned char* file, size_t len, int variantID) {
// SegaPCM slide compat
if (ds.version<153) {
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_SEGAPCM || ds.system[i]==DIV_SYSTEM_SEGAPCM_COMPAT) {
if (ds.system[i]==DIV_SYSTEM_SEGAPCM) {
ds.systemFlags[i].set("oldSlides",true);
}
}

View file

@ -168,7 +168,6 @@ bool DivEngine::convertLegacySampleMode() {
case DIV_SYSTEM_AY8930:
// any channel can be DAC'd
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
// Neo Geo CD ADPCM channels
if (song.dispatchChanOfChan[i]<7) {
@ -178,7 +177,6 @@ bool DivEngine::convertLegacySampleMode() {
preferredInsType=DIV_INS_ADPCMA;
preferredInsType2=DIV_INS_ADPCMB;
break;
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
// Neo Geo CD ADPCM channels
if (song.dispatchChanOfChan[i]<10) {
@ -265,7 +263,6 @@ bool DivEngine::convertLegacySampleMode() {
preferredInsType=DIV_INS_ADPCMB;
break;
case DIV_SYSTEM_SEGAPCM:
case DIV_SYSTEM_SEGAPCM_COMPAT:
// all channels can play back samples
sampleMode=1;
preferredInsType=DIV_INS_SEGAPCM;

View file

@ -172,9 +172,6 @@ String DivEngine::getSongSystemLegacyName(DivSong& ds, bool isMultiSystemAccepta
return "Commodore 64 with dual 8580";
}
if (ds.system[0]==DIV_SYSTEM_YM2151 && ds.system[1]==DIV_SYSTEM_SEGAPCM_COMPAT) {
return "YM2151 + SegaPCM Arcade (compatibility)";
}
if (ds.system[0]==DIV_SYSTEM_YM2151 && ds.system[1]==DIV_SYSTEM_SEGAPCM) {
return "YM2151 + SegaPCM Arcade";
}
@ -995,54 +992,18 @@ void DivEngine::registerSystems() {
DivChanDefFunc()
);
sysDefs[DIV_SYSTEM_YM2610]=new DivSysDef(
sysDefs[DIV_SYSTEM_YM2610_CRAP]=new DivSysDef(
_("Neo Geo CD"), NULL, 0x09, 0x09, 13, 13, 13,
true, true, 0x151, false, (1U<<DIV_SAMPLE_DEPTH_ADPCM_A)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
_("like Neo Geo, but lacking the ADPCM-B channel since they couldn't connect the pins."),
DivChanDefFunc({
DivChanDef(_("FM 1") , "F1", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("FM 2") , "F2", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("FM 3") , "F3", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("FM 4") , "F4", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("PSG 1") , "S1", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("PSG 2") , "S2", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("PSG 3") , "S3", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("ADPCM-A 1"), "P1", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 2"), "P2", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 3"), "P3", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 4"), "P4", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 5"), "P5", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 6"), "P6", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA)
}),
fmEffectHandlerMap,
fmOPNAPostEffectHandlerMap
true, true, 0x151, true, (1U<<DIV_SAMPLE_DEPTH_ADPCM_A)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
"<COMPOUND SYSTEM!>",
DivChanDefFunc()
);
sysDefs[DIV_SYSTEM_YM2610_EXT]=new DivSysDef(
sysDefs[DIV_SYSTEM_YM2610_CRAP_EXT]=new DivSysDef(
_("Neo Geo CD Extended Channel 2"), NULL, 0x49, 0x49, 16, 16, 16,
true, true, 0x151, false, (1U<<DIV_SAMPLE_DEPTH_ADPCM_A)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
_("like Neo Geo, but lacking the ADPCM-B channel since they couldn't connect the pins.\nthis one is in Extended Channel mode, which turns the second FM channel into four operators with independent notes/frequencies."),
DivChanDefFunc({
DivChanDef(_("FM 1") , "F1", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("FM 2 OP1") , "O1", DIV_CH_OP , DIV_INS_FM),
DivChanDef(_("FM 2 OP2") , "O2", DIV_CH_OP , DIV_INS_FM),
DivChanDef(_("FM 2 OP3") , "O3", DIV_CH_OP , DIV_INS_FM),
DivChanDef(_("FM 2 OP4") , "O4", DIV_CH_OP , DIV_INS_FM),
DivChanDef(_("FM 3") , "F3", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("FM 4") , "F4", DIV_CH_FM , DIV_INS_FM),
DivChanDef(_("PSG 1") , "S1", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("PSG 2") , "S2", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("PSG 3") , "S3", DIV_CH_PULSE, DIV_INS_AY),
DivChanDef(_("ADPCM-A 1"), "P1", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 2"), "P2", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 3"), "P3", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 4"), "P4", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 5"), "P5", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA),
DivChanDef(_("ADPCM-A 6"), "P6", DIV_CH_PCM , DIV_INS_ADPCMA, DIV_INS_AMIGA)
}),
{},
fmOPNAPostEffectHandlerMap,
fmExtChEffectHandlerMap
true, true, 0x151, true, (1U<<DIV_SAMPLE_DEPTH_ADPCM_A)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
"<COMPOUND SYSTEM!>",
DivChanDefFunc()
);
sysDefs[DIV_SYSTEM_MSX2]=new DivSysDef(
@ -2033,11 +1994,9 @@ void DivEngine::registerSystems() {
sysDefs[DIV_SYSTEM_SEGAPCM_COMPAT]=new DivSysDef(
_("SegaPCM (compatible 5-channel mode)"), NULL, 0xa9, 0, 5, 5, 5,
false, true, 0x151, false, 1U<<DIV_SAMPLE_DEPTH_8BIT, 0, 0,
_("this is the same thing as SegaPCM, but only exposes 5 of the channels for compatibility with DefleMask."),
DivChanDefFunc(stockChanDef<DIV_CH_PCM,DIV_INS_SEGAPCM,DIV_INS_AMIGA>),
{},
segaPCMPostEffectHandlerMap
false, true, 0x151, true, 1U<<DIV_SAMPLE_DEPTH_8BIT, 0, 0,
"<COMPOUND SYSTEM!>",
DivChanDefFunc()
);
sysDefs[DIV_SYSTEM_X1_010]=new DivSysDef(

View file

@ -166,8 +166,8 @@ enum DivSystem {
DIV_SYSTEM_C64_8580,
DIV_SYSTEM_ARCADE, // ** COMPOUND SYSTEM - DO NOT USE! **
DIV_SYSTEM_MSX2, // ** COMPOUND SYSTEM - DO NOT USE! **
DIV_SYSTEM_YM2610,
DIV_SYSTEM_YM2610_EXT,
DIV_SYSTEM_YM2610_CRAP,
DIV_SYSTEM_YM2610_CRAP_EXT,
DIV_SYSTEM_AY8910,
DIV_SYSTEM_AMIGA,

View file

@ -168,7 +168,6 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
}
break;
case DIV_SYSTEM_SEGAPCM:
case DIV_SYSTEM_SEGAPCM_COMPAT:
for (int i=0; i<16; i++) {
w->writeC(0xc0);
w->writeS((0x86|baseAddr2S)+(i<<3));
@ -182,10 +181,8 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
w->writeC(0);
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610B:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
case DIV_SYSTEM_YM2610B_EXT:
case DIV_SYSTEM_YM2610_CSM:
@ -979,7 +976,6 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
w->writeC(write.val);
break;
case DIV_SYSTEM_SEGAPCM:
case DIV_SYSTEM_SEGAPCM_COMPAT:
w->writeC(0xc0);
w->writeS(baseAddr2S|(write.addr&0xffff));
w->writeC(write.val);
@ -989,10 +985,8 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
w->writeS_BE(baseAddr2S|(write.addr&0x1fff));
w->writeC(write.val);
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610B:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
case DIV_SYSTEM_YM2610B_EXT:
case DIV_SYSTEM_YM2610_CSM:
@ -1507,7 +1501,6 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p
}
break;
case DIV_SYSTEM_SEGAPCM:
case DIV_SYSTEM_SEGAPCM_COMPAT:
if (!hasSegaPCM) {
hasSegaPCM=4000000;
CHIP_VOL(4,0.67);
@ -1537,10 +1530,8 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p
howManyChips++;
}
break;
case DIV_SYSTEM_YM2610:
case DIV_SYSTEM_YM2610_FULL:
case DIV_SYSTEM_YM2610B:
case DIV_SYSTEM_YM2610_EXT:
case DIV_SYSTEM_YM2610_FULL_EXT:
case DIV_SYSTEM_YM2610B_EXT:
case DIV_SYSTEM_YM2610_CSM: