diff --git a/papers/format.md b/papers/format.md index ab8cacd64..e4b01d2f9 100644 --- a/papers/format.md +++ b/papers/format.md @@ -32,6 +32,8 @@ these fields are 0 in format versions prior to 100 (0.6pre1). the format versions are: +- 135: Furnace dev135 +- 134: Furnace dev134 - 133: Furnace 0.6pre3 - 132: Furnace 0.6pre2 - 131: Furnace dev131 @@ -386,8 +388,38 @@ size | description STR | song author (Japanese) STR | system name (Japanese) STR | album/category/game name (Japanese) + --- | **extra chip output settings (× chipCount)** (>=135) + 4f | chip volume + 4f | chip panning + 4f | chip front/rear balance + --- | **patchbay** (>=135) + 4 | patchbay connection count + 4?? | patchbay + | - see next section for more details. ``` +# patchbay + +Furnace dev135 adds a "patchbay" which allows for arbitrary connection of chip outputs to system outputs. +it eventually will allow connecting outputs to effects and so on. + +a connection is represented as an unsigned int in the following format: + +- bit 16-31: source port +- bit 0-15: destination port + +a port is in the following format (hexadecimal): `xxxy` + +- `xxx` (bit 4 to 15) represents an entity. +- `y` (bit 0 to 3) is the port of that entity. + +reserved input entities: +- `000`: system outputs +- `FFF`: "null" entity + +reserved output entities: +- `000` through `01F`: chip outputs + # subsong from version 95 onwards, Furnace supports storing multiple songs on a single file. diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index fb447e32f..de04a1894 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1341,8 +1341,8 @@ String DivEngine::decodeSysDesc(String desc) { int val=0; int curStage=0; int sysID=0; - int sysVol=0; - int sysPan=0; + float sysVol=0; + float sysPan=0; int sysFlags=0; int curSys=0; desc+=' '; // ha @@ -1357,24 +1357,25 @@ String DivEngine::decodeSysDesc(String desc) { curStage++; break; case 1: - sysVol=val; + sysVol=(float)val/64.0f; curStage++; break; case 2: - sysPan=val; + sysPan=(float)val/127.0f; curStage++; break; case 3: sysFlags=val; if (sysID!=0) { - if (sysVol<-128) sysVol=-128; - if (sysVol>127) sysVol=127; - if (sysPan<-128) sysPan=-128; - if (sysPan>127) sysPan=127; + if (sysVol<-1.0f) sysVol=-1.0f; + if (sysVol>1.0f) sysVol=1.0f; + if (sysPan<-1.0f) sysPan=-1.0f; + if (sysPan>1.0f) sysPan=1.0f; newDesc.set(fmt::sprintf("id%d",curSys),sysID); newDesc.set(fmt::sprintf("vol%d",curSys),sysVol); newDesc.set(fmt::sprintf("pan%d",curSys),sysPan); + newDesc.set(fmt::sprintf("fr%d",curSys),0.0f); DivConfig newFlagsC; newFlagsC.clear(); convertOldFlags((unsigned int)sysFlags,newFlagsC,systemFromFileFur(sysID)); @@ -1404,7 +1405,7 @@ String DivEngine::decodeSysDesc(String desc) { return newDesc.toBase64(); } -void DivEngine::initSongWithDesc(const char* description, bool inBase64) { +void DivEngine::initSongWithDesc(const char* description, bool inBase64, bool oldVol) { int chanCount=0; DivConfig c; if (inBase64) { @@ -1423,9 +1424,16 @@ void DivEngine::initSongWithDesc(const char* description, bool inBase64) { song.system[index]=DIV_SYSTEM_NULL; break; } - song.systemVol[index]=c.getInt(fmt::sprintf("vol%d",index),DIV_SYSTEM_NULL); - song.systemPan[index]=c.getInt(fmt::sprintf("pan%d",index),DIV_SYSTEM_NULL); + song.systemVol[index]=c.getFloat(fmt::sprintf("vol%d",index),1.0f); + song.systemPan[index]=c.getFloat(fmt::sprintf("pan%d",index),0.0f); + song.systemPanFR[index]=c.getFloat(fmt::sprintf("fr%d",index),0.0f); song.systemFlags[index].clear(); + + if (oldVol) { + song.systemVol[index]/=64.0f; + song.systemPan[index]/=127.0f; + } + String flags=c.getString(fmt::sprintf("flags%d",index),""); song.systemFlags[index].loadFromBase64(flags.c_str()); } @@ -1675,8 +1683,9 @@ bool DivEngine::addSystem(DivSystem which) { BUSY_BEGIN; saveLock.lock(); song.system[song.systemLen]=which; - song.systemVol[song.systemLen]=64; + song.systemVol[song.systemLen]=1.0; song.systemPan[song.systemLen]=0; + song.systemPanFR[song.systemLen]=0; song.systemFlags[song.systemLen++].clear(); recalcChans(); saveLock.unlock(); @@ -1721,6 +1730,7 @@ bool DivEngine::removeSystem(int index, bool preserveOrder) { song.system[i]=song.system[i+1]; song.systemVol[i]=song.systemVol[i+1]; song.systemPan[i]=song.systemPan[i+1]; + song.systemPanFR[i]=song.systemPanFR[i+1]; song.systemFlags[i]=song.systemFlags[i+1]; } recalcChans(); @@ -1835,17 +1845,21 @@ bool DivEngine::swapSystem(int src, int dest, bool preserveOrder) { } DivSystem srcSystem=song.system[src]; + float srcVol=song.systemVol[src]; + float srcPan=song.systemPan[src]; + float srcPanFR=song.systemPanFR[src]; song.system[src]=song.system[dest]; song.system[dest]=srcSystem; - song.systemVol[src]^=song.systemVol[dest]; - song.systemVol[dest]^=song.systemVol[src]; - song.systemVol[src]^=song.systemVol[dest]; + song.systemVol[src]=song.systemVol[dest]; + song.systemVol[dest]=srcVol; - song.systemPan[src]^=song.systemPan[dest]; - song.systemPan[dest]^=song.systemPan[src]; - song.systemPan[src]^=song.systemPan[dest]; + song.systemPan[src]=song.systemPan[dest]; + song.systemPan[dest]=srcPan; + + song.systemPanFR[src]=song.systemPanFR[dest]; + song.systemPanFR[dest]=srcPanFR; // I am kinda scared to use std::swap DivConfig oldFlags=song.systemFlags[src]; @@ -4265,13 +4279,15 @@ bool DivEngine::init() { if (!hasLoadedSomething) { logD("setting default preset"); String preset=getConfString("initialSys2",""); + bool oldVol=getConfInt("configVersion",DIV_ENGINE_VERSION)<135; if (preset.empty()) { // try loading old preset preset=decodeSysDesc(getConfString("initialSys","")); + oldVol=false; } logD("preset size %ld",preset.size()); if (preset.size()>0 && (preset.size()&3)==0) { - initSongWithDesc(preset.c_str()); + initSongWithDesc(preset.c_str(),true,oldVol); } String sysName=getConfString("initialSysName",""); if (sysName=="") { diff --git a/src/engine/engine.h b/src/engine/engine.h index 8bced933d..a06684d97 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -47,8 +47,8 @@ #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); #define BUSY_END isBusy.unlock(); softLocked=false; -#define DIV_VERSION "dev134" -#define DIV_ENGINE_VERSION 134 +#define DIV_VERSION "dev135" +#define DIV_ENGINE_VERSION 135 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 @@ -476,7 +476,7 @@ class DivEngine { bool deinitAudioBackend(bool dueToSwitchMaster=false); void registerSystems(); - void initSongWithDesc(const char* description, bool inBase64=true); + void initSongWithDesc(const char* description, bool inBase64=true, bool oldVol=false); void exchangeIns(int one, int two); void swapChannels(int src, int dest); diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 99e4e2236..a2591f014 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -939,13 +939,13 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.systemLen=2; ds.system[0]=DIV_SYSTEM_YM2612; ds.system[1]=DIV_SYSTEM_SMS; - ds.systemVol[1]=32; + ds.systemVol[1]=0.5f; } if (ds.system[0]==DIV_SYSTEM_GENESIS_EXT) { ds.systemLen=2; ds.system[0]=DIV_SYSTEM_YM2612_EXT; ds.system[1]=DIV_SYSTEM_SMS; - ds.systemVol[1]=32; + ds.systemVol[1]=0.5f; } if (ds.system[0]==DIV_SYSTEM_ARCADE) { ds.systemLen=2; @@ -1830,14 +1830,18 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { // system volume for (int i=0; i>3)|(ds.systemVol[i]&128); + ds.systemVol[i+1]=ds.systemVol[i]*0.375f; } } if (ds.system[i]==DIV_SYSTEM_GENESIS_EXT) { ds.system[i]=DIV_SYSTEM_YM2612_EXT; if (i<31) { ds.system[i+1]=DIV_SYSTEM_SMS; - ds.systemVol[i+1]=(((ds.systemVol[i]&127)*3)>>3)|(ds.systemVol[i]&128); + ds.systemVol[i+1]=ds.systemVol[i]*0.375f; } } if (ds.system[i]==DIV_SYSTEM_ARCADE) { @@ -2200,6 +2204,21 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { ds.autoSystem=true; } + // system output config + if (ds.version>=135) { + for (int i=0; i=119) { logD("reading chip flags..."); @@ -4308,11 +4327,11 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { } for (int i=0; iwriteC(song.systemVol[i]); + w->writeC(song.systemVol[i]*64.0f); } for (int i=0; iwriteC(song.systemPan[i]); + w->writeC(song.systemPan[i]*127.0f); } // chip flags (we'll seek here later) @@ -4456,6 +4475,17 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { w->writeString(song.systemNameJ,false); w->writeString(song.categoryJ,false); + // system output config + for (int i=0; iwriteF(song.systemVol[i]); + w->writeF(song.systemPan[i]); + w->writeF(song.systemPanFR[i]); + } + w->writeI(song.patchbay.size()); + for (unsigned int i: song.patchbay) { + w->writeI(i); + } + blockEndSeek=w->tell(); w->seek(blockStartSeek,SEEK_SET); w->writeI(blockEndSeek-blockStartSeek-4); diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 73ec8df53..ad9a34709 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1720,10 +1720,10 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi disCont[i].fillBuf(disCont[i].runtotal,disCont[i].lastAvail,size-disCont[i].lastAvail); } - // TODO: handle more than 2 outputs + // TODO: patchbay for (int i=0; igetPostAmp(); volR*=disCont[i].dispatch->getPostAmp(); if (disCont[i].dispatch->getOutputCount()>1) { diff --git a/src/engine/song.h b/src/engine/song.h index d7c287368..3fbe5e27f 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -238,8 +238,9 @@ struct DivSong { // system DivSystem system[DIV_MAX_CHIPS]; unsigned char systemLen; - signed char systemVol[DIV_MAX_CHIPS]; - signed char systemPan[DIV_MAX_CHIPS]; + float systemVol[DIV_MAX_CHIPS]; + float systemPan[DIV_MAX_CHIPS]; + float systemPanFR[DIV_MAX_CHIPS]; DivConfig systemFlags[DIV_MAX_CHIPS]; // song information @@ -334,6 +335,7 @@ struct DivSong { std::vector sample; std::vector subsong; + std::vector patchbay; DivInstrument nullIns, nullInsOPLL, nullInsOPL, nullInsOPLDrums, nullInsQSound; DivWavetable nullWave; @@ -438,8 +440,9 @@ struct DivSong { oldArpStrategy(false) { for (int i=0; isong.systemLen; i++) { snprintf(id,31,"MixS%d",i); - bool doInvert=e->song.systemVol[i]&128; - signed char vol=e->song.systemVol[i]&127; + bool doInvert=e->song.systemVol[i]<0; + float vol=fabs(e->song.systemVol[i]); ImGui::PushID(id); ImGui::Text("%d. %s",i+1,getSystemName(e->song.system[i])); ImGui::SameLine(ImGui::GetWindowWidth()-(82.0f*dpiScale)); if (ImGui::Checkbox("Invert",&doInvert)) { - e->song.systemVol[i]^=128; + e->song.systemVol[i]=-e->song.systemVol[i]; MARK_MODIFIED; } - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale)); - if (CWSliderScalar("Volume",ImGuiDataType_S8,&vol,&_ZERO,&_ONE_HUNDRED_TWENTY_SEVEN)) { - e->song.systemVol[i]=(e->song.systemVol[i]&128)|vol; + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Volume",&vol,0,2)) { + if (doInvert) { + if (vol<0.0001) vol=0.0001; + } + if (vol<0) vol=0; + if (vol>10) vol=10; + e->song.systemVol[i]=(doInvert)?-vol:vol; MARK_MODIFIED; } rightClickable - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale)); - if (CWSliderScalar("Panning",ImGuiDataType_S8,&e->song.systemPan[i],&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN)) { + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Panning",&e->song.systemPan[i],-1.0f,1.0f)) { + if (e->song.systemPan[i]<-1.0f) e->song.systemPan[i]=-1.0f; + if (e->song.systemPan[i]>1.0f) e->song.systemPan[i]=1.0f; + MARK_MODIFIED; + } rightClickable + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Front/Rear",&e->song.systemPanFR[i],-1.0f,1.0f)) { + if (e->song.systemPanFR[i]<-1.0f) e->song.systemPanFR[i]=-1.0f; + if (e->song.systemPanFR[i]>1.0f) e->song.systemPanFR[i]=1.0f; MARK_MODIFIED; } rightClickable diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index f0e4fe928..921fa88ac 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -45,39 +45,39 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Game consoles","let's play some chiptune making games!"); ENTRY( "Sega Genesis", { - CH(DIV_SYSTEM_YM2612, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (CSM)", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (DualPCM)", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (DualPCM, extended channel 3)", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (with Sega CD)", { - CH(DIV_SYSTEM_YM2612, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, ""), - CH(DIV_SYSTEM_RF5C68, 64, 0, + CH(DIV_SYSTEM_YM2612, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2\n" "chipType=1\n" ) @@ -85,9 +85,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Sega Genesis (extended channel 3 with Sega CD)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, ""), - CH(DIV_SYSTEM_RF5C68, 64, 0, + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2\n" "chipType=1\n" ) @@ -95,9 +95,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Sega Genesis (CSM with Sega CD)", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, ""), - CH(DIV_SYSTEM_RF5C68, 64, 0, + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2\n" "chipType=1\n" ) @@ -105,39 +105,39 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Sega Master System", { - CH(DIV_SYSTEM_SMS, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "") } ); ENTRY( "Sega Master System (with FM expansion)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_OPLL, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") } ); ENTRY( "Sega Master System (with FM expansion in drums mode)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "") } ); ENTRY( "Sega Game Gear", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=3") } ); ENTRY( "Game Boy", { - CH(DIV_SYSTEM_GB, 64, 0, "") + CH(DIV_SYSTEM_GB, 1.0f, 0, "") } ); ENTRY( "Neo Geo Pocket", { - CH(DIV_SYSTEM_T6W28, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, -127, + CH(DIV_SYSTEM_T6W28, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, -1.0f, "rate=11025\n" "outDepth=5\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 127, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 1.0f, "rate=11025\n" "outDepth=5\n" ) // don't know what the actual sample rate is @@ -145,106 +145,106 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "NEC PC Engine/TurboGrafx-16", { - CH(DIV_SYSTEM_PCE, 64, 0, "") + CH(DIV_SYSTEM_PCE, 1.0f, 0, "") } ); ENTRY( "NES", { - CH(DIV_SYSTEM_NES, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, "") } ); ENTRY( "Famicom with Konami VRC6", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_VRC6, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_VRC6, 1.0f, 0, "") } ); ENTRY( "Famicom with Konami VRC7", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_VRC7, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_VRC7, 1.0f, 0, "") } ); ENTRY( "Famicom with MMC5", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_MMC5, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_MMC5, 1.0f, 0, "") } ); ENTRY( "Famicom with Sunsoft 5B", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=2") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=2") } ); ENTRY( "Famicom with Namco 163", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_N163, 64, 0, "channels=7") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_N163, 1.0f, 0, "channels=7") } ); ENTRY( "Famicom Disk System", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_FDS, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_FDS, 1.0f, 0, "") } ); ENTRY( "SNES", { - CH(DIV_SYSTEM_SNES, 64, 0, "") + CH(DIV_SYSTEM_SNES, 1.0f, 0, "") } ); ENTRY( "Mattel Intellivision", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=3") } ); ENTRY( "Vectrex", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=4") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=4") } ); ENTRY( "Neo Geo AES", { - CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2610_FULL, 1.0f, 0, "clockSel=1") } ); ENTRY( "Neo Geo AES (extended channel 2)", { - CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2610_FULL_EXT, 1.0f, 0, "clockSel=1") } ); ENTRY( "Atari 2600/7800", { - CH(DIV_SYSTEM_TIA, 64, 0, "") + CH(DIV_SYSTEM_TIA, 1.0f, 0, "") } ); ENTRY( "Atari 7800 + Ballblazer/Commando", { - CH(DIV_SYSTEM_TIA, 64, 0, ""), - CH(DIV_SYSTEM_POKEY, 64, 0, "") + CH(DIV_SYSTEM_TIA, 1.0f, 0, ""), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "") } ); ENTRY( "Atari Lynx", { - CH(DIV_SYSTEM_LYNX, 64, 0, "") + CH(DIV_SYSTEM_LYNX, 1.0f, 0, "") } ); ENTRY( "WonderSwan", { - CH(DIV_SYSTEM_SWAN, 64, 0, "") + CH(DIV_SYSTEM_SWAN, 1.0f, 0, "") }, "tickRate=75.47169811320754716981" ); ENTRY( "Virtual Boy", { - CH(DIV_SYSTEM_VBOY, 64, 0, "") + CH(DIV_SYSTEM_VBOY, 1.0f, 0, "") }, "tickRate=50.2734877734878" ); ENTRY( "Gamate", { - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=9\n" "chipType=0\n" "stereo=true\n" @@ -253,7 +253,7 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Pokémon Mini", { - CH(DIV_SYSTEM_POKEMINI, 32, 0, "") + CH(DIV_SYSTEM_POKEMINI, 0.5f, 0, "") } ); CATEGORY_END; @@ -261,132 +261,132 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Computers","let's get to work on chiptune today."); ENTRY( "Commodore PET", { - CH(DIV_SYSTEM_PET, 64, 0, "") + CH(DIV_SYSTEM_PET, 1.0f, 0, "") }, "tickRate=50" ); ENTRY( "Commodore VIC-20", { - CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_VIC20, 1.0f, 0, "clockSel=1") } ); ENTRY( "Commodore 64 (6581 SID)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (6581 SID + Sound Expander)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL, 64, 0, "") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (6581 SID + Sound Expander in drums mode)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID + Sound Expander)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL, 64, 0, "") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID + Sound Expander in drums mode)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (6581 SID + FM-YAM)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL2, 64, 0, "") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (6581 SID + FM-YAM in drums mode)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID + FM-YAM)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL2, 64, 0, "") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID + FM-YAM in drums mode)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "") }, "tickRate=50.1245421" ); ENTRY( "Amiga", { - CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AMIGA, 1.0f, 0, "clockSel=1") }, "tickRate=50" ); ENTRY( "MSX", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=0\nchipType=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=0\nchipType=1") } ); ENTRY( "MSX + SFG-01", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_YM2151, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "") } ); ENTRY( "MSX + MSX-AUDIO", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_Y8950, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "") } ); ENTRY( "MSX + MSX-AUDIO (drums mode)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "") } ); ENTRY( "MSX + MSX-MUSIC", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_OPLL, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") } ); ENTRY( "MSX + MSX-MUSIC (drums mode)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "") } ); ENTRY( "MSX + Darky", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_AY8930, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_AY8930, 1.0f, 0, "clockSel=11\n" "halfClock=true\n" ), // 3.58MHz - CH(DIV_SYSTEM_AY8930, 64, 0, + CH(DIV_SYSTEM_AY8930, 1.0f, 0, "clockSel=11\n" "halfClock=true\n" ) // 3.58MHz or 3.6MHz selectable via register @@ -395,52 +395,52 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "MSX + Playsoniq", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_SMS, 64, 0, ""), // Sega VDP - CH(DIV_SYSTEM_C64_8580, 64, 0, ""), - CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), // Sega VDP + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, ""), + CH(DIV_SYSTEM_SCC_PLUS, 1.0f, 0, "") } ); ENTRY( "MSX + SCC", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_SCC, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_SCC, 1.0f, 0, "") } ); ENTRY( "MSX + SCC+", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_SCC_PLUS, 1.0f, 0, "") } ); ENTRY( "MSX + Neotron", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_YM2610_FULL, 1.0f, 0, "") } ); ENTRY( "MSX + Neotron (extended channel 2)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_YM2610_FULL_EXT, 1.0f, 0, "") } ); ENTRY( "MSX + Neotron (with YM2610B)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_YM2610B, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_YM2610B, 1.0f, 0, "") } ); ENTRY( "MSX + Neotron (with YM2610B; extended channel 3)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_YM2610B_EXT, 1.0f, 0, "") } ); ENTRY( "MSX + SIMPL", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=55930\n" "outDepth=7\n" ) // variable rate, Mono DAC @@ -448,435 +448,435 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "NEC PC-88 (with PC-8801-10)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15"), // external - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15") // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15"), // external + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15") // "" } ); ENTRY( "NEC PC-88 (with PC-8801-11)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-88 (with PC-8801-11; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-88 (with PC-8801-23)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-88 (with PC-8801-23; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-88 (with HMB-20 HIBIKI-8800)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") // external; 4.0000MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") // external; 4.0000MHz } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-10)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15"), // external - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15") // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15"), // external + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15") // "" } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-10; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15"), // external - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15") // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15"), // external + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15") // "" } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-11)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-11; extended channel 3 on internal OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-11; extended channel 3 on external OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-11; extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-23)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-23; extended channel 3 on internal OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-23; extended channel 3 on external OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801mk2SR (with PC-8801-23; extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801mk2SR (with HMB-20 HIBIKI-8800)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") // external; 4.0000MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") // external; 4.0000MHz } ); ENTRY( "NEC PC-8801mk2SR (with HMB-20 HIBIKI-8800; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") // external; 4.0000MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") // external; 4.0000MHz } ); ENTRY( "NEC PC-8801FA (with PC-8801-10)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15"), // external - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15") // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15"), // external + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15") // "" } ); ENTRY( "NEC PC-8801FA (with PC-8801-10; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=4"), // internal - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15"), // external - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=15") // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=4"), // internal + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15"), // external + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=15") // "" } ); ENTRY( "NEC PC-8801FA (with PC-8801-11)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-11; extended channel 3 on internal OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-11; extended channel 3 on external OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-11; extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-23)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-23; extended channel 3 on internal OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-23; extended channel 3 on external OPN)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801FA (with PC-8801-23; extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1") // external + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1") // external } ); ENTRY( "NEC PC-8801FA (with HMB-20 HIBIKI-8800)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") // external; 4.0000MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") // external; 4.0000MHz } ); ENTRY( "NEC PC-8801FA (with HMB-20 HIBIKI-8800; extended channel 3)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), // internal - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") // external; 4.0000MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), // internal + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") // external; 4.0000MHz } ); ENTRY( "NEC PC-98 (with PC-9801-26/K)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), // 3.9936MHz but some compatible card has 4MHz - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), // 3.9936MHz but some compatible card has 4MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with PC-9801-26/K; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), // 3.9936MHz but some compatible card has 4MHz - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), // 3.9936MHz but some compatible card has 4MHz + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra in drums mode)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra in drums mode; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra V)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra V; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra V in drums mode)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Orchestra V in drums mode; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=4"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=4"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with PC-9801-86)", { // -73 also has OPNA - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, // 2x 16-bit Burr Brown DAC + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, // 2x 16-bit Burr Brown DAC "rate=44100\n" "outDepth=15\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with PC-9801-86; extended channel 3)", { // -73 also has OPNA - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with PC-9801-73)", { - CH(DIV_SYSTEM_YM2608, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with PC-9801-73; extended channel 3)", { - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_OPL3, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_OPL3, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_OPL3, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_OPL3, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible in drums mode)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "NEC PC-98 (with Sound Blaster 16 for PC-9800 w/PC-9801-26/K compatible in drums mode; extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "clockSel=1") } ); ENTRY( "ZX Spectrum (48K)", { - CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "") + CH(DIV_SYSTEM_SFX_BEEPER, 1.0f, 0, "") } ); ENTRY( "ZX Spectrum (128K)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1") //beeper was also included + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1") //beeper was also included } ); ENTRY( "ZX Spectrum (128K) with TurboSound FM", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=1") } ); ENTRY( "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on first OPN)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=1") } ); ENTRY( "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on second OPN)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=1") } ); ENTRY( "ZX Spectrum (128K) with TurboSound FM (extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=1") } ); ENTRY( "ZX Spectrum (128K) with TurboSound", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1"), // or YM2149 - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=1") // or YM2149 + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1"), // or YM2149 + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=1") // or YM2149 } ); ENTRY( "Amstrad CPC", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=5") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=5") } ); ENTRY( "Atari 800", { - CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "clockSel=1") }, "tickRate=50" ); ENTRY( "Atari 800 (stereo)", { - CH(DIV_SYSTEM_POKEY, 64, -127, "clockSel=1"), - CH(DIV_SYSTEM_POKEY, 64, 127, "clockSel=1"), + CH(DIV_SYSTEM_POKEY, 1.0f, -1.0f, "clockSel=1"), + CH(DIV_SYSTEM_POKEY, 1.0f, 1.0f, "clockSel=1"), }, "tickRate=50" ); ENTRY( "Atari ST", { - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ) @@ -884,15 +884,15 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Atari STE", { - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=50668\n" "outDepth=7\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=50668\n" "outDepth=7\n" ) @@ -900,12 +900,12 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "SAM Coupé", { - CH(DIV_SYSTEM_SAA1099, 64, 0, "") + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "") } ); ENTRY( "BBC Micro", { - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=2\n" "chipType=4\n" // SN76489A 4MHz ) @@ -913,57 +913,57 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "PC (barebones)", { - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "IBM PCjr", { // it can be enable sound output at once - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5") // SN76496 + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=5") // SN76496 } ); ENTRY( "Tandy 1000", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5"), // NCR 8496 or SN76496 or Tandy PSSJ(with 8 bit DAC) - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=5"), // NCR 8496 or SN76496 or Tandy PSSJ(with 8 bit DAC) + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Covox Sound Master", { - CH(DIV_SYSTEM_AY8930, 64, 0, "clockSel=3"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_AY8930, 1.0f, 0, "clockSel=3"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + SSI 2001", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Game Blaster", { - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + AdLib", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + AdLib (drums mode)", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), - CH(DIV_SYSTEM_PCSPKR, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" ) @@ -971,9 +971,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "PC + AdLib/Sound Blaster (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_PCSPKR, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" ) @@ -981,132 +981,132 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "PC + Sound Blaster w/Game Blaster Compatible", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster w/Game Blaster Compatible (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster Pro", { - CH(DIV_SYSTEM_OPL2, 64, -127, ""), - CH(DIV_SYSTEM_OPL2, 64, 127, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2, 1.0f, -1.0f, ""), + CH(DIV_SYSTEM_OPL2, 1.0f, 1.0f, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" "stereo=true\n" ), //alternatively 44.1 khz mono - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster Pro (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, -127, ""), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 127, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, -1.0f, ""), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 1.0f, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=22050\n" "outDepth=7\n" "stereo=true\n" ), //alternatively 44.1 khz mono - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster Pro 2", { - CH(DIV_SYSTEM_OPL3, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL3, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + Sound Blaster Pro 2 (drums mode)", { - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=44100\n" "outDepth=15\n" "stereo=true\n" ), - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + PC-FXGA", { - CH(DIV_SYSTEM_PCE, 64, 0, ""), // HuC6230 (WSG from HuC6280 but with built in 2 OKI ADPCM playback engines) - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_PCE, 1.0f, 0, ""), // HuC6230 (WSG from HuC6280 but with built in 2 OKI ADPCM playback engines) + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "PC + SAAYM", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.58MHz or 4MHz selectable via jumper - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), // 7.16MHz or 8MHz selectable via jumper - CH(DIV_SYSTEM_SAA1099, 64, 0, "clockSel=1"), // "" - CH(DIV_SYSTEM_PCSPKR, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.58MHz or 4MHz selectable via jumper + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), // 7.16MHz or 8MHz selectable via jumper + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "clockSel=1"), // "" + CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, "") } ); ENTRY( "Sharp X1", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3") } ); ENTRY( "Sharp X1 + FM Addon", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3"), - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3"), + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2") } ); ENTRY( "Sharp X68000", { - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_MSM6258, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_MSM6258, 1.0f, 0, "") } ); ENTRY( "FM Towns", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // YM3438 - CH(DIV_SYSTEM_RF5C68, 64, 0, "") + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // YM3438 + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "") } ); ENTRY( "FM Towns (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // YM3438 - CH(DIV_SYSTEM_RF5C68, 64, 0, "") + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // YM3438 + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "") } ); ENTRY( "FM Towns (CSM)", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "clockSel=2"), // YM3438 - CH(DIV_SYSTEM_RF5C68, 64, 0, "") + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, "clockSel=2"), // YM3438 + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "") } ); ENTRY( "Commander X16", { - CH(DIV_SYSTEM_VERA, 64, 0, ""), - CH(DIV_SYSTEM_YM2151, 32, 0, "") + CH(DIV_SYSTEM_VERA, 1.0f, 0, ""), + CH(DIV_SYSTEM_YM2151, 0.5f, 0, "") } ); ENTRY( "TI-99/4A", { - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=6\n" "chipType=8\n" // SN94624 447KHz ) @@ -1117,143 +1117,143 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Arcade systems","INSERT COIN"); ENTRY( "Pong", { - CH(DIV_SYSTEM_PONG, 64, 0, "") + CH(DIV_SYSTEM_PONG, 1.0f, 0, "") } ); ENTRY( "Bally Midway MCR", { // SSIO sound board - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3"), // 2MHz - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3") // 2MHz + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3"), // 2MHz + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3") // 2MHz // additional sound boards, mostly software controlled DAC } ); ENTRY( "Williams/Midway Y/T unit w/ADPCM sound board", { // ADPCM sound board - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=15625\n" "outDepth=7\n" ), // variable via OPM timer? - CH(DIV_SYSTEM_MSM6295, 64, 0, "") + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") } ); ENTRY( "Konami Gyruss", { - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "") // additional discrete sound logics } ); ENTRY( "Konami Bubble System", { - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, ""), - CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), + CH(DIV_SYSTEM_BUBSYS_WSG, 1.0f, 0, "") // VLM5030 exists but not used for music at all } ); ENTRY( "Konami MX5000", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Battlantis", { - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3") // "" + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3") // "" } ); ENTRY( "Konami Battlantis (drums mode on first OPL2)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3") // "" + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3") // "" } ); ENTRY( "Konami Battlantis (drums mode on second OPL2)", { - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3") // "" + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3") // "" } ); ENTRY( "Konami Battlantis (drums mode on both OPL2s)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3") // "" + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3") // "" } ); ENTRY( "Konami Fast Lane", { - CH(DIV_SYSTEM_K007232, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Chequered Flag", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, "stereo=true"), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, "stereo=true"), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Haunted Castle", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_SCC, 64, 0, ""), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_SCC, 1.0f, 0, ""), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Haunted Castle (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_SCC, 64, 0, ""), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_SCC, 1.0f, 0, ""), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Hot Chase", { - CH(DIV_SYSTEM_K007232, 64, 0, "stereo=true"), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, "stereo=true"), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "stereo=true") // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "stereo=true"), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, "stereo=true"), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "stereo=true") // "" } ); ENTRY( "Konami S.P.Y.", { - CH(DIV_SYSTEM_OPL2, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, ""), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, ""), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami S.P.Y. (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_K007232, 64, 0, ""), // "" - CH(DIV_SYSTEM_K007232, 64, 0, "") // "" + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_K007232, 1.0f, 0, ""), // "" + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") // "" } ); ENTRY( "Konami Hexion", { - CH(DIV_SYSTEM_SCC, 64, 0, "clockSel=2"), // 1.5MHz (3MHz input) - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_SCC, 1.0f, 0, "clockSel=2"), // 1.5MHz (3MHz input) + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=1") } ); ENTRY( "Sega Kyugo", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=14"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=14") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=14"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=14") } ); ENTRY( "Sega System 1", { - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=2\n" "chipType=4\n" ), // SN76489A 4MHz - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=5\n" "chipType=4\n" ) // SN76489A 2MHz @@ -1261,46 +1261,46 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Sega System E", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 1.0f, 0, "") } ); ENTRY( "Sega System E (with FM expansion)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_OPLL, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") } ); ENTRY( "Sega System E (with FM expansion in drums mode)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "") } ); ENTRY( "Sega Hang-On", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") // discrete logics, 62.5KHz output rate + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_SEGAPCM, 1.0f, 0, "") // discrete logics, 62.5KHz output rate } ); ENTRY( "Sega Hang-On (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") // discrete logics, 62.5KHz output rate + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_SEGAPCM, 1.0f, 0, "") // discrete logics, 62.5KHz output rate } ); ENTRY( "Sega OutRun/X Board", { - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") // ASIC, 31.25KHz output rate + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_SEGAPCM, 1.0f, 0, "") // ASIC, 31.25KHz output rate } ); ENTRY( "Sega System 24", { - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=61500\n" "outDepth=7\n" ) // software controlled, variable rate via configurable timers @@ -1308,68 +1308,68 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Sega System 18", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // discrete 8MHz YM3438 - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=1") // 10MHz + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // discrete 8MHz YM3438 + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=1") // 10MHz } ); ENTRY( "Sega System 18 (extended channel 3 on first OPN2C)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // discrete 8MHz YM3438 - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=1") // 10MHz + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // discrete 8MHz YM3438 + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=1") // 10MHz } ); ENTRY( "Sega System 18 (extended channel 3 on second OPN2C)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // discrete 8MHz YM3438 - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=1") // 10MHz + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // discrete 8MHz YM3438 + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=1") // 10MHz } ); ENTRY( "Sega System 18 (extended channel 3 on both OPN2Cs)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // discrete 8MHz YM3438 - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=1") // 10MHz + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // discrete 8MHz YM3438 + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=1") // 10MHz } ); ENTRY( "Sega System 32", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=4"), // discrete 8.05MHz YM3438 - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on first OPN2C)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=4"), // discrete 8.05MHz YM3438 - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on second OPN2C)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=4"), // discrete 8.05MHz YM3438 - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz } ); ENTRY( "Sega System 32 (extended channel 3 on both OPN2Cs)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=4"), // discrete 8.05MHz YM3438 - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=4"), // ^^ - CH(DIV_SYSTEM_RF5C68, 64, 0, "clockSel=2") // 12.5MHz + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // discrete 8.05MHz YM3438 + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=4"), // ^^ + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "clockSel=2") // 12.5MHz } ); ENTRY( "Capcom Exed Eyes", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=4"), // 1.5MHz - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=4"), // 1.5MHz + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=4\n" "chipType=1\n" ), // SN76489 3MHz - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=4\n" "chipType=1\n" ) // SN76489 3MHz @@ -1377,66 +1377,66 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Capcom Arcade", { // 1943, Side arms, etc - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 4 or 1.5MHz; various per games - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 4 or 1.5MHz; various per games + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5") } ); ENTRY( "Capcom Arcade (extended channel 3 on first OPN)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5") } ); ENTRY( "Capcom Arcade (extended channel 3 on second OPN)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5") } ); ENTRY( "Capcom Arcade (extended channel 3 on both OPNs)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5") } ); ENTRY( "Capcom CPS-1", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.58MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.58MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") } ); ENTRY( "Capcom CPS-2 (QSound)", { - CH(DIV_SYSTEM_QSOUND, 64, 0, "") + CH(DIV_SYSTEM_QSOUND, 1.0f, 0, "") } ); ENTRY( "Jaleco Ginga NinkyouDen", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), // 1.79MHz - CH(DIV_SYSTEM_Y8950, 64, 0, "") // 3.58MHz + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), // 1.79MHz + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "") // 3.58MHz } ); ENTRY( "Jaleco Ginga NinkyouDen (drums mode)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1"), // 1.79MHz - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "") // 3.58MHz + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"), // 1.79MHz + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "") // 3.58MHz } ); ENTRY( "Jaleco Mega System 1", { - CH(DIV_SYSTEM_YM2151, 64, 0, "clockSel=1"), // 3.5MHz (7MHz / 2) - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=2") // 4MHz + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=1"), // 3.5MHz (7MHz / 2) + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2") // 4MHz } ); ENTRY( "NMK 16-bit Arcade", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz; optional - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz; optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2\n" "rateSel=true\n" ), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2\n" "rateSel=true\n" ) // ^^ @@ -1444,12 +1444,12 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "NMK 16-bit Arcade (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz; optional - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz; optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2\n" "rateSel=true\n" ), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=2\n" "rateSel=true\n" ) // ^^ @@ -1457,22 +1457,22 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Kaneko DJ Boy", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, -127, "clockSel=12"), // 1.5MHz, Left output - CH(DIV_SYSTEM_MSM6295, 64, 127, "clockSel=12"), // 1.5MHz, Right output + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, -1.0f, "clockSel=12"), // 1.5MHz, Left output + CH(DIV_SYSTEM_MSM6295, 1.0f, 1.0f, "clockSel=12"), // 1.5MHz, Right output } ); ENTRY( "Kaneko DJ Boy (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, -127, "clockSel=12"), // 1.5MHz, Left output - CH(DIV_SYSTEM_MSM6295, 64, 127, "clockSel=12") // 1.5MHz, Right output + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, -1.0f, "clockSel=12"), // 1.5MHz, Left output + CH(DIV_SYSTEM_MSM6295, 1.0f, 1.0f, "clockSel=12") // 1.5MHz, Right output } ); ENTRY( "Kaneko Air Buster", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=13\n" "rateSel=true\n" ) // 3MHz @@ -1480,8 +1480,8 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Kaneko Air Buster (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=13\n" "rateSel=true\n" ) // 3MHz @@ -1489,349 +1489,349 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Kaneko Toybox System", { - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), // YM2149 2MHz - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), // ^^ - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 2MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 2MHz } ); ENTRY( "Kaneko Jackie Chan", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "clockSel=3") // 16MHz + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "clockSel=3") // 16MHz } ); ENTRY( "Super Kaneko Nova System", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "clockSel=4") // 16.67MHz (33.33MHz / 2) + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "clockSel=4") // 16.67MHz (33.33MHz / 2) } ); ENTRY( "Tecmo Ninja Gaiden", { // Ninja Gaiden, Raiga, etc - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1MHz } ); ENTRY( "Tecmo Ninja Gaiden (extended channel 3 on first OPN)", { // Ninja Gaiden, Raiga, etc - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1MHz } ); ENTRY( "Tecmo Ninja Gaiden (extended channel 3 on second OPN)", { // Ninja Gaiden, Raiga, etc - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1MHz } ); ENTRY( "Tecmo Ninja Gaiden (extended channel 3 on both OPNs)", { // Ninja Gaiden, Raiga, etc - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1MHz } ); ENTRY( "Tecmo System", { - CH(DIV_SYSTEM_OPL3, 64, 0, ""), - CH(DIV_SYSTEM_YMZ280B, 64, 0, ""), - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 2MHz + CH(DIV_SYSTEM_OPL3, 1.0f, 0, ""), + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, ""), + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 2MHz } ); ENTRY( "Tecmo System (drums mode)", { - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_YMZ280B, 64, 0, ""), - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 2MHz + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, ""), + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 2MHz } ); ENTRY( "Seibu Kaihatsu Raiden", { // Raiden, Seibu cup soccer, Zero team, etc - CH(DIV_SYSTEM_OPL2, 64, 0, ""), // YM3812 3.58MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 or 1.023MHz (28.636363MHz / 28); various per games + CH(DIV_SYSTEM_OPL2, 1.0f, 0, ""), // YM3812 3.58MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 or 1.023MHz (28.636363MHz / 28); various per games } ); ENTRY( "Seibu Kaihatsu Raiden (drums mode)", { // Raiden, Seibu cup soccer, Zero team, etc - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, ""), // YM3812 3.58MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 or 1.023MHz (28.636363MHz / 28); various per games + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), // YM3812 3.58MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 or 1.023MHz (28.636363MHz / 28); various per games } ); ENTRY( "Sunsoft Shanghai 3", { - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=4\n" "chipType=1\n" ), // YM2149 1.5MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=1") // 1.056MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=1") // 1.056MHz } ); ENTRY( "Sunsoft Arcade", { - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2"), // discrete YM3438 8MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=1") // 1.056MHz + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2"), // discrete YM3438 8MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=1") // 1.056MHz } ); ENTRY( "Sunsoft Arcade (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2"), // discrete YM3438 8MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=1") // 1.056MHz + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2"), // discrete YM3438 8MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=1") // 1.056MHz } ); ENTRY( "Atari Klax", { - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=7") // 0.895MHz (3.579545MHz / 4) + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=7") // 0.895MHz (3.579545MHz / 4) } ); ENTRY( "Atari Rampart", { - CH(DIV_SYSTEM_OPLL, 64, 0, ""), // 3.579545MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=14") // 1.193MHz (3.579545MHz / 3) + CH(DIV_SYSTEM_OPLL, 1.0f, 0, ""), // 3.579545MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=14") // 1.193MHz (3.579545MHz / 3) } ); ENTRY( "Atari Rampart (drums mode)", { - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, ""), // 3.579545MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=14") // 1.193MHz (3.579545MHz / 3) + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, ""), // 3.579545MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=14") // 1.193MHz (3.579545MHz / 3) } ); ENTRY( "Atari JSA IIIs", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.579545MHz - CH(DIV_SYSTEM_MSM6295, 64, -127, "clockSel=14"), // 1.193MHz (3.579545MHz / 3), Left output - CH(DIV_SYSTEM_MSM6295, 64, 127, "clockSel=14") // 1.193MHz (3.579545MHz / 3), Right output + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.579545MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, -1.0f, "clockSel=14"), // 1.193MHz (3.579545MHz / 3), Left output + CH(DIV_SYSTEM_MSM6295, 1.0f, 1.0f, "clockSel=14") // 1.193MHz (3.579545MHz / 3), Right output } ); ENTRY( "Atari Marble Madness", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_POKEY, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "") } ); ENTRY( "Atari Championship Sprint", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_POKEY, 64, 0, ""), - CH(DIV_SYSTEM_POKEY, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, ""), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "") } ); ENTRY( "Atari Tetris", { - CH(DIV_SYSTEM_POKEY, 64, 0, ""), - CH(DIV_SYSTEM_POKEY, 64, 0, "") + CH(DIV_SYSTEM_POKEY, 1.0f, 0, ""), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "") } ); ENTRY( "Atari I, Robot", { - CH(DIV_SYSTEM_POKEY, 64, 0, "customClock=1512000"), - CH(DIV_SYSTEM_POKEY, 64, 0, "customClock=1512000"), - CH(DIV_SYSTEM_POKEY, 64, 0, "customClock=1512000"), - CH(DIV_SYSTEM_POKEY, 64, 0, "customClock=1512000") + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "customClock=1512000"), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "customClock=1512000"), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "customClock=1512000"), + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "customClock=1512000") } ); ENTRY( "Data East Karnov", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=3") // 3MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=3") // 3MHz } ); ENTRY( "Data East Karnov (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=3") // 3MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=3") // 3MHz } ); ENTRY( "Data East Karnov (drums mode)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=3") // 3MHz + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=3") // 3MHz } ); ENTRY( "Data East Karnov (extended channel 3; drums mode)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=3") // 3MHz + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=3") // 3MHz } ); ENTRY( "Data East Arcade", { // Bad dudes, Robocop, etc - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 to 1.056MHz; various per games or optional + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 to 1.056MHz; various per games or optional } ); ENTRY( "Data East Arcade (extended channel 3)", { // Bad dudes, Robocop, etc - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 to 1.056MHz; various per games or optional + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 to 1.056MHz; various per games or optional } ); ENTRY( "Data East Arcade (drums mode)", { // Bad dudes, Robocop, etc - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 to 1.056MHz; various per games or optional + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 to 1.056MHz; various per games or optional } ); ENTRY( "Data East Arcade (extended channel 3; drums mode)", { // Bad dudes, Robocop, etc - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_MSM6295, 64, 0, "") // 1 to 1.056MHz; various per games or optional + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") // 1 to 1.056MHz; various per games or optional } ); ENTRY( "Data East PCX", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_PCE, 64, 0, "") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_PCE, 1.0f, 0, "") // software controlled MSM5205 } ); ENTRY( "Data East PCX (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=5"), // 1.5MHz - CH(DIV_SYSTEM_PCE, 64, 0, "") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz + CH(DIV_SYSTEM_PCE, 1.0f, 0, "") // software controlled MSM5205 } ); ENTRY( "Data East Dark Seal", { // Dark Seal, Crude Buster, Vapor Trail, etc - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.580MHz (32.22MHz / 9) - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=2"), // 4.0275MHz (32.22MHz / 8); optional - CH(DIV_SYSTEM_MSM6295, 64, 0, ""), // 1.007MHz (32.22MHz / 32) - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 2.014MHz (32.22MHz / 16); optional + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.580MHz (32.22MHz / 9) + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4.0275MHz (32.22MHz / 8); optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, ""), // 1.007MHz (32.22MHz / 32) + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 2.014MHz (32.22MHz / 16); optional // HuC6280 is for control them, internal sound isn't used } ); ENTRY( "Data East Dark Seal (extended channel 3)", { // Dark Seal, Crude Buster, Vapor Trail, etc - CH(DIV_SYSTEM_YM2151, 64, 0, ""), // 3.580MHz (32.22MHz / 9) - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=2"), // 4.0275MHz (32.22MHz / 8); optional - CH(DIV_SYSTEM_MSM6295, 64, 0, ""), // 1.007MHz (32.22MHz / 32) - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 2.014MHz (32.22MHz / 16); optional + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), // 3.580MHz (32.22MHz / 9) + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4.0275MHz (32.22MHz / 8); optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, ""), // 1.007MHz (32.22MHz / 32) + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 2.014MHz (32.22MHz / 16); optional // HuC6280 is for control them, internal sound isn't used } ); ENTRY( "Data East Deco 156", { - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=0"), // 1 or 1.007MHz (32.22MHz / 32); various per games - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=8") // 1 or 2 or 2.014MHz (32.22MHz / 16); various per games + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=0"), // 1 or 1.007MHz (32.22MHz / 32); various per games + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=8") // 1 or 2 or 2.014MHz (32.22MHz / 16); various per games } ); ENTRY( "Data East MLC", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "clockSel=5") // 14MHz + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "clockSel=5") // 14MHz } ); ENTRY( "SNK Ikari Warriors", { - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Ikari Warriors (drums mode on first OPL)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Ikari Warriors (drums mode on second OPL)", { - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Ikari Warriors (drums mode on both OPLs)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Triple Z80", { - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Triple Z80 (drums mode on Y8950)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Triple Z80 (drums mode on OPL)", { - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Triple Z80 (drums mode on Y8950 and OPL)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Chopper I", { - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Chopper I (drums mode on Y8950)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Chopper I (drums mode on OPL2)", { - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Chopper I (drums mode on Y8950 and OPL2)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Touchdown Fever", { - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Touchdown Fever (drums mode on OPL)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_Y8950, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Touchdown Fever (drums mode on Y8950)", { - CH(DIV_SYSTEM_OPL, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "SNK Touchdown Fever (drums mode on OPL and Y8950)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "clockSel=2"), - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "clockSel=2") + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "clockSel=2"), + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "clockSel=2") } ); ENTRY( "Alpha denshi Alpha-68K", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPLL, 64, 0, "clockSel=0"), // 3.58MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "clockSel=0"), // 3.58MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=7614\n" "outDepth=7\n" ) // software controlled 8 bit DAC @@ -1839,9 +1839,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Alpha denshi Alpha-68K (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPLL, 64, 0, "clockSel=0"), // 3.58MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "clockSel=0"), // 3.58MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=7614\n" "outDepth=7\n" ) // software controlled 8 bit DAC @@ -1849,9 +1849,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Alpha denshi Alpha-68K (drums mode)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "clockSel=0"), // 3.58MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "clockSel=0"), // 3.58MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=7614\n" "outDepth=7\n" ) // software controlled 8 bit DAC @@ -1859,9 +1859,9 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Alpha denshi Alpha-68K (extended channel 3; drums mode)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3"), // 3MHz - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "clockSel=0"), // 3.58MHz - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=3"), // 3MHz + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "clockSel=0"), // 3.58MHz + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=7614\n" "outDepth=7\n" ) // software controlled 8 bit DAC @@ -1869,13 +1869,13 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Alpha denshi Equites", { - CH(DIV_SYSTEM_MSM5232, 64, 0, "customClock=6144000"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=14"), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_MSM5232, 1.0f, 0, "customClock=6144000"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=14"), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=11025\n" "outDepth=5\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=11025\n" "outDepth=5\n" ) // don't know what the actual sample rate is @@ -1883,47 +1883,47 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Neo Geo MVS", { - CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "") + CH(DIV_SYSTEM_YM2610_FULL, 1.0f, 0, "") } ); ENTRY( "Neo Geo MVS (extended channel 2)", { - CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2610_FULL_EXT, 1.0f, 0, "") } ); ENTRY( "Nichibutsu Mag Max", { - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=13"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=13"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=13") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=13"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=13"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=13") } ); ENTRY( "Namco (3-channel WSG)", { // Pac-Man, Galaga, Xevious, etc - CH(DIV_SYSTEM_NAMCO, 64, 0, "") + CH(DIV_SYSTEM_NAMCO, 1.0f, 0, "") } ); ENTRY( "Namco Mappy", { // Mappy, Super Pac-Man, Libble Rabble, etc - CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "") + CH(DIV_SYSTEM_NAMCO_15XX, 1.0f, 0, "") } ); ENTRY( "Namco Pac-Land", { // Pac-Land, Baraduke, Sky kid, etc - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "") + CH(DIV_SYSTEM_NAMCO_CUS30, 1.0f, 0, "") } ); ENTRY( "Namco System 86", { // without expansion board case; Hopping Mappy, etc - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_NAMCO_CUS30, 1.0f, 0, "") } ); ENTRY( "Namco Thunder Ceptor", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_NAMCO_CUS30, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=8000\n" "outDepth=7\n" ) // M65C02 software driven, correct sample rate? @@ -1931,13 +1931,13 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Namco System 1", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_NAMCO_CUS30, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=6000\n" "outDepth=7\n" ), // sample rate verified from https://github.com/mamedev/mame/blob/master/src/devices/sound/n63701x.cpp - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=6000\n" "outDepth=7\n" ) // "" @@ -1945,29 +1945,29 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Taito Arcade", { - CH(DIV_SYSTEM_YM2610B, 64, 0, "") + CH(DIV_SYSTEM_YM2610B, 1.0f, 0, "") } ); ENTRY( "Taito Arcade (extended channel 3)", { - CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2610B_EXT, 1.0f, 0, "") } ); ENTRY( "Taito Metal Soldier Isaac II", { - CH(DIV_SYSTEM_MSM5232, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3"), - CH(DIV_SYSTEM_AY8910, 64, 0, "clockSel=3") + CH(DIV_SYSTEM_MSM5232, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3"), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3") } ); ENTRY( "Taito The Fairyland Story", { - CH(DIV_SYSTEM_MSM5232, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_MSM5232, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=11025\n" "outDepth=7\n" ) // don't know what the actual sample rate is @@ -1975,16 +1975,16 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Taito Wyvern F-0", { - CH(DIV_SYSTEM_MSM5232, 64, 0, ""), - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_MSM5232, 1.0f, 0, ""), + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), - CH(DIV_SYSTEM_AY8910, 64, 0, + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "clockSel=3\n" "chipType=1\n" ), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=11025\n" "outDepth=7\n" ) // don't know what the actual sample rate is @@ -1992,97 +1992,97 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Seta 1", { - CH(DIV_SYSTEM_X1_010, 64, 0, "") + CH(DIV_SYSTEM_X1_010, 1.0f, 0, "") } ); ENTRY( "Seta 1 + FM addon", { - CH(DIV_SYSTEM_X1_010, 64, 0, ""), - CH(DIV_SYSTEM_YM2612, 64, 0, "clockSel=2") // Discrete YM3438 + CH(DIV_SYSTEM_X1_010, 1.0f, 0, ""), + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "clockSel=2") // Discrete YM3438 } ); ENTRY( "Seta 1 + FM addon (extended channel 3)", { - CH(DIV_SYSTEM_X1_010, 64, 0, ""), - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "clockSel=2") // Discrete YM3438 + CH(DIV_SYSTEM_X1_010, 1.0f, 0, ""), + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "clockSel=2") // Discrete YM3438 } ); ENTRY( "Seta 2", { - CH(DIV_SYSTEM_X1_010, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_X1_010, 1.0f, 0, "clockSel=1") } ); ENTRY( "Cave 68000", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "") + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "") } ); ENTRY( "Coreland Cyber Tank", { - CH(DIV_SYSTEM_Y8950, 64, -127, ""), // 3.58MHz, Left output - CH(DIV_SYSTEM_Y8950, 64, 127, "") // 3.58MHz, Right output + CH(DIV_SYSTEM_Y8950, 1.0f, -1.0f, ""), // 3.58MHz, Left output + CH(DIV_SYSTEM_Y8950, 1.0f, 1.0f, "") // 3.58MHz, Right output } ); ENTRY( "Coreland Cyber Tank (drums mode)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, -127, ""), // 3.58MHz, Left output - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 127, "") // 3.58MHz, Right output + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, -1.0f, ""), // 3.58MHz, Left output + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 1.0f, "") // 3.58MHz, Right output } ); ENTRY( "ICE Skimaxx", { - CH(DIV_SYSTEM_MSM6295, 64, -127, + CH(DIV_SYSTEM_MSM6295, 1.0f, -1.0f, "clockSel=2\n" "rateSel=true\n" ), // 4MHz, Left output - CH(DIV_SYSTEM_MSM6295, 64, 127, + CH(DIV_SYSTEM_MSM6295, 1.0f, 1.0f, "clockSel=2\n" "rateSel=true\n" ), // 4MHz, Right output - CH(DIV_SYSTEM_MSM6295, 64, -127, "clockSel=8"), // 2MHz, Left output - CH(DIV_SYSTEM_MSM6295, 64, 127, "clockSel=8") // 2MHz, Right output + CH(DIV_SYSTEM_MSM6295, 1.0f, -1.0f, "clockSel=8"), // 2MHz, Left output + CH(DIV_SYSTEM_MSM6295, 1.0f, 1.0f, "clockSel=8") // 2MHz, Right output } ); ENTRY( "Toaplan 1", { - CH(DIV_SYSTEM_OPL2, 64, 0, "clockSel=5") // 3.5MHz + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "clockSel=5") // 3.5MHz } ); ENTRY( "Toaplan 1 (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "clockSel=5") // 3.5MHz + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "clockSel=5") // 3.5MHz } ); ENTRY( "Dynax/Nakanihon 3rd generation hardware", { - CH(DIV_SYSTEM_AY8910, 64, 0, ""), // AY or YM, optional - 1.79MHz or 3.58MHz; various per game - CH(DIV_SYSTEM_OPLL, 64, 0, ""), - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=6") // 1.023MHz mostly + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), // AY or YM, optional - 1.79MHz or 3.58MHz; various per game + CH(DIV_SYSTEM_OPLL, 1.0f, 0, ""), + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=6") // 1.023MHz mostly } ); ENTRY( "Dynax/Nakanihon 3rd generation hardware (drums mode)", { - CH(DIV_SYSTEM_AY8910, 64, 0, ""), // AY or YM, optional - 1.79MHz or 3.58MHz; various per game - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_MSM6295, 64, 0, "clockSel=6") // 1.023MHz mostly + CH(DIV_SYSTEM_AY8910, 1.0f, 0, ""), // AY or YM, optional - 1.79MHz or 3.58MHz; various per game + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "clockSel=6") // 1.023MHz mostly } ); ENTRY( "Dynax/Nakanihon Real Break", { - CH(DIV_SYSTEM_OPLL, 64, 0, ""), - CH(DIV_SYSTEM_YMZ280B, 64, 0, "") + CH(DIV_SYSTEM_OPLL, 1.0f, 0, ""), + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "") } ); ENTRY( "Dynax/Nakanihon Real Break (drums mode)", { - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, ""), - CH(DIV_SYSTEM_YMZ280B, 64, 0, "") + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "") } ); ENTRY( "Irem M72", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_PCM_DAC, 64, 0, + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "rate=7812\n" "outDepth=7\n" ) @@ -2090,8 +2090,8 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Irem M92/M107", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_GA20, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_GA20, 1.0f, 0, "") } ); CATEGORY_END; @@ -2100,158 +2100,158 @@ void FurnaceGUI::initSystemPresets() { 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, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2203 (OPN)", { - CH(DIV_SYSTEM_YM2203, 64, 0, "clockSel=3") + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3") } ); ENTRY( "Yamaha YM2203 (extended channel 3)", { - CH(DIV_SYSTEM_YM2203_EXT, 64, 0, "clockSel=3") + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=3") } ); ENTRY( "Yamaha YM2608 (OPNA)", { - CH(DIV_SYSTEM_YM2608, 64, 0, "") + CH(DIV_SYSTEM_YM2608, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2608 (extended channel 3)", { - CH(DIV_SYSTEM_YM2608_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2608_EXT, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2610 (OPNB)", { - CH(DIV_SYSTEM_YM2610_FULL, 64, 0, "") + CH(DIV_SYSTEM_YM2610_FULL, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2610 (extended channel 2)", { - CH(DIV_SYSTEM_YM2610_FULL_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2610_FULL_EXT, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2610B (OPNB2)", { - CH(DIV_SYSTEM_YM2610B, 64, 0, "") + CH(DIV_SYSTEM_YM2610B, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2610B (extended channel 3)", { - CH(DIV_SYSTEM_YM2610B_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2610B_EXT, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2612 (OPN2)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "ladderEffect=true") + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "ladderEffect=true") } ); ENTRY( "Yamaha YM2612 (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "ladderEffect=true") + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "ladderEffect=true") } ); ENTRY( "Yamaha YM2612 (OPN2) CSM", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "ladderEffect=true") + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, "ladderEffect=true") } ); ENTRY( "Yamaha YM2612 (OPN2) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "ladderEffect=true") + CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, "ladderEffect=true") } ); ENTRY( "Yamaha YM2612 (extended channel 3) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "ladderEffect=true") + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, "ladderEffect=true") } ); ENTRY( "Yamaha YM2413 (OPLL)", { - CH(DIV_SYSTEM_OPLL, 64, 0, "") + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2413 (drums mode)", { - CH(DIV_SYSTEM_OPLL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_OPLL_DRUMS, 1.0f, 0, "") } ); ENTRY( "Yamaha YM2414 (OPZ)", { - CH(DIV_SYSTEM_OPZ, 64, 0, "") + CH(DIV_SYSTEM_OPZ, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3438 (OPN2C)", { - CH(DIV_SYSTEM_YM2612, 64, 0, "") + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3438 (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3438 (OPN2C) CSM", { - CH(DIV_SYSTEM_YM2612_CSM, 64, 0, "") + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3438 (OPN2C) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 64, 0, "") + CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3438 (extended channel 3) with DualPCM", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3526 (OPL)", { - CH(DIV_SYSTEM_OPL, 64, 0, "") + CH(DIV_SYSTEM_OPL, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3526 (drums mode)", { - CH(DIV_SYSTEM_OPL_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_OPL_DRUMS, 1.0f, 0, "") } ); ENTRY( "Yamaha Y8950", { - CH(DIV_SYSTEM_Y8950, 64, 0, "") + CH(DIV_SYSTEM_Y8950, 1.0f, 0, "") } ); ENTRY( "Yamaha Y8950 (drums mode)", { - CH(DIV_SYSTEM_Y8950_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_Y8950_DRUMS, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3812 (OPL2)", { - CH(DIV_SYSTEM_OPL2, 64, 0, "") + CH(DIV_SYSTEM_OPL2, 1.0f, 0, "") } ); ENTRY( "Yamaha YM3812 (drums mode)", { - CH(DIV_SYSTEM_OPL2_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, "") } ); ENTRY( "Yamaha YMF262 (OPL3)", { - CH(DIV_SYSTEM_OPL3, 64, 0, "") + CH(DIV_SYSTEM_OPL3, 1.0f, 0, "") } ); ENTRY( "Yamaha YMF262 (drums mode)", { - CH(DIV_SYSTEM_OPL3_DRUMS, 64, 0, "") + CH(DIV_SYSTEM_OPL3_DRUMS, 1.0f, 0, "") } ); if (settings.hiddenSystems) { ENTRY( "Yamaha YMU759 (MA-2)", { - CH(DIV_SYSTEM_YMU759, 64, 0, "") + CH(DIV_SYSTEM_YMU759, 1.0f, 0, "") } ); } @@ -2260,43 +2260,43 @@ void FurnaceGUI::initSystemPresets() { 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") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=1") } ); ENTRY( "TI SN76489A", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=4") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=4") } ); ENTRY( "TI SN76496", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=5") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=5") } ); ENTRY( "NCR 8496", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=6") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=6") } ); ENTRY( "Tandy PSSJ 3-voice sound", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=7") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=7") // 8 bit DAC } ); ENTRY( "Sega PSG (SN76489-like)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), } ); ENTRY( "Sega PSG (SN76489-like, Stereo)", { - CH(DIV_SYSTEM_SMS, 64, 0, "chipType=3") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "chipType=3") } ); ENTRY( "TI SN94624", { - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=6\n" "chipType=8\n" ) @@ -2304,7 +2304,7 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "TI SN76494", { - CH(DIV_SYSTEM_SMS, 64, 0, + CH(DIV_SYSTEM_SMS, 1.0f, 0, "clockSel=6\n" "chipType=9\n" ) @@ -2312,52 +2312,52 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Toshiba T6W28", { - CH(DIV_SYSTEM_T6W28, 64, 0, "") + CH(DIV_SYSTEM_T6W28, 1.0f, 0, "") } ); ENTRY( "AY-3-8910", { - CH(DIV_SYSTEM_AY8910, 64, 0, "") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "") } ); ENTRY( "AY-3-8914", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=3") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=3") } ); ENTRY( "Yamaha YM2149(F)", { - CH(DIV_SYSTEM_AY8910, 64, 0, "chipType=1") + CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1") } ); ENTRY( "Philips SAA1099", { - CH(DIV_SYSTEM_SAA1099, 64, 0, "") + CH(DIV_SYSTEM_SAA1099, 1.0f, 0, "") } ); ENTRY( "PC Speaker", { - CH(DIV_SYSTEM_PCSPKR, 32, 0, "") + CH(DIV_SYSTEM_PCSPKR, 0.5f, 0, "") } ); ENTRY( "Pokémon Mini", { - CH(DIV_SYSTEM_POKEMINI, 32, 0, "") + CH(DIV_SYSTEM_POKEMINI, 0.5f, 0, "") } ); ENTRY( "Commodore VIC", { - CH(DIV_SYSTEM_VIC20, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_VIC20, 1.0f, 0, "clockSel=1") } ); ENTRY( "OKI MSM5232", { - CH(DIV_SYSTEM_MSM5232, 64, 0, "") + CH(DIV_SYSTEM_MSM5232, 1.0f, 0, "") } ); ENTRY( "Pong", { - CH(DIV_SYSTEM_PONG, 64, 0, "") + CH(DIV_SYSTEM_PONG, 1.0f, 0, "") } ); CATEGORY_END; @@ -2365,63 +2365,63 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Sample","chips/systems which use PCM or ADPCM samples for sound synthesis."); ENTRY( "Amiga", { - CH(DIV_SYSTEM_AMIGA, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_AMIGA, 1.0f, 0, "clockSel=1") }, "tickRate=50" ); ENTRY( "SegaPCM", { - CH(DIV_SYSTEM_SEGAPCM, 64, 0, "") + CH(DIV_SYSTEM_SEGAPCM, 1.0f, 0, "") } ); ENTRY( "Capcom QSound", { - CH(DIV_SYSTEM_QSOUND, 64, 0, "") + CH(DIV_SYSTEM_QSOUND, 1.0f, 0, "") } ); ENTRY( "Seta/Allumer X1-010", { - CH(DIV_SYSTEM_X1_010, 64, 0, "") + CH(DIV_SYSTEM_X1_010, 1.0f, 0, "") } ); ENTRY( "Yamaha YMZ280B (PCMD8)", { - CH(DIV_SYSTEM_YMZ280B, 64, 0, "") + CH(DIV_SYSTEM_YMZ280B, 1.0f, 0, "") } ); ENTRY( "Ricoh RF5C68", { - CH(DIV_SYSTEM_RF5C68, 64, 0, "") + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, "") } ); ENTRY( "OKI MSM6258", { - CH(DIV_SYSTEM_MSM6258, 64, 0, "") + CH(DIV_SYSTEM_MSM6258, 1.0f, 0, "") } ); ENTRY( "OKI MSM6295", { - CH(DIV_SYSTEM_MSM6295, 64, 0, "") + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, "") } ); ENTRY( "SNES", { - CH(DIV_SYSTEM_SNES, 64, 0, "") + CH(DIV_SYSTEM_SNES, 1.0f, 0, "") } ); ENTRY( "Konami K007232", { - CH(DIV_SYSTEM_K007232, 64, 0, "") + CH(DIV_SYSTEM_K007232, 1.0f, 0, "") } ); ENTRY( "Irem GA20", { - CH(DIV_SYSTEM_GA20, 64, 0, "") + CH(DIV_SYSTEM_GA20, 1.0f, 0, "") } ); ENTRY( "Generic PCM DAC", { - CH(DIV_SYSTEM_PCM_DAC, 64, 0, "") + CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, "") } ); CATEGORY_END; @@ -2429,70 +2429,70 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound."); ENTRY( "PC Engine", { - CH(DIV_SYSTEM_PCE, 64, 0, "") + CH(DIV_SYSTEM_PCE, 1.0f, 0, "") } ); ENTRY( "Commodore PET (pseudo-wavetable)", { - CH(DIV_SYSTEM_PET, 64, 0, "") + CH(DIV_SYSTEM_PET, 1.0f, 0, "") }, "tickRate=50" ); ENTRY( "Konami Bubble System WSG", { - CH(DIV_SYSTEM_BUBSYS_WSG, 64, 0, "") + CH(DIV_SYSTEM_BUBSYS_WSG, 1.0f, 0, "") } ); ENTRY( "Konami SCC", { - CH(DIV_SYSTEM_SCC, 64, 0, "") + CH(DIV_SYSTEM_SCC, 1.0f, 0, "") } ); ENTRY( "Konami SCC+", { - CH(DIV_SYSTEM_SCC_PLUS, 64, 0, "") + CH(DIV_SYSTEM_SCC_PLUS, 1.0f, 0, "") } ); ENTRY( "Namco WSG", { - CH(DIV_SYSTEM_NAMCO, 64, 0, "") + CH(DIV_SYSTEM_NAMCO, 1.0f, 0, "") } ); ENTRY( "Namco C15 (8-channel mono)", { - CH(DIV_SYSTEM_NAMCO_15XX, 64, 0, "") + CH(DIV_SYSTEM_NAMCO_15XX, 1.0f, 0, "") } ); ENTRY( "Namco C30 (8-channel stereo)", { - CH(DIV_SYSTEM_NAMCO_CUS30, 64, 0, "") + CH(DIV_SYSTEM_NAMCO_CUS30, 1.0f, 0, "") } ); ENTRY( "Namco 163", { - CH(DIV_SYSTEM_N163, 64, 0, "") + CH(DIV_SYSTEM_N163, 1.0f, 0, "") } ); ENTRY( "Famicom Disk System (chip)", { - CH(DIV_SYSTEM_FDS, 64, 0, "") + CH(DIV_SYSTEM_FDS, 1.0f, 0, "") } ); ENTRY( "WonderSwan", { - CH(DIV_SYSTEM_SWAN, 64, 0, "") + CH(DIV_SYSTEM_SWAN, 1.0f, 0, "") }, "tickRate=75.47169811320754716981" ); ENTRY( "Virtual Boy", { - CH(DIV_SYSTEM_VBOY, 64, 0, "") + CH(DIV_SYSTEM_VBOY, 1.0f, 0, "") }, "tickRate=50.2734877734878" ); ENTRY( "Seta/Allumer X1-010", { - CH(DIV_SYSTEM_X1_010, 64, 0, "") + CH(DIV_SYSTEM_X1_010, 1.0f, 0, "") } ); CATEGORY_END; @@ -2500,67 +2500,67 @@ void FurnaceGUI::initSystemPresets() { CATEGORY_BEGIN("Specialized","chips/systems with unique sound synthesis methods."); ENTRY( "MOS Technology SID (6581)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "MOS Technology SID (8580)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "Microchip AY8930", { - CH(DIV_SYSTEM_AY8930, 64, 0, "") + CH(DIV_SYSTEM_AY8930, 1.0f, 0, "") } ); ENTRY( "Game Boy", { - CH(DIV_SYSTEM_GB, 64, 0, "") + CH(DIV_SYSTEM_GB, 1.0f, 0, "") } ); ENTRY( "Atari Lynx", { - CH(DIV_SYSTEM_LYNX, 64, 0, "") + CH(DIV_SYSTEM_LYNX, 1.0f, 0, "") } ); ENTRY( "POKEY", { - CH(DIV_SYSTEM_POKEY, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_POKEY, 1.0f, 0, "clockSel=1") }, "tickRate=50" ); ENTRY( "Atari TIA", { - CH(DIV_SYSTEM_TIA, 64, 0, "") + CH(DIV_SYSTEM_TIA, 1.0f, 0, "") } ); ENTRY( "NES (Ricoh 2A03)", { - CH(DIV_SYSTEM_NES, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, "") } ); ENTRY( "Commander X16 (VERA only)", { - CH(DIV_SYSTEM_VERA, 64, 0, "") + CH(DIV_SYSTEM_VERA, 1.0f, 0, "") } ); ENTRY( "ZX Spectrum (beeper only)", { - CH(DIV_SYSTEM_SFX_BEEPER, 64, 0, "") + CH(DIV_SYSTEM_SFX_BEEPER, 1.0f, 0, "") } ); if (settings.hiddenSystems) { ENTRY( "Dummy System", { - CH(DIV_SYSTEM_DUMMY, 64, 0, "") + CH(DIV_SYSTEM_DUMMY, 1.0f, 0, "") } ); } ENTRY( "tildearrow Sound Unit", { - CH(DIV_SYSTEM_SOUND_UNIT, 64, 0, "") + CH(DIV_SYSTEM_SOUND_UNIT, 1.0f, 0, "") } ); CATEGORY_END; @@ -2568,80 +2568,80 @@ void FurnaceGUI::initSystemPresets() { 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( "Sega Genesis", { - CH(DIV_SYSTEM_YM2612, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Genesis (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 64, 0, ""), - CH(DIV_SYSTEM_SMS, 32, 0, "") + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); ENTRY( "Sega Master System", { - CH(DIV_SYSTEM_SMS, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, "") } ); ENTRY( "Sega Master System (with FM expansion)", { - CH(DIV_SYSTEM_SMS, 64, 0, ""), - CH(DIV_SYSTEM_OPLL, 64, 0, "") + CH(DIV_SYSTEM_SMS, 1.0f, 0, ""), + CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") } ); ENTRY( "Game Boy", { - CH(DIV_SYSTEM_GB, 64, 0, "") + CH(DIV_SYSTEM_GB, 1.0f, 0, "") } ); ENTRY( "NEC PC Engine/TurboGrafx-16", { - CH(DIV_SYSTEM_PCE, 64, 0, "") + CH(DIV_SYSTEM_PCE, 1.0f, 0, "") } ); ENTRY( "NES", { - CH(DIV_SYSTEM_NES, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, "") } ); ENTRY( "Famicom with Konami VRC7", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_VRC7, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_VRC7, 1.0f, 0, "") } ); ENTRY( "Famicom Disk System", { - CH(DIV_SYSTEM_NES, 64, 0, ""), - CH(DIV_SYSTEM_FDS, 64, 0, "") + CH(DIV_SYSTEM_NES, 1.0f, 0, ""), + CH(DIV_SYSTEM_FDS, 1.0f, 0, "") } ); ENTRY( "Commodore 64 (6581 SID)", { - CH(DIV_SYSTEM_C64_6581, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_6581, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "Commodore 64 (8580 SID)", { - CH(DIV_SYSTEM_C64_8580, 64, 0, "clockSel=1") + CH(DIV_SYSTEM_C64_8580, 1.0f, 0, "clockSel=1") }, "tickRate=50.1245421" ); ENTRY( "Arcade (YM2151 and SegaPCM)", { - CH(DIV_SYSTEM_YM2151, 64, 0, ""), - CH(DIV_SYSTEM_SEGAPCM_COMPAT, 64, 0, "") + CH(DIV_SYSTEM_YM2151, 1.0f, 0, ""), + CH(DIV_SYSTEM_SEGAPCM_COMPAT, 1.0f, 0, "") } ); ENTRY( "Neo Geo CD", { - CH(DIV_SYSTEM_YM2610, 64, 0, "") + CH(DIV_SYSTEM_YM2610, 1.0f, 0, "") } ); ENTRY( "Neo Geo CD (extended channel 2)", { - CH(DIV_SYSTEM_YM2610_EXT, 64, 0, "") + CH(DIV_SYSTEM_YM2610_EXT, 1.0f, 0, "") } ); CATEGORY_END; @@ -2654,7 +2654,7 @@ FurnaceGUISysDef::FurnaceGUISysDef(const char* n, std::initializer_listsong.systemLen; i++) { settings.initialSys.set(fmt::sprintf("id%d",i),e->systemToFileFur(e->song.system[i])); - settings.initialSys.set(fmt::sprintf("vol%d",i),(int)e->song.systemVol[i]); - settings.initialSys.set(fmt::sprintf("pan%d",i),(int)e->song.systemPan[i]); + settings.initialSys.set(fmt::sprintf("vol%d",i),(float)e->song.systemVol[i]); + settings.initialSys.set(fmt::sprintf("pan%d",i),(float)e->song.systemPan[i]); + settings.initialSys.set(fmt::sprintf("fr%d",i),(float)e->song.systemPanFR[i]); settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64()); } settings.initialSysName=e->song.systemName; @@ -324,14 +325,16 @@ void FurnaceGUI::drawSettings() { if (totalAvailSys>0) { for (int i=0; isystemToFileFur((DivSystem)availableSystems[rand()%totalAvailSys])); - settings.initialSys.set(fmt::sprintf("vol%d",i),64); - settings.initialSys.set(fmt::sprintf("pan%d",i),0); + settings.initialSys.set(fmt::sprintf("vol%d",i),1.0f); + settings.initialSys.set(fmt::sprintf("pan%d",i),0.0f); + settings.initialSys.set(fmt::sprintf("fr%d",i),0.0f); settings.initialSys.set(fmt::sprintf("flags%d",i),""); } } else { settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_DUMMY)); - settings.initialSys.set("vol0",64); - settings.initialSys.set("pan0",0); + settings.initialSys.set("vol0",1.0f); + settings.initialSys.set("pan0",0.0f); + settings.initialSys.set("fr0",0.0f); settings.initialSys.set("flags0",""); howMany=1; } @@ -366,12 +369,14 @@ void FurnaceGUI::drawSettings() { if (ImGui::Button("Reset to defaults")) { settings.initialSys.clear(); settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612)); - settings.initialSys.set("vol0",64); - settings.initialSys.set("pan0",0); + settings.initialSys.set("vol0",1.0f); + settings.initialSys.set("pan0",0.0f); + settings.initialSys.set("fr0",0.0f); settings.initialSys.set("flags0",""); settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS)); - settings.initialSys.set("vol1",32); - settings.initialSys.set("pan1",0); + settings.initialSys.set("vol1",0.5f); + settings.initialSys.set("pan1",0.0f); + settings.initialSys.set("fr1",0.0f); settings.initialSys.set("flags1",""); settings.initialSysName="Sega Genesis/Mega Drive"; } @@ -385,14 +390,15 @@ void FurnaceGUI::drawSettings() { int doRemove=-1; for (size_t i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) { DivSystem sysID=e->systemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0)); - signed char sysVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),0); - signed char sysPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0); + float sysVol=settings.initialSys.getFloat(fmt::sprintf("vol%d",i),0); + float sysPan=settings.initialSys.getFloat(fmt::sprintf("pan%d",i),0); + float sysPanFR=settings.initialSys.getFloat(fmt::sprintf("fr%d",i),0); sysCount=i+1; //bool doRemove=false; - bool doInvert=sysVol&128; - signed char vol=sysVol&127; + bool doInvert=(sysVol<0); + float vol=fabs(sysVol); ImGui::PushID(i); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x); @@ -409,8 +415,8 @@ void FurnaceGUI::drawSettings() { ImGui::SameLine(); if (ImGui::Checkbox("Invert",&doInvert)) { - sysVol^=128; - settings.initialSys.set(fmt::sprintf("vol%d",i),(int)sysVol); + sysVol=-sysVol; + settings.initialSys.set(fmt::sprintf("vol%d",i),sysVol); } ImGui::SameLine(); //ImGui::BeginDisabled(settings.initialSys.size()<=4); @@ -418,14 +424,27 @@ void FurnaceGUI::drawSettings() { doRemove=i; } //ImGui::EndDisabled(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale)); - if (CWSliderScalar("Volume",ImGuiDataType_S8,&vol,&_ZERO,&_ONE_HUNDRED_TWENTY_SEVEN)) { - sysVol=(sysVol&128)|vol; - settings.initialSys.set(fmt::sprintf("vol%d",i),(int)sysVol); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) { + if (doInvert) { + if (vol<0.0001) vol=0.0001; + } + if (vol<0) vol=0; + if (vol>10) vol=10; + sysVol=doInvert?-vol:vol; + settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol); } rightClickable - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale)); - if (CWSliderScalar("Panning",ImGuiDataType_S8,&sysPan,&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN)) { - settings.initialSys.set(fmt::sprintf("pan%d",i),(int)sysPan); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) { + if (sysPan<-1.0f) sysPan=-1.0f; + if (sysPan>1.0f) sysPan=1.0f; + settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan); + } rightClickable + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) { + if (sysPanFR<-1.0f) sysPanFR=-1.0f; + if (sysPanFR>1.0f) sysPanFR=1.0f; + settings.initialSys.set(fmt::sprintf("fr%d",i),(float)sysPanFR); } rightClickable // oh please MSVC don't cry @@ -445,25 +464,29 @@ void FurnaceGUI::drawSettings() { if (doRemove>=0 && sysCount>1) { for (int i=doRemove; isystemToFileFur(DIV_SYSTEM_YM2612)); - settings.initialSys.set(fmt::sprintf("vol%d",sysCount),64); - settings.initialSys.set(fmt::sprintf("pan%d",sysCount),0); + settings.initialSys.set(fmt::sprintf("vol%d",sysCount),1.0f); + settings.initialSys.set(fmt::sprintf("pan%d",sysCount),0.0f); + settings.initialSys.set(fmt::sprintf("fr%d",sysCount),0.0f); settings.initialSys.set(fmt::sprintf("flags%d",sysCount),""); } @@ -2633,21 +2656,36 @@ void FurnaceGUI::syncSettings() { if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0; String initialSys2=e->getConfString("initialSys2",""); + bool oldVol=e->getConfInt("configVersion",DIV_ENGINE_VERSION)<135; if (initialSys2.empty()) { initialSys2=e->decodeSysDesc(e->getConfString("initialSys","")); + oldVol=false; } settings.initialSys.clear(); settings.initialSys.loadFromBase64(initialSys2.c_str()); if (settings.initialSys.getInt("id0",0)==0) { settings.initialSys.clear(); settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612)); - settings.initialSys.set("vol0",64); - settings.initialSys.set("pan0",0); + settings.initialSys.set("vol0",1.0f); + settings.initialSys.set("pan0",0.0f); + settings.initialSys.set("fr0",0.0f); settings.initialSys.set("flags0",""); settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS)); - settings.initialSys.set("vol1",64); + settings.initialSys.set("vol1",0.5f); settings.initialSys.set("pan1",0); + settings.initialSys.set("fr1",0); settings.initialSys.set("flags1",""); + } else { + if (oldVol) { + for (int i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) { + float newVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),64); + float newPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0); + newVol/=64.0f; + newPan/=127.0f; + settings.initialSys.set(fmt::sprintf("vol%d",i),newVol); + settings.initialSys.set(fmt::sprintf("pan%d",i),newPan); + } + } } // keybinds