GUS: Add the UltraSound ACE

This commit is contained in:
Alexander Babikov
2025-09-01 05:33:02 +05:00
parent 7f7461620d
commit eec9b52151
27 changed files with 165 additions and 15 deletions

View File

@@ -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;

View File

@@ -2136,6 +2136,9 @@ msgstr ""
msgid "Enable Game port"
msgstr ""
msgid "Enable Adlib ports"
msgstr ""
msgid "SID Model"
msgstr ""

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -2136,6 +2136,9 @@ msgstr "低DMA"
msgid "Enable Game port"
msgstr "ゲームポートを有効にする"
msgid "Enable Adlib ports"
msgstr "Adlibポートを有効にする"
msgid "SID Model"
msgstr "SIDモデル"

View File

@@ -2136,6 +2136,9 @@ msgstr "낮은 DMA"
msgid "Enable Game port"
msgstr "게임 포트 사용"
msgid "Enable Adlib ports"
msgstr "Adlib 포트 활성화"
msgid "SID Model"
msgstr "SID 모델"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -2136,6 +2136,9 @@ msgstr "Низкий DMA"
msgid "Enable Game port"
msgstr "Включить игровой порт"
msgid "Enable Adlib ports"
msgstr "Включить порты Adlib"
msgid "SID Model"
msgstr "Модель SID"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -2136,6 +2136,9 @@ msgstr "Низький рівень DMA"
msgid "Enable Game port"
msgstr "Увімкнути ігровий порт"
msgid "Enable Adlib ports"
msgstr "Увімкнути порти Adlib"
msgid "SID Model"
msgstr "Модель SID"

View File

@@ -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"

View File

@@ -2136,6 +2136,9 @@ msgstr "低 DMA"
msgid "Enable Game port"
msgstr "启用游戏端口"
msgid "Enable Adlib ports"
msgstr "启用 Adlib 端口"
msgid "SID Model"
msgstr "SID 芯片型号"

View File

@@ -2136,6 +2136,9 @@ msgstr "低 DMA"
msgid "Enable Game port"
msgstr "啟用遊戲埠"
msgid "Enable Adlib ports"
msgstr "啟用 Adlib 連接埠"
msgid "SID Model"
msgstr "SID 型號"

View File

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

View File

@@ -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 },