From 0f1e6f2196835c070d1bd46592150bf041f96753 Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 11 Sep 2025 00:59:03 +0700 Subject: [PATCH 01/39] Machine adjustments --- src/machine/machine_table.c | 364 ++++++++++++++++++------------------ 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 20baadfcf..758f07993 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -1937,7 +1937,7 @@ const machine_t machines[] = { .ram = { .min = 64, .max = 1024, - .step = 128 + .step = 64 }, .nvrmask = 127, .jumpered_ecp_dma = 0, @@ -3831,7 +3831,7 @@ const machine_t machines[] = { /* AMI BIOS for a chipset-less machine, most likely has AMI 'F' KBC firmware. */ { .name = "[ISA] Trangg Bow Unknown 286", - .internal_name = "ibmatami", + .internal_name = "tbunk286", .type = MACHINE_TYPE_286, .chipset = MACHINE_CHIPSET_DISCRETE, .init = machine_at_tbunk286_init, @@ -3853,8 +3853,8 @@ const machine_t machines[] = { .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, - .max = 512, - .step = 256 + .max = 1024, + .step = 128 }, .nvrmask = 63, .jumpered_ecp_dma = 0, @@ -3916,49 +3916,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* has an Award-branded KBC controller */ - { - .name = "[NEAT] Hyundai Super-286C", - .internal_name = "super286c", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_super286c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 1024, - .step = 128 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { @@ -4181,6 +4138,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has Phoenix MultiKey/42 KBC firmware. */ + { + .name = "[NEAT] Arche AMA-2010", + .internal_name = "px286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_px286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_AT, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, + .step = 128 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + /* The version number is a guess - we have no probe of this machine's controller. */ + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Most likely has Chips & Technologies KBC firmware. */ { .name = "[NEAT] Atari PC 4", @@ -4269,6 +4270,49 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* has an Award-branded KBC controller */ + { + .name = "[NEAT] Hyundai Super-286C", + .internal_name = "super286c", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_super286c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_AT, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 1024, + .step = 128 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has NCR KBC firmware. */ { .name = "[NEAT] NCR 3302", @@ -4313,50 +4357,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has Phoenix MultiKey/42 KBC firmware. */ - { - .name = "[NEAT] Arche AMA-2010", - .internal_name = "px286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_px286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, - .step = 128 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - /* The version number is a guess - we have no probe of this machine's controller. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has the VLSI 82C113 with on-chip KBC. */ { .name = "[SCAMP] Amstrad PC7286", @@ -4867,9 +4867,9 @@ const machine_t machines[] = { .bus_flags = MACHINE_AT, .flags = MACHINE_IDE, .ram = { - .min = 1024, + .min = 512, .max = 4096, - .step = 1024 + .step = 128 }, .nvrmask = 127, .jumpered_ecp_dma = 0, @@ -8742,7 +8742,7 @@ const machine_t machines[] = { .flags = MACHINE_IDE | MACHINE_APM, /* Machine has internal SCSI: Adaptec AIC-6360 */ .ram = { .min = 1024, - .max = 32768, + .max = 65536, .step = 1024 }, .nvrmask = 127, @@ -9480,94 +9480,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has IBM PS/2 Type 1 KBC firmware. */ - { - .name = "[OPTi 802G] IBM PC 330 (type 6573)", - .internal_name = "pc330_6573", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_OPTI_895_802G, - .init = machine_at_pc330_6573_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3_PC330, - .block = CPU_BLOCK_NONE, - .min_bus = 25000000, - .max_bus = 33333333, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 3.0 - }, - .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, - .step = 1024 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pc330_6573_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5430_onboard_vlb_device, - .snd_device = NULL, - .net_device = NULL - }, - /* has a Phoenix PLCC Multikey copyrighted 1993, version unknown. */ - { - .name = "[OPTi 895] Packard Bell PB450", - .internal_name = "pb450", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_OPTI_895_802G, - .init = machine_at_pb450_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 65536, - .step = 1024 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pb450_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_vlb_onboard_device, - .snd_device = NULL, - .net_device = NULL - }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { .name = "[i420EX] Advanced Integration Research 486PI", @@ -10057,6 +9969,94 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has IBM PS/2 Type 1 KBC firmware. */ + { + .name = "[OPTi 802G] IBM PC 330 (type 6573)", + .internal_name = "pc330_6573", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_OPTI_895_802G, + .init = machine_at_pc330_6573_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET3_PC330, + .block = CPU_BLOCK_NONE, + .min_bus = 25000000, + .max_bus = 33333333, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 2.0, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, + .step = 1024 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pc330_6573_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5430_onboard_vlb_device, + .snd_device = NULL, + .net_device = NULL + }, + /* has a Phoenix PLCC Multikey copyrighted 1993, version unknown. */ + { + .name = "[OPTi 895] Packard Bell PB450", + .internal_name = "pb450", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_OPTI_895_802G, + .init = machine_at_pb450_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 65536, + .step = 1024 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pb450_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_vlb_onboard_device, + .snd_device = NULL, + .net_device = NULL + }, /* Has Acer KBC firmware. */ { .name = "[SiS 496] Acer P3", From 3824b2b7820a78e39d80bd1eef3bcbe4d70afbc2 Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 11 Sep 2025 01:38:22 +0700 Subject: [PATCH 02/39] Revert Trangg Bow Unknown 286 changes + overhaul --- src/machine/machine_table.c | 1127 ++++++++++++++++++----------------- 1 file changed, 564 insertions(+), 563 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 758f07993..3f493eef9 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -2429,49 +2429,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - { - .name = "[8086] Amstrad PC20(0)", - .internal_name = "pc200", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc200_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 512, - .max = 640, - .step = 128 - }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_200_device, - .snd_device = NULL, - .net_device = NULL - }, { .name = "[8086] Amstrad PC5086", .internal_name = "pc5086", @@ -2515,6 +2472,49 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + { + .name = "[8086] Amstrad PC20(0)", + .internal_name = "pc200", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc200_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PC, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 512, + .max = 640, + .step = 128 + }, + .nvrmask = 63, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_200_device, + .snd_device = NULL, + .net_device = NULL + }, { .name = "[8086] Amstrad PPC512/640", .internal_name = "ppc512", @@ -3519,6 +3519,51 @@ const machine_t machines[] = { .net_device = NULL }, /* Has IBM AT KBC firmware. */ + /* To configure the BIOS, use PB_2330a_diag.IMA from MS-DOS 3.30 Packard Bell OEM, GSETUP might work too*/ + { + .name = "[ISA] Packard Bell PB286", + .internal_name = "pb286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_pb286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_AT, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, + .step = 128 + }, + .nvrmask = 63, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Has IBM AT KBC firmware. */ { .name = "[ISA] Phoenix AT clone", .internal_name = "ibmatpx", @@ -3606,51 +3651,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has IBM AT KBC firmware. */ - /* To configure the BIOS, use PB_2330a_diag.IMA from MS-DOS 3.30 Packard Bell OEM, GSETUP might work too*/ - { - .name = "[ISA] Packard Bell PB286", - .internal_name = "pb286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_pb286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, - .step = 128 - }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has unknown KBC firmware. */ { .name = "[ISA] Sanyo MBC-17PLUS", @@ -3831,7 +3831,7 @@ const machine_t machines[] = { /* AMI BIOS for a chipset-less machine, most likely has AMI 'F' KBC firmware. */ { .name = "[ISA] Trangg Bow Unknown 286", - .internal_name = "tbunk286", + .internal_name = "ibmatami", .type = MACHINE_TYPE_286, .chipset = MACHINE_CHIPSET_DISCRETE, .init = machine_at_tbunk286_init, @@ -3853,8 +3853,8 @@ const machine_t machines[] = { .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, - .max = 1024, - .step = 128 + .max = 512, + .step = 256 }, .nvrmask = 63, .jumpered_ecp_dma = 0, @@ -5155,50 +5155,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* This has a Holtek keyboard controller which clones AMI 'H'. */ - { - .name = "[ALi M1217] Acrosser AR-B1374", - .internal_name = "arb1374", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1217, - .init = machine_at_arb1374_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, - .step = 1024 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has the AMIKey-2 KBC - that's actually a guess since we do not currently have a picture of the motherboard. */ { @@ -5244,6 +5200,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* This has a Holtek keyboard controller which clones AMI 'H'. */ + { + .name = "[ALi M1217] Acrosser AR-B1374", + .internal_name = "arb1374", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1217, + .init = machine_at_arb1374_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, + .step = 1024 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has a VIA VT82C42N KBC. */ { .name = "[ALi M1217] Flytech A36", @@ -6449,6 +6449,47 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has a Lance LT38C41 that clones an AMIKEY ('F'). */ + { + .name = "[ALi M1429] ECS Panda 386V", + .internal_name = "ecs386v", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_ALI_M1429, + .init = machine_at_ecs386v_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0, + }, + .bus_flags = MACHINE_VLB, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 32768, + .step = 1024, + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, /* TODO: Lance LT38C41. */ + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has an AMI Keyboard BIOS PLUS KBC firmware ('8'). */ { .name = "[C&T 386/AT] ECS 386/32", @@ -6582,47 +6623,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has a Lance LT38C41 that clones an AMIKEY ('F'). */ - { - .name = "[ALi M1429] ECS Panda 386V", - .internal_name = "ecs386v", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_ALI_M1429, - .init = machine_at_ecs386v_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0, - }, - .bus_flags = MACHINE_VLB, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 32768, - .step = 1024, - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, /* TODO: Lance LT38C41. */ - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has AMIKey 'F' KBC firmware. */ { .name = "[OPTi 391] DataExpert 386WB", @@ -13123,7 +13123,7 @@ const machine_t machines[] = { .block = CPU_BLOCK_NONE, .min_bus = 50000000, .max_bus = 66666667, - .min_voltage = 2500, + .min_voltage = 3380, .max_voltage = 3520, .min_multi = 1.5, .max_multi = 3.0 @@ -13737,6 +13737,140 @@ const machine_t machines[] = { }, /* Socket 7 (Dual Voltage) machines */ + /* ALi ALADDiN IV+ */ + /* Has the ALi M1543 southbridge with on-chip KBC. */ + { + .name = "[ALi ALADDiN IV+] Biostar M5ATA", + .internal_name = "m5ata", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_m5ata_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, + .min_voltage = 2100, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 4.5 + }, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, + .step = 8192 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &m5ata_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Has the ALi M1543 southbridge with on-chip KBC. */ + { + .name = "[ALi ALADDiN IV+] MSI MS-5164", + .internal_name = "ms5164", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_ms5164_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, + .min_voltage = 2100, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, + .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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Has the ALi M1543 southbridge with on-chip KBC. */ + { + .name = "[ALi ALADDiN IV+] PC Chips M560", + .internal_name = "m560", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_m560_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 83333333, + .min_voltage = 2100, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | 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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* 430HX */ /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ @@ -15418,145 +15552,6 @@ const machine_t machines[] = { .net_device = NULL }, - /* Apollo VPX */ - /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA - VT82C42N. */ - { - .name = "[VIA VPX] FIC VA-502", - .internal_name = "ficva502", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VPX, - .init = machine_at_ficva502_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, - .min_voltage = 2800, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 - }, - .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, - .step = 8192 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - - /* Apollo VP3 */ - /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA - VT82C42N. */ - { - .name = "[VIA VP3] FIC PA-2012", - .internal_name = "ficpa2012", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, - .init = machine_at_ficpa2012_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 55000000, - .max_bus = 75000000, - .min_voltage = 2100, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, - .step = 8192 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA - VT82C42N. */ - { - .name = "[VIA VP3] PC Partner VIA809DS", - .internal_name = "via809ds", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, - .init = machine_at_via809ds_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, - .min_voltage = 2100, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, - .step = 8192 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* SiS 5571 */ /* Has the SiS 5571 chipset with on-chip KBC. */ { @@ -15827,14 +15822,15 @@ const machine_t machines[] = { .net_device = NULL }, - /* ALi ALADDiN IV+ */ - /* Has the ALi M1543 southbridge with on-chip KBC. */ + /* Apollo VPX */ + /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA + VT82C42N. */ { - .name = "[ALi ALADDiN IV+] Biostar M5ATA", - .internal_name = "m5ata", + .name = "[VIA VPX] FIC VA-502", + .internal_name = "ficva502", .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_m5ata_init, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VPX, + .init = machine_at_ficva502_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -15842,53 +15838,9 @@ const machine_t machines[] = { .cpu = { .package = CPU_PKG_SOCKET5_7, .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, - .min_voltage = 2100, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 4.5 - }, - .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, - .step = 8192 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &m5ata_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Has the ALi M1543 southbridge with on-chip KBC. */ - { - .name = "[ALi ALADDiN IV+] MSI MS-5164", - .internal_name = "ms5164", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_ms5164_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 83333333, - .min_voltage = 2100, + .min_bus = 50000000, + .max_bus = 75000000, + .min_voltage = 2800, .max_voltage = 3520, .min_multi = 1.5, .max_multi = 3.0 @@ -15897,10 +15849,10 @@ const machine_t machines[] = { .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, .ram = { .min = 8192, - .max = 1048576, + .max = 524288, .step = 8192 }, - .nvrmask = 255, + .nvrmask = 127, .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, .kbc_device = NULL, @@ -15916,13 +15868,61 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has the ALi M1543 southbridge with on-chip KBC. */ + + /* Apollo VP3 */ + /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA + VT82C42N. */ { - .name = "[ALi ALADDiN IV+] PC Chips M560", - .internal_name = "m560", + .name = "[VIA VP3] FIC PA-2012", + .internal_name = "ficpa2012", .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_m560_init, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, + .init = machine_at_ficpa2012_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 55000000, + .max_bus = 75000000, + .min_voltage = 2100, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, + .step = 8192 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA + VT82C42N. */ + { + .name = "[VIA VP3] PC Partner VIA809DS", + .internal_name = "via809ds", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, + .init = machine_at_via809ds_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -15931,20 +15931,20 @@ const machine_t machines[] = { .package = CPU_PKG_SOCKET5_7, .block = CPU_BLOCK_NONE, .min_bus = 50000000, - .max_bus = 83333333, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, .min_multi = 1.5, - .max_multi = 3.0 + .max_multi = 5.5 }, - .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, .ram = { .min = 8192, - .max = 786432, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, + .nvrmask = 127, .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, .kbc_device = NULL, @@ -16185,6 +16185,52 @@ const machine_t machines[] = { .net_device = NULL }, + /* SiS 5591 */ + /* Has the SiS 5591 chipset with on-chip KBC. */ + { + .name = "[SiS 5591] Gigabyte GA-5SG100", + .internal_name = "5sg100", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_SIS_5591, + .init = machine_at_5sg100_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 100000000, + .min_voltage = 2000, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | 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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Apollo MVP3 */ /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ @@ -16412,52 +16458,6 @@ const machine_t machines[] = { .net_device = NULL }, - /* SiS 5591 */ - /* Has the SiS 5591 chipset with on-chip KBC. */ - { - .name = "[SiS 5591] Gigabyte GA-5SG100", - .internal_name = "5sg100", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_SIS_5591, - .init = machine_at_5sg100_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 100000000, - .min_voltage = 2000, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | 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 = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Socket 8 machines */ /* 450KX */ /* This has an AMIKey-2, which is type 'H'. */ @@ -17951,6 +17951,96 @@ const machine_t machines[] = { .net_device = NULL }, + /* SiS (5)600 */ + /* Has the SiS (5)600 chipset with on-chip KBC. */ + { + .name = "[SiS 5600] Freetech/Flexus P6F99", + .internal_name = "p6f99", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_p6f99_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 = 66666667, + .max_bus = 100000000, + .min_voltage = 1300, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ + .ram = { + .min = 8192, + .max = 1572864, + .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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1373_onboard_device, + .net_device = NULL + }, + /* Has the SiS (5)600 chipset with on-chip KBC. */ + { + .name = "[SiS 5600] PC Chips M747", + .internal_name = "m747", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_m747_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 = 66666667, + .max_bus = 100000000, + .min_voltage = 1300, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 + }, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: SiS 6326 and internal sound: C-Media CMI8330 */ + .ram = { + .min = 8192, + .max = 1572864, + .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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* SMSC VictoryBX-66 */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ @@ -18180,96 +18270,6 @@ const machine_t machines[] = { .net_device = NULL }, - /* SiS (5)600 */ - /* Has the SiS (5)600 chipset with on-chip KBC. */ - { - .name = "[SiS 5600] Freetech/Flexus P6F99", - .internal_name = "p6f99", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_p6f99_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 = 66666667, - .max_bus = 100000000, - .min_voltage = 1300, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ - .ram = { - .min = 8192, - .max = 1572864, - .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 = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1373_onboard_device, - .net_device = NULL - }, - /* Has the SiS (5)600 chipset with on-chip KBC. */ - { - .name = "[SiS 5600] PC Chips M747", - .internal_name = "m747", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_m747_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 = 66666667, - .max_bus = 100000000, - .min_voltage = 1300, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 - }, - .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: SiS 6326 and internal sound: C-Media CMI8330 */ - .ram = { - .min = 8192, - .max = 1572864, - .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 = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Slot 1/2 machines */ /* 440GX */ /* Has a National Semiconductors PC87309 Super I/O chip with on-chip KBC @@ -18783,6 +18783,53 @@ const machine_t machines[] = { .net_device = NULL }, + /* SiS (5)600 */ + /* Has the SiS 600 chipset, which is a re-brand of the 5600, with + on-chip KBC. */ + { + .name = "[SiS 600] Soyo SY-7SBB", + .internal_name = "7sbb", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_7sbb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK(CPU_CYRIX3S), + .min_bus = 60000000, + .max_bus = 100000000, + .min_voltage = 1800, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, + .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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* SMSC VictoryBX-66 */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ @@ -19056,52 +19103,6 @@ const machine_t machines[] = { .snd_device = &cmi8738_onboard_device, .net_device = NULL }, - /* SiS (5)600 */ - /* Has the SiS 600 chipset, which is a re-brand of the 5600, with - on-chip KBC. */ - { - .name = "[SiS 600] Soyo SY-7SBB", - .internal_name = "7sbb", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_7sbb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK(CPU_CYRIX3S), - .min_bus = 60000000, - .max_bus = 100000000, - .min_voltage = 1800, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, - .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 = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Miscellaneous/Fake/Hypervisor machines */ /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC From 015e683059d916bea8224e2ff5038a6c89b14e6e Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 11 Sep 2025 01:47:01 +0700 Subject: [PATCH 03/39] Forgotten change Change the name for Dell 466/NP for one of its specifications (425s, 433s, 433d, 450d, and 466d) --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 3f493eef9..7ece9259f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -8317,7 +8317,7 @@ const machine_t machines[] = { }, /* Uses a ???? KBC. */ { - .name = "[SiS 461] Dell 466/NP", + .name = "[SiS 461] Dell 4xx/NP", .internal_name = "dell466np", .type = MACHINE_TYPE_486_S2, .chipset = MACHINE_CHIPSET_SIS_461, From f7323ddb58c2110a074f5019d5816df729e42174 Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 11 Sep 2025 03:56:35 +0700 Subject: [PATCH 04/39] Added 'system' to the Dell 4xx/NP name --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 7ece9259f..d26f5e396 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -8317,7 +8317,7 @@ const machine_t machines[] = { }, /* Uses a ???? KBC. */ { - .name = "[SiS 461] Dell 4xx/NP", + .name = "[SiS 461] Dell System 4xx/NP", .internal_name = "dell466np", .type = MACHINE_TYPE_486_S2, .chipset = MACHINE_CHIPSET_SIS_461, From 91413a84576dd4876e46fddbb76e6ada6e0c094a Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sun, 3 Aug 2025 17:36:07 +0500 Subject: [PATCH 05/39] GUS gameport work Classic: gameport toggleable by jumper/config option (pre-rev 3.4), disabled by default MAX: gameport toggleable by software register (post-rev 3.4), enabled by default Disable access to rev 3.4+ registers on Classic --- src/sound/snd_gus.c | 95 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 74 insertions(+), 21 deletions(-) diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index 80ce6781d..ff2bfdd8f 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -13,6 +13,7 @@ #include <86box/io.h> #include <86box/midi.h> #include <86box/nmi.h> +#include <86box/gameport.h> #include <86box/pic.h> #include <86box/sound.h> #include "cpu.h" @@ -120,7 +121,9 @@ typedef struct gus_t { uint8_t sb_ctrl; int sb_nmi; + uint8_t joy_trim; uint8_t reg_ctrl; + uint8_t jumper; uint8_t ad_status; uint8_t ad_data; @@ -143,6 +146,8 @@ typedef struct gus_t { uint8_t usrr; + void *gameport; + uint8_t max_ctrl; ad1848_t ad1848; @@ -159,6 +164,9 @@ int gusfreqs[] = { double vol16bit[4096]; +void gus_write(uint16_t addr, uint8_t val, void *priv); +uint8_t gus_read(uint16_t addr, void *priv); + void gus_update_int_status(gus_t *gus) { @@ -537,6 +545,10 @@ gus_write(uint16_t addr, uint8_t val, void *priv) gus->t2on = 1; break; + case 0x4B: /*Joystick trim DAC*/ + gus->joy_trim = val; + break; + case 0x4c: /*Reset*/ gus->reset = val; break; @@ -634,9 +646,23 @@ gus_write(uint16_t addr, uint8_t val, void *priv) gus->gp2_addr = val; break; case 5: - gus->usrr = 0; + if (gus->type > GUS_CLASSIC) + gus->usrr = 0; 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 (!(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; + } break; default: @@ -672,7 +698,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv) gus->sb_2xe = val; break; case 0x20f: - gus->reg_ctrl = val; + if (gus->type > GUS_CLASSIC) + gus->reg_ctrl = val; break; case 0x306: case 0x706: @@ -746,10 +773,10 @@ gus_read(uint16_t addr, void *priv) return val; case 0x20F: - if (gus->type == GUS_MAX) - val = 0x02; + if (gus->type > GUS_CLASSIC) + val = gus->jumper; else - val = 0x00; + val = 0xff; break; case 0x302: @@ -842,6 +869,9 @@ gus_read(uint16_t addr, void *priv) case 0x49: /*Sampling control*/ return 0; + case 0x4B: /*Joystick trim DAC*/ + return gus->joy_trim; + case 0x00: case 0x01: case 0x02: @@ -884,22 +914,24 @@ gus_read(uint16_t addr, void *priv) return 0; case 0x20b: - switch (gus->reg_ctrl & 0x07) { - case 1: - val = gus->gp1; - break; - case 2: - val = gus->gp2; - break; - case 3: - val = gus->gp1_addr; - break; - case 4: - val = gus->gp2_addr; - break; + if (gus->type > GUS_CLASSIC) { + switch (gus->reg_ctrl & 0x07) { + case 1: + val = gus->gp1; + break; + case 2: + val = gus->gp2; + break; + case 3: + val = gus->gp1_addr; + break; + case 4: + val = gus->gp2_addr; + break; - default: - break; + default: + break; + } } break; @@ -1292,6 +1324,7 @@ gus_reset(void *priv) gus->sb_ctrl = 0; gus->sb_nmi = 0; + gus->joy_trim = 29; gus->reg_ctrl = 0; gus->ad_status = 0; @@ -1355,12 +1388,21 @@ gus_init(UNUSED(const device_t *info)) gus->type = info->local; + gus->jumper = 0x06; + 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, 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); + 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 { + gus->gameport = gameport_add(&gameport_pnp_1io_device); + gameport_remap(gus->gameport, 0x201); + } if (gus->type == GUS_MAX) { ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231); @@ -1442,6 +1484,17 @@ static const device_config_t gus_config[] = { }, .bios = { { 0 } } }, + { + .name = "gameport", + .description = "Enable Game port", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, { .name = "receive_input", .description = "Receive MIDI input", From 7f7461620d780eb5ef6f78fc91b6ae5856ede782 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Mon, 1 Sep 2025 05:24:07 +0500 Subject: [PATCH 06/39] GUS: Correct minimum RAM amount for GUS MAX --- src/sound/snd_gus.c | 53 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index ff2bfdd8f..5e0043ad6 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -1510,6 +1510,57 @@ static const device_config_t gus_config[] = { // clang-format off }; +static const device_config_t gus_max_config[] = { + // clang-format off + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x220, + .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 = "receive_input", + .description = "Receive MIDI input", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .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", @@ -1535,5 +1586,5 @@ const device_t gus_max_device = { .available = NULL, .speed_changed = gus_speed_changed, .force_redraw = NULL, - .config = gus_config + .config = gus_max_config }; From eec9b52151d5af6e99536dd7f489e9c979f807e1 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Mon, 1 Sep 2025 05:33:02 +0500 Subject: [PATCH 07/39] GUS: Add the UltraSound ACE --- src/include/86box/sound.h | 3 +- src/qt/languages/86box.pot | 3 ++ src/qt/languages/cs-CZ.po | 3 ++ src/qt/languages/de-DE.po | 3 ++ src/qt/languages/es-ES.po | 3 ++ src/qt/languages/fi-FI.po | 3 ++ src/qt/languages/fr-FR.po | 3 ++ src/qt/languages/hr-HR.po | 3 ++ src/qt/languages/it-IT.po | 3 ++ src/qt/languages/ja-JP.po | 3 ++ src/qt/languages/ko-KR.po | 3 ++ src/qt/languages/nb-NO.po | 3 ++ src/qt/languages/nl-NL.po | 3 ++ src/qt/languages/pl-PL.po | 3 ++ src/qt/languages/pt-BR.po | 3 ++ src/qt/languages/pt-PT.po | 3 ++ src/qt/languages/ru-RU.po | 3 ++ src/qt/languages/sk-SK.po | 3 ++ src/qt/languages/sl-SI.po | 3 ++ src/qt/languages/sv-SE.po | 3 ++ src/qt/languages/tr-TR.po | 3 ++ src/qt/languages/uk-UA.po | 3 ++ src/qt/languages/vi-VN.po | 3 ++ src/qt/languages/zh-CN.po | 3 ++ src/qt/languages/zh-TW.po | 3 ++ src/sound/snd_gus.c | 104 ++++++++++++++++++++++++++++++++----- src/sound/sound.c | 1 + 27 files changed, 165 insertions(+), 15 deletions(-) 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 }, From cb96d4e1bc2aeb32bc26e473368b0dd859cbea25 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Wed, 10 Sep 2025 17:52:06 +0500 Subject: [PATCH 08/39] Add the Gravis UltraSound revision 3.7 Implement the ICS-2101 mixer chip that it has --- src/include/86box/sound.h | 1 + src/sound/snd_gus.c | 242 ++++++++++++++++++++++++++++++++++++-- src/sound/sound.c | 1 + 3 files changed, 232 insertions(+), 12 deletions(-) diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 8c223cff9..66f426413 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -205,6 +205,7 @@ extern const device_t ct5880_onboard_device; /* Gravis UltraSound family */ extern const device_t gus_device; +extern const device_t gus_v37_device; extern const device_t gus_max_device; extern const device_t gus_ace_device; diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index cc585c8db..279f86d08 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -44,11 +44,33 @@ enum { }; enum { - GUS_CLASSIC = 0, - GUS_MAX = 1, - GUS_ACE = 2, + GUS_CLASSIC = 0, + GUS_CLASSIC_37 = 1, + GUS_MAX = 2, + GUS_ACE = 3 }; +enum { + GUS_ICS2101_MIC_IN = 0, + GUS_ICS2101_LINE_IN = 1, + GUS_ICS2101_CD_IN = 2, + GUS_ICS2101_GF1_OUT = 3, + GUS_ICS2101_UNUSED = 4, + GUS_ICS2101_MASTER = 5, + GUS_ICS2101_MAX = 6 +}; + +typedef struct ics2101_chan_t { + uint8_t ctrl[2]; + double level[2]; + uint8_t pan; +} ics2101_chan_t; + +typedef struct ics2101_t { + uint8_t addr; + ics2101_chan_t channels[GUS_ICS2101_MAX]; +} ics2101_t; + typedef struct gus_t { int reset; @@ -152,6 +174,8 @@ typedef struct gus_t { uint8_t max_ctrl; ad1848_t ad1848; + + ics2101_t ics2101; } gus_t; static int gus_gf1_irqs[8] = { -1, 2, 5, 3, 7, 11, 12, 15 }; @@ -165,6 +189,12 @@ int gusfreqs[] = { double vol16bit[4096]; +double ics2101_att[128]; + +double ics2101_pan[] = { 0.35481, 0.35481, 0.35481, 0.37584, 0.47315, 0.53088, 0.59566, 0.66834, + 0.70795, + 0.74989, 0.79433, 0.84140, 0.89125, 0.94406, 1.00000, 1.00000, 1.00000 }; + void gus_write(uint16_t addr, uint8_t val, void *priv); uint8_t gus_read(uint16_t addr, void *priv); @@ -264,6 +294,10 @@ gus_write(uint16_t addr, uint8_t val, void *priv) uint16_t port; uint16_t csioport; + ics2101_t *ics2101 = &gus->ics2101; + uint8_t mixer_ch; + uint8_t mixer_lr; + if ((addr == 0x388) || (addr == 0x389)) port = addr; else @@ -705,8 +739,43 @@ gus_write(uint16_t addr, uint8_t val, void *priv) gus->reg_ctrl = val; break; case 0x306: + if (gus->type == GUS_CLASSIC_37) { + mixer_ch = (ics2101->addr >> 3) & 0x7; /* current attenuator */ + mixer_lr = ics2101->addr & 1; /* left or right channel */ + switch (ics2101->addr & 0x6) { + case 0: /* Set control */ + ics2101->channels[mixer_ch].ctrl[mixer_lr] = val & 0xF; + if ((mixer_lr == 0) && (val & 0xC)) /* copy to right channel if not normal mode */ + ics2101->channels[mixer_ch].ctrl[1] = val & 0xF; + break; + case 2: /* Set attenuator */ + switch (ics2101->channels[mixer_ch].ctrl[mixer_lr] & 0xC) { + case 0: /* Normal mode */ + ics2101->channels[mixer_ch].level[mixer_lr] = ics2101_att[val & 0x7F]; + break; + case 4: /* Stereo mode */ + ics2101->channels[mixer_ch].level[0] = ics2101_att[val & 0x7F]; + ics2101->channels[mixer_ch].level[1] = ics2101_att[val & 0x7F]; + break; + case 8: /* Balance/Pan mode */ + ics2101->channels[mixer_ch].level[0] = ics2101_att[val & 0x7F] * ics2101_pan[ics2101->channels[mixer_ch].pan + 1]; + ics2101->channels[mixer_ch].level[1] = ics2101_att[val & 0x7F] * ics2101_pan[16 - ics2101->channels[mixer_ch].pan]; + break; + } + break; + case 4: /* Set panning */ + ics2101->channels[mixer_ch].pan = val & 0xF; + break; + default: + break; + } + break; + } + fallthrough; case 0x706: - if (gus->type == GUS_MAX) { + if (gus->type == GUS_CLASSIC_37) { + gus->ics2101.addr = val & 0x3F; + } else if (gus->type == GUS_MAX) { if (gus->dma >= 4) val |= 0x10; if (gus->dma2 >= 4) @@ -900,12 +969,14 @@ gus_read(uint16_t addr, void *priv) break; case 0x306: case 0x706: - if (gus->type == GUS_MAX) + if (gus->type == GUS_CLASSIC_37) + val = 0x06; /* 3.7x - mixer, no reverse channels bug */ + else 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*/ + val = 0xff; /* Pre 3.7 - no mixer */ break; case 0x307: /*DRAM access*/ @@ -1215,12 +1286,54 @@ gus_get_buffer(int32_t *buffer, int len, void *priv) ad1848_update(&gus->ad1848); gus_update(gus); - - for (int c = 0; c < len * 2; c++) { - if ((gus->type == GUS_MAX) && (gus->max_ctrl)) - buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2); - buffer[c] += (int32_t) gus->buffer[c & 1][c >> 1]; - } + if (gus->type == GUS_CLASSIC_37) + for (int c = 0; c < len * 2; c += 2) { + double temp_l = 0.0; + double temp_r = 0.0; + /* GF1 out */ + uint8_t ctrl_l = gus->ics2101.channels[GUS_ICS2101_GF1_OUT].ctrl[0]; + uint8_t ctrl_r = gus->ics2101.channels[GUS_ICS2101_GF1_OUT].ctrl[1]; + if (!(ctrl_l & 0xC)) { /* Normal mode */ + if (ctrl_l & 1) + temp_l += (double) gus->buffer[0][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[0]; + if (ctrl_l & 2) + temp_r += (double) gus->buffer[0][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[0]; + if (ctrl_r & 1) + temp_l += (double) gus->buffer[1][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[1]; + if (ctrl_r & 2) + temp_r += (double) gus->buffer[1][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[1]; + } else { /* Stereo or Balance/Pan mode */ + if (ctrl_l & 2) { /* Mono/Pan */ + temp_l += ((double) gus->buffer[0][c >> 1] + (double) gus->buffer[1][c >> 1]) * 0.5 * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[(ctrl_l & 1)]; + temp_r += ((double) gus->buffer[0][c >> 1] + (double) gus->buffer[1][c >> 1]) * 0.5 * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[!(ctrl_l & 1)]; + } else { /* Stereo/Balance */ + temp_l += (double) gus->buffer[(ctrl_l & 1)][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[(ctrl_l & 1)]; + temp_r += (double) gus->buffer[!(ctrl_l & 1)][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[!(ctrl_l & 1)]; + } + } + /* Master */ + ctrl_l = gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[0]; + ctrl_r = gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[1]; + if (!(ctrl_l & 0xC)) { /* Normal mode */ + if (ctrl_l & 1) + buffer[c] += (int32_t) (temp_l * gus->ics2101.channels[GUS_ICS2101_MASTER].level[0]); + if (ctrl_l & 2) + buffer[c + 1] += (int32_t) (temp_r * gus->ics2101.channels[GUS_ICS2101_MASTER].level[0]); + if (ctrl_r & 1) + buffer[c] += (int32_t) (temp_l * gus->ics2101.channels[GUS_ICS2101_MASTER].level[1]); + if (ctrl_r & 2) + buffer[c + 1] += (int32_t) (temp_r * gus->ics2101.channels[GUS_ICS2101_MASTER].level[1]); + } else { /* Stereo or Balance mode - no mono/pan for master */ + buffer[c] += (int32_t) (((ctrl_l & 1) ? temp_l : temp_r) * gus->ics2101.channels[GUS_ICS2101_MASTER].level[(ctrl_l & 1)]); + buffer[c + 1] += (int32_t) (((ctrl_l & 1) ? temp_r : temp_l) * gus->ics2101.channels[GUS_ICS2101_MASTER].level[!(ctrl_l & 1)]); + } + } + else + for (int c = 0; c < len * 2; c++) { + if ((gus->type == GUS_MAX) && (gus->max_ctrl)) + buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2); + buffer[c] += (int32_t) gus->buffer[c & 1][c >> 1]; + } if ((gus->type == GUS_MAX) && (gus->max_ctrl)) gus->ad1848.pos = 0; @@ -1228,6 +1341,17 @@ gus_get_buffer(int32_t *buffer, int len, void *priv) gus->pos = 0; } +void +gus_filter_cd_audio(int channel, double *buffer, void *priv) +{ + const gus_t *gus = (gus_t *) priv; + /* FIXME: No channel remapping possible with the current architecture */ + if (gus->ics2101.channels[GUS_ICS2101_CD_IN].ctrl[channel] && gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[channel]) + *buffer *= gus->ics2101.channels[GUS_ICS2101_CD_IN].level[channel] * gus->ics2101.channels[GUS_ICS2101_MASTER].level[channel]; + else + *buffer *= 0.0; +} + static void gus_input_msg(void *priv, uint8_t *msg, uint32_t len) { @@ -1363,6 +1487,13 @@ gus_reset(void *priv) gus->irq_state = 0; gus->midi_irq_state = 0; + for (int i = 0; i < GUS_ICS2101_MAX; i++) { + gus->ics2101.channels[i].level[0] = gus->ics2101.channels[i].level[1] = 1.0; + gus->ics2101.channels[i].ctrl[0] = 1; + gus->ics2101.channels[i].ctrl[1] = 2; + gus->ics2101.channels[i].pan = 7; + } + gus_update_int_status(gus); } @@ -1371,6 +1502,7 @@ gus_init(UNUSED(const device_t *info)) { int c; double out = 1.0; + double gain; uint8_t gus_ram = device_get_config_int("gus_ram"); gus_t *gus = calloc(1, sizeof(gus_t)); @@ -1400,6 +1532,13 @@ gus_init(UNUSED(const device_t *info)) gus->jumper = 0x06; + for (int i = 0; i < GUS_ICS2101_MAX; i++) { + gus->ics2101.channels[i].level[0] = gus->ics2101.channels[i].level[1] = 1.0; + gus->ics2101.channels[i].ctrl[0] = 1; + gus->ics2101.channels[i].ctrl[1] = 2; + gus->ics2101.channels[i].pan = 7; + } + gus->base = device_get_config_hex16("base"); io_sethandler(gus->base, 0x0010, gus_read, NULL, NULL, gus_write, NULL, NULL, gus); @@ -1415,6 +1554,19 @@ gus_init(UNUSED(const device_t *info)) gameport_remap(gus->gameport, 0x201); } + if (gus->type == GUS_CLASSIC_37) { + /* Precalculate the attenuation table for ICS2101 */ + for (int i = 0; i < 128; i++) { + gain = (127 - i) * -0.5; + if (i < 16) + for (int j = 0; j < (16 - i); j++) + gain += -0.5 - 0.13603 * (j + 1); + ics2101_att[i] = pow(10.0, gain / 20.0); + } + + sound_set_cd_audio_filter(gus_filter_cd_audio, gus); + } + if (gus->type == GUS_MAX) { ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231); ad1848_setirq(&gus->ad1848, 5); @@ -1521,6 +1673,58 @@ static const device_config_t gus_config[] = { // clang-format off }; +static const device_config_t gus_v37_config[] = { + // clang-format off + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x220, + .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 = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "256 KB", .value = 0 }, + { .description = "512 KB", .value = 1 }, + { .description = "1 MB", .value = 2 }, + { NULL } + }, + .bios = { { 0 } } + }, + { + .name = "receive_input", + .description = "Receive MIDI input", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +// clang-format off +}; + static const device_config_t gus_max_config[] = { // clang-format off { @@ -1637,6 +1841,20 @@ const device_t gus_device = { .config = gus_config }; +const device_t gus_v37_device = { + .name = "Gravis UltraSound (rev 3.7)", + .internal_name = "gusv37", + .flags = DEVICE_ISA16, + .local = GUS_CLASSIC_37, + .init = gus_init, + .close = gus_close, + .reset = gus_reset, + .available = NULL, + .speed_changed = gus_speed_changed, + .force_redraw = NULL, + .config = gus_v37_config +}; + const device_t gus_max_device = { .name = "Gravis UltraSound MAX", .internal_name = "gusmax", diff --git a/src/sound/sound.c b/src/sound/sound.c index 2fe740e5c..c2e32a7da 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -138,6 +138,7 @@ static const SOUND_CARD sound_cards[] = { { &cs4235_device }, { &cs4236b_device }, { &gus_device }, + { &gus_v37_device }, { &gus_max_device }, { &gus_ace_device }, { &mirosound_pcm10_device }, From a59eb526ed5c2dbb2accda02690edcfd42e288f9 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 11 Sep 2025 16:47:56 +0500 Subject: [PATCH 09/39] AD1848: Make CD audio input designated per-card Fixes CD audio mixer not working for GUS MAX --- src/include/86box/snd_ad1848.h | 10 ++++++++++ src/sound/snd_ad1848.c | 34 ++++++++++++++++++++++++---------- src/sound/snd_azt2316a.c | 1 + src/sound/snd_cs423x.c | 5 ++++- src/sound/snd_gus.c | 1 + src/sound/snd_optimc.c | 1 + 6 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index a7e38a6f8..34693c675 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -32,6 +32,14 @@ enum { AD1848_TYPE_CS4235 = 6 }; +enum { + AD1848_AUX1 = 2, + AD1848_AUX2 = 4, + AD1848_OUT = 6, + AD1848_LINE_IN = 18, + AD1848_MONO = 26 +}; + typedef struct ad1848_t { uint8_t type; uint8_t index; @@ -47,6 +55,7 @@ typedef struct ad1848_t { int16_t out_l; int16_t out_r; + int8_t cd_vol_reg; double cd_vol_l; double cd_vol_r; int fm_vol_l; @@ -86,6 +95,7 @@ extern void ad1848_write(uint16_t addr, uint8_t val, void *priv); extern void ad1848_update(ad1848_t *ad1848); extern void ad1848_speed_changed(ad1848_t *ad1848); +extern void ad1848_set_cd_audio_channel(void *priv, int channel); extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv); extern void ad1848_filter_aux2(void* priv, double* out_l, double* out_r); diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index e9a4390c0..13baca4ab 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -501,16 +501,16 @@ readonly_x: if (updatefreq) ad1848_updatefreq(ad1848); - temp = (ad1848->type < AD1848_TYPE_CS4231) ? 2 : ((ad1848->type == AD1848_TYPE_CS4231) ? 18 : 4); - if (ad1848->regs[temp] & 0x80) - ad1848->cd_vol_l = 0; - else - ad1848->cd_vol_l = ad1848_vols_5bits_aux_gain[ad1848->regs[temp] & 0x1f]; - temp++; - if (ad1848->regs[temp] & 0x80) - ad1848->cd_vol_r = 0; - else - ad1848->cd_vol_r = ad1848_vols_5bits_aux_gain[ad1848->regs[temp] & 0x1f]; + if (ad1848->cd_vol_reg > -1) { + if (ad1848->regs[ad1848->cd_vol_reg] & 0x80) + ad1848->cd_vol_l = 0; + else + ad1848->cd_vol_l = ad1848_vols_5bits_aux_gain[ad1848->regs[ad1848->cd_vol_reg] & 0x1f]; + if (ad1848->regs[ad1848->cd_vol_reg + 1] & 0x80) + ad1848->cd_vol_r = 0; + else + ad1848->cd_vol_r = ad1848_vols_5bits_aux_gain[ad1848->regs[ad1848->cd_vol_reg + 1] & 0x1f]; + } readonly_i: ad1848_log("AD1848: write(I%d, %02X)\n", ad1848->index, val); @@ -746,6 +746,18 @@ ad1848_poll(void *priv) } } +void +ad1848_set_cd_audio_channel(void *priv, int channel) +{ + ad1848_t *ad1848 = (ad1848_t *) priv; + + const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15; + if (channel > max_channel) + channel = max_channel; + + ad1848->cd_vol_reg = channel; +} + void ad1848_filter_cd_audio(int channel, double *buffer, void *priv) { @@ -837,6 +849,8 @@ ad1848_init(ad1848_t *ad1848, uint8_t type) ad1848->out_l = ad1848->out_r = 0; ad1848->fm_vol_l = ad1848->fm_vol_r = 65536; + ad1848->cd_vol_l = ad1848->cd_vol_r = 65536; + ad1848->cd_vol_reg = -1; ad1848_updatevolmask(ad1848); if (type >= AD1848_TYPE_CS4235) ad1848->fmt_mask = 0x50; diff --git a/src/sound/snd_azt2316a.c b/src/sound/snd_azt2316a.c index 76bf1b24f..65d10532f 100644 --- a/src/sound/snd_azt2316a.c +++ b/src/sound/snd_azt2316a.c @@ -1211,6 +1211,7 @@ azt_init(const device_t *info) /* wss part */ ad1848_init(&azt2316a->ad1848, device_get_config_int("codec")); + ad1848_set_cd_audio_channel(&azt2316a->ad1848, (device_get_config_int("codec") == AD1848_TYPE_CS4248) ? AD1848_AUX1 : AD1848_LINE_IN); ad1848_setirq(&azt2316a->ad1848, azt2316a->cur_wss_irq); ad1848_setdma(&azt2316a->ad1848, azt2316a->cur_wss_dma); diff --git a/src/sound/snd_cs423x.c b/src/sound/snd_cs423x.c index 74382a53b..5905fb64e 100644 --- a/src/sound/snd_cs423x.c +++ b/src/sound/snd_cs423x.c @@ -273,8 +273,10 @@ cs423x_write(uint16_t addr, uint8_t val, void *priv) } switch (dev->regs[3] & 0x0f) { case 0: /* WSS Master Control */ - if ((dev->type < CRYSTAL_CS4235) && (val & 0x80)) + if ((dev->type < CRYSTAL_CS4235) && (val & 0x80)) { ad1848_init(&dev->ad1848, dev->ad1848_type); + ad1848_set_cd_audio_channel(&dev->ad1848, AD1848_AUX2); + } val = 0x00; break; @@ -865,6 +867,7 @@ cs423x_reset(void *priv) /* Reset WSS codec. */ ad1848_init(&dev->ad1848, dev->ad1848_type); + ad1848_set_cd_audio_channel(&dev->ad1848, AD1848_AUX2); /* Reset PnP resource data, state and logical devices. */ dev->pnp_enable = 1; diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index 279f86d08..af47cc250 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -1569,6 +1569,7 @@ gus_init(UNUSED(const device_t *info)) if (gus->type == GUS_MAX) { ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231); + ad1848_set_cd_audio_channel(&gus->ad1848, AD1848_AUX2); ad1848_setirq(&gus->ad1848, 5); ad1848_setdma(&gus->ad1848, 3); io_sethandler(0x10C + gus->base, 4, diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index d0b05741a..7d1759cfe 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -380,6 +380,7 @@ optimc_init(const device_t *info) else ad1848_init(&optimc->ad1848, AD1848_TYPE_DEFAULT); + ad1848_set_cd_audio_channel(&optimc->ad1848, (info->local & 0x100) ? AD1848_LINE_IN : AD1848_AUX1); ad1848_setirq(&optimc->ad1848, optimc->cur_wss_irq); ad1848_setdma(&optimc->ad1848, optimc->cur_wss_dma); From 14cf9ee80b3a9b79f105bbb1adf1ebd7f739ecd1 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 11 Sep 2025 16:49:38 +0500 Subject: [PATCH 10/39] AD1848: Extend `ad1848_filter_aux2` to any channel --- src/include/86box/snd_ad1848.h | 2 +- src/sound/snd_ad1848.c | 14 +++++++++----- src/sound/snd_optimc.c | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index 34693c675..0656e4d02 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -97,7 +97,7 @@ extern void ad1848_update(ad1848_t *ad1848); extern void ad1848_speed_changed(ad1848_t *ad1848); extern void ad1848_set_cd_audio_channel(void *priv, int channel); extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv); -extern void ad1848_filter_aux2(void* priv, double* out_l, double* out_r); +extern void ad1848_filter_channel(void* priv, int channel, double* out_l, double* out_r); extern void ad1848_init(ad1848_t *ad1848, uint8_t type); diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 13baca4ab..d721691d5 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -770,20 +770,24 @@ ad1848_filter_cd_audio(int channel, double *buffer, void *priv) } void -ad1848_filter_aux2(void *priv, double *out_l, double *out_r) +ad1848_filter_channel(void *priv, int channel, double *out_l, double *out_r) { const ad1848_t *ad1848 = (ad1848_t *) priv; - if (ad1848->regs[4] & 0x80) { + const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15; + if (channel > max_channel) + channel = max_channel; + + if (ad1848->regs[channel] & 0x80) { *out_l = 0.0; } else { - *out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[4] & 0x1f]) / 65536.0; + *out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel] & 0x1f]) / 65536.0; } - if (ad1848->regs[5] & 0x80) { + if (ad1848->regs[channel + 1] & 0x80) { *out_r = 0.0; } else { - *out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[5] & 0x1f]) / 65536.0; + *out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel + 1] & 0x1f]) / 65536.0; } } diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index 7d1759cfe..274bbd568 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -85,7 +85,7 @@ optimc_filter_opl(void *priv, double *out_l, double *out_r) if (optimc->cur_wss_enabled) { *out_l /= optimc->sb->mixer_sbpro.fm_l; *out_r /= optimc->sb->mixer_sbpro.fm_r; - ad1848_filter_aux2((void *) &optimc->ad1848, out_l, out_r); + ad1848_filter_channel((void *) &optimc->ad1848, AD1848_AUX2, out_l, out_r); } } From 1340b031ee49b94f57b15ccc97ed1d96cd83ca7e Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 11 Sep 2025 16:43:15 +0500 Subject: [PATCH 11/39] GUS: Refactor the buffer/mixer code and fix the MAX mixer's GF1 input --- src/sound/snd_gus.c | 117 +++++++++++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 46 deletions(-) diff --git a/src/sound/snd_gus.c b/src/sound/snd_gus.c index af47cc250..8d70e61c5 100644 --- a/src/sound/snd_gus.c +++ b/src/sound/snd_gus.c @@ -1277,6 +1277,58 @@ gus_poll_wave(void *priv) gus_update_int_status(gus); } +void +gus_ics2101_filter(void *priv, int channel, double *out_l, double *out_r) +{ + ics2101_t *ics2101 = (ics2101_t *) priv; + + double temp_l = 0.0; + double temp_r = 0.0; + double master_l = 0.0; + double master_r = 0.0; + + uint8_t ctrl_l = ics2101->channels[channel].ctrl[0]; + uint8_t ctrl_r = ics2101->channels[channel].ctrl[1]; + if (!(ctrl_l & 0xC)) { /* Normal mode */ + if (ctrl_l & 1) + temp_l += *out_l * ics2101->channels[channel].level[0]; + if (ctrl_l & 2) + temp_r += *out_l * ics2101->channels[channel].level[0]; + if (ctrl_r & 1) + temp_l += *out_r * ics2101->channels[channel].level[1]; + if (ctrl_r & 2) + temp_r += *out_r * ics2101->channels[channel].level[1]; + } else { /* Stereo or Balance/Pan mode */ + if (ctrl_l & 2) { /* Mono/Pan */ + temp_l = (*out_l + *out_r) * 0.5 * ics2101->channels[channel].level[(ctrl_l & 1)]; + temp_r = (*out_r + *out_l) * 0.5 * ics2101->channels[channel].level[!(ctrl_l & 1)]; + } else { /* Stereo/Balance */ + temp_l = ((ctrl_l & 1) ? *out_l : *out_r) * ics2101->channels[channel].level[(ctrl_l & 1)]; + temp_r = ((ctrl_l & 1) ? *out_r : *out_l) * ics2101->channels[channel].level[!(ctrl_l & 1)]; + } + } + + /* Master */ + ctrl_l = ics2101->channels[GUS_ICS2101_MASTER].ctrl[0]; + ctrl_r = ics2101->channels[GUS_ICS2101_MASTER].ctrl[1]; + if (!(ctrl_l & 0xC)) { /* Normal mode */ + if (ctrl_l & 1) + master_l += temp_l * ics2101->channels[GUS_ICS2101_MASTER].level[0]; + if (ctrl_l & 2) + master_r += temp_l * ics2101->channels[GUS_ICS2101_MASTER].level[0]; + if (ctrl_r & 1) + master_l += temp_r * ics2101->channels[GUS_ICS2101_MASTER].level[1]; + if (ctrl_r & 2) + master_r += temp_r * ics2101->channels[GUS_ICS2101_MASTER].level[1]; + } else { /* Stereo or Balance mode - no mono/pan for master */ + master_l = ((ctrl_l & 1) ? temp_l : temp_r) * ics2101->channels[GUS_ICS2101_MASTER].level[(ctrl_l & 1)]; + master_r = ((ctrl_l & 1) ? temp_r : temp_l) * ics2101->channels[GUS_ICS2101_MASTER].level[!(ctrl_l & 1)]; + } + + *out_l = master_l; + *out_r = master_r; +} + static void gus_get_buffer(int32_t *buffer, int len, void *priv) { @@ -1286,54 +1338,27 @@ gus_get_buffer(int32_t *buffer, int len, void *priv) ad1848_update(&gus->ad1848); gus_update(gus); - if (gus->type == GUS_CLASSIC_37) - for (int c = 0; c < len * 2; c += 2) { - double temp_l = 0.0; - double temp_r = 0.0; - /* GF1 out */ - uint8_t ctrl_l = gus->ics2101.channels[GUS_ICS2101_GF1_OUT].ctrl[0]; - uint8_t ctrl_r = gus->ics2101.channels[GUS_ICS2101_GF1_OUT].ctrl[1]; - if (!(ctrl_l & 0xC)) { /* Normal mode */ - if (ctrl_l & 1) - temp_l += (double) gus->buffer[0][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[0]; - if (ctrl_l & 2) - temp_r += (double) gus->buffer[0][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[0]; - if (ctrl_r & 1) - temp_l += (double) gus->buffer[1][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[1]; - if (ctrl_r & 2) - temp_r += (double) gus->buffer[1][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[1]; - } else { /* Stereo or Balance/Pan mode */ - if (ctrl_l & 2) { /* Mono/Pan */ - temp_l += ((double) gus->buffer[0][c >> 1] + (double) gus->buffer[1][c >> 1]) * 0.5 * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[(ctrl_l & 1)]; - temp_r += ((double) gus->buffer[0][c >> 1] + (double) gus->buffer[1][c >> 1]) * 0.5 * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[!(ctrl_l & 1)]; - } else { /* Stereo/Balance */ - temp_l += (double) gus->buffer[(ctrl_l & 1)][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[(ctrl_l & 1)]; - temp_r += (double) gus->buffer[!(ctrl_l & 1)][c >> 1] * gus->ics2101.channels[GUS_ICS2101_GF1_OUT].level[!(ctrl_l & 1)]; + for (int c = 0; c < len * 2; c += 2) { + double temp_l = 0.0; + double temp_r = 0.0; + if ((gus->type == GUS_CLASSIC_37) || (gus->type == GUS_MAX)) { + temp_l = (double) gus->buffer[0][c >> 1]; + temp_r = (double) gus->buffer[1][c >> 1]; + if (gus->type == GUS_MAX) { + if (gus->max_ctrl) { + buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2); + buffer[c + 1] += (int32_t) (gus->ad1848.buffer[c + 1] / 2); } - } - /* Master */ - ctrl_l = gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[0]; - ctrl_r = gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[1]; - if (!(ctrl_l & 0xC)) { /* Normal mode */ - if (ctrl_l & 1) - buffer[c] += (int32_t) (temp_l * gus->ics2101.channels[GUS_ICS2101_MASTER].level[0]); - if (ctrl_l & 2) - buffer[c + 1] += (int32_t) (temp_r * gus->ics2101.channels[GUS_ICS2101_MASTER].level[0]); - if (ctrl_r & 1) - buffer[c] += (int32_t) (temp_l * gus->ics2101.channels[GUS_ICS2101_MASTER].level[1]); - if (ctrl_r & 2) - buffer[c + 1] += (int32_t) (temp_r * gus->ics2101.channels[GUS_ICS2101_MASTER].level[1]); - } else { /* Stereo or Balance mode - no mono/pan for master */ - buffer[c] += (int32_t) (((ctrl_l & 1) ? temp_l : temp_r) * gus->ics2101.channels[GUS_ICS2101_MASTER].level[(ctrl_l & 1)]); - buffer[c + 1] += (int32_t) (((ctrl_l & 1) ? temp_r : temp_l) * gus->ics2101.channels[GUS_ICS2101_MASTER].level[!(ctrl_l & 1)]); - } - } - else - for (int c = 0; c < len * 2; c++) { - if ((gus->type == GUS_MAX) && (gus->max_ctrl)) - buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2); - buffer[c] += (int32_t) gus->buffer[c & 1][c >> 1]; + ad1848_filter_channel(&gus->ad1848, AD1848_AUX1, &temp_l, &temp_r); + } else + gus_ics2101_filter(&gus->ics2101, GUS_ICS2101_GF1_OUT, &temp_l, &temp_r); + buffer[c] += (int32_t) temp_l; + buffer[c + 1] += (int32_t) temp_r; + } else { + buffer[c] += (int32_t) gus->buffer[0][c >> 1]; + buffer[c + 1] += (int32_t) gus->buffer[1][c >> 1]; } + } if ((gus->type == GUS_MAX) && (gus->max_ctrl)) gus->ad1848.pos = 0; From bf8a64067afecf9c465bb2da965a2a7d515b3534 Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Fri, 12 Sep 2025 02:03:42 +0700 Subject: [PATCH 12/39] Bring back Trangg Bow's change, now with AT clones Until it gets added to The Retro Web, this is assumed now. --- src/machine/machine_table.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index d26f5e396..f47c43c35 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -3588,8 +3588,8 @@ const machine_t machines[] = { .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, - .max = 512, - .step = 256 + .max = 1024, /* assumed; more can be added via memory expansions */ + .step = 128 }, .nvrmask = 63, .jumpered_ecp_dma = 0, @@ -3632,8 +3632,8 @@ const machine_t machines[] = { .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, - .max = 512, - .step = 256 + .max = 1024, /* assumed; more can be added via memory expansions */ + .step = 128 }, .nvrmask = 63, .jumpered_ecp_dma = 0, @@ -3853,8 +3853,8 @@ const machine_t machines[] = { .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, - .max = 512, - .step = 256 + .max = 1024, /* assumed; more can be added via memory expansions */ + .step = 128 }, .nvrmask = 63, .jumpered_ecp_dma = 0, From a71e5ea0724667acb80fa256fb32b2ccb06f11a8 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Fri, 12 Sep 2025 01:23:12 +0200 Subject: [PATCH 13/39] Last minute changes for the IDE hdd (September 12th, 2025) When a secondary slave is shadowed by an ATAPI secondary master, make sure the signature (and on reset too) doesn't make it "recognized" (0xeb14) in the cylinder register (as in, 0x0000'ing it) --- src/disk/hdc_ide.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index b034fa3e3..e8c9fb05e 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -812,7 +812,7 @@ ide_set_signature(ide_t *ide) ide->tf->sector = 1; ide->tf->head = 0; ide->tf->secount = 1; - ide->tf->cylinder = ide_signatures[ide->type & ~IDE_SHADOW]; + ide->tf->cylinder = (ide->type == IDE_ATAPI_SHADOW) ? 0x0000 : ide_signatures[ide->type & ~IDE_SHADOW]; if (ide->type == IDE_HDD) ide->drive = 0; @@ -1581,7 +1581,7 @@ ide_reset_registers(ide_t *ide) ide->tf->atastat = DRDY_STAT | DSC_STAT; ide->tf->error = 1; ide->tf->secount = 1; - ide->tf->cylinder = ide_signatures[ide->type & ~IDE_SHADOW]; + ide->tf->cylinder = (ide->type == IDE_ATAPI_SHADOW) ? 0x0000 : ide_signatures[ide->type & ~IDE_SHADOW]; ide->tf->sector = 1; ide->tf->head = 0; From 2123f7d8f3473c0a84fcd38dc4997693d8b7403d Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:55:31 +0800 Subject: [PATCH 14/39] Add Packard Bell Tacoma machine definition. --- src/include/86box/machine.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 6de1586dc..b77768e0b 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1134,6 +1134,7 @@ extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_p3bf_init(const machine_t *); extern int machine_at_686bx_init(const machine_t *); extern int machine_at_lgibmx7g_init(const machine_t *); +extern int machine_at_tacoma_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); extern int machine_at_s1846_init(const machine_t *); From c8b705efac525e592eb029b4fe68ae98adf9991d Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:02:38 +0800 Subject: [PATCH 15/39] Add Packard Bell Tacoma machine code. --- src/machine/m_at_slot1.c | 42 ++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 12fd9861f..b34b55517 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -519,17 +519,9 @@ machine_at_686bx_init(const machine_t *model) return ret; } -int -machine_at_lgibmx7g_init(const machine_t *model) +static void +machine_at_lgibmx7g_common_init(const machine_t *model) { - int ret; - - ret = bios_load_linear("roms/machines/lgibmx7g/ms6119.331", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) - return ret; - machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); @@ -545,6 +537,36 @@ machine_at_lgibmx7g_init(const machine_t *model) device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); +} + +int +machine_at_lgibmx7g_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/lgibmx7g/ms6119.331", + 0x000c0000, 262144, 0); + + if (bios_only || !ret) + return ret; + + machine_at_lgibmx7g_common_init(model); + + return ret; +} + +int +machine_at_tacoma_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/tacoma/A19P2190.ROM", + 0x000c0000, 262144, 0); + + if (bios_only || !ret) + return ret; + + machine_at_lgibmx7g_common_init(model); return ret; } From 0c7906b00711a4f94c67b1b02d28bdc6917ce7c7 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:07:44 +0800 Subject: [PATCH 16/39] Add Packard Bell Tacoma machine table entry. --- src/machine/machine_table.c | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f47c43c35..c7cf4cec6 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -17723,6 +17723,50 @@ 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 (updated 'H') KBC firmware. */ + { + .name = "[i440BX] Packard Bell Tacoma (MSI MS-6119)", + .internal_name = "tacoma", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_tacoma_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 = 66666667, + .max_bus = 100000000, + .min_voltage = 1800, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | 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 = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { From b8d83627660fbd49af4f24d3ccf4948d2ad62c4e Mon Sep 17 00:00:00 2001 From: Daniel Gurney Date: Sat, 13 Sep 2025 01:09:58 +0300 Subject: [PATCH 17/39] Finnish translation updates --- src/qt/languages/fi-FI.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index dc3cae0cf..47efba139 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -2959,10 +2959,10 @@ msgid "CGA composite settings" msgstr "CGA:n komposiittiasetukset" msgid "Monitor EDID" -msgstr "Monitorin EDID" +msgstr "Näytön EDID" msgid "Export..." -msgstr "Viedä..." +msgstr "Vie..." msgid "Export EDID" msgstr "Vie EDID" @@ -2971,16 +2971,16 @@ msgid "EDID file \"%ls\" is too large." msgstr "EDID-tiedosto \"%ls\" on liian suuri." msgid "OpenGL input scale" -msgstr "OpenGL:n syöttöasteikko" +msgstr "OpenGL-syötteen skaalaus" msgid "OpenGL input stretch mode" -msgstr "OpenGL:n syötteen venytystila" +msgstr "OpenGL-syötteen venytystila" msgid "Color scheme" -msgstr "Värimaailma" +msgstr "Väriteema" msgid "Light" -msgstr "Valo" +msgstr "Vaalea" msgid "Dark" msgstr "Tumma" From aae4db9e718d2871c8a8a2efe30d6bc04443537c Mon Sep 17 00:00:00 2001 From: Daniel Gurney Date: Sat, 13 Sep 2025 01:11:35 +0300 Subject: [PATCH 18/39] Fix translation deviation It wasn't really a problem before the light/dark mode selector --- src/qt/languages/fi-FI.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 47efba139..11e1c795f 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -1318,7 +1318,7 @@ msgid "Found %1" msgstr "%1 löydetty" msgid "System" -msgstr "Kone" +msgstr "Järjestelmä" msgid "Storage" msgstr "Tallennus" From b514a72bd6c68849624fcb2b8c58673c23f0891e Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 08:24:56 +0800 Subject: [PATCH 19/39] machine.h: lgibmx76 & tacoma --> ms6119 --- src/include/86box/machine.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index b77768e0b..d28bd7dd7 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1133,8 +1133,7 @@ extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_p3bf_init(const machine_t *); extern int machine_at_686bx_init(const machine_t *); -extern int machine_at_lgibmx7g_init(const machine_t *); -extern int machine_at_tacoma_init(const machine_t *); +extern int machine_at_ms6119_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); extern int machine_at_s1846_init(const machine_t *); From 9d28ebe9aa3698b9f01275a935db82c5021f6154 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 08:32:44 +0800 Subject: [PATCH 20/39] machine_table.c: lgibmx76 & tacoma --> ms6119 --- src/machine/machine_table.c | 52 +++---------------------------------- 1 file changed, 4 insertions(+), 48 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index c7cf4cec6..9e590b7f9 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -17681,11 +17681,11 @@ const machine_t machines[] = { }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 (updated 'H') KBC firmware. */ { - .name = "[i440BX] LG IBM Multinet i x7G (MSI MS-6119)", - .internal_name = "lgibmx7g", + .name = "[i440BX] MSI MS-6119", + .internal_name = "ms6119", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_lgibmx7g_init, + .init = machine_at_ms6119_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -17715,51 +17715,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 (updated 'H') KBC firmware. */ - { - .name = "[i440BX] Packard Bell Tacoma (MSI MS-6119)", - .internal_name = "tacoma", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_tacoma_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 = 66666667, - .max_bus = 100000000, - .min_voltage = 1800, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | 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 = NULL, + .device = &ms6119_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 20e25aa71802d3bb9016ecc50504e2a0e0aca064 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 08:48:00 +0800 Subject: [PATCH 21/39] Configuration is complete for MSI MS-6119. --- src/include/86box/machine.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index d28bd7dd7..7ec27dcdc 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1133,6 +1133,9 @@ extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_p3bf_init(const machine_t *); extern int machine_at_686bx_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ms6119_device; +#endif extern int machine_at_ms6119_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); extern int machine_at_s1846_init(const machine_t *); From 30d5443247f0513f7c809edcf23530ae80baab10 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 09:12:53 +0800 Subject: [PATCH 22/39] m_at_slot1.c: MSI MS-6119 BIOS Selector Complete --- src/machine/m_at_slot1.c | 88 ++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 34 deletions(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index b34b55517..eec0dd8a8 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -519,9 +519,61 @@ machine_at_686bx_init(const machine_t *model) return ret; } -static void -machine_at_lgibmx7g_common_init(const machine_t *model) +static const device_config_t ms6119_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ms6119", + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, + .bios = { + { .name = "Award Modular BIOS v4.51PG - Version 3.30b1 (LG IBM Multinet i x7G)", .internal_name = "lgibmx7g", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/ms6119.331", "" } }, + { .name = "Award Modular BIOS v4.51PG - Version 2.12 (Viglen Vig69M)", .internal_name = "vig69m", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/vig69m.212", "" } }, + { .name = "Award Modular BIOS v4.51PG - Version 2.10", .internal_name = "ms6119", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/w6119ims.2a0", "" } }, + { .name = "AMIBIOS 071595 - Version 1.90 (Packard Bell Tacoma)", .internal_name = "ms6119", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/A19P2190.ROM", "" } }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ms6119_device = { + .name = "MSI MS-6119", + .internal_name = "ms6119_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ms6119_config +}; + +int +machine_at_ms6119_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); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); @@ -539,38 +591,6 @@ machine_at_lgibmx7g_common_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 256); } -int -machine_at_lgibmx7g_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/lgibmx7g/ms6119.331", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) - return ret; - - machine_at_lgibmx7g_common_init(model); - - return ret; -} - -int -machine_at_tacoma_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/tacoma/A19P2190.ROM", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) - return ret; - - machine_at_lgibmx7g_common_init(model); - - return ret; -} - int machine_at_p6sba_init(const machine_t *model) { From 5a35c984e77215873ca4a1d872ba23176f8c74bf Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 09:29:25 +0800 Subject: [PATCH 23/39] m_at_slot1.c: MSI MS-6119 BIOS Selector Complete Once Again --- src/machine/m_at_slot1.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index eec0dd8a8..1abdd62a9 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -589,6 +589,8 @@ machine_at_ms6119_init(const machine_t *model) device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); + + return ret; } int From 3bdedd896fee9a2c3bedf0e01881741f43e204cb Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sat, 13 Sep 2025 09:32:02 +0800 Subject: [PATCH 24/39] m_at_slot1.c: ms6119 -> tacoma (Congratulations, MSI-MS 6119 BIOS Selector complete) --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 1abdd62a9..a172c9396 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -536,7 +536,7 @@ static const device_config_t ms6119_config[] = { .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/vig69m.212", "" } }, { .name = "Award Modular BIOS v4.51PG - Version 2.10", .internal_name = "ms6119", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/w6119ims.2a0", "" } }, - { .name = "AMIBIOS 071595 - Version 1.90 (Packard Bell Tacoma)", .internal_name = "ms6119", .bios_type = BIOS_NORMAL, + { .name = "AMIBIOS 071595 - Version 1.90 (Packard Bell Tacoma)", .internal_name = "tacoma", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/A19P2190.ROM", "" } }, { .files_no = 0 } }, From 6f99d565e1d95434dde6c82e3c9db3cc720db2ea Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Wed, 27 Aug 2025 23:54:39 +0500 Subject: [PATCH 25/39] Manager: Pass certain command-line params to VMs --- src/86box.c | 2 ++ src/include/86box/86box.h | 1 + src/qt/qt_vmmanager_system.cpp | 14 ++++++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/86box.c b/src/86box.c index 0b5a26131..d242b40b9 100644 --- a/src/86box.c +++ b/src/86box.c @@ -230,6 +230,7 @@ int other_scsi_present = 0; /* SCSI contro int is_pcjr = 0; /* The current machine is PCjr. */ int portable_mode = 0; /* We are running in portable mode (global dirs = exe path) */ +int global_cfg_overridden = 0; /* Global config file was overriden on command line */ int monitor_edid = 0; /* (C) Which EDID to use. 0=default, 1=custom. */ char monitor_edid_path[1024] = { 0 }; /* (C) Path to custom EDID */ @@ -852,6 +853,7 @@ usage: if ((c + 1) == argc || plat_dir_check(argv[c + 1])) goto usage; + global_cfg_overridden = 1; global = argv[++c]; } else if (!strcasecmp(argv[c], "--image") || !strcasecmp(argv[c], "-I")) { if ((c + 1) == argc) diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index ce39652bc..33749d440 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -202,6 +202,7 @@ extern char vmm_path[1024]; /* VM Manager path to scan */ extern int start_vmm; /* the current execution will start the manager */ extern int portable_mode; /* we are running in portable mode (global dirs = exe path) */ +extern int global_cfg_overridden; /* global config file was overriden on command line */ extern int monitor_edid; /* (C) Which EDID to use. 0=default, 1=custom. */ extern char monitor_edid_path[1024]; /* (C) Path to custom EDID */ diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 8079f1ba0..1ddfb4cc3 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -425,6 +425,16 @@ VMManagerSystem::launchMainProcess() { QStringList args; args << "--vmpath" << config_dir; args << "--vmname" << displayName; + if (rom_path[0] != '\0') + args << "--rompath" << QString(rom_path); + if (global_cfg_overridden) + args << "--global" << QString(global_cfg_path); + if (!hook_enabled) + args << "--nohook"; + if (start_in_fullscreen) + args << "--fullscreen"; + if (!confirm_exit_cmdl) + args << "--noconfirm"; process->setProgram(program); process->setArguments(args); qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments(); @@ -481,6 +491,10 @@ VMManagerSystem::launchSettings() { QStringList open_command_args; QStringList args; args << "--vmpath" << config_dir << "--settings"; + if (rom_path[0] != '\0') + args << "--rompath" << QString(rom_path); + if (global_cfg_overridden) + args << "--global" << QString(global_cfg_path); process->setProgram(program); process->setArguments(args); qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments(); From 43bbe351fcf02af805c3bb7e259ec7a98c322b53 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 13 Sep 2025 17:12:43 +0500 Subject: [PATCH 26/39] Manager: Fix detail sections with empty entries not being hidden --- src/qt/qt_vmmanager_detailsection.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index afb71a5f0..ac321be1e 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -161,7 +161,8 @@ VMManagerDetailSection::setupMainLayout() void VMManagerDetailSection::setSections() { - int row = 0; + int row = 0; + bool empty = true; for (const auto& section : sections) { QStringList sectionsToAdd = section.value.split(sectionSeparator); @@ -189,12 +190,13 @@ VMManagerDetailSection::setSections() const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); frameGridLayout->addItem(hSpacer, row, 2); + empty = false; row++; } } collapseButton->setContent(ui->detailFrame); - if (sections.size()) + if (!empty) setVisible(true); } void From b351811d6585f924b631ae6f43d123e47fc76ef7 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 13 Sep 2025 19:11:01 +0500 Subject: [PATCH 27/39] Manager: Fix 86B_CD 3.50 and 8x CD-ROM speed not showing in details pane --- src/qt/qt_vmmanager_system.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 1ddfb4cc3..988d3ed5e 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -725,7 +725,7 @@ VMManagerSystem::setupVars() { } static auto floppy_match = QRegularExpression("fdd_\\d\\d_type", QRegularExpression::CaseInsensitiveOption); - static auto cdrom_match = QRegularExpression("cdrom_\\d\\d_type", QRegularExpression::CaseInsensitiveOption); + static auto cdrom_match = QRegularExpression("cdrom_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); for(const auto& key: floppy_cdrom_config.keys()) { if(key.contains(floppy_match)) { // auto device_number = key.split("_").at(1); @@ -741,22 +741,23 @@ VMManagerSystem::setupVars() { } if(key.contains(cdrom_match)) { auto device_number = key.split("_").at(1); - auto cdrom_internal_name = QString(floppy_cdrom_config[key]); + auto cdrom_parameters = QString(floppy_cdrom_config[key]); + auto cdrom_bus = cdrom_parameters.split(",").at(1).trimmed().toUpper(); + + auto cdrom_type_key = QString("cdrom_%1_type").arg(device_number); + auto cdrom_internal_name = QString(floppy_cdrom_config[cdrom_type_key]); + if (cdrom_internal_name.isEmpty()) + cdrom_internal_name = "86cd"; auto cdrom_type = cdrom_get_from_internal_name(cdrom_internal_name.toUtf8().data()); auto cdrom_speed_key = QString("cdrom_%1_speed").arg(device_number); - auto cdrom_parameters_key = QString("cdrom_%1_parameters").arg(device_number); auto cdrom_speed = QString(floppy_cdrom_config[cdrom_speed_key]); - auto cdrom_parameters = QString(floppy_cdrom_config[cdrom_parameters_key]); - auto cdrom_bus = cdrom_parameters.split(",").at(1).trimmed().toUpper(); + if (cdrom_speed.isEmpty()) + cdrom_speed = "8"; - if(cdrom_type != -1) { - if(!cdrom_speed.isEmpty()) { - cdrom_speed = QString("%1x ").arg(cdrom_speed); - } - if(!cdrom_bus.isEmpty()) { - cdrom_bus = QString(" (%1)").arg(cdrom_bus); - } + if ((cdrom_bus != "NONE") && (cdrom_type != -1)) { + cdrom_speed = QString("%1x ").arg(cdrom_speed); + cdrom_bus = QString(" (%1)").arg(cdrom_bus); cdromDevices.append(QString("%1%2 %3 %4%5").arg(cdrom_speed, cdrom_drive_types[cdrom_type].vendor, cdrom_drive_types[cdrom_type].model, cdrom_drive_types[cdrom_type].revision, cdrom_bus)); } } From b722d03e6928257007ec5f8af5e35cc374d4aee5 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 13 Sep 2025 20:53:45 +0500 Subject: [PATCH 28/39] Manager: Remember the machine list size in addition to window size and position --- src/qt/qt_vmmanager_main.cpp | 12 ++++++++++++ src/qt/qt_vmmanager_main.hpp | 3 +++ src/qt/qt_vmmanager_mainwindow.cpp | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index cc3904e97..7235f4500 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -740,6 +740,18 @@ VMManagerMain::machineCountString(QString states) const return tr("VMs: %1").arg(states); } +QList +VMManagerMain::getPaneSizes() const +{ + return ui->splitter->sizes(); +} + +void +VMManagerMain::setPaneSizes(const QList &sizes) +{ + ui->splitter->setSizes(sizes); +} + void VMManagerMain::modelDataChange() { diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 070f30398..404a90fc6 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -87,6 +87,9 @@ public slots: void onConfigUpdated(const QString &uuid); int getActiveMachineCount(); + QList getPaneSizes() const; + void setPaneSizes(const QList &sizes); + private: Ui::VMManagerMain *ui; diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index f698f1ccd..f36045df3 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -151,10 +151,20 @@ VMManagerMainWindow(QWidget *parent) if (!!config->getStringValue("window_maximized").toInt()) { setWindowState(windowState() | Qt::WindowMaximized); } + + list = config->getStringValue("window_splitter").split(','); + for (auto& cur : list) { + cur = cur.trimmed(); + } + QList paneSizes; + paneSizes.append(list[0].toInt()); + paneSizes.append(list[1].toInt()); + vmm->setPaneSizes(paneSizes); } else { config->setStringValue("window_remember", ""); config->setStringValue("window_coordinates", ""); config->setStringValue("window_maximized", ""); + config->setStringValue("window_splitter", ""); } delete config; } @@ -218,10 +228,12 @@ VMManagerMainWindow::saveSettings() const if (ui->actionRemember_size_and_position->isChecked()) { config->setStringValue("window_coordinates", QString::asprintf("%i, %i, %i, %i", this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height())); config->setStringValue("window_maximized", this->isMaximized() ? "1" : ""); + config->setStringValue("window_splitter", QString::asprintf("%i, %i", vmm->getPaneSizes()[0], vmm->getPaneSizes()[1])); } else { config->setStringValue("window_remember", ""); config->setStringValue("window_coordinates", ""); config->setStringValue("window_maximized", ""); + config->setStringValue("window_splitter", ""); } // Sometimes required to ensure the settings save before the app exits config->sync(); From cd6a1487ded2f4df75d0e152ef589fae88d7bd95 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 13 Sep 2025 21:58:29 +0500 Subject: [PATCH 29/39] Manager: Move the "remember size & position" option to Preferences dialog --- src/qt/languages/86box.pot | 3 ++ src/qt/languages/cs-CZ.po | 3 ++ src/qt/languages/de-DE.po | 3 ++ src/qt/languages/es-ES.po | 3 ++ src/qt/languages/fi-FI.po | 3 ++ src/qt/languages/fr-FR.po | 3 ++ src/qt/languages/hr-HR.po | 3 ++ src/qt/languages/it-IT.po | 3 ++ src/qt/languages/ja-JP.po | 3 ++ src/qt/languages/ko-KR.po | 3 ++ src/qt/languages/nb-NO.po | 3 ++ src/qt/languages/nl-NL.po | 3 ++ src/qt/languages/pl-PL.po | 3 ++ src/qt/languages/pt-BR.po | 3 ++ src/qt/languages/pt-PT.po | 3 ++ src/qt/languages/ru-RU.po | 3 ++ src/qt/languages/sk-SK.po | 3 ++ src/qt/languages/sl-SI.po | 3 ++ src/qt/languages/sv-SE.po | 3 ++ src/qt/languages/tr-TR.po | 3 ++ src/qt/languages/uk-UA.po | 3 ++ src/qt/languages/vi-VN.po | 3 ++ src/qt/languages/zh-CN.po | 3 ++ src/qt/languages/zh-TW.po | 3 ++ src/qt/qt_vmmanager_mainwindow.cpp | 50 ++++++++++++++++------------- src/qt/qt_vmmanager_mainwindow.ui | 9 ------ src/qt/qt_vmmanager_preferences.cpp | 3 ++ src/qt/qt_vmmanager_preferences.ui | 8 +++++ 28 files changed, 110 insertions(+), 32 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index df6f01f3c..bae56c279 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -51,6 +51,9 @@ msgstr "" msgid "R&emember size && position" msgstr "" +msgid "Remember size && position" +msgstr "" + msgid "Re&nderer" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 6cef7611c..6c46c7538 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -51,6 +51,9 @@ msgstr "&Měnitelná velikost okna" msgid "R&emember size && position" msgstr "&Pamatovat velikost a pozici" +msgid "Remember size && position" +msgstr "Pamatovat velikost a pozici" + msgid "Re&nderer" msgstr "&Renderer" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 3b92f7ec3..6fb621242 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -51,6 +51,9 @@ msgstr "G&rößenverstellbares Fenster" msgid "R&emember size && position" msgstr "Größe && &Position merken" +msgid "Remember size && position" +msgstr "Größe && Position merken" + msgid "Re&nderer" msgstr "Re&nderer" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 46bd759fe..92a80869b 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -51,6 +51,9 @@ msgstr "Ven&tana redimensionable" msgid "R&emember size && position" msgstr "&Recordar tamaño y posición" +msgid "Remember size && position" +msgstr "Recordar tamaño y posición" + msgid "Re&nderer" msgstr "Re&nderizador" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 11e1c795f..f5957db4c 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -51,6 +51,9 @@ msgstr "&Salli koon muuttaminen" msgid "R&emember size && position" msgstr "&Muista koko ja sijainti" +msgid "Remember size && position" +msgstr "Muista koko ja sijainti" + msgid "Re&nderer" msgstr "&Renderöijä" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index c31b4c8a6..b11c0c8b6 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -51,6 +51,9 @@ msgstr "Fenêtre &redimensionnable" msgid "R&emember size && position" msgstr "S&auvegarder taille && position" +msgid "Remember size && position" +msgstr "Sauvegarder taille && position" + msgid "Re&nderer" msgstr "Moteur de re&ndu vidéo" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 4f2d8ee93..d3acd499e 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -51,6 +51,9 @@ msgstr "&Prozor s promjenjivim veličinama" msgid "R&emember size && position" msgstr "&Zapamtite veličinu i položaj" +msgid "Remember size && position" +msgstr "Zapamtite veličinu i položaj" + msgid "Re&nderer" msgstr "&Renderer" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 4c0a6722a..443831788 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -51,6 +51,9 @@ msgstr "&Finestra ridimensionabile" msgid "R&emember size && position" msgstr "R&icorda dimensioni e posizione" +msgid "Remember size && position" +msgstr "Ricorda dimensioni e posizione" + msgid "Re&nderer" msgstr "Re&nderizzatore" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 2fb7da257..21bb1a88d 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -51,6 +51,9 @@ msgstr "ウィンドウのサイズを変更可能(&R)" msgid "R&emember size && position" msgstr "ウィンドウのサイズと位置を保存(&E)" +msgid "Remember size && position" +msgstr "ウィンドウのサイズと位置を保存" + msgid "Re&nderer" msgstr "レンダラー(&N)" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index a9fa55f5b..68bd5d8c2 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -51,6 +51,9 @@ msgstr "창 크기 조절 가능하게 하기(&R)" msgid "R&emember size && position" msgstr "창 크기와 위치를 기억하기(&E)" +msgid "Remember size && position" +msgstr "창 크기와 위치를 기억하기" + msgid "Re&nderer" msgstr "렌더러(&N)" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index 53115d4b1..ec1574fa3 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -51,6 +51,9 @@ msgstr "&Justerbart vindu" msgid "R&emember size && position" msgstr "H&usk størrelse &og plassering" +msgid "Remember size && position" +msgstr "Husk størrelse og plassering" + msgid "Re&nderer" msgstr "Re&nderer" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index acc3526ec..ea92f69ec 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -51,6 +51,9 @@ msgstr "&Venster met aanpasbare grootte" msgid "R&emember size && position" msgstr "&Onthoud grootte && positie" +msgid "Remember size && position" +msgstr "Onthoud grootte && positie" + msgid "Re&nderer" msgstr "Re&nderer" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 81bedb546..6fdddd253 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -51,6 +51,9 @@ msgstr "&Okno o zmiennym rozmiarze" msgid "R&emember size && position" msgstr "P&amiętaj rozmiar i pozycję" +msgid "Remember size && position" +msgstr "Pamiętaj rozmiar i pozycję" + msgid "Re&nderer" msgstr "Re&nderer" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 211d39f16..fe162c540 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -51,6 +51,9 @@ msgstr "&Janela redimensionável" msgid "R&emember size && position" msgstr "&Lembrar tamanho e posição" +msgid "Remember size && position" +msgstr "Lembrar tamanho e posição" + msgid "Re&nderer" msgstr "&Renderizador" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index bd7894f6e..66fbfa500 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -51,6 +51,9 @@ msgstr "&Janela redimensionável" msgid "R&emember size && position" msgstr "&Lembrar tamanho e posição" +msgid "Remember size && position" +msgstr "Lembrar tamanho e posição" + msgid "Re&nderer" msgstr "&Renderizador" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 6535b6603..a9b9c3c18 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -51,6 +51,9 @@ msgstr "&Изменяемый размер окна" msgid "R&emember size && position" msgstr "&Запомнить размер и положение" +msgid "Remember size && position" +msgstr "Запомнить размер и положение" + msgid "Re&nderer" msgstr "&Рендеринг" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 20f86033c..67d2aacca 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -51,6 +51,9 @@ msgstr "&Premenná veľkosť okna" msgid "R&emember size && position" msgstr "&Pamätať si veľkosť a polohu" +msgid "Remember size && position" +msgstr "Pamätať si veľkosť a polohu" + msgid "Re&nderer" msgstr "&Renderer" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 0813e3d83..4046d4700 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -51,6 +51,9 @@ msgstr "S&premenljiva velikost okna" msgid "R&emember size && position" msgstr "&Zapomni si velikost in položaj" +msgid "Remember size && position" +msgstr "Zapomni si velikost in položaj" + msgid "Re&nderer" msgstr "&Upodabljanje" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index e3db6d3b7..4622aceda 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -51,6 +51,9 @@ msgstr "&Ändringsbar fönsterstorlek" msgid "R&emember size && position" msgstr "K&om ihåg storlek && position" +msgid "Remember size && position" +msgstr "Kom ihåg storlek && position" + msgid "Re&nderer" msgstr "Re&nderare" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 65eb47152..8bf374091 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -51,6 +51,9 @@ msgstr "&Boyutlandırılabilir pencere" msgid "R&emember size && position" msgstr "&Pencere boyut ve pozisyonunu kaydet" +msgid "Remember size && position" +msgstr "Pencere boyut ve pozisyonunu kaydet" + msgid "Re&nderer" msgstr "Derley&ici" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 79f5763c3..e5a714ad1 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -51,6 +51,9 @@ msgstr "&Змінний розмір вікна" msgid "R&emember size && position" msgstr "&Запам'ятати розмір і становище" +msgid "Remember size && position" +msgstr "Запам'ятати розмір і становище" + msgid "Re&nderer" msgstr "&Рендеринг" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index f316c54c2..a19394b79 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -51,6 +51,9 @@ msgstr "Tùy chỉnh cỡ cử&a sổ" msgid "R&emember size && position" msgstr "Ghi nhớ vị trí và kíc&h thước cửa sổ" +msgid "Remember size && position" +msgstr "Ghi nhớ vị trí và kích thước cửa sổ" + msgid "Re&nderer" msgstr "Re&nderer" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 31a34da90..921f3f64e 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -51,6 +51,9 @@ msgstr "窗口大小可调(&R)" msgid "R&emember size && position" msgstr "记住窗口大小和位置(&E)" +msgid "Remember size && position" +msgstr "记住窗口大小和位置" + msgid "Re&nderer" msgstr "渲染器(&N)" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 7dcb3638f..771e67daf 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -51,6 +51,9 @@ msgstr "視窗大小可調(&R)" msgid "R&emember size && position" msgstr "記住視窗大小和位置(&E)" +msgid "Remember size && position" +msgstr "記住視窗大小和位置" + msgid "Re&nderer" msgstr "渲染器(&N)" diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index f36045df3..a4ae61577 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -135,33 +135,39 @@ VMManagerMainWindow(QWidget *parent) { auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); - this->ui->actionRemember_size_and_position->setChecked(!!config->getStringValue("window_remember").toInt()); - if (ui->actionRemember_size_and_position->isChecked()) { - QStringList list = config->getStringValue("window_coordinates").split(','); - for (auto& cur : list) { - cur = cur.trimmed(); - } - QRect geom; - geom.setX(list[0].toInt()); - geom.setY(list[1].toInt()); - geom.setWidth(list[2].toInt()); - geom.setHeight(list[3].toInt()); + if (!!config->getStringValue("window_remember").toInt()) { + QString coords = config->getStringValue("window_coordinates"); + if (!coords.isEmpty()) { + QStringList list = coords.split(','); + for (auto& cur : list) { + cur = cur.trimmed(); + } + QRect geom; + geom.setX(list[0].toInt()); + geom.setY(list[1].toInt()); + geom.setWidth(list[2].toInt()); + geom.setHeight(list[3].toInt()); + + setGeometry(geom); + } - setGeometry(geom); if (!!config->getStringValue("window_maximized").toInt()) { setWindowState(windowState() | Qt::WindowMaximized); } - list = config->getStringValue("window_splitter").split(','); - for (auto& cur : list) { - cur = cur.trimmed(); + QString splitter = config->getStringValue("window_splitter"); + if (!splitter.isEmpty()) { + QStringList list = splitter.split(','); + for (auto& cur : list) { + cur = cur.trimmed(); + } + QList paneSizes; + paneSizes.append(list[0].toInt()); + paneSizes.append(list[1].toInt()); + + vmm->setPaneSizes(paneSizes); } - QList paneSizes; - paneSizes.append(list[0].toInt()); - paneSizes.append(list[1].toInt()); - vmm->setPaneSizes(paneSizes); } else { - config->setStringValue("window_remember", ""); config->setStringValue("window_coordinates", ""); config->setStringValue("window_maximized", ""); config->setStringValue("window_splitter", ""); @@ -224,13 +230,11 @@ VMManagerMainWindow::saveSettings() const const auto currentSelection = vmm->getCurrentSelection(); const auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General); config->setStringValue("last_selection", currentSelection); - config->setStringValue("window_remember", QString::number(ui->actionRemember_size_and_position->isChecked())); - if (ui->actionRemember_size_and_position->isChecked()) { + if (!!config->getStringValue("window_remember").toInt()) { config->setStringValue("window_coordinates", QString::asprintf("%i, %i, %i, %i", this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height())); config->setStringValue("window_maximized", this->isMaximized() ? "1" : ""); config->setStringValue("window_splitter", QString::asprintf("%i, %i", vmm->getPaneSizes()[0], vmm->getPaneSizes()[1])); } else { - config->setStringValue("window_remember", ""); config->setStringValue("window_coordinates", ""); config->setStringValue("window_maximized", ""); config->setStringValue("window_splitter", ""); diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 15739628d..7cd817a0b 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -28,7 +28,6 @@ &Tools - @@ -187,14 +186,6 @@ New machine... - - - true - - - R&emember size && position - - &Preferences... diff --git a/src/qt/qt_vmmanager_preferences.cpp b/src/qt/qt_vmmanager_preferences.cpp index b709b0b13..d181119f4 100644 --- a/src/qt/qt_vmmanager_preferences.cpp +++ b/src/qt/qt_vmmanager_preferences.cpp @@ -70,6 +70,8 @@ VMManagerPreferences(QWidget *parent) : ui(new Ui::VMManagerPreferences) #endif const auto useRegexSearch = config->getStringValue("regex_search").toInt(); ui->regexSearchCheckBox->setChecked(useRegexSearch); + const auto rememberSizePosition = config->getStringValue("window_remember").toInt(); + ui->rememberSizePositionCheckBox->setChecked(rememberSizePosition); ui->radioButtonSystem->setChecked(color_scheme == 0); ui->radioButtonLight->setChecked(color_scheme == 1); @@ -112,6 +114,7 @@ VMManagerPreferences::accept() #if EMU_BUILD_NUM != 0 config->setStringValue("update_check", ui->updateCheckBox->isChecked() ? "1" : "0"); #endif + config->setStringValue("window_remember", ui->rememberSizePositionCheckBox->isChecked() ? "1" : "0"); config->setStringValue("regex_search", ui->regexSearchCheckBox->isChecked() ? "1" : "0"); QDialog::accept(); } diff --git a/src/qt/qt_vmmanager_preferences.ui b/src/qt/qt_vmmanager_preferences.ui index ab96109e6..7f7b94fa4 100644 --- a/src/qt/qt_vmmanager_preferences.ui +++ b/src/qt/qt_vmmanager_preferences.ui @@ -92,6 +92,13 @@ + + + + Remember size && position + + + @@ -165,6 +172,7 @@ dirSelectButton comboBoxLanguage pushButtonLanguage + rememberSizePositionCheckBox updateCheckBox regexSearchCheckBox From 416983110213b82a3d141bf91bb668a80bdf9366 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 13 Sep 2025 21:59:16 +0500 Subject: [PATCH 30/39] Manager: Add machine actions to context menu --- src/qt/languages/86box.pot | 8 +++++- src/qt/languages/cs-CZ.po | 8 +++++- src/qt/languages/de-DE.po | 10 +++++-- src/qt/languages/es-ES.po | 10 +++++-- src/qt/languages/fi-FI.po | 10 +++++-- src/qt/languages/fr-FR.po | 10 +++++-- src/qt/languages/hr-HR.po | 10 +++++-- src/qt/languages/it-IT.po | 10 +++++-- src/qt/languages/ja-JP.po | 10 +++++-- src/qt/languages/ko-KR.po | 10 +++++-- src/qt/languages/nb-NO.po | 10 +++++-- src/qt/languages/nl-NL.po | 10 +++++-- src/qt/languages/pl-PL.po | 10 +++++-- src/qt/languages/pt-BR.po | 10 +++++-- src/qt/languages/pt-PT.po | 10 +++++-- src/qt/languages/ru-RU.po | 10 +++++-- src/qt/languages/sk-SK.po | 8 +++++- src/qt/languages/sl-SI.po | 10 +++++-- src/qt/languages/sv-SE.po | 10 +++++-- src/qt/languages/tr-TR.po | 10 +++++-- src/qt/languages/uk-UA.po | 10 +++++-- src/qt/languages/vi-VN.po | 8 +++++- src/qt/languages/zh-CN.po | 10 +++++-- src/qt/languages/zh-TW.po | 10 +++++-- src/qt/qt_mainwindow.ui | 2 +- src/qt/qt_vmmanager_main.cpp | 47 +++++++++++++++++++++++++++++++ src/qt/qt_vmmanager_mainwindow.ui | 11 +++++++- 27 files changed, 246 insertions(+), 46 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index bae56c279..41b84f5b0 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -15,7 +15,7 @@ msgstr "" msgid "&Right CTRL is left ALT" msgstr "" -msgid "&Hard Reset..." +msgid "&Hard reset" msgstr "" msgid "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "" msgid "Start" msgstr "" +msgid "&Force shutdown" +msgstr "" + +msgid "&Start" +msgstr "" + msgid "Not running" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 6c46c7538..9e74cdef9 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -15,7 +15,7 @@ msgstr "&Klávesnice vyžaduje záběr myši" msgid "&Right CTRL is left ALT" msgstr "&Pravý Ctrl je levý Alt" -msgid "&Hard Reset..." +msgid "&Hard reset" msgstr "&Resetovat" msgid "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Vynutit vypnutí" msgid "Start" msgstr "Spustit" +msgid "&Force shutdown" +msgstr "&Vynutit vypnutí" + +msgid "&Start" +msgstr "&Spustit" + msgid "Not running" msgstr "Neběží" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 6fb621242..4984af9fd 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -15,8 +15,8 @@ msgstr "&Tastatur benötigt das Einfangen des Mauszeigers" msgid "&Right CTRL is left ALT" msgstr "&Die rechte Strg-Taste ist die linke Alt-Taste" -msgid "&Hard Reset..." -msgstr "&Kaltstart..." +msgid "&Hard reset" +msgstr "&Kaltstart" msgid "&Ctrl+Alt+Del" msgstr "&Strg+Alt+Entf" @@ -1077,6 +1077,12 @@ msgstr "Abschaltung erzwingen" msgid "Start" msgstr "Einschalten" +msgid "&Force shutdown" +msgstr "&Abschaltung erzwingen" + +msgid "&Start" +msgstr "&Einschalten" + msgid "Not running" msgstr "Läuft nicht" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 92a80869b..5516b7b6d 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -15,8 +15,8 @@ msgstr "&Teclado requiere captura" msgid "&Right CTRL is left ALT" msgstr "CTRL &derecho es ALT izquierdo" -msgid "&Hard Reset..." -msgstr "&Hard Reset..." +msgid "&Hard reset" +msgstr "&Hard reset" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Apagqar forzadamente" msgid "Start" msgstr "Iniciar" +msgid "&Force shutdown" +msgstr "&Apagqar forzadamente" + +msgid "&Start" +msgstr "&Iniciar" + msgid "Not running" msgstr "No en ejecución" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index f5957db4c..996762a2d 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -15,8 +15,8 @@ msgstr "&Vaadi näppäimistön kaappaus" msgid "&Right CTRL is left ALT" msgstr "&Oikea CTRL on vasen ALT" -msgid "&Hard Reset..." -msgstr "&Uudelleenkäynnistys (kylmä)..." +msgid "&Hard reset" +msgstr "&Uudelleenkäynnistys (kylmä)" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Pakota sammutus" msgid "Start" msgstr "Käynnistä" +msgid "&Force shutdown" +msgstr "&Pakota sammutus" + +msgid "&Start" +msgstr "&Käynnistä" + msgid "Not running" msgstr "Ei käynnissä" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index b11c0c8b6..17fdcb1be 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -15,8 +15,8 @@ msgstr "C&apturer le clavier" msgid "&Right CTRL is left ALT" msgstr "CTRL &Droite devient ALT Gauche" -msgid "&Hard Reset..." -msgstr "&Hard Reset..." +msgid "&Hard reset" +msgstr "&Hard reset" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Suppr" @@ -1077,6 +1077,12 @@ msgstr "Arrêt forcé" msgid "Start" msgstr "Démarrer" +msgid "&Force shutdown" +msgstr "&Arrêt forcé" + +msgid "&Start" +msgstr "&Démarrer" + msgid "Not running" msgstr "Inactive" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index d3acd499e..3a2c239b2 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -15,8 +15,8 @@ msgstr "&Tipkovnica zahtijeva hvatanje miša" msgid "&Right CTRL is left ALT" msgstr "&Desni CTRL je lijevi ALT" -msgid "&Hard Reset..." -msgstr "&Ponovno pokretanje..." +msgid "&Hard reset" +msgstr "&Ponovno pokretanje" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Prisilno isključi" msgid "Start" msgstr "Pokreni" +msgid "&Force shutdown" +msgstr "Prisilno &isključi" + +msgid "&Start" +msgstr "&Pokreni" + msgid "Not running" msgstr "Se ne pokreće" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 443831788..65c4d83dd 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -15,8 +15,8 @@ msgstr "&Tastiera richiede la cattura" msgid "&Right CTRL is left ALT" msgstr "CTRL &destro è ALT sinistro" -msgid "&Hard Reset..." -msgstr "&Riavvia..." +msgid "&Hard reset" +msgstr "&Riavvia" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Canc" @@ -1077,6 +1077,12 @@ msgstr "Forza arresto" msgid "Start" msgstr "Avvia" +msgid "&Force shutdown" +msgstr "&Forza arresto" + +msgid "&Start" +msgstr "&Avvia" + msgid "Not running" msgstr "Inattivo" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 21bb1a88d..5c1973295 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -15,8 +15,8 @@ msgstr "キーボードはキャプチャが必要(&K)" msgid "&Right CTRL is left ALT" msgstr "右CTRLを左ALTへ変換(&R)" -msgid "&Hard Reset..." -msgstr "ハード リセット(&H)..." +msgid "&Hard reset" +msgstr "ハード リセット(&H)" msgid "&Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del(&C)" @@ -1077,6 +1077,12 @@ msgstr "強制終了" msgid "Start" msgstr "スタート" +msgid "&Force shutdown" +msgstr "強制終了(&F)" + +msgid "&Start" +msgstr "スタート(&S)" + msgid "Not running" msgstr "停止した" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 68bd5d8c2..caa87823a 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -15,8 +15,8 @@ msgstr "키보드는 캡쳐가 필요함(&K)" msgid "&Right CTRL is left ALT" msgstr "우측CTRL로 좌측ALT 입력(&R)" -msgid "&Hard Reset..." -msgstr "재시작(&H)..." +msgid "&Hard reset" +msgstr "재시작(&H)" msgid "&Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del(&C)" @@ -1077,6 +1077,12 @@ msgstr "강제 종료" msgid "Start" msgstr "시작" +msgid "&Force shutdown" +msgstr "강제 종료(&F)" + +msgid "&Start" +msgstr "시작(&S)" + msgid "Not running" msgstr "실행 중이 아닙니다" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index ec1574fa3..f883b3fac 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -15,8 +15,8 @@ msgstr "&Tastatur krever opptak" msgid "&Right CTRL is left ALT" msgstr "&Høyre CTRL er venstre ALT" -msgid "&Hard Reset..." -msgstr "&Hard tilbakestilling..." +msgid "&Hard reset" +msgstr "&Hard tilbakestilling" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Tvangsavslutt" msgid "Start" msgstr "Start" +msgid "&Force shutdown" +msgstr "&Tvangsavslutt" + +msgid "&Start" +msgstr "&Start" + msgid "Not running" msgstr "Ikke kjørende" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index ea92f69ec..763a9192d 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -15,8 +15,8 @@ msgstr "&Keyboard vereist vastleggen" msgid "&Right CTRL is left ALT" msgstr "&Rechtse CTRL is linkse ALT" -msgid "&Hard Reset..." -msgstr "&Harde Reset..." +msgid "&Hard reset" +msgstr "&Harde reset" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Forceer afsluiten" msgid "Start" msgstr "Start" +msgid "&Force shutdown" +msgstr "&Forceer afsluiten" + +msgid "&Start" +msgstr "&Start" + msgid "Not running" msgstr "Niet actied" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 6fdddd253..a46abb6ce 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -15,8 +15,8 @@ msgstr "&Klawiatura wymaga przechwytu myszy" msgid "&Right CTRL is left ALT" msgstr "Prawy C&TRL to lewy ALT" -msgid "&Hard Reset..." -msgstr "Twardy &reset..." +msgid "&Hard reset" +msgstr "Twardy &reset" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Wymuś zamknięcie" msgid "Start" msgstr "Uruchom" +msgid "&Force shutdown" +msgstr "&Wymuś zamknięcie" + +msgid "&Start" +msgstr "&Uruchom" + msgid "Not running" msgstr "Wyłączona" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index fe162c540..1a49ace23 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -15,8 +15,8 @@ msgstr "O &teclado requer captura" msgid "&Right CTRL is left ALT" msgstr "CTR&L direito é o ALT esquerdo" -msgid "&Hard Reset..." -msgstr "&Reinicialização completa..." +msgid "&Hard reset" +msgstr "&Reinicialização completa" msgid "&Ctrl+Alt+Del" msgstr "Ctrl+Alt+&Del" @@ -1077,6 +1077,12 @@ msgstr "Forçar desligamento" msgid "Start" msgstr "Iniciar" +msgid "&Force shutdown" +msgstr "&Forçar desligamento" + +msgid "&Start" +msgstr "&Iniciar" + msgid "Not running" msgstr "Parado" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 66fbfa500..cdbf065f6 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -15,8 +15,8 @@ msgstr "&Teclado requere captura" msgid "&Right CTRL is left ALT" msgstr "CTRL &direito é ALT esquerdo" -msgid "&Hard Reset..." -msgstr "&Reinicialização completa..." +msgid "&Hard reset" +msgstr "&Reinicialização completa" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Desligamento forçado" msgid "Start" msgstr "Iniciar" +msgid "&Force shutdown" +msgstr "&Desligamento forçado" + +msgid "&Start" +msgstr "&Iniciar" + msgid "Not running" msgstr "Não em execução" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index a9b9c3c18..20a25371f 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -15,8 +15,8 @@ msgstr "&Клавиатура требует захвата" msgid "&Right CTRL is left ALT" msgstr "&Правый CTRL - это левый ALT" -msgid "&Hard Reset..." -msgstr "&Холодная перезагрузка..." +msgid "&Hard reset" +msgstr "&Холодная перезагрузка" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Принудительное завершение работы" msgid "Start" msgstr "Пуск" +msgid "&Force shutdown" +msgstr "Принудительное &завершение работы" + +msgid "&Start" +msgstr "&Пуск" + msgid "Not running" msgstr "Не работает" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 67d2aacca..399bee502 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -15,7 +15,7 @@ msgstr "&Klávesnica vyžaduje záber" msgid "&Right CTRL is left ALT" msgstr "&Pravý Ctrl je ľavý Alt" -msgid "&Hard Reset..." +msgid "&Hard reset" msgstr "&Resetovať" msgid "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Vynútiť vypnutie" msgid "Start" msgstr "Spustiť" +msgid "&Force shutdown" +msgstr "&Vynútiť vypnutie" + +msgid "&Start" +msgstr "&Spustiť" + msgid "Not running" msgstr "Nebeží" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 4046d4700..31cb1e303 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -15,8 +15,8 @@ msgstr "&Tipkovnica potrebuje zajem" msgid "&Right CTRL is left ALT" msgstr "&Desni CTRL je levi ALT" -msgid "&Hard Reset..." -msgstr "&Ponovni zagon..." +msgid "&Hard reset" +msgstr "&Ponovni zagon" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Prisilno prekini" msgid "Start" msgstr "Zaženi" +msgid "&Force shutdown" +msgstr "&Prisilno prekini" + +msgid "&Start" +msgstr "&Zaženi" + msgid "Not running" msgstr "Se ne izvaja" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 4622aceda..890bc18eb 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -15,8 +15,8 @@ msgstr "&Tangentbord behöver uppfångas" msgid "&Right CTRL is left ALT" msgstr "&Höger CTRL är vänster ALT" -msgid "&Hard Reset..." -msgstr "&Hård omstart..." +msgid "&Hard reset" +msgstr "&Hård omstart" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Tvinga avstängning" msgid "Start" msgstr "Starta" +msgid "&Force shutdown" +msgstr "&Tvinga avstängning" + +msgid "&Start" +msgstr "&Starta" + msgid "Not running" msgstr "Körs ej" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 8bf374091..3df51363c 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -15,8 +15,8 @@ msgstr "&Klavye sadece fare yakalandığında çalışsın" msgid "&Right CTRL is left ALT" msgstr "&Sağ CTRL tuşunu sol ALT tuşu olarak ayarla" -msgid "&Hard Reset..." -msgstr "Yeniden başlamaya &zorla..." +msgid "&Hard reset" +msgstr "Yeniden başlamaya &zorla" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Kapatmaya zorla" msgid "Start" msgstr "Başlat" +msgid "&Force shutdown" +msgstr "&Kapatmaya zorla" + +msgid "&Start" +msgstr "&Başlat" + msgid "Not running" msgstr "Çalışmıyor" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index e5a714ad1..5e2dc7a1e 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -15,8 +15,8 @@ msgstr "&Клавіатура потребує захвату" msgid "&Right CTRL is left ALT" msgstr "&Правий CTRL - це лівий ALT" -msgid "&Hard Reset..." -msgstr "&Холодне перезавантаження..." +msgid "&Hard reset" +msgstr "&Холодне перезавантаження" msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Примусове завершення роботи" msgid "Start" msgstr "Пуск" +msgid "&Force shutdown" +msgstr "Примусове &завершення роботи" + +msgid "&Start" +msgstr "&Пуск" + msgid "Not running" msgstr "Не працює" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index a19394b79..632c43c12 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -15,7 +15,7 @@ msgstr "Bàn phím &hoạt động cần 'bắt' chuột" msgid "&Right CTRL is left ALT" msgstr "Gắn ALT trái vào CTRL ph&ải" -msgid "&Hard Reset..." +msgid "&Hard reset" msgstr "Buộc khởi độn&g lại" msgid "&Ctrl+Alt+Del" @@ -1077,6 +1077,12 @@ msgstr "Buộc tắt nguồn máy" msgid "Start" msgstr "Khởi động" +msgid "&Force shutdown" +msgstr "&Buộc tắt nguồn máy" + +msgid "&Start" +msgstr "&Khởi động" + msgid "Not running" msgstr "Đang không chạy" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 921f3f64e..7e92f9aee 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -15,8 +15,8 @@ msgstr "键盘需要捕捉(&K)" msgid "&Right CTRL is left ALT" msgstr "将右 CTRL 键映射为左 ALT 键(&R)" -msgid "&Hard Reset..." -msgstr "硬重置(&H)..." +msgid "&Hard reset" +msgstr "硬重置(&H)" msgid "&Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del(&C)" @@ -1077,6 +1077,12 @@ msgstr "强制关机" msgid "Start" msgstr "启动" +msgid "&Force shutdown" +msgstr "强制关机(&F)" + +msgid "&Start" +msgstr "启动(&S)" + msgid "Not running" msgstr "未在运行" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 771e67daf..fff385f34 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -15,8 +15,8 @@ msgstr "鍵盤需要捕捉(&K)" msgid "&Right CTRL is left ALT" msgstr "將右 CTRL 鍵映射為左 ALT 鍵(&R)" -msgid "&Hard Reset..." -msgstr "硬重設(&H)..." +msgid "&Hard reset" +msgstr "硬重設(&H)" msgid "&Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del(&C)" @@ -1077,6 +1077,12 @@ msgstr "強制關機" msgid "Start" msgstr "開始" +msgid "&Force shutdown" +msgstr "強制關機(&F)" + +msgid "&Start" +msgstr "開始(&S)" + msgid "Not running" msgstr "未執行" diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 78cb2df98..ca7aca2ca 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -340,7 +340,7 @@ :/menuicons/qt/icons/hard_reset.ico:/menuicons/qt/icons/hard_reset.ico - &Hard Reset... + &Hard reset false diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 7235f4500..99c1c9a67 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -109,6 +109,53 @@ VMManagerMain::VMManagerMain(QWidget *parent) : if (indexAt.isValid()) { QMenu contextMenu(tr("Context Menu"), ui->listView); + QAction startAction(tr("&Start")); + contextMenu.addAction(&startAction); + connect(&startAction, &QAction::triggered, [this] { + selected_sysconfig->startButtonPressed(); + }); + startAction.setEnabled(selected_sysconfig->process->state() == QProcess::NotRunning); + startAction.setVisible(selected_sysconfig->process->state() == QProcess::NotRunning); + + QAction pauseAction(tr("&Pause")); + contextMenu.addAction(&pauseAction); + connect(&pauseAction, &QAction::triggered, [this] { + selected_sysconfig->pauseButtonPressed(); + }); + pauseAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running); + pauseAction.setVisible(selected_sysconfig->process->state() == QProcess::Running); + if (selected_sysconfig->getProcessStatus() != VMManagerSystem::ProcessStatus::Running) + pauseAction.setText(tr("Re&sume")); + + QAction resetAction(tr("&Hard reset")); + contextMenu.addAction(&resetAction); + connect(&resetAction, &QAction::triggered, [this] { + selected_sysconfig->restartButtonPressed(); + }); + resetAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running); + + QAction forceShutdownAction(tr("&Force shutdown")); + contextMenu.addAction(&forceShutdownAction); + connect(&forceShutdownAction, &QAction::triggered, [this] { + selected_sysconfig->shutdownForceButtonPressed(); + }); + forceShutdownAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running); + + QAction cadAction(tr("&Ctrl+Alt+Del")); + contextMenu.addAction(&cadAction); + connect(&cadAction, &QAction::triggered, [this] { + selected_sysconfig->cadButtonPressed(); + }); + cadAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running); + + contextMenu.addSeparator(); + + QAction settingsAction(tr("&Settings...")); + contextMenu.addAction(&settingsAction); + connect(&settingsAction, &QAction::triggered, [this] { + selected_sysconfig->launchSettings(); + }); + QAction nameChangeAction(tr("Change &display name...")); contextMenu.addAction(&nameChangeAction); // Use a lambda to call a function so indexAt can be passed diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 7cd817a0b..c45e83741 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -98,6 +98,9 @@ &Start + + Start + false @@ -108,7 +111,10 @@ :/menuicons/qt/icons/hard_reset.ico:/menuicons/qt/icons/hard_reset.ico - &Hard Reset... + &Hard reset + + + Hard reset false @@ -167,6 +173,9 @@ &Settings... + + Settings... + QAction::NoRole From e18fb752fdd2a3103bf8eaac1721d1dccce337e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= <13226155+dhrdlicka@users.noreply.github.com> Date: Sat, 13 Sep 2025 21:07:17 +0200 Subject: [PATCH 31/39] Update Czech translation [skip ci] Updated translations for OpenGL input scale, stretch mode, and light/dark terminology. --- src/qt/languages/cs-CZ.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 9e74cdef9..b1864c5c2 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -2980,16 +2980,16 @@ msgid "EDID file \"%ls\" is too large." msgstr "Soubor EDID \"%ls\" je příliš velký." msgid "OpenGL input scale" -msgstr "Vstupní měřítko OpenGL" +msgstr "Měřítko vstupu OpenGL" msgid "OpenGL input stretch mode" -msgstr "režim roztažení vstupu OpenGL" +msgstr "Režim roztažení vstupu OpenGL" msgid "Color scheme" msgstr "Barevné schéma" msgid "Light" -msgstr "Světlo" +msgstr "Světlé" msgid "Dark" -msgstr "Tmavá" +msgstr "Tmavé" From 25ee59d98c4f54a9a2b13f8d6a7feec93f2695a9 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 13 Sep 2025 16:32:43 -0300 Subject: [PATCH 32/39] Fix internal name for Multitech PC-900 --- src/include/86box/machine.h | 2 +- src/machine/m_at_286.c | 6 ++++-- src/machine/machine_table.c | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 6de1586dc..77aff35ce 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -498,7 +498,7 @@ extern int machine_at_cmdpc_init(const machine_t *); extern int machine_at_portableii_init(const machine_t *); extern int machine_at_portableiii_init(const machine_t *); extern int machine_at_grid1520_init(const machine_t *); -extern int machine_at_mpfpc900_init(const machine_t *); +extern int machine_at_pc900_init(const machine_t *); extern int machine_at_mr286_init(const machine_t *); extern int machine_at_pc8_init(const machine_t *); extern int machine_at_m290_init(const machine_t *); diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index a1b71a817..a2a69716b 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -305,7 +305,8 @@ machine_at_portableiii_init(const machine_t *model) } int -machine_at_grid1520_init(const machine_t *model) { +machine_at_grid1520_init(const machine_t *model) +{ int ret = 0; ret = bios_load_linear("roms/machines/grid1520/grid1520_891025.rom", @@ -329,7 +330,8 @@ machine_at_grid1520_init(const machine_t *model) { } int -machine_at_mpfpc900_init(const machine_t *model) { +machine_at_pc900_init(const machine_t *model) +{ int ret = 0; ret = bios_load_linear("roms/machines/pc900/mpf_pc900_v207a.bin", diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f47c43c35..97b71cdb6 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -3345,10 +3345,10 @@ const machine_t machines[] = { /* Has IBM AT KBC firmware. */ { .name = "[ISA] Multitech PC-900", - .internal_name = "mpfpc900", + .internal_name = "pc900", .type = MACHINE_TYPE_286, .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_mpfpc900_init, + .init = machine_at_pc900_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, From d92112fa2dd6afa0e47a539808b0af9dafe60ebd Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 13 Sep 2025 17:00:15 -0300 Subject: [PATCH 33/39] Add "screenshot mode" compile flag to round % and Hz displays --- src/86box.c | 6 ++++++ src/CMakeLists.txt | 4 ++++ src/qt/qt_mainwindow.cpp | 6 +++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/86box.c b/src/86box.c index d242b40b9..44b6793e4 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1866,6 +1866,12 @@ pc_run(void) if (title_update) { mouse_msg_idx = ((mouse_type == MOUSE_TYPE_NONE) || (mouse_input_mode >= 1)) ? 2 : !!mouse_capture; +#ifdef SCREENSHOT_MODE + if (force_10ms) + fps = ((fps + 2) / 5) * 5; + else + fps = ((fps + 20) / 50) * 50; +#endif swprintf(temp, sizeof_w(temp), mouse_msg[mouse_msg_idx], fps / (force_10ms ? 1 : 10), force_10ms ? 0 : (fps % 10)); #ifdef __APPLE__ /* Needed due to modifying the UI on the non-main thread is a big no-no. */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec3b2c628..b13071241 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -84,6 +84,10 @@ if(DEBUGREGS486) add_compile_definitions(USE_DEBUG_REGS_486) endif() +if(SCREENSHOT_MODE) + add_compile_definitions(SCREENSHOT_MODE) +endif() + if(VNC) find_package(LibVNCServer) if(LibVNCServer_FOUND) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 1c2e000ab..4f616e61b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -200,7 +200,11 @@ MainWindow::MainWindow(QWidget *parent) frameRateTimer->setInterval(1000); frameRateTimer->setSingleShot(false); connect(frameRateTimer, &QTimer::timeout, [hertz_label] { - hertz_label->setText(tr("%1 Hz").arg(QString::number(monitors[0].mon_actualrenderedframes.load()) + (monitors[0].mon_interlace ? "i" : ""))); + auto hz = monitors[0].mon_actualrenderedframes.load(); +#ifdef SCREENSHOT_MODE + hz = ((hz + 2) / 5) * 5; +#endif + hertz_label->setText(tr("%1 Hz").arg(QString::number(hz) + (monitors[0].mon_interlace ? "i" : ""))); }); statusBar()->addPermanentWidget(hertz_label); frameRateTimer->start(1000); From ccc5c3aec17832c6ec1ebe028a1091eee4c5a3ac Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 13 Sep 2025 17:05:30 -0300 Subject: [PATCH 34/39] Fix strncpy warnings --- src/86box.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/86box.c b/src/86box.c index 44b6793e4..18681d743 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1153,11 +1153,13 @@ usage: start_vmm = 1; } else { strncpy(vmm_path, vmm_path_cfg, sizeof(vmm_path) - 1); + vmm_path[sizeof(vmm_path) - 1] = '\0'; } if (start_vmm) { pclog("# VM Manager enabled. Path: %s\n", vmm_path); strncpy(usr_path, vmm_path, sizeof(usr_path) - 1); + usr_path[sizeof(usr_path) - 1] = '\0'; } else #endif { From fcf236ff7ec25927947ac7527a812c262207efc7 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 13 Sep 2025 23:09:24 +0200 Subject: [PATCH 35/39] Add the selection of the last BIOS versio of ABIT BX6. --- src/include/86box/machine.h | 3 +++ src/machine/m_at_slot1.c | 50 +++++++++++++++++++++++++++++++++---- src/machine/machine_table.c | 2 +- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 77aff35ce..9f5a7c119 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1128,6 +1128,9 @@ extern int machine_at_p6i440e2_init(const machine_t *); /* i440BX */ extern int machine_at_bf6_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t bx6_device; +#endif extern int machine_at_bx6_init(const machine_t *); extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 12fd9861f..b3a4a2857 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -348,17 +348,57 @@ machine_at_bf6_init(const machine_t *model) return ret; } +static const device_config_t bx6_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "bx6", + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, + .bios = { + { .name = "1998/07/28 - BIOS EG", .internal_name = "bx6", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_EG.BIN", "" } }, + { .name = "2000/03/10 - BIOS QS", .internal_name = "bx6_qs", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_QS.bin", "" } }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t bx6_device = { + .name = "ABIT BX6", + .internal_name = "bx6_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = bx6_config +}; + int machine_at_bx6_init(const machine_t *model) { - int ret; + int ret = 0; + const char* fn; - ret = bios_load_linear("roms/machines/bx6/BX6_EG.BIN", - 0x000e0000, 131072, 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, 0x000e0000, 131072, 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 97b71cdb6..2d5d81f10 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -17491,7 +17491,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &bx6_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From d08b21b34a472fb03a805d854efcd925d2aa9c37 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 13 Sep 2025 23:20:54 +0200 Subject: [PATCH 36/39] Some machine ordering fixes (and a 286 machine had the wrong chipset displayed). --- src/include/86box/machine.h | 16 +++---- src/machine/m_at_286.c | 44 +++++++++---------- src/machine/m_at_386sx.c | 44 +++++++++---------- src/machine/machine_table.c | 86 ++++++++++++++++++------------------- 4 files changed, 95 insertions(+), 95 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 9f5a7c119..c3abd7f7a 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -516,19 +516,19 @@ extern int machine_at_dells200_init(const machine_t *); extern int machine_at_super286c_init(const machine_t *); extern int machine_at_at122_init(const machine_t *); extern int machine_at_tuliptc7_init(const machine_t *); +/* Wells American A*Star with custom award BIOS. */ +extern int machine_at_wellamerastar_init(const machine_t *); /* GC103 */ extern int machine_at_quadt286_init(const machine_t *); extern void machine_at_headland_common_init(const machine_t *model, int type); extern int machine_at_tg286m_init(const machine_t *); -/* Wells American A*Star with custom award BIOS. */ -extern int machine_at_wellamerastar_init(const machine_t *); /* NEAT */ +extern int machine_at_px286_init(const machine_t *); extern int machine_at_ataripc4_init(const machine_t *); extern int machine_at_neat_ami_init(const machine_t *); extern int machine_at_3302_init(const machine_t *); -extern int machine_at_px286_init(const machine_t *); /* SCAMP */ extern int machine_at_pc7286_init(const machine_t *); @@ -558,8 +558,8 @@ extern const device_t pbl300sx_device; extern int machine_at_pbl300sx_init(const machine_t *); /* ALi M1217 */ -extern int machine_at_arb1374_init(const machine_t *); extern int machine_at_sbc350a_init(const machine_t *); +extern int machine_at_arb1374_init(const machine_t *); extern int machine_at_flytech386_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t c325ax_device; @@ -609,6 +609,10 @@ extern int machine_at_wd76c10_init(const machine_t *); extern int machine_at_pja511m_init(const machine_t *); extern int machine_at_prox1332_init(const machine_t *); +/* m_at_486slc.c */ +/* OPTi 283 */ +extern int machine_at_rycleopardlx_init(const machine_t *); + /* m_at_386dx.c */ /* ISA */ #ifdef EMU_DEVICE_H @@ -640,10 +644,6 @@ extern int machine_at_opti495_init(const machine_t *); extern int machine_at_asus3863364k_init(const machine_t *); extern int machine_at_asus386_init(const machine_t *); -/* m_at_486slc.c */ -/* OPTi 283 */ -extern int machine_at_rycleopardlx_init(const machine_t *); - /* m_at_386dx_486.c */ /* ALi M1429G */ extern int machine_at_exp4349_init(const machine_t *); diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index a2a69716b..b8e1f746a 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -736,6 +736,28 @@ machine_at_tg286m_init(const machine_t *model) return ret; } +int +machine_at_px286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&neat_device); + + return ret; +} + // TODO // Onboard Paradise PVGA1A-JK VGA Graphics // Data Technology Corporation DTC7187 RLL Controller (Optional) @@ -816,28 +838,6 @@ machine_at_3302_init(const machine_t *model) return ret; } -int -machine_at_px286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&neat_device); - - return ret; -} - /* SCAMP */ int machine_at_pc7286_init(const machine_t *model) diff --git a/src/machine/m_at_386sx.c b/src/machine/m_at_386sx.c index f48b8977a..7e57c5902 100644 --- a/src/machine/m_at_386sx.c +++ b/src/machine/m_at_386sx.c @@ -162,28 +162,6 @@ machine_at_pbl300sx_init(const machine_t *model) } /* ALi M1217 */ -int -machine_at_arb1374_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/arb1374/1374s.rom", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&ali1217_device); - device_add(&ide_isa_device); - device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0 | W83XX7_IDE_PRI)); - - device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); - - return ret; -} - int machine_at_sbc350a_init(const machine_t *model) { @@ -206,6 +184,28 @@ machine_at_sbc350a_init(const machine_t *model) return ret; } +int +machine_at_arb1374_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/arb1374/1374s.rom", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add(&ali1217_device); + device_add(&ide_isa_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0 | W83XX7_IDE_PRI)); + + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); + + return ret; +} + int machine_at_flytech386_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 2d5d81f10..5ef248ed3 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -3916,6 +3916,49 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* has an Award-branded KBC controller */ + { + .name = "[C&T PC/AT] Hyundai Super-286C", + .internal_name = "super286c", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_super286c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_AT, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 1024, + .step = 128 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { @@ -4270,49 +4313,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* has an Award-branded KBC controller */ - { - .name = "[NEAT] Hyundai Super-286C", - .internal_name = "super286c", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_super286c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 1024, - .step = 128 - }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has NCR KBC firmware. */ { .name = "[NEAT] NCR 3302", From 00677015b78c442cac1e5b3258fefe2266200561 Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Sat, 13 Sep 2025 19:04:12 -0300 Subject: [PATCH 37/39] Fix untranslated string --- src/qt/qt_vmmanager_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 99c1c9a67..6ae455f8a 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -390,7 +390,7 @@ illegal_chars: } else { QMenu contextMenu(tr("Context Menu"), ui->listView); - QAction newMachineAction(tr("New machine...")); + QAction newMachineAction(tr("&New machine...")); contextMenu.addAction(&newMachineAction); connect(&newMachineAction, &QAction::triggered, this, &VMManagerMain::newMachineWizard); From 57a964a0151c05ac12d8eb6e38822e8898305c60 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 13 Sep 2025 19:20:40 -0300 Subject: [PATCH 38/39] Jenkins: Slight formatting fix --- .ci/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/build.sh b/.ci/build.sh index d0a4857d9..e62bdd0be 100755 --- a/.ci/build.sh +++ b/.ci/build.sh @@ -600,8 +600,8 @@ then cmake_flags_extra="$cmake_flags_extra -D MOLTENVK=ON -D \"MOLTENVK_INCLUDE_DIR=$macports\"" fi - # Enable Libserialport - cmake_flags_extra="$cmake_flags_extra -D \"LIBSERIALPORT_ROOT=$macports\"" + # Enable libserialport. + cmake_flags_extra="$cmake_flags_extra -D \"LIBSERIALPORT_ROOT=$macports\"" # Install dependencies only if we're in a new build and/or MacPorts prefix. if check_buildtag "$(basename "$macports")" From 38806537fcb7d3a4b436053a02cbfebe949b544e Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 14 Sep 2025 02:00:31 +0200 Subject: [PATCH 39/39] Bump the version to 6.0. --- CMakeLists.txt | 2 +- debian/changelog | 4 ++-- src/unix/assets/86Box.spec | 4 ++-- src/unix/assets/net.86box.86Box.metainfo.xml | 2 +- vcpkg.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f91d48ecc..90fcc1c0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ if(MUNT_EXTERNAL) endif() project(86Box - VERSION 5.1 + VERSION 6.0 DESCRIPTION "Emulator of x86-based systems" HOMEPAGE_URL "https://86box.net" LANGUAGES C CXX) diff --git a/debian/changelog b/debian/changelog index 61a0490ee..7772e71de 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -86box (5.1) UNRELEASED; urgency=medium +86box (6.0) UNRELEASED; urgency=medium * Bump release. - -- Jasmine Iwanek Wed, 27 Aug 2025 19:39:16 +0200 + -- Jasmine Iwanek Sun, 14 Sep 2025 01:57:44 +0200 diff --git a/src/unix/assets/86Box.spec b/src/unix/assets/86Box.spec index 0e57beb1c..16906ec41 100644 --- a/src/unix/assets/86Box.spec +++ b/src/unix/assets/86Box.spec @@ -15,7 +15,7 @@ %global romver 4.1 Name: 86Box -Version: 5.1 +Version: 6.0 Release: 1%{?dist} Summary: Classic PC emulator License: GPLv2+ @@ -121,5 +121,5 @@ popd %{_datadir}/%{name}/roms %changelog -* Sat Aug 31 Jasmine Iwanek 5.1-1 +* Sat Aug 31 Jasmine Iwanek 6.0-1 - Bump release diff --git a/src/unix/assets/net.86box.86Box.metainfo.xml b/src/unix/assets/net.86box.86Box.metainfo.xml index 455e6841d..629ae8a08 100644 --- a/src/unix/assets/net.86box.86Box.metainfo.xml +++ b/src/unix/assets/net.86box.86Box.metainfo.xml @@ -11,7 +11,7 @@ net.86box.86Box.desktop - + diff --git a/vcpkg.json b/vcpkg.json index a623508e7..6a4f6376c 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "86box", - "version-string": "5.1", + "version-string": "6.0", "homepage": "https://86box.net/", "documentation": "https://86box.readthedocs.io/", "license": "GPL-2.0-or-later",