Prepare to (very) partially OPL4 support

This commit is contained in:
cam900 2024-07-11 15:13:02 +09:00
parent 73c301dd0e
commit c08edb1254
14 changed files with 691 additions and 233 deletions

View file

@ -1260,6 +1260,8 @@ const int availableSystems[]={
DIV_SYSTEM_5E01,
DIV_SYSTEM_BIFURCATOR,
DIV_SYSTEM_SID2,
DIV_SYSTEM_OPL4,
DIV_SYSTEM_OPL4_DRUMS,
0 // don't remove this last one!
};
@ -1295,6 +1297,8 @@ const int chipsFM[]={
DIV_SYSTEM_OPL3_DRUMS,
DIV_SYSTEM_OPZ,
DIV_SYSTEM_ESFM,
DIV_SYSTEM_OPL4,
DIV_SYSTEM_OPL4_DRUMS,
0 // don't remove this last one!
};
@ -1380,6 +1384,8 @@ const int chipsSample[]={
DIV_SYSTEM_NDS,
DIV_SYSTEM_GBA_DMA,
DIV_SYSTEM_GBA_MINMOD,
DIV_SYSTEM_OPL4,
DIV_SYSTEM_OPL4_DRUMS,
0 // don't remove this last one!
};

View file

@ -519,6 +519,18 @@ void FurnaceGUI::initSystemPresets() {
) // variable rate, Mono DAC
}
);
SUB_ENTRY(
"MSX + Moonsound", {
CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"),
CH(DIV_SYSTEM_OPL4, 1.0f, 0, "")
}
);
SUB_ENTRY(
"MSX + Moonsound (drums mode)", {
CH(DIV_SYSTEM_AY8910, 1.0f, 0, "chipType=1"),
CH(DIV_SYSTEM_OPL4_DRUMS, 1.0f, 0, "")
}
);
ENTRY(
"NEC PC-88", {}
);
@ -2659,6 +2671,16 @@ void FurnaceGUI::initSystemPresets() {
CH(DIV_SYSTEM_ESFM, 1.0f, 0, "")
}
);
ENTRY(
"Yamaha YMF278B (OPL4)", {
CH(DIV_SYSTEM_OPL4, 1.0f, 0, "")
}
);
SUB_ENTRY(
"Yamaha YMF278B (drums mode)", {
CH(DIV_SYSTEM_OPL4_DRUMS, 1.0f, 0, "")
}
);
if (settings.hiddenSystems) {
ENTRY(
"Yamaha YMU759 (MA-2)", {
@ -2870,6 +2892,16 @@ void FurnaceGUI::initSystemPresets() {
CH(DIV_SYSTEM_NDS, 1.0f, 0, "")
}
);
ENTRY(
"Yamaha YMF278B (OPL4)", {
CH(DIV_SYSTEM_OPL4, 1.0f, 0, "")
}
);
SUB_ENTRY(
"Yamaha YMF278B (drums mode)", {
CH(DIV_SYSTEM_OPL4_DRUMS, 1.0f, 0, "")
}
);
CATEGORY_END;
CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound.");

View file

@ -2503,6 +2503,59 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
}
break;
}
case DIV_SYSTEM_OPL4:
case DIV_SYSTEM_OPL4_DRUMS: {
int clockSel=flags.getInt("clockSel",0);
int ramSize=flags.getInt("ramSize",0);
ImGui::Text(_("Clock rate:"));
ImGui::Indent();
if (ImGui::RadioButton(_("33.8688MHz"),clockSel==0)) {
clockSel=0;
altered=true;
}
if (ImGui::RadioButton(_("28.64MHz (NTSC)"),clockSel==1)) {
clockSel=1;
altered=true;
}
if (ImGui::RadioButton(_("28.38MHz (PAL)"),clockSel==2)) {
clockSel=2;
altered=true;
}
ImGui::Unindent();
ImGui::Text(_("RAM size:"));
ImGui::Indent();
if (ImGui::RadioButton(_("4MB"),ramSize==0)) {
ramSize=0;
altered=true;
}
if (ImGui::RadioButton(_("2MB"),ramSize==1)) {
ramSize=1;
altered=true;
}
if (ImGui::RadioButton(_("1MB"),ramSize==2)) {
ramSize=2;
altered=true;
}
if (ImGui::RadioButton(_("512KB"),ramSize==3)) {
ramSize=3;
altered=true;
}
if (ImGui::RadioButton(_("128KB"),ramSize==4)) {
ramSize=4;
altered=true;
}
ImGui::Unindent();
if (altered) {
e->lockSave([&]() {
flags.set("clockSel",clockSel);
flags.set("ramSize",ramSize);
});
}
break;
}
case DIV_SYSTEM_SWAN:
case DIV_SYSTEM_BUBSYS_WSG:
case DIV_SYSTEM_PET: