From c4ba299d7ffdb20233bc589680ecd614463d4098 Mon Sep 17 00:00:00 2001 From: kotochi98 <185547947+kotochi98@users.noreply.github.com> Date: Tue, 13 Jan 2026 13:21:57 +0300 Subject: [PATCH] Add the MSI MS-6117 and its OEM/foreign language BIOS variants --- src/include/86box/machine.h | 4 + src/machine/m_at_slot1.c | 161 ++++++++++++++++++++++++++++++++++++ src/machine/machine_table.c | 45 ++++++++++ 3 files changed, 210 insertions(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 71a1c9867..a7920bad0 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1224,6 +1224,10 @@ extern const device_t ga686_device; #endif extern int machine_at_ga686_init(const machine_t *); #ifdef EMU_DEVICE_H +extern const device_t ms6117_device; +#endif +extern int machine_at_ms6117_init(const machine_t *); +#ifdef EMU_DEVICE_H extern const device_t ms6119_device; #endif extern int machine_at_ms6119_init(const machine_t *); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 7b62b4a81..92e1a1195 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -307,6 +307,167 @@ machine_at_spitfire_init(const machine_t *model) return ret; } +static const device_config_t ms6117_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ms6117a", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 2.0 (latest)", + .internal_name = "ms6117a", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/A617MS20.ROM", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 4.10tc (Traditional Chinese)", + .internal_name = "ms6117atc", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/A617C410.ROM", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 3.11sc (Simplified Chinese)", + .internal_name = "ms6117asc", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/A617C311.ROM", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 1.10j (Japanese)", + .internal_name = "ms6117aj", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/A617J110.ROM", "" } + }, + { + .name = "AwardBIOS v4.51PG - Revision 3.2 (Latest)", + .internal_name = "ms6117w", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6117/W617MS32.BIN", "" } + }, + { + .name = "AwardBIOS v4.51PG - Revision 3.2 (Patched for large HDDs)", + .internal_name = "ms6117wp", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6117/611732x_patched.BIN", "" } + }, + { + .name = "AwardBIOS v4.51PG - Revision 1.5 (Viglen OEM)", + .internal_name = "ms6117wvi", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/w617v115.BIN", "" } + }, + { + .name = "AwardBIOS v4.51PG - Revision 1.4 (Fujitsu-Siemens OEM)", + .internal_name = "ms6117wfs", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms6117/AWARD 1.04 .BIN", "" } + }, + { + .name = "AwardBIOS v4.51PG - Revision 1.02 (LG IBM OEM)", + .internal_name = "ms6117wlg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6117/BIOS.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ms6117_device = { + .name = "MSI MS-6117", + .internal_name = "ms6117", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ms6117_config +}; + +int +machine_at_ms6117_init(const machine_t *model) +{ + int ret = 0; + const char *fn; + + /* 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); + if (!strcmp(fn, "roms/machines/ms6117/W617MS32.BIN") || !strcmp(fn, "roms/machines/ms6117/611732x_patched.BIN") || !strcmp(fn, "roms/machines/ms6117/BIOS.BIN")) + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + else + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + + device_add(&i440lx_device); + device_add(&piix4e_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); + + if (!strcmp(fn, "roms/machines/ms6117/W617MS32.BIN") || !strcmp(fn, "roms/machines/ms6117/611732x_patched.BIN") || !strcmp(fn, "roms/machines/ms6117/BIOS.BIN")) + device_add(&winbond_flash_w29c020_device); /* assumed */ + else + device_add(&winbond_flash_w29c011a_device); + + spd_register(SPD_TYPE_SDRAM, 0xF, 256); + + return ret; +} + int machine_at_ma30d_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f24682db6..0533af51e 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -18218,6 +18218,51 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC + firmware. */ + { + .name = "[i440LX] MSI MS-6117", + .internal_name = "ms6117", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_ms6117_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, + .min_voltage = 1500, + .max_voltage = 3500, + .min_multi = 2.0, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ms6117_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has a SM(S)C FDC37C67x Super I/O chip with on-chip KBC with Phoenix or AMIKey-2 KBC firmware. */ {