mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-26 14:33:01 +00:00
prepare for 0.6pre3
OPN: add flag to make ExtCh op 1 be the only one controlling FB GUI: move Arcade presets to top GUI: fix YM2612 CSM not having flags
This commit is contained in:
parent
72ff7ad11a
commit
a09ad00e48
17 changed files with 549 additions and 499 deletions
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.tildearrow.furnace"
|
package="org.tildearrow.furnace"
|
||||||
android:versionCode="132"
|
android:versionCode="133"
|
||||||
android:versionName="0.6pre2"
|
android:versionName="0.6pre3"
|
||||||
android:installLocation="auto">
|
android:installLocation="auto">
|
||||||
|
|
||||||
<!-- OpenGL ES 2.0 -->
|
<!-- OpenGL ES 2.0 -->
|
||||||
|
|
|
@ -32,6 +32,7 @@ these fields are 0 in format versions prior to 100 (0.6pre1).
|
||||||
|
|
||||||
the format versions are:
|
the format versions are:
|
||||||
|
|
||||||
|
- 133: Furnace 0.6pre3
|
||||||
- 132: Furnace 0.6pre2
|
- 132: Furnace 0.6pre2
|
||||||
- 131: Furnace dev131
|
- 131: Furnace dev131
|
||||||
- 130: Furnace dev130
|
- 130: Furnace dev130
|
||||||
|
|
|
@ -15,17 +15,17 @@
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleLongVersionString</key>
|
<key>CFBundleLongVersionString</key>
|
||||||
<string>0.6pre2</string>
|
<string>0.6pre3</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>Furnace</string>
|
<string>Furnace</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>0.6pre2</string>
|
<string>0.6pre3</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>0.6pre2</string>
|
<string>0.6pre3</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
<key>NSHighResolutionCapable</key>
|
<key>NSHighResolutionCapable</key>
|
||||||
|
|
|
@ -47,8 +47,8 @@
|
||||||
#define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock();
|
#define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock();
|
||||||
#define BUSY_END isBusy.unlock(); softLocked=false;
|
#define BUSY_END isBusy.unlock(); softLocked=false;
|
||||||
|
|
||||||
#define DIV_VERSION "0.6pre2"
|
#define DIV_VERSION "0.6pre3"
|
||||||
#define DIV_ENGINE_VERSION 132
|
#define DIV_ENGINE_VERSION 133
|
||||||
// for imports
|
// for imports
|
||||||
#define DIV_VERSION_MOD 0xff01
|
#define DIV_VERSION_MOD 0xff01
|
||||||
#define DIV_VERSION_FC 0xff02
|
#define DIV_VERSION_FC 0xff02
|
||||||
|
|
|
@ -2511,17 +2511,25 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExtCh compat flag
|
// ExtCh compat flag
|
||||||
if (ds.version<125) {
|
for (int i=0; i<ds.systemLen; i++) {
|
||||||
for (int i=0; i<ds.systemLen; i++) {
|
if (ds.system[i]==DIV_SYSTEM_YM2612_EXT ||
|
||||||
if (ds.system[i]==DIV_SYSTEM_YM2612_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2612_DUALPCM_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2612_DUALPCM_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2610_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2610_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2610_FULL_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2610_FULL_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2610B_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2610B_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2203_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2203_EXT ||
|
ds.system[i]==DIV_SYSTEM_YM2608_EXT ||
|
||||||
ds.system[i]==DIV_SYSTEM_YM2608_EXT) {
|
ds.system[i]==DIV_SYSTEM_YM2612_CSM ||
|
||||||
|
ds.system[i]==DIV_SYSTEM_YM2203_CSM ||
|
||||||
|
ds.system[i]==DIV_SYSTEM_YM2608_CSM ||
|
||||||
|
ds.system[i]==DIV_SYSTEM_YM2610_CSM ||
|
||||||
|
ds.system[i]==DIV_SYSTEM_YM2610B_CSM) {
|
||||||
|
if (ds.version<125) {
|
||||||
ds.systemFlags[i].set("noExtMacros",true);
|
ds.systemFlags[i].set("noExtMacros",true);
|
||||||
}
|
}
|
||||||
|
if (ds.version<133) {
|
||||||
|
ds.systemFlags[i].set("fbAllOps",true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ class DivPlatformOPN: public DivPlatformFMBase {
|
||||||
unsigned int ayDiv;
|
unsigned int ayDiv;
|
||||||
unsigned char csmChan;
|
unsigned char csmChan;
|
||||||
unsigned char lfoValue;
|
unsigned char lfoValue;
|
||||||
bool extSys, useCombo;
|
bool extSys, useCombo, fbAllOps;
|
||||||
|
|
||||||
DivConfig ayFlags;
|
DivConfig ayFlags;
|
||||||
|
|
||||||
|
@ -173,7 +173,8 @@ class DivPlatformOPN: public DivPlatformFMBase {
|
||||||
csmChan(cc),
|
csmChan(cc),
|
||||||
lfoValue(0),
|
lfoValue(0),
|
||||||
extSys(isExtSys),
|
extSys(isExtSys),
|
||||||
useCombo(false) {}
|
useCombo(false),
|
||||||
|
fbAllOps(false) {}
|
||||||
public:
|
public:
|
||||||
void setCombo(bool combo) {
|
void setCombo(bool combo) {
|
||||||
useCombo=combo;
|
useCombo=combo;
|
||||||
|
|
|
@ -1250,6 +1250,7 @@ void DivPlatformGenesis::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
ladder=flags.getBool("ladderEffect",false);
|
ladder=flags.getBool("ladderEffect",false);
|
||||||
noExtMacros=flags.getBool("noExtMacros",false);
|
noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
OPN2_SetChipType(&fm,ladder?ym3438_mode_ym2612:0);
|
OPN2_SetChipType(&fm,ladder?ym3438_mode_ym2612:0);
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
if (useYMFM) {
|
if (useYMFM) {
|
||||||
|
|
|
@ -46,7 +46,9 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) {
|
||||||
|
|
||||||
if (opChan[ch].insChanged) {
|
if (opChan[ch].insChanged) {
|
||||||
chan[2].state.alg=ins->fm.alg;
|
chan[2].state.alg=ins->fm.alg;
|
||||||
chan[2].state.fb=ins->fm.fb;
|
if (ch==0 || fbAllOps) {
|
||||||
|
chan[2].state.fb=ins->fm.fb;
|
||||||
|
}
|
||||||
chan[2].state.fms=ins->fm.fms;
|
chan[2].state.fms=ins->fm.fms;
|
||||||
chan[2].state.ams=ins->fm.ams;
|
chan[2].state.ams=ins->fm.ams;
|
||||||
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
||||||
|
|
|
@ -1041,6 +1041,7 @@ void DivPlatformYM2203::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
noExtMacros=flags.getBool("noExtMacros",false);
|
noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
rate=fm->sample_rate(chipClock);
|
rate=fm->sample_rate(chipClock);
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->rate=rate;
|
||||||
|
|
|
@ -44,7 +44,9 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) {
|
||||||
|
|
||||||
if (opChan[ch].insChanged) {
|
if (opChan[ch].insChanged) {
|
||||||
chan[2].state.alg=ins->fm.alg;
|
chan[2].state.alg=ins->fm.alg;
|
||||||
chan[2].state.fb=ins->fm.fb;
|
if (ch==0 || fbAllOps) {
|
||||||
|
chan[2].state.fb=ins->fm.fb;
|
||||||
|
}
|
||||||
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1538,6 +1538,7 @@ void DivPlatformYM2608::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
noExtMacros=flags.getBool("noExtMacros",false);
|
noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
rate=fm->sample_rate(chipClock);
|
rate=fm->sample_rate(chipClock);
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->rate=rate;
|
||||||
|
|
|
@ -44,7 +44,9 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) {
|
||||||
|
|
||||||
if (opChan[ch].insChanged) {
|
if (opChan[ch].insChanged) {
|
||||||
chan[2].state.alg=ins->fm.alg;
|
chan[2].state.alg=ins->fm.alg;
|
||||||
chan[2].state.fb=ins->fm.fb;
|
if (ch==0 || fbAllOps) {
|
||||||
|
chan[2].state.fb=ins->fm.fb;
|
||||||
|
}
|
||||||
chan[2].state.fms=ins->fm.fms;
|
chan[2].state.fms=ins->fm.fms;
|
||||||
chan[2].state.ams=ins->fm.ams;
|
chan[2].state.ams=ins->fm.ams;
|
||||||
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
chan[2].state.op[ordch]=ins->fm.op[ordch];
|
||||||
|
|
|
@ -40,7 +40,9 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) {
|
||||||
|
|
||||||
if (opChan[ch].insChanged) {
|
if (opChan[ch].insChanged) {
|
||||||
chan[extChanOffs].state.alg=ins->fm.alg;
|
chan[extChanOffs].state.alg=ins->fm.alg;
|
||||||
chan[extChanOffs].state.fb=ins->fm.fb;
|
if (ch==0 || fbAllOps) {
|
||||||
|
chan[extChanOffs].state.fb=ins->fm.fb;
|
||||||
|
}
|
||||||
chan[extChanOffs].state.fms=ins->fm.fms;
|
chan[extChanOffs].state.fms=ins->fm.fms;
|
||||||
chan[extChanOffs].state.ams=ins->fm.ams;
|
chan[extChanOffs].state.ams=ins->fm.ams;
|
||||||
chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch];
|
chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch];
|
||||||
|
|
|
@ -40,7 +40,9 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) {
|
||||||
|
|
||||||
if (opChan[ch].insChanged) {
|
if (opChan[ch].insChanged) {
|
||||||
chan[extChanOffs].state.alg=ins->fm.alg;
|
chan[extChanOffs].state.alg=ins->fm.alg;
|
||||||
chan[extChanOffs].state.fb=ins->fm.fb;
|
if (ch==0 || fbAllOps) {
|
||||||
|
chan[extChanOffs].state.fb=ins->fm.fb;
|
||||||
|
}
|
||||||
chan[extChanOffs].state.fms=ins->fm.fms;
|
chan[extChanOffs].state.fms=ins->fm.fms;
|
||||||
chan[extChanOffs].state.ams=ins->fm.ams;
|
chan[extChanOffs].state.ams=ins->fm.ams;
|
||||||
chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch];
|
chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch];
|
||||||
|
|
|
@ -221,6 +221,7 @@ class DivPlatformYM2610Base: public DivPlatformOPN {
|
||||||
}
|
}
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
noExtMacros=flags.getBool("noExtMacros",false);
|
noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
rate=fm->sample_rate(chipClock);
|
rate=fm->sample_rate(chipClock);
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->rate=rate;
|
||||||
|
|
|
@ -1114,474 +1114,6 @@ void FurnaceGUI::initSystemPresets() {
|
||||||
);
|
);
|
||||||
CATEGORY_END;
|
CATEGORY_END;
|
||||||
|
|
||||||
CATEGORY_BEGIN("FM","chips which use frequency modulation (FM) to generate sound.\nsome of these also pack more (like square and sample channels).");
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2151 (OPM)", {
|
|
||||||
CH(DIV_SYSTEM_YM2151, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2203 (OPN)", {
|
|
||||||
CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2203 (extended channel 3)", {
|
|
||||||
CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2608 (OPNA)", {
|
|
||||||
CH(DIV_SYSTEM_YM2608, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2608 (extended channel 3)", {
|
|
||||||
CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2610 (OPNB)", {
|
|
||||||
CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2610 (extended channel 2)", {
|
|
||||||
CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2610B (OPNB2)", {
|
|
||||||
CH(DIV_SYSTEM_YM2610B, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2610B (extended channel 3)", {
|
|
||||||
CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2612 (OPN2)", {
|
|
||||||
CH(DIV_SYSTEM_YM2612, 64, 0, "ladderEffect=true")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2612 (extended channel 3)", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "ladderEffect=true")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2612 (OPN2) CSM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "ladderEffect=true")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2612 (OPN2) with DualPCM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "ladderEffect=true")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2612 (extended channel 3) with DualPCM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "ladderEffect=true")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2413 (OPLL)", {
|
|
||||||
CH(DIV_SYSTEM_OPLL, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2413 (drums mode)", {
|
|
||||||
CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2414 (OPZ)", {
|
|
||||||
CH(DIV_SYSTEM_OPZ, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3438 (OPN2C)", {
|
|
||||||
CH(DIV_SYSTEM_YM2612, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3438 (extended channel 3)", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3438 (OPN2C) CSM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3438 (OPN2C) with DualPCM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3438 (extended channel 3) with DualPCM", {
|
|
||||||
CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3526 (OPL)", {
|
|
||||||
CH(DIV_SYSTEM_OPL, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3526 (drums mode)", {
|
|
||||||
CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha Y8950", {
|
|
||||||
CH(DIV_SYSTEM_Y8950, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha Y8950 (drums mode)", {
|
|
||||||
CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3812 (OPL2)", {
|
|
||||||
CH(DIV_SYSTEM_OPL2, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM3812 (drums mode)", {
|
|
||||||
CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YMF262 (OPL3)", {
|
|
||||||
CH(DIV_SYSTEM_OPL3, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YMF262 (drums mode)", {
|
|
||||||
CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (settings.hiddenSystems) {
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YMU759 (MA-2)", {
|
|
||||||
CH(DIV_SYSTEM_YMU759, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
CATEGORY_END;
|
|
||||||
|
|
||||||
CATEGORY_BEGIN("Square","these chips generate square/pulse tones only (but may include noise).");
|
|
||||||
ENTRY(
|
|
||||||
"TI SN76489", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=1")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"TI SN76489A", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=4")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"TI SN76496", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"NCR 8496", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=6")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Tandy PSSJ 3-voice sound", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=7")
|
|
||||||
// 8 bit DAC
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Sega PSG (SN76489-like)", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, ""),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Sega PSG (SN76489-like, Stereo)", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"TI SN94624", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0,
|
|
||||||
"clockSel=6\n"
|
|
||||||
"chipType=8\n"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"TI SN76494", {
|
|
||||||
CH(DIV_SYSTEM_SMS, 64, 0,
|
|
||||||
"clockSel=6\n"
|
|
||||||
"chipType=9\n"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Toshiba T6W28", {
|
|
||||||
CH(DIV_SYSTEM_T6W28, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"AY-3-8910", {
|
|
||||||
CH(DIV_SYSTEM_AY8910, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"AY-3-8914", {
|
|
||||||
CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YM2149(F)", {
|
|
||||||
CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Philips SAA1099", {
|
|
||||||
CH(DIV_SYSTEM_SAA1099, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"PC Speaker", {
|
|
||||||
CH(DIV_SYSTEM_PCSPKR, 32, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Pokémon Mini", {
|
|
||||||
CH(DIV_SYSTEM_POKEMINI, 32, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Commodore VIC", {
|
|
||||||
CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"OKI MSM5232", {
|
|
||||||
CH(DIV_SYSTEM_MSM5232, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Pong", {
|
|
||||||
CH(DIV_SYSTEM_PONG, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
CATEGORY_END;
|
|
||||||
|
|
||||||
CATEGORY_BEGIN("Sample","chips/systems which use PCM or ADPCM samples for sound synthesis.");
|
|
||||||
ENTRY(
|
|
||||||
"Amiga", {
|
|
||||||
CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1")
|
|
||||||
},
|
|
||||||
"tickRate=50"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"SegaPCM", {
|
|
||||||
CH(DIV_SYSTEM_SEGAPCM, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Capcom QSound", {
|
|
||||||
CH(DIV_SYSTEM_QSOUND, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Seta/Allumer X1-010", {
|
|
||||||
CH(DIV_SYSTEM_X1_010, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Yamaha YMZ280B (PCMD8)", {
|
|
||||||
CH(DIV_SYSTEM_YMZ280B, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Ricoh RF5C68", {
|
|
||||||
CH(DIV_SYSTEM_RF5C68, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"OKI MSM6258", {
|
|
||||||
CH(DIV_SYSTEM_MSM6258, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"OKI MSM6295", {
|
|
||||||
CH(DIV_SYSTEM_MSM6295, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"SNES", {
|
|
||||||
CH(DIV_SYSTEM_SNES, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Konami K007232", {
|
|
||||||
CH(DIV_SYSTEM_K007232, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Irem GA20", {
|
|
||||||
CH(DIV_SYSTEM_GA20, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Generic PCM DAC", {
|
|
||||||
CH(DIV_SYSTEM_PCM_DAC, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
CATEGORY_END;
|
|
||||||
|
|
||||||
CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound.");
|
|
||||||
ENTRY(
|
|
||||||
"PC Engine", {
|
|
||||||
CH(DIV_SYSTEM_PCE, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Commodore PET (pseudo-wavetable)", {
|
|
||||||
CH(DIV_SYSTEM_PET, 64, 0, "")
|
|
||||||
},
|
|
||||||
"tickRate=50"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Konami Bubble System WSG", {
|
|
||||||
CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Konami SCC", {
|
|
||||||
CH(DIV_SYSTEM_SCC, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Konami SCC+", {
|
|
||||||
CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Namco WSG", {
|
|
||||||
CH(DIV_SYSTEM_NAMCO, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Namco C15 (8-channel mono)", {
|
|
||||||
CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Namco C30 (8-channel stereo)", {
|
|
||||||
CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Namco 163", {
|
|
||||||
CH(DIV_SYSTEM_N163, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Famicom Disk System (chip)", {
|
|
||||||
CH(DIV_SYSTEM_FDS, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"WonderSwan", {
|
|
||||||
CH(DIV_SYSTEM_SWAN, 64, 0, "")
|
|
||||||
},
|
|
||||||
"tickRate=75.47169811320754716981"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Virtual Boy", {
|
|
||||||
CH(DIV_SYSTEM_VBOY, 64, 0, "")
|
|
||||||
},
|
|
||||||
"tickRate=50.2734877734878"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Seta/Allumer X1-010", {
|
|
||||||
CH(DIV_SYSTEM_X1_010, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
CATEGORY_END;
|
|
||||||
|
|
||||||
CATEGORY_BEGIN("Specialized","chips/systems with unique sound synthesis methods.");
|
|
||||||
ENTRY(
|
|
||||||
"MOS Technology SID (6581)", {
|
|
||||||
CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1")
|
|
||||||
},
|
|
||||||
"tickRate=50.1245421"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"MOS Technology SID (8580)", {
|
|
||||||
CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1")
|
|
||||||
},
|
|
||||||
"tickRate=50.1245421"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Microchip AY8930", {
|
|
||||||
CH(DIV_SYSTEM_AY8930, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Game Boy", {
|
|
||||||
CH(DIV_SYSTEM_GB, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Atari Lynx", {
|
|
||||||
CH(DIV_SYSTEM_LYNX, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"POKEY", {
|
|
||||||
CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1")
|
|
||||||
},
|
|
||||||
"tickRate=50"
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Atari TIA", {
|
|
||||||
CH(DIV_SYSTEM_TIA, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"NES (Ricoh 2A03)", {
|
|
||||||
CH(DIV_SYSTEM_NES, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"Commander X16 (VERA only)", {
|
|
||||||
CH(DIV_SYSTEM_VERA, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ENTRY(
|
|
||||||
"ZX Spectrum (beeper only)", {
|
|
||||||
CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if (settings.hiddenSystems) {
|
|
||||||
ENTRY(
|
|
||||||
"Dummy System", {
|
|
||||||
CH(DIV_SYSTEM_DUMMY, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
ENTRY(
|
|
||||||
"tildearrow Sound Unit", {
|
|
||||||
CH(DIV_SYSTEM_SOUND_UNIT, 64, 0, "")
|
|
||||||
}
|
|
||||||
);
|
|
||||||
CATEGORY_END;
|
|
||||||
|
|
||||||
CATEGORY_BEGIN("Arcade systems","INSERT COIN");
|
CATEGORY_BEGIN("Arcade systems","INSERT COIN");
|
||||||
ENTRY(
|
ENTRY(
|
||||||
"Pong", {
|
"Pong", {
|
||||||
|
@ -2564,6 +2096,475 @@ void FurnaceGUI::initSystemPresets() {
|
||||||
);
|
);
|
||||||
CATEGORY_END;
|
CATEGORY_END;
|
||||||
|
|
||||||
|
|
||||||
|
CATEGORY_BEGIN("FM","chips which use frequency modulation (FM) to generate sound.\nsome of these also pack more (like square and sample channels).");
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2151 (OPM)", {
|
||||||
|
CH(DIV_SYSTEM_YM2151, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2203 (OPN)", {
|
||||||
|
CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2203 (extended channel 3)", {
|
||||||
|
CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2608 (OPNA)", {
|
||||||
|
CH(DIV_SYSTEM_YM2608, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2608 (extended channel 3)", {
|
||||||
|
CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2610 (OPNB)", {
|
||||||
|
CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2610 (extended channel 2)", {
|
||||||
|
CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2610B (OPNB2)", {
|
||||||
|
CH(DIV_SYSTEM_YM2610B, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2610B (extended channel 3)", {
|
||||||
|
CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2612 (OPN2)", {
|
||||||
|
CH(DIV_SYSTEM_YM2612, 64, 0, "ladderEffect=true")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2612 (extended channel 3)", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "ladderEffect=true")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2612 (OPN2) CSM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "ladderEffect=true")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2612 (OPN2) with DualPCM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "ladderEffect=true")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2612 (extended channel 3) with DualPCM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "ladderEffect=true")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2413 (OPLL)", {
|
||||||
|
CH(DIV_SYSTEM_OPLL, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2413 (drums mode)", {
|
||||||
|
CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2414 (OPZ)", {
|
||||||
|
CH(DIV_SYSTEM_OPZ, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3438 (OPN2C)", {
|
||||||
|
CH(DIV_SYSTEM_YM2612, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3438 (extended channel 3)", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3438 (OPN2C) CSM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3438 (OPN2C) with DualPCM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3438 (extended channel 3) with DualPCM", {
|
||||||
|
CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3526 (OPL)", {
|
||||||
|
CH(DIV_SYSTEM_OPL, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3526 (drums mode)", {
|
||||||
|
CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha Y8950", {
|
||||||
|
CH(DIV_SYSTEM_Y8950, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha Y8950 (drums mode)", {
|
||||||
|
CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3812 (OPL2)", {
|
||||||
|
CH(DIV_SYSTEM_OPL2, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM3812 (drums mode)", {
|
||||||
|
CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YMF262 (OPL3)", {
|
||||||
|
CH(DIV_SYSTEM_OPL3, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YMF262 (drums mode)", {
|
||||||
|
CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (settings.hiddenSystems) {
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YMU759 (MA-2)", {
|
||||||
|
CH(DIV_SYSTEM_YMU759, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
CATEGORY_END;
|
||||||
|
|
||||||
|
CATEGORY_BEGIN("Square","these chips generate square/pulse tones only (but may include noise).");
|
||||||
|
ENTRY(
|
||||||
|
"TI SN76489", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=1")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"TI SN76489A", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=4")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"TI SN76496", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"NCR 8496", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=6")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Tandy PSSJ 3-voice sound", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=7")
|
||||||
|
// 8 bit DAC
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Sega PSG (SN76489-like)", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, ""),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Sega PSG (SN76489-like, Stereo)", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"TI SN94624", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0,
|
||||||
|
"clockSel=6\n"
|
||||||
|
"chipType=8\n"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"TI SN76494", {
|
||||||
|
CH(DIV_SYSTEM_SMS, 64, 0,
|
||||||
|
"clockSel=6\n"
|
||||||
|
"chipType=9\n"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Toshiba T6W28", {
|
||||||
|
CH(DIV_SYSTEM_T6W28, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"AY-3-8910", {
|
||||||
|
CH(DIV_SYSTEM_AY8910, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"AY-3-8914", {
|
||||||
|
CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YM2149(F)", {
|
||||||
|
CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Philips SAA1099", {
|
||||||
|
CH(DIV_SYSTEM_SAA1099, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"PC Speaker", {
|
||||||
|
CH(DIV_SYSTEM_PCSPKR, 32, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Pokémon Mini", {
|
||||||
|
CH(DIV_SYSTEM_POKEMINI, 32, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Commodore VIC", {
|
||||||
|
CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"OKI MSM5232", {
|
||||||
|
CH(DIV_SYSTEM_MSM5232, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Pong", {
|
||||||
|
CH(DIV_SYSTEM_PONG, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
CATEGORY_END;
|
||||||
|
|
||||||
|
CATEGORY_BEGIN("Sample","chips/systems which use PCM or ADPCM samples for sound synthesis.");
|
||||||
|
ENTRY(
|
||||||
|
"Amiga", {
|
||||||
|
CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1")
|
||||||
|
},
|
||||||
|
"tickRate=50"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"SegaPCM", {
|
||||||
|
CH(DIV_SYSTEM_SEGAPCM, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Capcom QSound", {
|
||||||
|
CH(DIV_SYSTEM_QSOUND, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Seta/Allumer X1-010", {
|
||||||
|
CH(DIV_SYSTEM_X1_010, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Yamaha YMZ280B (PCMD8)", {
|
||||||
|
CH(DIV_SYSTEM_YMZ280B, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Ricoh RF5C68", {
|
||||||
|
CH(DIV_SYSTEM_RF5C68, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"OKI MSM6258", {
|
||||||
|
CH(DIV_SYSTEM_MSM6258, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"OKI MSM6295", {
|
||||||
|
CH(DIV_SYSTEM_MSM6295, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"SNES", {
|
||||||
|
CH(DIV_SYSTEM_SNES, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Konami K007232", {
|
||||||
|
CH(DIV_SYSTEM_K007232, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Irem GA20", {
|
||||||
|
CH(DIV_SYSTEM_GA20, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Generic PCM DAC", {
|
||||||
|
CH(DIV_SYSTEM_PCM_DAC, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
CATEGORY_END;
|
||||||
|
|
||||||
|
CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound.");
|
||||||
|
ENTRY(
|
||||||
|
"PC Engine", {
|
||||||
|
CH(DIV_SYSTEM_PCE, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Commodore PET (pseudo-wavetable)", {
|
||||||
|
CH(DIV_SYSTEM_PET, 64, 0, "")
|
||||||
|
},
|
||||||
|
"tickRate=50"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Konami Bubble System WSG", {
|
||||||
|
CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Konami SCC", {
|
||||||
|
CH(DIV_SYSTEM_SCC, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Konami SCC+", {
|
||||||
|
CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Namco WSG", {
|
||||||
|
CH(DIV_SYSTEM_NAMCO, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Namco C15 (8-channel mono)", {
|
||||||
|
CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Namco C30 (8-channel stereo)", {
|
||||||
|
CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Namco 163", {
|
||||||
|
CH(DIV_SYSTEM_N163, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Famicom Disk System (chip)", {
|
||||||
|
CH(DIV_SYSTEM_FDS, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"WonderSwan", {
|
||||||
|
CH(DIV_SYSTEM_SWAN, 64, 0, "")
|
||||||
|
},
|
||||||
|
"tickRate=75.47169811320754716981"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Virtual Boy", {
|
||||||
|
CH(DIV_SYSTEM_VBOY, 64, 0, "")
|
||||||
|
},
|
||||||
|
"tickRate=50.2734877734878"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Seta/Allumer X1-010", {
|
||||||
|
CH(DIV_SYSTEM_X1_010, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
CATEGORY_END;
|
||||||
|
|
||||||
|
CATEGORY_BEGIN("Specialized","chips/systems with unique sound synthesis methods.");
|
||||||
|
ENTRY(
|
||||||
|
"MOS Technology SID (6581)", {
|
||||||
|
CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1")
|
||||||
|
},
|
||||||
|
"tickRate=50.1245421"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"MOS Technology SID (8580)", {
|
||||||
|
CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1")
|
||||||
|
},
|
||||||
|
"tickRate=50.1245421"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Microchip AY8930", {
|
||||||
|
CH(DIV_SYSTEM_AY8930, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Game Boy", {
|
||||||
|
CH(DIV_SYSTEM_GB, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Atari Lynx", {
|
||||||
|
CH(DIV_SYSTEM_LYNX, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"POKEY", {
|
||||||
|
CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1")
|
||||||
|
},
|
||||||
|
"tickRate=50"
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Atari TIA", {
|
||||||
|
CH(DIV_SYSTEM_TIA, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"NES (Ricoh 2A03)", {
|
||||||
|
CH(DIV_SYSTEM_NES, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"Commander X16 (VERA only)", {
|
||||||
|
CH(DIV_SYSTEM_VERA, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ENTRY(
|
||||||
|
"ZX Spectrum (beeper only)", {
|
||||||
|
CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (settings.hiddenSystems) {
|
||||||
|
ENTRY(
|
||||||
|
"Dummy System", {
|
||||||
|
CH(DIV_SYSTEM_DUMMY, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
ENTRY(
|
||||||
|
"tildearrow Sound Unit", {
|
||||||
|
CH(DIV_SYSTEM_SOUND_UNIT, 64, 0, "")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
CATEGORY_END;
|
||||||
|
|
||||||
CATEGORY_BEGIN("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program.");
|
CATEGORY_BEGIN("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program.");
|
||||||
ENTRY(
|
ENTRY(
|
||||||
"Sega Genesis", {
|
"Sega Genesis", {
|
||||||
|
|
|
@ -31,10 +31,12 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
case DIV_SYSTEM_YM2612:
|
case DIV_SYSTEM_YM2612:
|
||||||
case DIV_SYSTEM_YM2612_EXT:
|
case DIV_SYSTEM_YM2612_EXT:
|
||||||
case DIV_SYSTEM_YM2612_DUALPCM:
|
case DIV_SYSTEM_YM2612_DUALPCM:
|
||||||
case DIV_SYSTEM_YM2612_DUALPCM_EXT: {
|
case DIV_SYSTEM_YM2612_DUALPCM_EXT:
|
||||||
|
case DIV_SYSTEM_YM2612_CSM: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
bool ladder=flags.getBool("ladderEffect",0);
|
bool ladder=flags.getBool("ladderEffect",0);
|
||||||
bool noExtMacros=flags.getBool("noExtMacros",false);
|
bool noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
bool fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
|
|
||||||
if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
|
@ -59,10 +61,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
if (ImGui::Checkbox("Enable DAC distortion",&ladder)) {
|
if (ImGui::Checkbox("Enable DAC distortion",&ladder)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT) {
|
if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) {
|
||||||
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) {
|
||||||
|
altered=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
|
@ -70,6 +75,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
flags.set("clockSel",clockSel);
|
flags.set("clockSel",clockSel);
|
||||||
flags.set("ladderEffect",ladder);
|
flags.set("ladderEffect",ladder);
|
||||||
flags.set("noExtMacros",noExtMacros);
|
flags.set("noExtMacros",noExtMacros);
|
||||||
|
flags.set("fbAllOps",fbAllOps);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -457,12 +463,15 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
}
|
}
|
||||||
case DIV_SYSTEM_YM2610:
|
case DIV_SYSTEM_YM2610:
|
||||||
case DIV_SYSTEM_YM2610_EXT:
|
case DIV_SYSTEM_YM2610_EXT:
|
||||||
|
case DIV_SYSTEM_YM2610_CSM:
|
||||||
case DIV_SYSTEM_YM2610_FULL:
|
case DIV_SYSTEM_YM2610_FULL:
|
||||||
case DIV_SYSTEM_YM2610_FULL_EXT:
|
case DIV_SYSTEM_YM2610_FULL_EXT:
|
||||||
case DIV_SYSTEM_YM2610B:
|
case DIV_SYSTEM_YM2610B:
|
||||||
case DIV_SYSTEM_YM2610B_EXT: {
|
case DIV_SYSTEM_YM2610B_EXT:
|
||||||
|
case DIV_SYSTEM_YM2610B_CSM: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
bool noExtMacros=flags.getBool("noExtMacros",false);
|
bool noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
bool fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
|
|
||||||
if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) {
|
if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
|
@ -473,16 +482,20 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT) {
|
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 (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) {
|
||||||
|
altered=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
flags.set("clockSel",clockSel);
|
flags.set("clockSel",clockSel);
|
||||||
flags.set("noExtMacros",noExtMacros);
|
flags.set("noExtMacros",noExtMacros);
|
||||||
|
flags.set("fbAllOps",fbAllOps);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -835,10 +848,12 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DIV_SYSTEM_YM2203:
|
case DIV_SYSTEM_YM2203:
|
||||||
case DIV_SYSTEM_YM2203_EXT: {
|
case DIV_SYSTEM_YM2203_EXT:
|
||||||
|
case DIV_SYSTEM_YM2203_CSM: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
int prescale=flags.getInt("prescale",0);
|
int prescale=flags.getInt("prescale",0);
|
||||||
bool noExtMacros=flags.getBool("noExtMacros",false);
|
bool noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
bool fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
||||||
|
@ -879,10 +894,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_YM2203_EXT) {
|
if (type==DIV_SYSTEM_YM2203_EXT || type==DIV_SYSTEM_YM2203_CSM) {
|
||||||
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) {
|
||||||
|
altered=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
|
@ -890,15 +908,18 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
flags.set("clockSel",clockSel);
|
flags.set("clockSel",clockSel);
|
||||||
flags.set("prescale",prescale);
|
flags.set("prescale",prescale);
|
||||||
flags.set("noExtMacros",noExtMacros);
|
flags.set("noExtMacros",noExtMacros);
|
||||||
|
flags.set("fbAllOps",fbAllOps);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DIV_SYSTEM_YM2608:
|
case DIV_SYSTEM_YM2608:
|
||||||
case DIV_SYSTEM_YM2608_EXT: {
|
case DIV_SYSTEM_YM2608_EXT:
|
||||||
|
case DIV_SYSTEM_YM2608_CSM: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
int prescale=flags.getInt("prescale",0);
|
int prescale=flags.getInt("prescale",0);
|
||||||
bool noExtMacros=flags.getBool("noExtMacros",false);
|
bool noExtMacros=flags.getBool("noExtMacros",false);
|
||||||
|
bool fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) {
|
if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) {
|
||||||
|
@ -923,10 +944,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_YM2608_EXT) {
|
if (type==DIV_SYSTEM_YM2608_EXT || type==DIV_SYSTEM_YM2608_CSM) {
|
||||||
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
if (ImGui::Checkbox("Ins change in ExtCh operator 2-4 affects FB (compatibility)",&fbAllOps)) {
|
||||||
|
altered=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
|
@ -934,6 +958,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
flags.set("clockSel",clockSel);
|
flags.set("clockSel",clockSel);
|
||||||
flags.set("prescale",prescale);
|
flags.set("prescale",prescale);
|
||||||
flags.set("noExtMacros",noExtMacros);
|
flags.set("noExtMacros",noExtMacros);
|
||||||
|
flags.set("fbAllOps",fbAllOps);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue