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/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/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;
}