From 6afc72b86038ff2b6fadb8a8f78169ee69f5123a Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 5 Nov 2025 17:36:54 +0100 Subject: [PATCH] IBM PS/ValuePoint 433: Fix on-board ET4000/W32. --- src/machine/m_at_socket2.c | 12 +++++++++++- src/video/vid_et4000w32.c | 5 +++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/machine/m_at_socket2.c b/src/machine/m_at_socket2.c index b7cf93d92..8ea151f53 100644 --- a/src/machine/m_at_socket2.c +++ b/src/machine/m_at_socket2.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #define HAVE_STDARG_H @@ -333,11 +334,13 @@ machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2 int ret; ret = bios_load_linear("roms/machines/valuepoint433/$IMAGEP.FLH", - 0x000e0000, 131072, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) return ret; + memcpy(&rom[0x00020000], rom, 131072); + machine_at_common_ide_init(model); device_add(&sis_85c461_device); if (gfxcard[0] == VID_INTERNAL) @@ -350,6 +353,13 @@ machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2 if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); + if (gfxcard[0] != VID_INTERNAL) { + for (uint16_t i = 0; i < 32768; i++) + rom[i] = mem_readb_phys(0x000c0000 + i); + } + mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000); + mem_mapping_set_exec(&bios_mapping, rom); + return ret; } diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index 54154fb93..c0d802fe4 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -2825,8 +2825,9 @@ et4000w32p_init(const device_t *info) et4000->rev = ET4000W32; et4000->ramdac_type = ET4K_SDAC; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); + if (!(info->local & 0x100)) + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5301_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac;