From eb103f4c5d5e0849cb519ee2e8f5f5dfeb54ed1e Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 27 Feb 2026 08:33:03 +0100 Subject: [PATCH 1/6] Micronics Spitfire: Do not initialize standalone NVR - it's on the chipset. --- src/machine/machine_table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 25fb1c42a..cad442d5a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -19893,8 +19893,8 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = -1, .kbc_device = NULL, .kbc_params = 0x00000000, - .nvr_device = &nvr_at_device, - .nvr_params = NVR_AT, + .nvr_device = NULL, + .nvr_params = 0x00000000, .sio_device = NULL, .sio_params = 0x00000000, .kbc_p1 = 0x00000cf0, From 733c69287b1ce2876ddfbcce0966ba073daa75bb Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 27 Feb 2026 09:13:23 +0100 Subject: [PATCH 2/6] Amstrad MegaPC: Do not initialize standalone NVR, it's on the chipset. --- src/machine/machine_table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index cad442d5a..de3d2a88c 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -6628,8 +6628,8 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = -1, .kbc_device = &kbc_at_device, .kbc_params = KBC_VEN_QUADTEL, - .nvr_device = &nvr_at_device, - .nvr_params = NVR_AT, + .nvr_device = NULL, + .nvr_params = 0x00000000, .sio_device = NULL, .sio_params = 0x00000000, .kbc_p1 = 0x00000cf0, From 33fa07bcb4fbae9bd15ec8e60c1f629652646711 Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 27 Feb 2026 09:48:09 +0100 Subject: [PATCH 3/6] WD76C10: Implement 8-bit writes to the lock/unlock register (port F073h). --- src/chipset/wd76c10.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/chipset/wd76c10.c b/src/chipset/wd76c10.c index be18f8d96..5552a6d89 100644 --- a/src/chipset/wd76c10.c +++ b/src/chipset/wd76c10.c @@ -1051,6 +1051,10 @@ wd76c10_outb(uint16_t port, uint8_t val, void *priv) if (valxor) nvr_lock_set(0x38, 0x08, (val & 0x08) ? 0x03 : 0x00, dev->nvr); break; + + case 0xf073: + dev->locked = ((val & 0x00ff) != 0x00da); + break; } } @@ -1460,7 +1464,7 @@ wd76c10_init(UNUSED(const device_t *info)) io_sethandler(0xe872, 1, NULL, wd76c10_inw, NULL, NULL, wd76c10_outw, NULL, dev); /* Lock/Unlock Configuration */ - io_sethandler(0xf073, 1, NULL, NULL, NULL, NULL, wd76c10_outw, NULL, dev); + io_sethandler(0xf073, 1, NULL, NULL, NULL, wd76c10_outb, wd76c10_outw, NULL, dev); /* Cache Flush */ io_sethandler(0xf872, 1, NULL, NULL, NULL, NULL, wd76c10_outw, NULL, dev); From 8fcf6a00619a8befeb7605fd175079685ce33f08 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Fri, 27 Feb 2026 15:51:14 +0700 Subject: [PATCH 4/6] Sound & SCSI alphabetization + 2 misc. changes The misc. changes are: 1. Corrected the video chip on "m_xt.c" code 2. Added standalone three floppy disk controller chips --- src/floppy/fdc.c | 3 +++ src/machine/m_xt.c | 2 +- src/scsi/scsi.c | 6 +++--- src/sound/sound.c | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index cfc51f2b0..4c5b3bd4d 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -108,7 +108,10 @@ static fdc_cards_t fdc_cards[] = { { &device_none }, { &device_internal }, { &fdc_xt_device }, + { &fdc_xt_umc_um8398_device }, /* Standalone chip */ { &fdc_at_device }, + { &fdc_at_nsc_dp8473_device }, /* Standalone chip */ + { &fdc_at_smc_device }, /* Standalone chip */ { &fdc_b215_device }, { &fdc_pii151b_device }, { &fdc_pii158b_device }, diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index c3904d7ec..d02d9d730 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -2016,7 +2016,7 @@ machine_xt_z184_init(const machine_t *model) /* So that serial_standalone_init() won't do anything. */ serial_set_next_inst(SERIAL_MAX - 1); - device_add(&cga_device); + device_add(&v6355d_device); return ret; } diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index 89ea9fc29..79cdcda74 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -53,13 +53,13 @@ typedef const struct { static SCSI_CARD scsi_cards[] = { // clang-format off { &device_none, }, - /* ISA/Sidecar */ - { &scsi_ls2000_device, }, /* ISA */ { &scsi_lcs6821n_device, }, { &scsi_rt1000b_device, }, { &scsi_t128_device, }, { &scsi_t130b_device, }, + /* ISA/Sidecar */ + { &scsi_ls2000_device, }, /* ISA16 */ { &aha154xa_device, }, { &aha154xb_device, }, @@ -91,12 +91,12 @@ static SCSI_CARD scsi_cards[] = { { &ncr53c825a_pci_device, }, { &ncr53c860_pci_device, }, { &ncr53c875_pci_device, }, - { &dc390_pci_device, }, { &qla1040b_device, }, { &qla1080_device, }, { &qla1240_device, }, { &qla1280_device, }, { &qla12160a_device, }, + { &dc390_pci_device, }, { NULL, }, // clang-format on }; diff --git a/src/sound/sound.c b/src/sound/sound.c index af2f958a9..a878b153a 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -122,11 +122,11 @@ static const SOUND_CARD sound_cards[] = { { &ess_ess0102_pnp_device }, { &ess_ess0968_pnp_device }, { &ssi2001_device }, + { &thunderboard_device }, { &mmb_device }, #ifdef USE_LIBSERIALPORT /*The following devices required LIBSERIALPORT*/ { &opl2board_device }, #endif - { &thunderboard_device }, { &pasplus_device }, { &sb_1_device }, { &sb_15_device }, From 76a35e6343adad7c98d989ee62f9bd22d26c0d3b Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Fri, 27 Feb 2026 16:43:49 +0700 Subject: [PATCH 5/6] Remove standalone floppy controllers In preparation for the addition of standalone floppy/hard disk controllers. --- src/floppy/fdc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 4c5b3bd4d..cfc51f2b0 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -108,10 +108,7 @@ static fdc_cards_t fdc_cards[] = { { &device_none }, { &device_internal }, { &fdc_xt_device }, - { &fdc_xt_umc_um8398_device }, /* Standalone chip */ { &fdc_at_device }, - { &fdc_at_nsc_dp8473_device }, /* Standalone chip */ - { &fdc_at_smc_device }, /* Standalone chip */ { &fdc_b215_device }, { &fdc_pii151b_device }, { &fdc_pii158b_device }, From c843a470ba841c04173efaf07320a9ab965c9360 Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 27 Feb 2026 10:48:27 +0100 Subject: [PATCH 6/6] WD76c10: Fix register locking/unlocking, unbreaks the Amstrad MegaPC. --- src/chipset/wd76c10.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/chipset/wd76c10.c b/src/chipset/wd76c10.c index 5552a6d89..d183cd043 100644 --- a/src/chipset/wd76c10.c +++ b/src/chipset/wd76c10.c @@ -8,6 +8,9 @@ * * Implementation of the Western Digital WD76C10 chipset. * + * It appears that it hold separate lock/unlock states depending + * on whether or not the access to port F073h was 8-bit or 16-bit. + * * Authors: Miran Grca, * * Copyright 2024 Miran Grca. @@ -103,7 +106,7 @@ typedef struct uint16_t ems_page_regs[40]; uint16_t lpt_base; - int locked; + int locked, lock8, lock16; uint32_t mem_top, hmwp_base; uint32_t fast; @@ -1053,7 +1056,8 @@ wd76c10_outb(uint16_t port, uint8_t val, void *priv) break; case 0xf073: - dev->locked = ((val & 0x00ff) != 0x00da); + dev->lock8 = ((val & 0x00ff) != 0x00da); + dev->locked = dev->lock8 && dev->lock16; break; } } @@ -1066,7 +1070,7 @@ wd76c10_outw(uint16_t port, uint16_t val, void *priv) uint8_t ems_en; if (!dev->locked || (port < 0x1072) || (port > 0xf872) || - (port == 0xe072) || (port == 0xe872) || (port == 0xf073)) switch (port) { + (port == 0xe072) || (port == 0xe872) || (port == 0xf073)) switch (port) { case 0x1072: dev->cpuclk = val; break; @@ -1169,7 +1173,8 @@ wd76c10_outw(uint16_t port, uint16_t val, void *priv) break; case 0xf073: - dev->locked = ((val & 0x00ff) != 0x00da); + dev->lock16 = ((val & 0x00ff) != 0x00da); + dev->locked = dev->lock8 && dev->lock16; break; case 0xf872: @@ -1203,7 +1208,7 @@ wd76c10_inw(uint16_t port, void *priv) wd76c10_log("WD76C10: R dev->regs[%04x]\n", port); if (!dev->locked || (port < 0x1072) || (port > 0xf872) || - (port == 0xe072) || (port == 0xe872) || (port == 0xf073)) switch (port) { + (port == 0xe072) || (port == 0xe872) || (port == 0xf073)) switch (port) { case 0x1072: ret = dev->cpuclk; break; @@ -1307,6 +1312,8 @@ wd76c10_reset(void *priv) { wd76c10_t *dev = (wd76c10_t *)priv; + dev->lock8 = 1; + dev->lock16 = 1; dev->locked = 1; dev->toggle = 0; @@ -1465,6 +1472,8 @@ wd76c10_init(UNUSED(const device_t *info)) /* Lock/Unlock Configuration */ io_sethandler(0xf073, 1, NULL, NULL, NULL, wd76c10_outb, wd76c10_outw, NULL, dev); + // io_sethandler(0xf073, 1, NULL, NULL, NULL, NULL, wd76c10_outw, NULL, dev); + // io_sethandler(0xf073, 1, NULL, NULL, NULL, wd76c10_outb, NULL, NULL, dev); /* Cache Flush */ io_sethandler(0xf872, 1, NULL, NULL, NULL, NULL, wd76c10_outw, NULL, dev);