From 69bb628a8b9dad0ee48a44fdd7dffc9f59118f94 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 10 Nov 2022 04:48:15 -0500 Subject: [PATCH] PC speaker: add PC-98 clock rate options --- src/engine/platform/pcspkr.cpp | 12 +++++++++++- src/gui/sysConf.cpp | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index 42a9ac5c..226ee98c 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -587,7 +587,17 @@ bool DivPlatformPCSpeaker::keyOffAffectsArp(int ch) { } void DivPlatformPCSpeaker::setFlags(const DivConfig& flags) { - chipClock=COLOR_NTSC/3.0; + switch (flags.getInt("clockSel",0)) { + case 1: // PC-98 + chipClock=38400*52; + break; + case 2: // PC-98 + chipClock=38400*64; + break; + default: // IBM PC + chipClock=COLOR_NTSC/3.0; + break; + } rate=chipClock/PCSPKR_DIVIDER; speakerType=flags.getInt("speakerType",0)&3; oscBuf->rate=rate; diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 79d7344c..f1b6822f 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -683,8 +683,23 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo break; } case DIV_SYSTEM_PCSPKR: { + int clockSel=flags.getInt("clockSel",0); int speakerType=flags.getInt("speakerType",0); + ImGui::Text("Clock rate:"); + if (ImGui::RadioButton("1.19MHz (PC)",clockSel==0)) { + clockSel=0; + altered=true; + } + if (ImGui::RadioButton("1.99MHz (PC-98)",clockSel==1)) { + clockSel=1; + altered=true; + } + if (ImGui::RadioButton("2.46MHz (PC-98)",clockSel==2)) { + clockSel=2; + altered=true; + } + ImGui::Text("Speaker type:"); if (ImGui::RadioButton("Unfiltered",speakerType==0)) { speakerType=0; @@ -705,6 +720,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo if (altered) { e->lockSave([&]() { + flags.set("clockSel",clockSel); flags.set("speakerType",speakerType); }); }