From d7f011e85ffe9164ad775e711bd2a47d67e73639 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Mon, 2 Feb 2026 20:04:32 +0700 Subject: [PATCH] Added Olivetti OEM BIOS to TriGem Como The Olivetti OEM BIOS' date (06/05/99) is newer than the current one (01/18/99). Until the actual voltage and multiplier bus speeds are found, I adjusted them to match other i440LX/EX machines. Also added a note about onboard video. --- src/include/86box/machine.h | 3 ++ src/machine/m_at_slot1.c | 65 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 13 ++++---- 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index caf929c19..ea5d56257 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1210,6 +1210,9 @@ extern int machine_at_ma30d_init(const machine_t *); /* i440EX */ extern int machine_at_brio83xx_init(const machine_t *); extern int machine_at_p6i440e2_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t como_device; +#endif extern int machine_at_como_init(const machine_t *); /* i440BX */ diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index cbd0cdec5..efd5d5d6f 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -544,17 +544,72 @@ machine_at_brio83xx_init(const machine_t *model) return ret; } +static const device_config_t como_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "como", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.08 (Olivetti OEM)", + .internal_name = "como_olivetti", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/como/COMO_Olivetti_OEM.ROM", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 1.12", + .internal_name = "como", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/como/COMO.ROM", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t como_device = { + .name = "TriGem Como", + .internal_name = "como_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = como_config +}; + int machine_at_como_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/como/COMO.ROM", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index ca484969d..bf13025ff 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -18511,10 +18511,11 @@ const machine_t machines[] = { .block = CPU_BLOCK(CPU_CYRIX3S), .min_bus = 66666667, .max_bus = 83333333, - .min_voltage = 2050, - .max_voltage = 3100, - .min_multi = 3.5, - .max_multi = 5.0 + /* TODO: to find the actual voltage and multiplier bus speeds. */ + .min_voltage = 1800, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, @@ -18531,11 +18532,11 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &como_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, - .vid_device = NULL, + .vid_device = NULL, /* Onboard video not yet emulated: ATi Rage IIc AGP */ .snd_device = &cs4235_onboard_device, .net_device = NULL },