From 5df15ee724d9b151c4d36fb348b13d2673cad37f Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 17 Dec 2024 11:11:42 -0300 Subject: [PATCH 1/3] machine: Rename hitman back to gw2kte --- src/include/86box/machine.h | 2 +- src/machine/m_at_socket7.c | 12 ++++++------ src/machine/machine_table.c | 8 ++------ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 2312d2920..b109c7731 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -722,7 +722,7 @@ extern int machine_at_pb680_init(const machine_t *); extern int machine_at_pb810_init(const machine_t *); extern int machine_at_mb520n_init(const machine_t *); extern int machine_at_i430vx_init(const machine_t *); -extern int machine_at_hitman_init(const machine_t *); +extern int machine_at_gw2kte_init(const machine_t *); extern int machine_at_ma23c_init(const machine_t *); extern int machine_at_nupro592_init(const machine_t *); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 31afb0f01..f80d2d421 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -825,15 +825,15 @@ machine_at_i430vx_init(const machine_t *model) } int -machine_at_hitman_init(const machine_t *model) +machine_at_gw2kte_init(const machine_t *model) { int ret; - ret = bios_load_linear_combined2("roms/machines/hitman/1008CY1T.BIO", - "roms/machines/hitman/1008CY1T.BI1", - "roms/machines/hitman/1008CY1T.BI2", - "roms/machines/hitman/1008CY1T.BI3", - "roms/machines/hitman/1008CY1T.RCV", + ret = bios_load_linear_combined2("roms/machines/gw2kte/1008CY1T.BIO", + "roms/machines/gw2kte/1008CY1T.BI1", + "roms/machines/gw2kte/1008CY1T.BI2", + "roms/machines/gw2kte/1008CY1T.BI3", + "roms/machines/gw2kte/1008CY1T.RCV", 0x3a000, 128); if (bios_only || !ret) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 59d1075bb..729f3dd37 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11953,16 +11953,14 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - -/* 430VX */ /* Has a SM(S)C FDC37C932FR Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { .name = "[i430VX] Gateway 2000 Hitman", - .internal_name = "hitman", + .internal_name = "gw2kte", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_hitman_init, + .init = machine_at_gw2kte_init, .p1_handler = NULL, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -11996,8 +11994,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - - /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { From f5983080c8e3852597e561017ddf260a02023630 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 17 Dec 2024 11:19:21 -0300 Subject: [PATCH 2/3] PCnet: Mask I/O BAR to 32 instead of 256 ports, fixes OpenBSD misdetecting as vmxnet --- src/network/net_pcnet.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/net_pcnet.c b/src/network/net_pcnet.c index b800c1129..96be34ba4 100644 --- a/src/network/net_pcnet.c +++ b/src/network/net_pcnet.c @@ -2607,7 +2607,7 @@ pcnet_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) /* Then let's set the PCI regs. */ pcnet_pci_bar[0].addr_regs[addr & 3] = val; /* Then let's calculate the new I/O base. */ - pcnet_pci_bar[0].addr &= 0xff00; + pcnet_pci_bar[0].addr &= 0xffe0; dev->PCIBase = pcnet_pci_bar[0].addr; /* Log the new base. */ pcnet_log(4, "%s: New I/O base is %04X\n", dev->name, dev->PCIBase); @@ -2685,7 +2685,7 @@ pcnet_pci_read(UNUSED(int func), int addr, void *priv) case 0x0E: return 0; /*Header type */ case 0x10: - return 1; /*I/O space*/ + return pcnet_pci_bar[0].addr_regs[0] | 1; /*I/O space*/ case 0x11: return pcnet_pci_bar[0].addr_regs[1]; case 0x12: From 4dd638907e79115867011da69407407b13a6a7fb Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 17 Dec 2024 16:28:10 -0300 Subject: [PATCH 3/3] PCnet: Bypass length checks in MMIO APROM accesses, fixes OpenBSD MAC address readout Reference: VirtualBox 7.0.2 DevPCNet.cpp:pcnetR3Mmio* --- src/network/net_pcnet.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/network/net_pcnet.c b/src/network/net_pcnet.c index 96be34ba4..b1fca8feb 100644 --- a/src/network/net_pcnet.c +++ b/src/network/net_pcnet.c @@ -2481,36 +2481,58 @@ pcnet_readl(uint16_t addr, void *priv) static void pcnet_mmio_writeb(uint32_t addr, uint8_t val, void *priv) { + if (!(addr & 0x10)) { + pcnet_aprom_writeb((nic_t *) priv, addr, val); + return; + } pcnet_write((nic_t *) priv, addr, val, 1); } static void pcnet_mmio_writew(uint32_t addr, uint16_t val, void *priv) { + if (!(addr & 0x10)) { + pcnet_aprom_writeb((nic_t *) priv, addr, val); + pcnet_aprom_writeb((nic_t *) priv, addr + 1, val >> 8); + return; + } pcnet_write((nic_t *) priv, addr, val, 2); } static void pcnet_mmio_writel(uint32_t addr, uint32_t val, void *priv) { + if (!(addr & 0x10)) { + pcnet_aprom_writeb((nic_t *) priv, addr, val); + pcnet_aprom_writeb((nic_t *) priv, addr + 1, val >> 8); + pcnet_aprom_writeb((nic_t *) priv, addr + 2, val >> 16); + pcnet_aprom_writeb((nic_t *) priv, addr + 3, val >> 24); + return; + } pcnet_write((nic_t *) priv, addr, val, 4); } static uint8_t pcnet_mmio_readb(uint32_t addr, void *priv) { + if (!(addr & 0x10)) + return pcnet_aprom_readb((nic_t *) priv, addr); return (pcnet_read((nic_t *) priv, addr, 1)); } static uint16_t pcnet_mmio_readw(uint32_t addr, void *priv) { + if (!(addr & 0x10)) + return pcnet_aprom_readb((nic_t *) priv, addr) | (pcnet_aprom_readb((nic_t *) priv, addr + 1) << 8); return (pcnet_read((nic_t *) priv, addr, 2)); } static uint32_t pcnet_mmio_readl(uint32_t addr, void *priv) { + if (!(addr & 0x10)) + return pcnet_aprom_readb((nic_t *) priv, addr) | (pcnet_aprom_readb((nic_t *) priv, addr + 1) << 8) | (pcnet_aprom_readb((nic_t *) priv, addr + 2) << 16) | (pcnet_aprom_readb((nic_t *) priv, addr + 3) << 24); return (pcnet_read((nic_t *) priv, addr, 4)); }