giga-refactor, part 20
convert compat SegaPCM to normal SegaPCM with 5 channels convert Neo Geo CD to YM2610
This commit is contained in:
parent
26993d2b40
commit
47e2910498
16 changed files with 79 additions and 120 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -278,8 +278,6 @@ void putDispatchChip(void* data, int type) {
|
|||
ImGui::TextColored(ch->extMode?colorOn:colorOff,">> ExtMode");
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_YM2610:
|
||||
case DIV_SYSTEM_YM2610_EXT:
|
||||
case DIV_SYSTEM_YM2610_FULL:
|
||||
case DIV_SYSTEM_YM2610_FULL_EXT: {
|
||||
DivPlatformYM2610* ch=(DivPlatformYM2610*)data;
|
||||
|
|
@ -362,8 +360,7 @@ void putDispatchChip(void* data, int type) {
|
|||
ImGui::TextColored(ch->useYMFM?colorOn:colorOff,">> UseYMFM");
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT: {
|
||||
case DIV_SYSTEM_SEGAPCM: {
|
||||
DivPlatformSegaPCM* ch=(DivPlatformSegaPCM*)data;
|
||||
ImGui::Text("> SegaPCM");
|
||||
COMMON_CHIP_DEBUG;
|
||||
|
|
@ -629,7 +626,6 @@ void putDispatchChan(void* data, int chanNum, int type) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_YM2610:
|
||||
case DIV_SYSTEM_YM2610_FULL: {
|
||||
DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data;
|
||||
ImGui::Text("> YM2610");
|
||||
|
|
@ -642,7 +638,6 @@ void putDispatchChan(void* data, int chanNum, int type) {
|
|||
OPNB_CHAN_DEBUG;
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_YM2610_EXT:
|
||||
case DIV_SYSTEM_YM2610_FULL_EXT: {
|
||||
if (chanNum>=1 && chanNum<=4) {
|
||||
DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data;
|
||||
|
|
@ -739,8 +734,7 @@ void putDispatchChan(void* data, int chanNum, int type) {
|
|||
COMMON_CHAN_DEBUG_BOOL;
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT: {
|
||||
case DIV_SYSTEM_SEGAPCM: {
|
||||
DivPlatformSegaPCM::Channel* ch=(DivPlatformSegaPCM::Channel*)data;
|
||||
ImGui::Text("> SegaPCM");
|
||||
COMMON_CHAN_DEBUG;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@
|
|||
#define FM_PREVIEW_SIZE 512
|
||||
|
||||
#define CHECK_HIDDEN_SYSTEM(x) \
|
||||
(x==DIV_SYSTEM_YMU759 || x==DIV_SYSTEM_DUMMY || x==DIV_SYSTEM_SEGAPCM_COMPAT || x==DIV_SYSTEM_PONG || x==DIV_SYSTEM_UPD1771C)
|
||||
(x==DIV_SYSTEM_YMU759 || x==DIV_SYSTEM_DUMMY || x==DIV_SYSTEM_PONG || x==DIV_SYSTEM_UPD1771C)
|
||||
|
||||
enum FurnaceGUIRenderBackend {
|
||||
GUI_BACKEND_SDL=0,
|
||||
|
|
|
|||
|
|
@ -1274,9 +1274,6 @@ const int availableSystems[]={
|
|||
DIV_SYSTEM_C64_PCM,
|
||||
DIV_SYSTEM_YM2151,
|
||||
DIV_SYSTEM_SEGAPCM,
|
||||
DIV_SYSTEM_SEGAPCM_COMPAT,
|
||||
DIV_SYSTEM_YM2610,
|
||||
DIV_SYSTEM_YM2610_EXT,
|
||||
DIV_SYSTEM_YM2610_FULL,
|
||||
DIV_SYSTEM_YM2610_FULL_EXT,
|
||||
DIV_SYSTEM_YM2610_CSM,
|
||||
|
|
@ -1376,8 +1373,6 @@ const int chipsFM[]={
|
|||
DIV_SYSTEM_YM2612_DUALPCM,
|
||||
DIV_SYSTEM_YM2612_DUALPCM_EXT,
|
||||
DIV_SYSTEM_YM2151,
|
||||
DIV_SYSTEM_YM2610,
|
||||
DIV_SYSTEM_YM2610_EXT,
|
||||
DIV_SYSTEM_YM2610_FULL,
|
||||
DIV_SYSTEM_YM2610_FULL_EXT,
|
||||
DIV_SYSTEM_YM2610_CSM,
|
||||
|
|
@ -1476,7 +1471,6 @@ const int chipsSpecial[]={
|
|||
// sample
|
||||
const int chipsSample[]={
|
||||
DIV_SYSTEM_SEGAPCM,
|
||||
DIV_SYSTEM_SEGAPCM_COMPAT,
|
||||
DIV_SYSTEM_AMIGA,
|
||||
DIV_SYSTEM_QSOUND,
|
||||
DIV_SYSTEM_X1_010,
|
||||
|
|
|
|||
|
|
@ -3988,17 +3988,17 @@ void FurnaceGUI::initSystemPresets() {
|
|||
ENTRY(
|
||||
_("Arcade (YM2151 and SegaPCM)"), {
|
||||
CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""),
|
||||
CH(DIV_SYSTEM_SEGAPCM_COMPAT, 1.0f, 0, "")
|
||||
CH(DIV_SYSTEM_SEGAPCM, 1.0f, 0, "")
|
||||
}
|
||||
);
|
||||
ENTRY(
|
||||
_("Neo Geo CD"), {
|
||||
CH(DIV_SYSTEM_YM2610, 1.0f, 0, "")
|
||||
_("Neo Geo"), {
|
||||
CH(DIV_SYSTEM_YM2610_FULL, 1.0f, 0, "")
|
||||
}
|
||||
);
|
||||
ENTRY(
|
||||
_("Neo Geo CD (extended channel 2)"), {
|
||||
CH(DIV_SYSTEM_YM2610_EXT, 1.0f, 0, "")
|
||||
_("Neo Geo (extended channel 2)"), {
|
||||
CH(DIV_SYSTEM_YM2610_FULL_EXT, 1.0f, 0, "")
|
||||
}
|
||||
);
|
||||
ENTRY(
|
||||
|
|
|
|||
|
|
@ -396,7 +396,6 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
break;
|
||||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT:
|
||||
if (sample->samples>65280) {
|
||||
SAMPLE_WARN(warnLength,_("SegaPCM: maximum sample length is 65280"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -796,8 +796,6 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
|
|||
}
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_YM2610:
|
||||
case DIV_SYSTEM_YM2610_EXT:
|
||||
case DIV_SYSTEM_YM2610_CSM:
|
||||
case DIV_SYSTEM_YM2610_FULL:
|
||||
case DIV_SYSTEM_YM2610_FULL_EXT:
|
||||
|
|
@ -821,7 +819,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
|
|||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) {
|
||||
if (type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) {
|
||||
if (ImGui::Checkbox(_("Disable ExtCh FM macros (compatibility)"),&noExtMacros)) {
|
||||
altered=true;
|
||||
}
|
||||
|
|
@ -2420,8 +2418,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
|
|||
}
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT: {
|
||||
case DIV_SYSTEM_SEGAPCM: {
|
||||
bool oldSlides=flags.getBool("oldSlides",false);
|
||||
|
||||
if (ImGui::Checkbox(_("Legacy slides and pitch (compatibility)"),&oldSlides)) {
|
||||
|
|
|
|||
|
|
@ -189,7 +189,6 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys, DivConfig& flags) {
|
|||
return "YM2414";
|
||||
break;
|
||||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT:
|
||||
return "SegaPCM";
|
||||
break;
|
||||
case DIV_SYSTEM_VRC7:
|
||||
|
|
@ -207,9 +206,7 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys, DivConfig& flags) {
|
|||
case DIV_SYSTEM_SCC:
|
||||
return "SCC";
|
||||
break;
|
||||
case DIV_SYSTEM_YM2610:
|
||||
case DIV_SYSTEM_YM2610_CSM:
|
||||
case DIV_SYSTEM_YM2610_EXT:
|
||||
case DIV_SYSTEM_YM2610_FULL:
|
||||
case DIV_SYSTEM_YM2610_FULL_EXT:
|
||||
return "YM2610";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue