diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 5f91ec9d0..8c223cff9 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -203,9 +203,10 @@ extern const device_t es1373_onboard_device; extern const device_t ct5880_device; extern const device_t ct5880_onboard_device; -/* Gravis UltraSound and UltraSound Max */ +/* Gravis UltraSound family */ extern const device_t gus_device; extern const device_t gus_max_device; +extern const device_t gus_ace_device; /* IBM PS/1 Audio Card */ extern const device_t ps1snd_device; diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index a65578eae..df6f01f3c 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -2136,6 +2136,9 @@ msgstr "" msgid "Enable Game port" msgstr "" +msgid "Enable Adlib ports" +msgstr "" + msgid "SID Model" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index ae265593c..6cef7611c 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -2136,6 +2136,9 @@ msgstr "Nízký DMA kanál" msgid "Enable Game port" msgstr "Povolit herní port" +msgid "Enable Adlib ports" +msgstr "Povolit porty Adlib" + msgid "SID Model" msgstr "Model SID" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 4385811c0..3b92f7ec3 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -2136,6 +2136,9 @@ msgstr "Niedrige DMA" msgid "Enable Game port" msgstr "Game-Port einschalten" +msgid "Enable Adlib ports" +msgstr "Adlib-Ports einschalten" + msgid "SID Model" msgstr "SID-Modell" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index b3d8835cf..46bd759fe 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -2136,6 +2136,9 @@ msgstr "DMA bajo" msgid "Enable Game port" msgstr "Habilitar puerto de juegos" +msgid "Enable Adlib ports" +msgstr "Habilitar puertos Adlib" + msgid "SID Model" msgstr "Modelo de SID" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 475d94b7b..dc3cae0cf 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -2136,6 +2136,9 @@ msgstr "Matala DMA" msgid "Enable Game port" msgstr "Peliportti" +msgid "Enable Adlib ports" +msgstr "Adlib-portit" + msgid "SID Model" msgstr "SID-malli" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 3f28b4af8..c31b4c8a6 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -2136,6 +2136,9 @@ msgstr "DMA bas" msgid "Enable Game port" msgstr "Activer le port de jeu" +msgid "Enable Adlib ports" +msgstr "Activer les ports Adlib" + msgid "SID Model" msgstr "Modèle SID" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 4996db404..4f2d8ee93 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -2136,6 +2136,9 @@ msgstr "Niski DMA" msgid "Enable Game port" msgstr "Omogoći vrata za igru" +msgid "Enable Adlib ports" +msgstr "Omogući Adlib portove" + msgid "SID Model" msgstr "Model SID-a" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index f0806bf7b..4c0a6722a 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -2136,6 +2136,9 @@ msgstr "DMA basso" msgid "Enable Game port" msgstr "Abilita la porta giochi" +msgid "Enable Adlib ports" +msgstr "Abilita porte Adlib" + msgid "SID Model" msgstr "Modello SID" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index be01430f9..2fb7da257 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -2136,6 +2136,9 @@ msgstr "低DMA" msgid "Enable Game port" msgstr "ゲームポートを有効にする" +msgid "Enable Adlib ports" +msgstr "Adlibポートを有効にする" + msgid "SID Model" msgstr "SIDモデル" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 14da0ec8b..a9fa55f5b 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -2136,6 +2136,9 @@ msgstr "낮은 DMA" msgid "Enable Game port" msgstr "게임 포트 사용" +msgid "Enable Adlib ports" +msgstr "Adlib 포트 활성화" + msgid "SID Model" msgstr "SID 모델" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index 8d9f97521..53115d4b1 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -2136,6 +2136,9 @@ msgstr "Lav DMA" msgid "Enable Game port" msgstr "Aktiver spillport" +msgid "Enable Adlib ports" +msgstr "Aktiver Adlib-porter" + msgid "SID Model" msgstr "SID-modell" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index d28a72651..acc3526ec 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -2136,6 +2136,9 @@ msgstr "Lage DMA" msgid "Enable Game port" msgstr "Game-poort inschakelen" +msgid "Enable Adlib ports" +msgstr "Adlib-poorten inschakelen" + msgid "SID Model" msgstr "SID-model" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 2a0cde697..81bedb546 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -2136,6 +2136,9 @@ msgstr "Niski poziom DMA" msgid "Enable Game port" msgstr "Włącz port gier" +msgid "Enable Adlib ports" +msgstr "Włącz porty Adlib" + msgid "SID Model" msgstr "Model SID" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 63a17871b..211d39f16 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -2136,6 +2136,9 @@ msgstr "DMA baixo" msgid "Enable Game port" msgstr "Ativar a porta do jogo" +msgid "Enable Adlib ports" +msgstr "Ativar portas Adlib" + msgid "SID Model" msgstr "Modelo do SID" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 4c7866f41..bd7894f6e 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -2136,6 +2136,9 @@ msgstr "DMA baixo" msgid "Enable Game port" msgstr "Ativar a porta de jogos" +msgid "Enable Adlib ports" +msgstr "Ativar portas Adlib" + msgid "SID Model" msgstr "Modelo do SID" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 904757d74..6535b6603 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -2136,6 +2136,9 @@ msgstr "Низкий DMA" msgid "Enable Game port" msgstr "Включить игровой порт" +msgid "Enable Adlib ports" +msgstr "Включить порты Adlib" + msgid "SID Model" msgstr "Модель SID" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 3a5e3b863..20f86033c 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -2136,6 +2136,9 @@ msgstr "Nízka hodnota DMA" msgid "Enable Game port" msgstr "Povolenie herného portu" +msgid "Enable Adlib ports" +msgstr "Povoliť porty Adlib" + msgid "SID Model" msgstr "Model SID" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index c23024a33..0813e3d83 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -2136,6 +2136,9 @@ msgstr "Nizki DMA" msgid "Enable Game port" msgstr "Omogočanje igralnih vrat" +msgid "Enable Adlib ports" +msgstr "Omogoči vrata Adlib" + msgid "SID Model" msgstr "Model SID-a" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 58ead9405..e3db6d3b7 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -2136,6 +2136,9 @@ msgstr "Låg DMA" msgid "Enable Game port" msgstr "Aktivera spelport" +msgid "Enable Adlib ports" +msgstr "Aktivera Adlib-portar" + msgid "SID Model" msgstr "SID-modell" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 538cc7af6..65eb47152 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -2136,6 +2136,9 @@ msgstr "Düşük DMA" msgid "Enable Game port" msgstr "Gameport'ı etkinleştir" +msgid "Enable Adlib ports" +msgstr "Adlib bağlantı noktalarını etkinleştir" + msgid "SID Model" msgstr "SID Modeli" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index c079fc141..79f5763c3 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -2136,6 +2136,9 @@ msgstr "Низький рівень DMA" msgid "Enable Game port" msgstr "Увімкнути ігровий порт" +msgid "Enable Adlib ports" +msgstr "Увімкнути порти Adlib" + msgid "SID Model" msgstr "Модель SID" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 0190aee4c..f316c54c2 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -2136,6 +2136,9 @@ msgstr "DMA thấp" msgid "Enable Game port" msgstr "Bật cổng trò chơi" +msgid "Enable Adlib ports" +msgstr "Bật cổng Adlib" + msgid "SID Model" msgstr "Mẫu SID" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 7f44fe4fc..31a34da90 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -2136,6 +2136,9 @@ msgstr "低 DMA" msgid "Enable Game port" msgstr "启用游戏端口" +msgid "Enable Adlib ports" +msgstr "启用 Adlib 端口" + msgid "SID Model" msgstr "SID 芯片型号" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 21a984ebd..7dcb3638f 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -2136,6 +2136,9 @@ msgstr "低 DMA" msgid "Enable Game port" msgstr "啟用遊戲埠" +msgid "Enable Adlib ports" +msgstr "啟用 Adlib 連接埠" + msgid "SID Model" msgstr "SID 型號" diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index 5e0043ad6..cc585c8db 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -46,6 +46,7 @@ enum { enum { GUS_CLASSIC = 0, GUS_MAX = 1, + GUS_ACE = 2, }; typedef struct gus_t { @@ -651,15 +652,17 @@ gus_write(uint16_t addr, uint8_t val, void *priv) break; case 6: if (gus->type > GUS_CLASSIC) { - if (!(val & 0x2) && (gus->jumper & 0x2)) - io_removehandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); - else if ((val & 0x2) && !(gus->jumper & 0x2)) - io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); + if (gus->type != GUS_ACE) { + if (!(val & 0x2) && (gus->jumper & 0x2)) + io_removehandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); + else if ((val & 0x2) && !(gus->jumper & 0x2)) + io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); - if (!(val & 0x4) && (gus->jumper & 0x4)) - gameport_remap(gus->gameport, 0x0); - else if ((val & 0x4) && !(gus->jumper & 0x4)) - gameport_remap(gus->gameport, 0x201); + if (!(val & 0x4) && (gus->jumper & 0x4)) + gameport_remap(gus->gameport, 0x0); + else if ((val & 0x4) && !(gus->jumper & 0x4)) + gameport_remap(gus->gameport, 0x201); + } gus->jumper = val; } @@ -899,6 +902,8 @@ gus_read(uint16_t addr, void *priv) case 0x706: if (gus->type == GUS_MAX) val = 0x0a; /* GUS MAX */ + else if (gus->type == GUS_ACE) + val = 0x30; /* GUS ACE */ else val = 0xff; /*Pre 3.7 - no mixer*/ break; @@ -943,8 +948,11 @@ gus_read(uint16_t addr, void *priv) case 0x20e: return gus->sb_2xe; - case 0x208: case 0x388: + if ((gus->type == GUS_ACE) && !device_get_config_int("adlib_ports")) + break; + fallthrough; + case 0x208: if (gus->tctrl & GUS_TIMER_CTRL_AUTO) val = gus->sb_2xa; else { @@ -959,10 +967,12 @@ gus_read(uint16_t addr, void *priv) #ifdef OLD_NMI_BEHAVIOR nmi = 0; #endif /* OLD_NMI_BEHAVIOR */ - fallthrough; - case 0x389: val = gus->ad_data; break; + case 0x389: + if ((gus->type != GUS_ACE) || device_get_config_int("adlib_ports")) + val = gus->ad_data; + break; case 0x20A: val = gus->adcommand; @@ -1393,13 +1403,14 @@ gus_init(UNUSED(const device_t *info)) gus->base = device_get_config_hex16("base"); io_sethandler(gus->base, 0x0010, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); - io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); + if (gus->type != GUS_ACE) + io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); io_sethandler(0x0102 + gus->base, 0x000e, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); io_sethandler(0x0506 + gus->base, 0x0001, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); io_sethandler(0x0388, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); if (gus->type == GUS_CLASSIC && device_get_config_int("gameport")) gus->gameport = gameport_add(&gameport_201_device); - else { + else if (gus->type != GUS_ACE) { gus->gameport = gameport_add(&gameport_pnp_1io_device); gameport_remap(gus->gameport, 0x201); } @@ -1418,7 +1429,7 @@ gus_init(UNUSED(const device_t *info)) sound_add_handler(gus_get_buffer, gus); - if (device_get_config_int("receive_input")) + if ((gus->type != GUS_ACE) && (device_get_config_int("receive_input"))) midi_in_handler(1, gus_input_msg, gus_input_sysex, gus); return gus; @@ -1561,6 +1572,57 @@ static const device_config_t gus_max_config[] = { // clang-format off }; +static const device_config_t gus_ace_config[] = { + // clang-format off + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x260, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "210H", .value = 0x210 }, + { .description = "220H", .value = 0x220 }, + { .description = "230H", .value = 0x230 }, + { .description = "240H", .value = 0x240 }, + { .description = "250H", .value = 0x250 }, + { .description = "260H", .value = 0x260 }, + { NULL } + }, + .bios = { { 0 } } + }, + { + .name = "gus_ram", + .description = "Memory size", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "512 KB", .value = 1 }, + { .description = "1 MB", .value = 2 }, + { NULL } + }, + .bios = { { 0 } } + }, + { + .name = "adlib_ports", + .description = "Enable Adlib ports", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +// clang-format off +}; + const device_t gus_device = { .name = "Gravis UltraSound", .internal_name = "gus", @@ -1588,3 +1650,17 @@ const device_t gus_max_device = { .force_redraw = NULL, .config = gus_max_config }; + +const device_t gus_ace_device = { + .name = "Gravis UltraSound ACE", + .internal_name = "gusace", + .flags = DEVICE_ISA16, + .local = GUS_ACE, + .init = gus_init, + .close = gus_close, + .reset = gus_reset, + .available = NULL, + .speed_changed = gus_speed_changed, + .force_redraw = NULL, + .config = gus_ace_config +}; diff --git a/src/sound/sound.c b/src/sound/sound.c index 579056359..2fe740e5c 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -139,6 +139,7 @@ static const SOUND_CARD sound_cards[] = { { &cs4236b_device }, { &gus_device }, { &gus_max_device }, + { &gus_ace_device }, { &mirosound_pcm10_device }, { &pas16_device }, { &pas16d_device },