KBC: Move almost all remaining global variables to the kbc struct and fix some incorrect ='s to =='s.

This commit is contained in:
OBattler
2025-12-14 20:39:23 +01:00
parent a1b1515661
commit 631c1e6825

View File

@@ -65,7 +65,6 @@
#define FLAG_CLOCK 0x01
#define FLAG_CACHE 0x02
#define FLAG_PS2 0x04
#define FLAG_PCI 0x08
enum {
STATE_RESET = 0, /* KBC reset state, only accepts command AA. */
@@ -110,6 +109,11 @@ typedef struct atkbc_t {
uint8_t is_green;
uint8_t kblock_switch;
uint8_t is_type2;
uint8_t ami_revision;
uint8_t ami_is_amikey_2;
uint8_t ami_is_megakey;
uint8_t award_revision;
uint8_t chips_revision;
uint8_t mem[0x100];
@@ -118,6 +122,8 @@ typedef struct atkbc_t {
uint8_t handler_enable[2];
uint16_t phoenix_revision;
uint16_t base_addr[2];
uint16_t irq[2];
@@ -145,15 +151,6 @@ typedef struct atkbc_t {
/* Keyboard controller ports. */
kbc_at_port_t *kbc_at_ports[2] = { NULL, NULL };
static uint8_t kbc_ami_revision = '8';
static uint8_t kbc_ami_is_clone = 0;
static uint8_t kbc_award_revision = 0x42;
static uint8_t kbc_chips_revision = 0xa6;
static uint16_t kbc_phoenix_version = 0x0416;
static void (*kbc_at_do_poll)(atkbc_t *dev);
/* Non-translated to translated scan codes. */
@@ -1044,7 +1041,7 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xa0: /* copyright message */
switch (kbc_ami_revision) {
switch (dev->ami_revision) {
case 0x35:
copr = "(C)1994 AMI";
coprlen = strlen(copr) + 1;
@@ -1088,7 +1085,7 @@ write_cmd_ami(void *priv, uint8_t val)
case 0xa1: /* get controller version */
kbc_at_log("ATkbc: AMI - get controller version\n");
kbc_delay_to_ob(dev, kbc_ami_revision, 0, 0x00);
kbc_delay_to_ob(dev, dev->ami_revision, 0, 0x00);
ret = 0;
break;
@@ -1160,8 +1157,7 @@ write_cmd_ami(void *priv, uint8_t val)
case 0xaf: /* set extended controller RAM */
if ((kbc_ven != KBC_VEN_SIEMENS) && (kbc_ven != KBC_VEN_ALI)) {
if (((kbc_ami_revision >= 'H') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
if (dev->ami_is_amikey_2) {
kbc_at_log("ATkbc: set extended controller RAM\n");
dev->wantdata = 1;
dev->state = STATE_KBC_PARAM;
@@ -1224,8 +1220,7 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xc4:
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
if (dev->ami_is_megakey) {
/* set KBC line P14 low */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) low\n");
dev->p1 &= 0xef;
@@ -1235,8 +1230,7 @@ write_cmd_ami(void *priv, uint8_t val)
}
break;
case 0xc5:
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
if (dev->ami_is_megakey) {
/* set KBC line P15 low */
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) low\n");
dev->p1 &= 0xdf;
@@ -1280,8 +1274,7 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xcc:
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
if (dev->ami_is_megakey) {
/* set KBC line P14 high */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) high\n");
dev->p1 |= 0x10;
@@ -1292,8 +1285,7 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xcd:
/* set KBC line P15 high */
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
if (dev->ami_is_megakey) {
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) high\n");
dev->p1 |= 0x20;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
@@ -1512,7 +1504,7 @@ write_cmd_umc(void *priv, uint8_t val)
case 0xa1: /* get controller version */
kbc_at_log("ATkbc: UMC - get controller version\n");
kbc_delay_to_ob(dev, kbc_ami_revision, 0, 0x00);
kbc_delay_to_ob(dev, dev->ami_revision, 0, 0x00);
ret = 0;
break;
}
@@ -1567,7 +1559,7 @@ write_cmd_award(void *priv, uint8_t val)
case 0xa1: /* get controller version */
kbc_at_log("ATkbc: AMI - get controller version\n");
kbc_delay_to_ob(dev, kbc_ami_revision, 0, 0x00);
kbc_delay_to_ob(dev, dev->ami_revision, 0, 0x00);
ret = 0;
break;
@@ -1587,7 +1579,7 @@ write_cmd_award(void *priv, uint8_t val)
in Norton Commander 3.0. */
case 0xaf: /* read keyboard version */
kbc_at_log("ATkbc: read keyboard version\n");
kbc_delay_to_ob(dev, kbc_award_revision, 0, 0x00);
kbc_delay_to_ob(dev, dev->award_revision, 0, 0x00);
ret = 0;
break;
@@ -1701,7 +1693,7 @@ write_cmd_data_chips(void *priv, uint8_t val)
break;
case 0x00: /* return ID */
kbc_at_log("ATkbc: C&T - return ID\n");
kbc_delay_to_ob(dev, kbc_chips_revision, 0, 0x00);
kbc_delay_to_ob(dev, dev->chips_revision, 0, 0x00);
break;
case 0x02: /* write input port */
kbc_at_log("ATkbc: C&T - write input port\n");
@@ -1967,8 +1959,8 @@ write_cmd_phoenix(void *priv, uint8_t val)
revision level and proper CPU bits. */
case 0xd5: /* Read MultiKey code revision level */
kbc_at_log("ATkbc: Phoenix - Read MultiKey code revision level\n");
kbc_at_queue_add(dev, kbc_phoenix_version >> 8);
kbc_at_queue_add(dev, kbc_phoenix_version & 0xff);
kbc_at_queue_add(dev, dev->phoenix_revision >> 8);
kbc_at_queue_add(dev, dev->phoenix_revision & 0xff);
ret = 0;
break;
@@ -2810,7 +2802,6 @@ kbc_at_reset(void *priv)
dev->sc_or = 0;
dev->ami_flags = (machine_has_flags_ex(MACHINE_PS2_KBC)) ? 0x01 : 0x00;
dev->misc_flags &= FLAG_PCI;
if (machine_has_flags_ex(MACHINE_PS2_KBC)) {
dev->misc_flags |= FLAG_PS2;
@@ -2923,9 +2914,6 @@ kbc_at_init(const device_t *info)
video_reset(gfxcard[0]);
kbc_at_reset(dev);
if (info->flags & DEVICE_PCI)
dev->misc_flags |= FLAG_PCI;
dev->handlers[0].read = kbc_at_port_1_read;
dev->handlers[0].write = kbc_at_port_1_write;
dev->handlers[1].read = kbc_at_port_2_read;
@@ -2942,12 +2930,13 @@ kbc_at_init(const device_t *info)
dev->write_cmd_data_ven = NULL;
dev->write_cmd_ven = NULL;
kbc_ami_revision = '8';
kbc_award_revision = 0x42;
dev->ami_revision = '8';
kbc_chips_revision = 0xa6;
dev->award_revision = 0x42;
kbc_phoenix_version = 0x0416;
dev->chips_revision = 0xa6;
dev->phoenix_revision = 0x0416;
switch (dev->flags & KBC_VEN_MASK) {
default:
@@ -2957,9 +2946,9 @@ kbc_at_init(const device_t *info)
case KBC_VEN_AWARD:
case KBC_VEN_VIA:
if ((info->local & 0xff00) != 0x0000)
kbc_ami_revision = (info->local >> 8) & 0xff;
dev->ami_revision = (info->local >> 8) & 0xff;
if ((info->local & 0xff0000) != 0x000000)
kbc_award_revision = (info->local >> 16) & 0xff;
dev->award_revision = (info->local >> 16) & 0xff;
dev->write_cmd_data_ven = write_cmd_data_award;
dev->write_cmd_ven = write_cmd_award;
break;
@@ -2973,23 +2962,22 @@ kbc_at_init(const device_t *info)
break;
case KBC_VEN_ALI:
kbc_ami_revision = 'F';
kbc_award_revision = 0x43;
dev->ami_revision = 'F';
dev->award_revision = 0x43;
dev->write_cmd_data_ven = write_cmd_data_ami;
dev->write_cmd_ven = write_cmd_ami;
break;
case KBC_VEN_AMI_TRIGEM:
dev->is_green = !!(info->local & KBC_FLAG_IS_GREEN);
kbc_ami_revision = 'Z';
dev->ami_revision = 'Z';
dev->write_cmd_data_ven = write_cmd_data_ami;
dev->write_cmd_ven = write_cmd_ami;
break;
case KBC_VEN_AMI:
case KBC_VEN_HOLTEK:
kbc_ami_is_clone = !!(info->local & KBC_FLAG_IS_CLONE);
kbc_ami_revision = (info->local >> 8) & 0xff;
dev->ami_revision = (info->local >> 8) & 0xff;
dev->write_cmd_data_ven = write_cmd_data_ami;
dev->write_cmd_ven = write_cmd_ami;
@@ -2997,18 +2985,18 @@ kbc_at_init(const device_t *info)
case KBC_VEN_UMC:
if ((info->local & 0xff00) != 0x0000)
kbc_ami_revision = (info->local >> 8) & 0xff;
dev->ami_revision = (info->local >> 8) & 0xff;
else
kbc_ami_revision = 0x48;
dev->ami_revision = 0x48;
dev->write_cmd_ven = write_cmd_umc;
break;
case KBC_VEN_SIS:
if ((info->local & 0xff00) != 0x0000)
kbc_ami_revision = (info->local >> 8) & 0xff;
dev->ami_revision = (info->local >> 8) & 0xff;
else
kbc_ami_revision = 0x48;
dev->ami_revision = 0x48;
dev->write_cmd_data_ven = write_cmd_data_sis;
dev->write_cmd_ven = write_cmd_sis;
@@ -3016,14 +3004,14 @@ kbc_at_init(const device_t *info)
case KBC_VEN_CHIPS:
if ((info->local & 0xff00) != 0x0000)
kbc_chips_revision = (info->local >> 8) & 0xff;
dev->chips_revision = (info->local >> 8) & 0xff;
dev->write_cmd_data_ven = write_cmd_data_chips;
dev->write_cmd_ven = write_cmd_chips;
break;
case KBC_VEN_PHOENIX:
if ((info->local & 0xffff00) != 0x000000)
kbc_phoenix_version = (info->local >> 8) & 0xffff;
dev->phoenix_revision = (info->local >> 8) & 0xffff;
dev->write_cmd_data_ven = write_cmd_data_phoenix;
dev->write_cmd_ven = write_cmd_phoenix;
break;
@@ -3039,6 +3027,11 @@ kbc_at_init(const device_t *info)
break;
}
dev->ami_is_amikey_2 = ((dev->ami_revision >= 'H') && (dev->ami_revision < 'X')) ||
(dev->ami_revision == '5');
dev->ami_is_megakey = ((dev->ami_revision >= 'P') && (dev->ami_revision < 'X')) ||
(dev->ami_revision == '5');
max_ports = 2;
for (int i = 0; i < max_ports; i++) {