VIA PIPC keyboard controllers.

This commit is contained in:
OBattler
2025-08-23 01:58:00 +02:00
parent efe3e46058
commit d4c9bc87e3

View File

@@ -43,6 +43,7 @@
#include <86box/hdc.h>
#include <86box/hdc_ide.h>
#include <86box/hdc_ide_sff8038i.h>
#include <86box/keyboard.h>
#include <86box/usb.h>
#include <86box/machine.h>
#include <86box/smbus.h>
@@ -1774,6 +1775,38 @@ pipc_init(const device_t *info)
acpi_set_irq_mode(dev->acpi, 0);
}
uint32_t kbc_params = 0x00004200;
/*
NOTE: The VIA VT82C42N returns 0x46 ('F') in command 0xA1 (so it
emulates the AMI KF/AMIKey KBC firmware), and 0x42 ('B') in
command 0xAF.
The version on the VIA VT82C686B southbridge also returns
'F' in command 0xA1, but 0x45 ('E') in command 0xAF.
The version on the VIA VT82C586B southbridge also returns
'F' in command 0xA1, but 0x44 ('D') in command 0xAF.
The version on the VIA VT82C586A southbridge also returns
'F' in command 0xA1, but 0x43 ('C') in command 0xAF.
*/
switch (dev->local) {
/* 596A, 596B, 686B, and 8231 are guesses because we have no probes yet. */
case VIA_PIPC_586A: case VIA_PIPC_596A:
kbc_params = 0x00004300;
break;
case VIA_PIPC_586B: case VIA_PIPC_596B:
kbc_params = 0x00004400;
break;
case VIA_PIPC_686A: case VIA_PIPC_686B:
case VIA_PIPC_8231:
kbc_params = 0x00004500;
break;
}
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);
return dev;
}