From e34dc90cd47e21d839ad016884071b30689ba70e Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 23 Aug 2025 02:22:08 +0200 Subject: [PATCH] The Super I/O chip keyboard controllers and a compile fix to the PS/55 machines. --- src/machine/m_ps2_mca.c | 10 ++++++---- src/sio/sio_fdc37c67x.c | 8 ++++---- src/sio/sio_fdc37c93x.c | 8 ++++---- src/sio/sio_fdc37m60x.c | 8 ++++---- src/sio/sio_it86x1f.c | 4 ++++ src/sio/sio_pc87306.c | 6 +++--- src/sio/sio_pc87307.c | 8 ++++---- src/sio/sio_pc87309.c | 8 ++++---- 8 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index 07dd61dce..e8be93038 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -1793,7 +1793,6 @@ ps55_mca_board_model_50t_init(void) ps2.split_addr = mem_size * 1024; /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); ps2.planar_read = ps55_model_50t_read; ps2.planar_write = ps55_model_50tv_write; @@ -1837,7 +1836,6 @@ ps55_mca_board_model_50v_init(void) ps2.split_addr = mem_size * 1024; /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); ps2.planar_read = ps55_model_50v_read; ps2.planar_write = ps55_model_50tv_write; @@ -1889,7 +1887,7 @@ ps55_mca_board_model_50v_init(void) } int -machine_ps55_model_50t_init(const machine_t* model) +machine_ps55_model_50t_init(const machine_t *model) { int ret; @@ -1914,11 +1912,13 @@ machine_ps55_model_50t_init(const machine_t* model) ps2.planar_id = 0xffee; ps55_mca_board_model_50t_init(); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); + return ret; } int -machine_ps55_model_50v_init(const machine_t* model) +machine_ps55_model_50v_init(const machine_t *model) { int ret; @@ -1939,5 +1939,7 @@ machine_ps55_model_50v_init(const machine_t* model) ps2.planar_id = 0xf1ff; ps55_mca_board_model_50v_init(); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); + return ret; } diff --git a/src/sio/sio_fdc37c67x.c b/src/sio/sio_fdc37c67x.c index 9b9e40903..61c2cc2cc 100644 --- a/src/sio/sio_fdc37c67x.c +++ b/src/sio/sio_fdc37c67x.c @@ -767,17 +767,17 @@ fdc37c67x_init(const device_t *info) dev->kbc = device_add(&kbc_ps2_compaq_device); break; case FDC37XXX2: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; case FDC37XXX3: default: - dev->kbc = device_add(&kbc_ps2_pci_device); + dev->kbc = device_add(&kbc_ps2_device); break; case FDC37XXX5: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800); break; case FDC37XXX7: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; } diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index d5cd72c67..7088ae39d 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -1922,17 +1922,17 @@ fdc37c93x_init(const device_t *info) dev->kbc = device_add(&kbc_ps2_compaq_device); break; case FDC37XXX2: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; case FDC37XXX3: default: - dev->kbc = device_add(&kbc_ps2_pci_device); + dev->kbc = device_add(&kbc_ps2_device); break; case FDC37XXX5: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800); break; case FDC37XXX7: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; } diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index 1ffa0f16d..f2a6157ef 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -658,17 +658,17 @@ fdc37m60x_init(const device_t *info) dev->kbc = device_add(&kbc_ps2_compaq_device); break; case FDC37XXX2: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; case FDC37XXX3: default: - dev->kbc = device_add(&kbc_ps2_pci_device); + dev->kbc = device_add(&kbc_ps2_device); break; case FDC37XXX5: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800); break; case FDC37XXX7: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; } diff --git a/src/sio/sio_it86x1f.c b/src/sio/sio_it86x1f.c index 4c97f481a..c3eb58bf4 100644 --- a/src/sio/sio_it86x1f.c +++ b/src/sio/sio_it86x1f.c @@ -32,6 +32,7 @@ #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/gameport.h> +#include <86box/keyboard.h> #include <86box/sio.h> #include <86box/isapnp.h> #include <86box/plat_fallthrough.h> @@ -854,6 +855,9 @@ it86x1f_init(UNUSED(const device_t *info)) dev->unlock_id = it86x1f_models[i].unlock_id; io_sethandler(0x279, 1, NULL, NULL, NULL, it86x1f_write_unlock, NULL, NULL, dev); + if (info->local == ITE_IT8671F) + device_add_params(&kbc_ps2_ami_device, (void *) 0x00004800); + it86x1f_reset(dev); return dev; diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 6401a5dd1..3d6e0e250 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -537,13 +537,13 @@ pc87306_init(UNUSED(const device_t *info)) switch (dev->kbc_type) { case PCX730X_AMI: default: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; case PCX730X_PHOENIX_42: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700); break; case PCX730X_PHOENIX_42I: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; } diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index 48c2aeb27..3b6ef39ac 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -902,16 +902,16 @@ pc87307_init(const device_t *info) lpt_set_cnfga_readout(dev->lpt, 0x14); switch (info->local & PCX730X_KBC) { - default: case PCX730X_AMI: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + default: + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; /* Optiplex! */ case PCX730X_PHOENIX_42: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700); break; case PCX730X_PHOENIX_42I: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; } diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index a6e4a5fa3..ad82d02c3 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -737,16 +737,16 @@ pc87309_init(const device_t *info) lpt_set_cnfga_readout(dev->lpt, 0x14); switch (info->local & PCX730X_KBC) { - default: case PCX730X_AMI: - dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); + default: + dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500); break; /* Optiplex! */ case PCX730X_PHOENIX_42: - dev->kbc = device_add(&kbc_ps2_phoenix_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700); break; case PCX730X_PHOENIX_42I: - dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); + dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600); break; }