diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h
index 75d056ea1..f0dd948ae 100644
--- a/src/include/86box/resource.h
+++ b/src/include/86box/resource.h
@@ -207,6 +207,9 @@
#define IDC_COMBO_MIDI_IN 1050
#define IDC_CONFIGURE_CMS 1051
#define IDC_CONFIGURE_SSI 1052
+#define IDC_FM_DRIVER 1053
+#define IDC_RADIO_FM_DRV_NUKED 1054
+#define IDC_RADIO_FM_DRV_YMFM 1055
#define IDC_COMBO_NET_TYPE 1060 /* network config */
#define IDC_COMBO_PCAP 1061
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 1216257bc..a12bdc0a7 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -329,6 +329,7 @@ extern const device_t gd5428_isa_device;
extern const device_t gd5428_vlb_device;
extern const device_t gd5428_diamond_speedstar_pro_b1_vlb_device;
extern const device_t gd5428_mca_device;
+extern const device_t gd5426_mca_device;
extern const device_t gd5428_onboard_device;
extern const device_t gd5429_isa_device;
extern const device_t gd5429_vlb_device;
diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp
index 89ead7acd..d1f5318ba 100644
--- a/src/qt/qt_platform.cpp
+++ b/src/qt/qt_platform.cpp
@@ -571,7 +571,7 @@ void ProgSettings::reloadStrings()
gssynthstr.replace("libgs", LIB_NAME_GS);
}
else gssynthstr.prepend(LIB_NAME_GS);
- translatedstrings[IDS_2132] = flsynthstr.toStdWString();
+ translatedstrings[IDS_2132] = gssynthstr.toStdWString();
auto ftsynthstr = QCoreApplication::translate("", " is required for ESC/P printer emulation.");
if (ftsynthstr.contains("libfreetype"))
{
diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp
index 56391569a..1c441b8ef 100644
--- a/src/qt/qt_settingssound.cpp
+++ b/src/qt/qt_settingssound.cpp
@@ -25,6 +25,7 @@ extern "C" {
#include <86box/sound.h>
#include <86box/midi.h>
#include <86box/snd_mpu401.h>
+#include <86box/snd_opl.h>
}
#include "qt_deviceconfig.hpp"
@@ -52,6 +53,10 @@ void SettingsSound::save() {
GAMEBLASTER = ui->checkBoxCMS->isChecked() ? 1 : 0;
GUS = ui->checkBoxGUS->isChecked() ? 1 : 0;;
sound_is_float = ui->checkBoxFloat32->isChecked() ? 1 : 0;;
+ if (ui->radioButtonYMFM->isChecked())
+ fm_driver = FM_DRV_YMFM;
+ else
+ fm_driver = FM_DRV_NUKED;
}
void SettingsSound::onCurrentMachineChanged(int machineId) {
@@ -151,6 +156,15 @@ void SettingsSound::onCurrentMachineChanged(int machineId) {
ui->pushButtonConfigureGUS->setEnabled((GUS > 0) && hasIsa16);
ui->checkBoxSSI2001->setEnabled(hasIsa);
ui->pushButtonConfigureSSI2001->setEnabled((SSI2001 > 0) && hasIsa);
+ switch (fm_driver) {
+ case FM_DRV_YMFM:
+ ui->radioButtonYMFM->setChecked(true);
+ break;
+ case FM_DRV_NUKED:
+ default:
+ ui->radioButtonNuked->setChecked(true);
+ break;
+ }
}
static bool allowMpu401(Ui::SettingsSound *ui) {
diff --git a/src/qt/qt_settingssound.ui b/src/qt/qt_settingssound.ui
index 65f5d7fd6..9ae91dcd2 100644
--- a/src/qt/qt_settingssound.ui
+++ b/src/qt/qt_settingssound.ui
@@ -152,6 +152,35 @@
-
+
+
+
+ 0
+ 0
+
+
+
+ FM synth driver
+
+
+
-
+
+
+ Nuked (more accurate)
+
+
+
+ -
+
+
+ YMFM (faster)
+
+
+
+
+
+
+ -
Qt::Vertical
diff --git a/src/sound/snd_sb.c b/src/sound/snd_sb.c
index 16fcfe9d3..609786d0d 100644
--- a/src/sound/snd_sb.c
+++ b/src/sound/snd_sb.c
@@ -314,7 +314,7 @@ sb_get_buffer_sbpro(int32_t *buffer, int len, void *p)
if (sb->opl_enabled) {
sb->opl.reset_buffer(sb->opl.priv);
- if (sb->dsp.sb_type != SBPRO)
+ if (sb->dsp.sb_type == SBPRO)
sb->opl2.reset_buffer(sb->opl2.priv);
}
@@ -2749,6 +2749,17 @@ static const device_config_t sb_pro_config[] = {
{ .name = "", .description = "", .type = CONFIG_END }
};
+static const device_config_t sb_pro_mcv_config[] = {
+ {
+ .name = "receive_input",
+ .description = "Receive input (SB MIDI)",
+ .type = CONFIG_BINARY,
+ .default_string = "",
+ .default_int = 1
+ },
+ { .name = "", .description = "", .type = CONFIG_END }
+};
+
static const device_config_t sb_16_config[] = {
{
.name = "base",
@@ -3523,7 +3534,7 @@ const device_t sb_pro_mcv_device = {
{ .available = NULL },
.speed_changed = sb_speed_changed,
.force_redraw = NULL,
- .config = NULL
+ .config = sb_pro_mcv_config
};
const device_t sb_pro_compat_device = {
diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c
index 174dc5037..709e2a972 100644
--- a/src/video/vid_cl54xx.c
+++ b/src/video/vid_cl54xx.c
@@ -46,6 +46,7 @@
#define BIOS_GD5420_PATH "roms/video/cirruslogic/5420.vbi"
#define BIOS_GD5422_PATH "roms/video/cirruslogic/cl5422.bin"
#define BIOS_GD5426_DIAMOND_A1_ISA_PATH "roms/video/cirruslogic/diamond5426.vbi"
+#define BIOS_GD5426_MCA_PATH "roms/video/cirruslogic/Reply.BIN"
#define BIOS_GD5428_DIAMOND_B1_VLB_PATH "roms/video/cirruslogic/Diamond SpeedStar PRO VLB v3.04.bin"
#define BIOS_GD5428_ISA_PATH "roms/video/cirruslogic/5428.bin"
#define BIOS_GD5428_MCA_PATH "roms/video/cirruslogic/SVGA141.ROM"
@@ -3902,6 +3903,8 @@ static void
else {
if (gd54xx->vlb)
romfn = BIOS_GD5428_PATH;
+ else if (gd54xx->mca)
+ romfn = BIOS_GD5426_MCA_PATH;
else
romfn = BIOS_GD5428_ISA_PATH;
}
@@ -4115,8 +4118,8 @@ static void
gd54xx->unlocked = 1;
if (gd54xx->mca) {
- gd54xx->pos_regs[0] = 0x7b;
- gd54xx->pos_regs[1] = 0x91;
+ gd54xx->pos_regs[0] = svga->crtc[0x27] == CIRRUS_ID_CLGD5426 ? 0x82 : 0x7b;
+ gd54xx->pos_regs[1] = svga->crtc[0x27] == CIRRUS_ID_CLGD5426 ? 0x81 : 0x91;
mca_add(gd5428_mca_read, gd5428_mca_write, gd5428_mca_feedb, NULL, gd54xx);
io_sethandler(0x46e8, 0x0001, gd54xx_in, NULL, NULL, gd54xx_out, NULL, NULL, gd54xx);
}
@@ -4184,6 +4187,12 @@ gd5428_isa_available(void)
return rom_present(BIOS_GD5428_ISA_PATH);
}
+static int
+gd5426_mca_available(void)
+{
+ return rom_present(BIOS_GD5426_MCA_PATH);
+}
+
static int
gd5428_mca_available(void)
{
@@ -4699,6 +4708,20 @@ const device_t gd5428_mca_device = {
.config = NULL
};
+const device_t gd5426_mca_device = {
+ .name = "Cirrus Logic GD5426 (MCA) (Reply Video Adapter)",
+ .internal_name = "replymcasvga",
+ .flags = DEVICE_MCA,
+ .local = CIRRUS_ID_CLGD5426,
+ .init = gd54xx_init,
+ .close = gd54xx_close,
+ .reset = gd54xx_reset,
+ { .available = gd5426_mca_available },
+ .speed_changed = gd54xx_speed_changed,
+ .force_redraw = gd54xx_force_redraw,
+ .config = gd5426_config
+};
+
const device_t gd5428_onboard_device = {
.name = "Cirrus Logic GD5428 (ISA) (On-Board)",
.internal_name = "cl_gd5428_onboard",
diff --git a/src/video/vid_table.c b/src/video/vid_table.c
index fdad852fe..94d4601a8 100644
--- a/src/video/vid_table.c
+++ b/src/video/vid_table.c
@@ -148,6 +148,7 @@ video_cards[] = {
{ &vga_device },
{ &v7_vga_1024i_device },
{ &wy700_device },
+ { &gd5426_mca_device },
{ &gd5428_mca_device },
{ &et4000_mca_device },
{ &radius_svga_multiview_mca_device },
diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc
index a28b99a84..c7bdb3cb1 100644
--- a/src/win/languages/cs-CZ.rc
+++ b/src/win/languages/cs-CZ.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Použít zvuk FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Druh sítě:"
#define STR_PCAP "PCap zařízení:"
diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc
index 27644e4a7..d99095d56 100644
--- a/src/win/languages/de-DE.rc
+++ b/src/win/languages/de-DE.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32-Wiedergabe benutzen"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Netzwerktyp:"
#define STR_PCAP "PCap-Gerät:"
diff --git a/src/win/languages/dialogs.rc b/src/win/languages/dialogs.rc
index 45a767ea3..bd1eb87bd 100644
--- a/src/win/languages/dialogs.rc
+++ b/src/win/languages/dialogs.rc
@@ -364,6 +364,17 @@ BEGIN
CONTROL STR_FLOAT, IDC_CHECK_FLOAT,
"Button", BS_AUTOCHECKBOX | WS_TABSTOP,
CFG_HMARGIN, 138, 104, CFG_CHECKBOX_HEIGHT
+
+ GROUPBOX STR_FM_DRIVER, IDC_FM_DRIVER,
+ CFG_HMARGIN, 154, 110, 42
+
+ CONTROL STR_FM_DRV_NUKED, IDC_RADIO_FM_DRV_NUKED,
+ "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,
+ 14, 166, CFG_CHECKBOX_PRI_WIDTH, CFG_CHECKBOX_HEIGHT
+
+ CONTROL STR_FM_DRV_YMFM, IDC_RADIO_FM_DRV_YMFM,
+ "Button", BS_AUTORADIOBUTTON | WS_TABSTOP,
+ 14, 180, CFG_CHECKBOX_PRI_WIDTH, CFG_CHECKBOX_HEIGHT
END
DLG_CFG_NETWORK DIALOG DISCARDABLE CFG_PANE_LEFT, CFG_PANE_TOP, CFG_PANE_WIDTH, CFG_PANE_HEIGHT
@@ -924,6 +935,8 @@ END
#undef STR_VIDEO
#undef STR_VOODOO
+#undef STR_IBM8514
+#undef STR_XGA
#undef STR_MOUSE
#undef STR_JOYSTICK
@@ -940,6 +953,9 @@ END
#undef STR_CMS
#undef STR_GUS
#undef STR_FLOAT
+#undef STR_FM_DRIVER
+#undef STR_FM_DRV_NUKED
+#undef STR_FM_DRV_YMFM
#undef STR_NET_TYPE
#undef STR_PCAP
diff --git a/src/win/languages/en-GB.rc b/src/win/languages/en-GB.rc
index fbbb982cf..9c1e8acd7 100644
--- a/src/win/languages/en-GB.rc
+++ b/src/win/languages/en-GB.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Use FLOAT32 sound"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Network type:"
#define STR_PCAP "PCap device:"
diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc
index 5a5839686..5a5fa4fd2 100644
--- a/src/win/languages/en-US.rc
+++ b/src/win/languages/en-US.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Use FLOAT32 sound"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Network type:"
#define STR_PCAP "PCap device:"
diff --git a/src/win/languages/es-ES.rc b/src/win/languages/es-ES.rc
index b7eb61d24..3dc9757ea 100644
--- a/src/win/languages/es-ES.rc
+++ b/src/win/languages/es-ES.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Usar sonido FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Tipo de red:"
#define STR_PCAP "Dispositivo PCap:"
diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc
index a8dc55b72..d1b390bcd 100644
--- a/src/win/languages/fi-FI.rc
+++ b/src/win/languages/fi-FI.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Käytä FLOAT32-ääntä"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Verkon tyyppi:"
#define STR_PCAP "PCap-laite:"
diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc
index 11fc3360e..eab96bf05 100644
--- a/src/win/languages/fr-FR.rc
+++ b/src/win/languages/fr-FR.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Utiliser le son FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Type de réseau:"
#define STR_PCAP "Dispositif PCap:"
diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc
index 60e6e28c4..3cb8eb6d3 100644
--- a/src/win/languages/hr-HR.rc
+++ b/src/win/languages/hr-HR.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Koristi FLOAT32 za zvuk"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Tip mreže:"
#define STR_PCAP "Uređaj PCap:"
diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc
index 6b4dae959..7c2e1cf5e 100644
--- a/src/win/languages/hu-HU.rc
+++ b/src/win/languages/hu-HU.rc
@@ -294,6 +294,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32 használata"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Hálózati típusa:"
#define STR_PCAP "PCap eszköz:"
diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc
index 20d301f47..ca24daed4 100644
--- a/src/win/languages/it-IT.rc
+++ b/src/win/languages/it-IT.rc
@@ -290,6 +290,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Usa suono FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Tipo di rete:"
#define STR_PCAP "Dispositivo PCap:"
diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc
index 151e13e65..18017bfb4 100644
--- a/src/win/languages/ja-JP.rc
+++ b/src/win/languages/ja-JP.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32サウンドを使用する"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "ネットワークタイプ:"
#define STR_PCAP "PCapデバイス:"
diff --git a/src/win/languages/ko-KR.rc b/src/win/languages/ko-KR.rc
index 831ca74bb..961b00748 100644
--- a/src/win/languages/ko-KR.rc
+++ b/src/win/languages/ko-KR.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32 사운드 사용"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "네트워크 종류:"
#define STR_PCAP "PCap 장치:"
diff --git a/src/win/languages/pl-PL.rc b/src/win/languages/pl-PL.rc
index 211eb3ed8..5405778d3 100644
--- a/src/win/languages/pl-PL.rc
+++ b/src/win/languages/pl-PL.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Użyj dźwięku FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Rodzaj sieci:"
#define STR_PCAP "Urządzenie PCap:"
diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc
index 5e23a9d71..538472293 100644
--- a/src/win/languages/pt-BR.rc
+++ b/src/win/languages/pt-BR.rc
@@ -292,6 +292,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Usar som FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Tipo de rede:"
#define STR_PCAP "Dispositivo PCap:"
diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc
index fafc21df4..314f7ed56 100644
--- a/src/win/languages/pt-PT.rc
+++ b/src/win/languages/pt-PT.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Utilizar som FLOAT32"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Tipo de rede:"
#define STR_PCAP "Dispositivo PCap:"
diff --git a/src/win/languages/ru-RU.rc b/src/win/languages/ru-RU.rc
index 15bd1752d..e88d9668e 100644
--- a/src/win/languages/ru-RU.rc
+++ b/src/win/languages/ru-RU.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32 звук"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Тип сети:"
#define STR_PCAP "Устройство PCap:"
diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc
index 7d715c5ca..e8672235f 100644
--- a/src/win/languages/sl-SI.rc
+++ b/src/win/languages/sl-SI.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Uporabi FLOAT32 za zvok"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Vrsta omrežja:"
#define STR_PCAP "Naprava PCap:"
diff --git a/src/win/languages/tr-TR.rc b/src/win/languages/tr-TR.rc
index cc3a98406..3d1cffc97 100644
--- a/src/win/languages/tr-TR.rc
+++ b/src/win/languages/tr-TR.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32 ses kullan"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Ağ tipi:"
#define STR_PCAP "PCap cihazı:"
diff --git a/src/win/languages/uk-UA.rc b/src/win/languages/uk-UA.rc
index dfb86cc8b..5a741a5c9 100644
--- a/src/win/languages/uk-UA.rc
+++ b/src/win/languages/uk-UA.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "FLOAT32 звук"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "Тип мережі:"
#define STR_PCAP "Пристрій PCap:"
diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc
index a3c324c6c..3151b7143 100644
--- a/src/win/languages/zh-CN.rc
+++ b/src/win/languages/zh-CN.rc
@@ -289,6 +289,9 @@ END
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "使用单精度浮点 (FLOAT32)"
+#define STR_FM_DRIVER "FM synth driver"
+#define STR_FM_DRV_NUKED "Nuked (more accurate)"
+#define STR_FM_DRV_YMFM "YMFM (faster)"
#define STR_NET_TYPE "网络类型:"
#define STR_PCAP "PCap 设备:"
diff --git a/src/win/win_settings.c b/src/win/win_settings.c
index 84ad26754..227c007b1 100644
--- a/src/win/win_settings.c
+++ b/src/win/win_settings.c
@@ -63,6 +63,7 @@
#include <86box/sound.h>
#include <86box/midi.h>
#include <86box/snd_mpu401.h>
+#include <86box/snd_opl.h>
#include <86box/video.h>
#include <86box/vid_xga_device.h>
#include <86box/plat.h>
@@ -94,7 +95,7 @@ static int temp_mouse, temp_joystick;
/* Sound category */
static int temp_sound_card, temp_midi_output_device, temp_midi_input_device, temp_mpu401, temp_SSI2001, temp_GAMEBLASTER, temp_GUS;
-static int temp_float;
+static int temp_float, temp_fm_driver;
/* Network category */
static int temp_net_type, temp_net_card;
@@ -350,6 +351,7 @@ win_settings_init(void)
temp_GAMEBLASTER = GAMEBLASTER;
temp_GUS = GUS;
temp_float = sound_is_float;
+ temp_fm_driver = fm_driver;
/* Network category */
temp_net_type = network_type;
@@ -476,6 +478,7 @@ win_settings_changed(void)
i = i || (GAMEBLASTER != temp_GAMEBLASTER);
i = i || (GUS != temp_GUS);
i = i || (sound_is_float != temp_float);
+ i = i || (fm_driver != temp_fm_driver);
/* Network category */
i = i || (network_type != temp_net_type);
@@ -568,6 +571,7 @@ win_settings_save(void)
GAMEBLASTER = temp_GAMEBLASTER;
GUS = temp_GUS;
sound_is_float = temp_float;
+ fm_driver = temp_fm_driver;
/* Network category */
network_type = temp_net_type;
@@ -1421,6 +1425,11 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
settings_enable_window(hdlg, IDC_CONFIGURE_SSI, machine_has_bus(temp_machine, MACHINE_BUS_ISA) && temp_SSI2001);
settings_set_check(hdlg, IDC_CHECK_FLOAT, temp_float);
+ if (temp_fm_driver == FM_DRV_YMFM)
+ settings_set_check(hdlg, IDC_RADIO_FM_DRV_YMFM, BST_CHECKED);
+ else
+ settings_set_check(hdlg, IDC_RADIO_FM_DRV_NUKED, BST_CHECKED);
+
free(lptsTemp);
return TRUE;
@@ -1517,7 +1526,10 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
temp_GUS = settings_get_check(hdlg, IDC_CHECK_GUS);
temp_SSI2001 = settings_get_check(hdlg, IDC_CHECK_SSI);
temp_float = settings_get_check(hdlg, IDC_CHECK_FLOAT);
-
+ if (settings_get_check(hdlg, IDC_RADIO_FM_DRV_NUKED))
+ temp_fm_driver = FM_DRV_NUKED;
+ if (settings_get_check(hdlg, IDC_RADIO_FM_DRV_YMFM))
+ temp_fm_driver = FM_DRV_YMFM;
default:
return FALSE;
}