Round 2 of the clean-ups - AT vs. PS/2 KBC is now decided based on machine flags, reduces the chances of mismatch to zero.

This commit is contained in:
OBattler
2025-08-23 15:05:08 +02:00
parent 5204f44a4a
commit 467b6b8f77
21 changed files with 366 additions and 517 deletions

View File

@@ -167,7 +167,7 @@ sis_5571_init(UNUSED(const device_t *info))
dev->ide = device_add_linked(&sis_5572_ide_device, dev->sis);
dev->usb = device_add_linked(&sis_5572_usb_device, dev->sis);
device_add_params(&kbc_ps2_sis_device, (void *) 0x00000000);
device_add_params(&kbc_at_sis_device, (void *) 0x00000000);
return dev;
}

View File

@@ -167,7 +167,7 @@ sis_5581_init(UNUSED(const device_t *info))
dev->ide = device_add_linked(&sis_5582_ide_device, dev->sis);
dev->usb = device_add_linked(&sis_5582_usb_device, dev->sis);
device_add_params(&kbc_ps2_sis_device, (void *) 0x00000000);
device_add_params(&kbc_at_sis_device, (void *) 0x00000000);
return dev;
}

View File

@@ -179,7 +179,7 @@ sis_5591_init(UNUSED(const device_t *info))
else
dev->pmu = device_add_linked(&sis_5595_pmu_device, dev->sis);
device_add_params(&kbc_ps2_sis_device, (void *) 0x00000000);
device_add_params(&kbc_at_sis_device, (void *) 0x00000000);
return dev;
}

View File

@@ -179,7 +179,7 @@ sis_5600_init(UNUSED(const device_t *info))
else
dev->pmu = device_add_linked(&sis_5595_pmu_device, dev->sis);
device_add_params(&kbc_ps2_sis_device, (void *) 0x00000000);
device_add_params(&kbc_at_sis_device, (void *) 0x00000000);
return dev;
}

View File

@@ -420,8 +420,7 @@ umc_8886_init(const device_t *info)
}
if (machine_get_kbc_device(machine) == NULL)
device_add(machine_has_bus(machine, MACHINE_BUS_PS2) ?
&kbc_ps2_umc_device : &kbc_at_umc_device);
device_add(&kbc_at_umc_device);
umc_8886_reset(dev);

View File

@@ -1803,9 +1803,7 @@ pipc_init(const device_t *info)
}
if (machine_get_kbc_device(machine) == NULL)
device_add_params(machine_has_bus(machine, MACHINE_BUS_PS2) ?
&kbc_ps2_via_device : &kbc_at_via_device,
(void *) (uintptr_t) kbc_params);
device_add_params(&kbc_at_via_device, (void *) (uintptr_t) kbc_params);
return dev;
}

View File

@@ -107,7 +107,9 @@ typedef struct atkbc_t {
uint8_t irq_state;
uint8_t do_irq;
uint8_t is_asic;
uint8_t is_green;
uint8_t kblock_switch;
uint8_t is_type2;
uint8_t mem[0x100];
@@ -242,7 +244,7 @@ kbc_translate(atkbc_t *dev, uint8_t val)
{
int xt_mode = (dev->mem[0x20] & 0x20) && !(dev->misc_flags & FLAG_PS2);
/* The IBM AT keyboard controller firmware does not apply translation in XT mode. */
int translate = !xt_mode && ((dev->mem[0x20] & 0x40) || ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_PS2_2));
int translate = !xt_mode && ((dev->mem[0x20] & 0x40) || (dev->is_type2));
uint8_t kbc_ven = dev->flags & KBC_VEN_MASK;
int ret = - 1;
@@ -885,7 +887,7 @@ write_cmd(atkbc_t *dev, uint8_t val)
kbc_at_log("ATkbc: write command byte: %02X (old: %02X)\n", val, dev->mem[0x20]);
/* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */
if ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_PS2_2) {
if (dev->is_type2) {
val &= ~CCB_TRANSLATE;
dev->mem[0x20] &= ~CCB_TRANSLATE;
} else if (!(dev->misc_flags & FLAG_PS2)) {
@@ -1066,7 +1068,7 @@ write_cmd_ami(void *priv, uint8_t val)
coprlen = strlen(copr) + 1;
break;
case 0x5a:
if ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_GREEN)
if (dev->is_green)
/*
( C ) 1 9 9 0 A M I
But TriGem forgot to reencrypt it.
@@ -2362,7 +2364,7 @@ kbc_at_process_cmd(void *priv)
case 0xaa: /* self-test */
kbc_at_log("ATkbc: self-test\n");
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) {
if (machine_has_flags_ex(MACHINE_PS2_KBC)) {
if (dev->state != STATE_RESET) {
kbc_at_log("ATkbc: self-test reinitialization\n");
/*
@@ -2743,7 +2745,7 @@ kbc_at_port_1_read(uint16_t port, void *priv)
atkbc_t *dev = (atkbc_t *) priv;
uint8_t ret = 0xff;
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1)
if (machine_has_flags_ex(MACHINE_PS2_KBC))
cycles -= ISA_CYCLES(8);
ret = dev->ob;
@@ -2768,7 +2770,7 @@ kbc_at_port_2_read(uint16_t port, void *priv)
atkbc_t *dev = (atkbc_t *) priv;
uint8_t ret = 0xff;
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1)
if (machine_has_flags_ex(MACHINE_PS2_KBC))
cycles -= ISA_CYCLES(8);
ret = dev->status;
@@ -2804,10 +2806,10 @@ kbc_at_reset(void *priv)
dev->sc_or = 0;
dev->ami_flags = ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? 0x01 : 0x00;
dev->ami_flags = (machine_has_flags_ex(MACHINE_PS2_KBC)) ? 0x01 : 0x00;
dev->misc_flags &= FLAG_PCI;
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) {
if (machine_has_flags_ex(MACHINE_PS2_KBC)) {
dev->misc_flags |= FLAG_PS2;
kbc_at_do_poll = kbc_at_poll_ps2;
if (dev->irq[1] != 0xffff)
@@ -2824,7 +2826,7 @@ kbc_at_reset(void *priv)
dev->misc_flags |= FLAG_CACHE;
dev->p2 = 0xcd;
if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) {
if (machine_has_flags_ex(MACHINE_PS2_KBC)) {
write_p2(dev, 0x4b);
} else {
/* The real thing writes CF and then AND's it with BF. */
@@ -2840,7 +2842,7 @@ kbc_at_close(void *priv)
{
atkbc_t *dev = (atkbc_t *) priv;
#ifdef OLD_CODE
int max_ports = ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? 2 : 1;
int max_ports = machine_has_flags_ex(MACHINE_PS2_KBC) ? 2 : 1;
#else
int max_ports = 2;
#endif
@@ -2891,7 +2893,7 @@ kbc_at_set_irq(int num, uint16_t irq, void *priv)
atkbc_t *dev = (atkbc_t *) priv;
if (dev->irq[num] != 0xffff) {
if ((num == 0) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_1))
if ((num == 0) && !machine_has_flags_ex(MACHINE_PS2_KBC))
picintclevel(1 << dev->irq[num], &dev->irq_state);
else
picintc(1 << dev->irq[num]);
@@ -2912,7 +2914,8 @@ kbc_at_init(const device_t *info)
dev->flags = info->local;
dev->is_asic = !!(info->local & KBC_FLAG_IS_ASIC);
dev->is_asic = !!(info->local & KBC_FLAG_IS_ASIC);
dev->is_type2 = !!(info->local & KBC_FLAG_IS_TYPE2);
video_reset(gfxcard[0]);
kbc_at_reset(dev);
@@ -2974,6 +2977,7 @@ kbc_at_init(const device_t *info)
break;
case KBC_VEN_AMI_TRIGEM:
dev->is_green = !!(info->local & KBC_FLAG_IS_GREEN);
kbc_ami_revision = 'Z';
dev->write_cmd_data_ven = write_cmd_data_ami;
dev->write_cmd_ven = write_cmd_ami;
@@ -2981,27 +2985,8 @@ kbc_at_init(const device_t *info)
case KBC_VEN_AMI:
case KBC_VEN_HOLTEK:
kbc_ami_is_clone = !!(info->local & 0x010000);
if ((info->local & 0xff00) != 0x0000)
kbc_ami_revision = (info->local >> 8) & 0xff;
else if ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_GREEN)
kbc_ami_revision = '5';
else if ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) {
if (cpu_64bitbus)
kbc_ami_revision = 'R';
else if (is486)
kbc_ami_revision = 'P';
else
kbc_ami_revision = 'H';
} else if (is386 && !is486) {
if (cpu_16bitbus)
kbc_ami_revision = 'D';
else
kbc_ami_revision = 'B';
} else if (!is386)
kbc_ami_revision = '8';
else
kbc_ami_revision = 'F';
kbc_ami_is_clone = !!(info->local & KBC_FLAG_IS_CLONE);
kbc_ami_revision = (info->local >> 8) & 0xff;
dev->write_cmd_data_ven = write_cmd_data_ami;
dev->write_cmd_ven = write_cmd_ami;
@@ -3051,11 +3036,7 @@ kbc_at_init(const device_t *info)
break;
}
#ifdef OLD_CODE
max_ports = ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? 2 : 1;
#else
max_ports = 2;
#endif
for (int i = 0; i < max_ports; i++) {
kbc_at_ports[i] = (kbc_at_port_t *) calloc(1, sizeof(kbc_at_port_t));
@@ -3068,11 +3049,11 @@ kbc_at_init(const device_t *info)
/* The actual keyboard. */
if (keyboard_type == KEYBOARD_TYPE_INTERNAL) {
if (machine_has_flags(machine, MACHINE_KEYBOARD_JIS))
device_add(((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? &keyboard_ps55_device :
device_add(machine_has_flags_ex(MACHINE_PS2_KBC) ? &keyboard_ps55_device :
&keyboard_ax_device);
else
device_add_params(&keyboard_at_generic_device, (void *) (uintptr_t)
(((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? FLAG_PS2_KBD : 0x00));
(machine_has_flags_ex(MACHINE_PS2_KBC) ? FLAG_PS2_KBD : 0x00));
} else
keyboard_add_device();
@@ -3087,7 +3068,7 @@ const device_t kbc_at_device = {
.name = "PC/AT Keyboard Controller",
.internal_name = "kbc_at",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_GENERIC,
.local = KBC_VEN_GENERIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3097,11 +3078,25 @@ const device_t kbc_at_device = {
.config = NULL
};
const device_t kbc_at_siemens_device = {
.name = "PC/AT Keyboard Controller",
const device_t kbc_at_acer_device = {
.name = "PC/AT Keyboard (Acer 90M002A)",
.internal_name = "keyboard_at_acer",
.flags = DEVICE_KBC,
.local = KBC_VEN_ACER,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_ali_device = {
.name = "PC/AT Keyboard Controller (ALi M5123/M1543C)",
.internal_name = "kbc_at",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_SIEMENS,
.local = KBC_VEN_ALI,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3115,7 +3110,7 @@ const device_t kbc_at_ami_device = {
.name = "PC/AT Keyboard Controller (AMI)",
.internal_name = "kbc_at_ami",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_AMI,
.local = KBC_VEN_AMI,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3125,25 +3120,11 @@ const device_t kbc_at_ami_device = {
.config = NULL
};
const device_t kbc_at_holtek_device = {
.name = "PC/AT Keyboard (Holtek)",
.internal_name = "keyboard_at_holtek",
const device_t kbc_at_ami_tg_device = {
.name = "PC/AT Keyboard Controller (TriGem AMI)",
.internal_name = "kbc_at_ami_tg",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_HOLTEK | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_umc_device = {
.name = "PC/AT Keyboard (UMC)",
.internal_name = "keyboard_at_umc",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_UMC | KBC_FLAG_IS_ASIC,
.local = KBC_VEN_AMI_TRIGEM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3157,7 +3138,7 @@ const device_t kbc_at_award_device = {
.name = "PC/AT Keyboard (Award)",
.internal_name = "keyboard_at_award",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_AWARD,
.local = KBC_VEN_AWARD,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3171,91 +3152,7 @@ const device_t kbc_at_chips_device = {
.name = "PC/AT Keyboard (C&T)",
.internal_name = "keyboard_at_chips",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_CHIPS,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_quadtel_device = {
.name = "PC/AT Keyboard (Quadtel)",
.internal_name = "keyboard_at_quadtel",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_QUADTEL,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_tg_ami_device = {
.name = "PC/AT Keyboard Controller (TriGem AMI)",
.internal_name = "kbc_at_tg_ami",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_AMI_TRIGEM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_toshiba_device = {
.name = "PC/AT Keyboard Controller (Toshiba)",
.internal_name = "kbc_at_toshiba",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_TOSHIBA,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_olivetti_device = {
.name = "PC/AT Keyboard Controller (Olivetti)",
.internal_name = "kbc_at_olivetti",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_OLIVETTI,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_ncr_device = {
.name = "PC/AT Keyboard Controller (NCR)",
.internal_name = "kbc_at_ncr",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_NCR,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_via_device = {
.name = "PC/AT Keyboard (VIA)",
.internal_name = "keyboard_at_via",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_VIA | KBC_FLAG_IS_ASIC,
.local = KBC_VEN_CHIPS,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3269,7 +3166,63 @@ const device_t kbc_at_compaq_device = {
.name = "PC/AT Keyboard Controller (Compaq)",
.internal_name = "kbc_at_compaq",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_COMPAQ,
.local = KBC_VEN_COMPAQ,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_holtek_device = {
.name = "PC/AT Keyboard (Holtek)",
.internal_name = "keyboard_at_holtek",
.flags = DEVICE_KBC,
.local = KBC_VEN_HOLTEK | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_ibm_mca_device = {
.name = "PC/AT Keyboard Controller (IBM PS/2 MCA)",
.internal_name = "kbc_at_ibm_mca",
.flags = DEVICE_KBC,
.local = KBC_VEN_IBM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_ncr_device = {
.name = "PC/AT Keyboard Controller (NCR)",
.internal_name = "kbc_at_ncr",
.flags = DEVICE_KBC,
.local = KBC_VEN_NCR,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_at_olivetti_device = {
.name = "PC/AT Keyboard Controller (Olivetti)",
.internal_name = "kbc_at_olivetti",
.flags = DEVICE_KBC,
.local = KBC_VEN_OLIVETTI,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3283,7 +3236,7 @@ const device_t kbc_at_phoenix_device = {
.name = "PC/AT Keyboard Controller (Phoenix)",
.internal_name = "kbc_at_phoenix",
.flags = DEVICE_KBC,
.local = KBC_TYPE_ISA | KBC_VEN_PHOENIX,
.local = KBC_VEN_PHOENIX,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3293,11 +3246,11 @@ const device_t kbc_at_phoenix_device = {
.config = NULL
};
const device_t kbc_ps2_device = {
.name = "PS/2 Keyboard Controller",
.internal_name = "kbc_ps2",
const device_t kbc_at_quadtel_device = {
.name = "PC/AT Keyboard (Quadtel)",
.internal_name = "keyboard_at_quadtel",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_GENERIC,
.local = KBC_VEN_QUADTEL,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3307,11 +3260,11 @@ const device_t kbc_ps2_device = {
.config = NULL
};
const device_t kbc_ps2_xi8088_device = {
.name = "PS/2 Keyboard Controller (Xi8088)",
.internal_name = "kbc_ps2_xi8088",
const device_t kbc_at_siemens_device = {
.name = "PC/AT Keyboard Controller",
.internal_name = "kbc_at_siemens",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_GENERIC,
.local = KBC_VEN_SIEMENS,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3321,11 +3274,11 @@ const device_t kbc_ps2_xi8088_device = {
.config = NULL
};
const device_t kbc_ps2_acer_device = {
.name = "PS/2 Keyboard (Acer 90M002A)",
.internal_name = "keyboard_ps2_acer_pci",
const device_t kbc_at_sis_device = {
.name = "PC/AT Keyboard Controller (SiS 5xxx)",
.internal_name = "kbc_at_sis",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_ACER,
.local = KBC_VEN_SIS,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3335,11 +3288,11 @@ const device_t kbc_ps2_acer_device = {
.config = NULL
};
const device_t kbc_ps2_ami_device = {
.name = "PS/2 Keyboard Controller (AMI)",
.internal_name = "kbc_ps2_ami",
const device_t kbc_at_toshiba_device = {
.name = "PC/AT Keyboard Controller (Toshiba)",
.internal_name = "kbc_at_toshiba",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_AMI,
.local = KBC_VEN_TOSHIBA,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3349,11 +3302,11 @@ const device_t kbc_ps2_ami_device = {
.config = NULL
};
const device_t kbc_ps2_compaq_device = {
.name = "PS/2 Keyboard Controller (Compaq)",
.internal_name = "kbc_at_compaq",
const device_t kbc_at_umc_device = {
.name = "PC/AT Keyboard (UMC)",
.internal_name = "keyboard_at_umc",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_COMPAQ,
.local = KBC_VEN_UMC | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3363,11 +3316,11 @@ const device_t kbc_ps2_compaq_device = {
.config = NULL
};
const device_t kbc_ps2_holtek_device = {
.name = "PS/2 Keyboard Controller (Holtek)",
.internal_name = "kbc_ps2_holtek",
const device_t kbc_at_via_device = {
.name = "PC/AT Keyboard (VIA)",
.internal_name = "keyboard_at_via",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_HOLTEK | KBC_FLAG_IS_ASIC,
.local = KBC_VEN_VIA | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
@@ -3377,138 +3330,11 @@ const device_t kbc_ps2_holtek_device = {
.config = NULL
};
const device_t kbc_ps2_umc_device = {
.name = "PS/2 Keyboard (UMC)",
.internal_name = "keyboard_ps2_umc",
const device_t kbc_at_xi8088_device = {
.name = "PC/AT Keyboard Controller (Xi8088)",
.internal_name = "kbc_at_xi8088",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_UMC | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_award_device = {
.name = "PS/2 Keyboard (Award)",
.internal_name = "keyboard_ps2_award",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_AWARD,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_via_device = {
.name = "PS/2 Keyboard (VIA)",
.internal_name = "keyboard_ps2_via",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_VIA | KBC_FLAG_IS_ASIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_phoenix_device = {
.name = "PS/2 Keyboard Controller (Phoenix)",
.internal_name = "kbc_ps2_phoenix",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_PHOENIX,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_tg_ami_device = {
.name = "PS/2 Keyboard Controller (TriGem AMI)",
.internal_name = "kbc_ps2_tg_ami",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_AMI_TRIGEM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_mca_1_device = {
.name = "PS/2 Keyboard Controller (IBM PS/2 MCA Type 1)",
.internal_name = "kbc_ps2_mca_1",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_IBM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_mca_2_device = {
.name = "PS/2 Keyboard Controller (IBM PS/2 MCA Type 2)",
.internal_name = "kbc_ps2_mca_2",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_2 | KBC_VEN_IBM,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_quadtel_device = {
.name = "PS/2 Keyboard Controller (Quadtel/MegaPC)",
.internal_name = "kbc_ps2_quadtel",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_QUADTEL,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_sis_device = {
.name = "PS/2 Keyboard Controller (SiS 5xxx)",
.internal_name = "kbc_ps2_sis",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_SIS,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t kbc_ps2_ali_device = {
.name = "PS/2 Keyboard Controller (ALi M5123/M1543C)",
.internal_name = "kbc_ps2_ali_pci",
.flags = DEVICE_KBC,
.local = KBC_TYPE_PS2_1 | KBC_VEN_ALI,
.local = KBC_VEN_GENERIC,
.init = kbc_at_init,
.close = kbc_at_close,
.reset = kbc_at_reset,

View File

@@ -129,34 +129,35 @@ typedef struct scancode {
#define RSHIFT_ON 0x104
#define RSHIFT_OFF 0x105
#define KBC_TYPE_ISA 0x00 /* AT ISA-based chips */
#define KBC_TYPE_PS2_1 0x01 /* PS2 on PS/2, type 1 */
#define KBC_TYPE_PS2_2 0x02 /* PS2 on PS/2, type 2 */
#define KBC_TYPE_GREEN 0x03 /* PS2 green controller */
#define KBC_TYPE_MASK 0x03
#define KBC_TYPE_AT 0x00 /* AT */
#define KBC_TYPE_PS2 0x01 /* PS2 on PS/2, type 1 */
#define KBC_TYPE_MASK 0x01
#define KBC_VEN_GENERIC 0x00
#define KBC_VEN_ACER 0x04
#define KBC_VEN_ALI 0x08
#define KBC_VEN_AMI 0x0c
#define KBC_VEN_AMI_TRIGEM 0x10
#define KBC_VEN_AWARD 0x14
#define KBC_VEN_CHIPS 0x18
#define KBC_VEN_COMPAQ 0x1c
#define KBC_VEN_HOLTEK 0x20
#define KBC_VEN_IBM 0x24
#define KBC_VEN_NCR 0x28
#define KBC_VEN_OLIVETTI 0x2c
#define KBC_VEN_QUADTEL 0x30
#define KBC_VEN_PHOENIX 0x34
#define KBC_VEN_SIEMENS 0x38
#define KBC_VEN_TOSHIBA 0x3c
#define KBC_VEN_VIA 0x40
#define KBC_VEN_UMC 0x44
#define KBC_VEN_SIS 0x48
#define KBC_VEN_MASK 0x7c
#define KBC_VEN_ACER 0x02
#define KBC_VEN_ALI 0x04
#define KBC_VEN_AMI 0x06
#define KBC_VEN_AMI_TRIGEM 0x08
#define KBC_VEN_AWARD 0x0a
#define KBC_VEN_CHIPS 0x0c
#define KBC_VEN_COMPAQ 0x0e
#define KBC_VEN_HOLTEK 0x10
#define KBC_VEN_IBM 0x12
#define KBC_VEN_NCR 0x14
#define KBC_VEN_OLIVETTI 0x16
#define KBC_VEN_QUADTEL 0x18
#define KBC_VEN_PHOENIX 0x1a
#define KBC_VEN_SIEMENS 0x1c
#define KBC_VEN_TOSHIBA 0x1e
#define KBC_VEN_VIA 0x20
#define KBC_VEN_UMC 0x22
#define KBC_VEN_SIS 0x24
#define KBC_VEN_MASK 0x3e
#define KBC_FLAG_IS_ASIC 0x80000000
#define KBC_FLAG_IS_CLONE 0x40000000
#define KBC_FLAG_IS_GREEN 0x20000000
#define KBC_FLAG_IS_TYPE2 0x10000000
#ifdef __cplusplus
extern "C" {
@@ -202,39 +203,25 @@ extern const device_t kbc_xt_fe2010_device;
extern const device_t kbc_xtclone_device;
extern const device_t kbc_at_device;
extern const device_t kbc_at_acer_device;
extern const device_t kbc_at_ali_device;
extern const device_t kbc_at_ami_device;
extern const device_t kbc_at_ami_tg_device;
extern const device_t kbc_at_award_device;
extern const device_t kbc_at_chips_device;
extern const device_t kbc_at_compaq_device;
extern const device_t kbc_at_holtek_device;
extern const device_t kbc_at_ibm_mca_device;
extern const device_t kbc_at_ncr_device;
extern const device_t kbc_at_olivetti_device;
extern const device_t kbc_at_phoenix_device;
extern const device_t kbc_at_quadtel_device;
extern const device_t kbc_at_siemens_device;
extern const device_t kbc_at_tg_ami_device;
extern const device_t kbc_at_sis_device;
extern const device_t kbc_at_toshiba_device;
extern const device_t kbc_at_umc_device;
extern const device_t kbc_at_via_device;
extern const device_t kbc_ps2_device;
extern const device_t kbc_ps2_acer_device;
extern const device_t kbc_ps2_ali_device;
extern const device_t kbc_ps2_ami_device;
extern const device_t kbc_ps2_award_device;
extern const device_t kbc_ps2_compaq_device;
extern const device_t kbc_ps2_holtek_device;
extern const device_t kbc_ps2_mca_1_device;
extern const device_t kbc_ps2_mca_2_device;
extern const device_t kbc_ps2_olivetti_device;
extern const device_t kbc_ps2_phoenix_device;
extern const device_t kbc_ps2_quadtel_device;
extern const device_t kbc_ps2_sis_device;
extern const device_t kbc_ps2_umc_device;
extern const device_t kbc_ps2_via_device;
extern const device_t kbc_ps2_tg_ami_device;
extern const device_t kbc_ps2_tg_ami_green_device;
extern const device_t kbc_ps2_xi8088_device;
extern const device_t kbc_at_xi8088_device;
extern const device_t keyboard_pc_xt_device;
extern const device_t keyboard_at_device;

View File

@@ -409,6 +409,9 @@ extern const char * machine_get_internal_name_ex(int m);
extern const char * machine_get_nvr_name_ex(int m);
extern int machine_get_nvrmask(int m);
extern int machine_has_flags(int m, int flags);
extern void machine_set_ps2(void);
extern void machine_force_ps2(int is_ps2);
extern int machine_has_flags_ex(int flags);
extern int machine_has_bus(int m, int bus_flags);
extern int machine_has_cartridge(int m);
extern int machine_has_jumpered_ecp_dma(int m, int dma);

View File

@@ -1398,9 +1398,10 @@ machine_at_hot433a_init(const machine_t *model)
device_add_params(&um8669f_device, (void *) 0);
device_add(&winbond_flash_w29c010_device);
if (is_award)
device_add_params(&kbc_ps2_holtek_device, (void *) model->kbc_params);
machine_force_ps2(1);
else
device_add_params(&kbc_at_holtek_device, (void *) model->kbc_params);
machine_force_ps2(0);
device_add_params(&kbc_at_holtek_device, (void *) model->kbc_params);
pic_toggle_latch(is_award);

View File

@@ -139,6 +139,9 @@ void
machine_init(void)
{
bios_only = 0;
machine_set_ps2();
(void) machine_init_ex(machine);
}

File diff suppressed because it is too large Load Diff

View File

@@ -530,7 +530,7 @@ ali5123_init(const device_t *info)
io_sethandler(FDC_PRIMARY_ADDR, 0x0002,
ali5123_read, NULL, NULL, ali5123_write, NULL, NULL, dev);
device_add(&kbc_ps2_ali_device);
device_add(&kbc_at_ali_device);
return dev;
}

View File

@@ -764,20 +764,20 @@ fdc37c67x_init(const device_t *info)
switch (dev->kbc_type) {
case FDC37XXX1:
dev->kbc = device_add(&kbc_ps2_compaq_device);
dev->kbc = device_add(&kbc_at_compaq_device);
break;
case FDC37XXX2:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
case FDC37XXX3:
default:
dev->kbc = device_add(&kbc_ps2_device);
dev->kbc = device_add(&kbc_at_device);
break;
case FDC37XXX5:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013800);
break;
case FDC37XXX7:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -1919,20 +1919,20 @@ fdc37c93x_init(const device_t *info)
switch (dev->kbc_type) {
case FDC37XXX1:
dev->kbc = device_add(&kbc_ps2_compaq_device);
dev->kbc = device_add(&kbc_at_compaq_device);
break;
case FDC37XXX2:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
case FDC37XXX3:
default:
dev->kbc = device_add(&kbc_ps2_device);
dev->kbc = device_add(&kbc_at_device);
break;
case FDC37XXX5:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013800);
break;
case FDC37XXX7:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -655,20 +655,20 @@ fdc37m60x_init(const device_t *info)
switch (dev->kbc_type) {
case FDC37XXX1:
dev->kbc = device_add(&kbc_ps2_compaq_device);
dev->kbc = device_add(&kbc_at_compaq_device);
break;
case FDC37XXX2:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
case FDC37XXX3:
default:
dev->kbc = device_add(&kbc_ps2_device);
dev->kbc = device_add(&kbc_at_device);
break;
case FDC37XXX5:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013800);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013800);
break;
case FDC37XXX7:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -856,7 +856,7 @@ it86x1f_init(UNUSED(const device_t *info))
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);
device_add_params(&kbc_at_ami_device, (void *) 0x00004800);
it86x1f_reset(dev);

View File

@@ -537,13 +537,13 @@ pc87306_init(UNUSED(const device_t *info))
switch (dev->kbc_type) {
case PCX730X_AMI:
default:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
case PCX730X_PHOENIX_42:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013700);
break;
case PCX730X_PHOENIX_42I:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -904,14 +904,14 @@ pc87307_init(const device_t *info)
switch (info->local & PCX730X_KBC) {
case PCX730X_AMI:
default:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
/* Optiplex! */
case PCX730X_PHOENIX_42:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013700);
break;
case PCX730X_PHOENIX_42I:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -739,14 +739,14 @@ pc87309_init(const device_t *info)
switch (info->local & PCX730X_KBC) {
case PCX730X_AMI:
default:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00003500);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00003500);
break;
/* Optiplex! */
case PCX730X_PHOENIX_42:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00013700);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00013700);
break;
case PCX730X_PHOENIX_42I:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041600);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041600);
break;
}

View File

@@ -1294,10 +1294,10 @@ w83977_init(const device_t *info)
switch (dev->kbc_type) {
case W83977_AMI:
dev->kbc = device_add_params(&kbc_ps2_ami_device, (void *) 0x00004800);
dev->kbc = device_add_params(&kbc_at_ami_device, (void *) 0x00004800);
break;
case W83977_PHOENIX:
dev->kbc = device_add_params(&kbc_ps2_phoenix_device, (void *) 0x00041900);
dev->kbc = device_add_params(&kbc_at_phoenix_device, (void *) 0x00041900);
break;
}