Added the option to force constant mouse updating.
This commit is contained in:
@@ -82,6 +82,11 @@
|
||||
#define KBC_VEN_SIEMENS 0x2c
|
||||
#define KBC_VEN_COMPAQ 0x30
|
||||
#define KBC_VEN_IBM 0x34
|
||||
#define KBC_VEN_AWARD 0x38
|
||||
#define KBC_VEN_VIA 0x3c
|
||||
#define KBC_VEN_CHIPS 0x40
|
||||
#define KBC_VEN_HOLTEK 0x44
|
||||
#define KBC_VEN_UMC 0x48
|
||||
#define KBC_VEN_MASK 0x7c
|
||||
|
||||
#define KBC_FLAG_IS_ASIC 0x80000000
|
||||
@@ -167,8 +172,12 @@ 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_award_revision = 0x42;
|
||||
static uint8_t kbc_ami_revision = '8';
|
||||
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);
|
||||
|
||||
@@ -391,6 +400,7 @@ kbc_send_to_ob(atkbc_t *dev, uint8_t val, uint8_t channel, uint8_t stat_hi)
|
||||
return;
|
||||
|
||||
if ((kbc_ven == KBC_VEN_AMI) || (kbc_ven == KBC_VEN_TRIGEM_AMI) ||
|
||||
(kbc_ven == KBC_VEN_HOLTEK) || (kbc_ven == KBC_VEN_UMC) ||
|
||||
(dev->misc_flags & FLAG_PS2))
|
||||
stat_hi |= ((dev->p1 & 0x80) ? 0x10 : 0x00);
|
||||
else
|
||||
@@ -945,6 +955,26 @@ pulse_poll(void *priv)
|
||||
write_p2(dev, dev->p2 | dev->old_p2);
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_acer(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0xaf:
|
||||
kbc_at_log("ATkbc: ??? - appears in the probes of the real controller\n");
|
||||
kbc_delay_to_ob(dev, 0x00, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_data_ami(void *priv, uint8_t val)
|
||||
{
|
||||
@@ -1001,7 +1031,7 @@ write_cmd_data_ami(void *priv, uint8_t val)
|
||||
void
|
||||
kbc_at_set_ps2(void *priv, const uint8_t ps2)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
|
||||
dev->ami_flags = (dev->ami_flags & 0xfe) | (!!ps2);
|
||||
dev->misc_flags &= ~FLAG_PS2;
|
||||
@@ -1216,6 +1246,12 @@ write_cmd_ami(void *priv, uint8_t val)
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xca: /* read keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - read keyboard mode\n");
|
||||
kbc_delay_to_ob(dev, dev->ami_flags, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xcb: /* set keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - set keyboard mode\n");
|
||||
dev->wantdata = 1;
|
||||
@@ -1250,11 +1286,283 @@ write_cmd_ami(void *priv, uint8_t val)
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_data_phoenix(void *priv, uint8_t val)
|
||||
write_cmd_umc(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0xa0: /* copyright message */
|
||||
kbc_at_queue_add(dev, 0x28);
|
||||
kbc_at_queue_add(dev, 0x28);
|
||||
kbc_at_queue_add(dev, 0x28);
|
||||
kbc_at_queue_add(dev, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xa1: /* get controller version */
|
||||
kbc_at_log("ATkbc: UMC - get controller version\n");
|
||||
kbc_delay_to_ob(dev, kbc_ami_revision, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_data_award(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0xcb: /* set keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - set keyboard mode\n");
|
||||
dev->ami_flags = val;
|
||||
dev->misc_flags &= ~FLAG_PS2;
|
||||
if (val & 0x01) {
|
||||
kbc_at_log("ATkbc: AMI: Emulate PS/2 keyboard\n");
|
||||
dev->misc_flags |= FLAG_PS2;
|
||||
kbc_at_do_poll = kbc_at_poll_ps2;
|
||||
} else {
|
||||
kbc_at_log("ATkbc: AMI: Emulate AT keyboard\n");
|
||||
kbc_at_do_poll = kbc_at_poll_at;
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_award(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0x90 ... 0x9f: /* Write low nibble to (Port13-Port10) */
|
||||
kbc_at_log("ATkbc: Award - write low nibble to (Port13-Port10)\n");
|
||||
dev->p1 = (dev->p1 & 0xf0) | (val & 0x0f);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xa1: /* get controller version */
|
||||
kbc_at_log("ATkbc: AMI - get controller version\n");
|
||||
kbc_delay_to_ob(dev, kbc_ami_revision, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xa4: /* check if password installed */
|
||||
kbc_at_log("ATkbc: check if password installed\n");
|
||||
kbc_delay_to_ob(dev, 0xf1, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xa5: /* do nothing */
|
||||
kbc_at_log("ATkbc: do nothing\n");
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
/* TODO: Make this command do nothing on the Regional HT6542,
|
||||
or else, Efflixi's Award OPTi 495 BIOS gets a stuck key
|
||||
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);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xb0 ... 0xb3:
|
||||
/* set KBC lines P10-P13 (P1 bits 0-3) low */
|
||||
kbc_at_log("ATkbc: set KBC lines P10-P13 (P1 bits 0-3) low\n");
|
||||
dev->p1 &= ~(1 << (val & 0x03));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
/* TODO: The ICS SB486PV sends command B4 but expects to read *TWO* bytes. */
|
||||
case 0xb4: case 0xb5:
|
||||
/* set KBC lines P22-P23 (P2 bits 2-3) low */
|
||||
kbc_at_log("ATkbc: set KBC lines P22-P23 (P2 bits 2-3) low\n");
|
||||
write_p2(dev, dev->p2 & ~(4 << (val & 0x01)));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xb6 ... 0xb7:
|
||||
/* set KBC lines P14-P15 (P1 bits 4-5) low */
|
||||
kbc_at_log("ATkbc: set KBC lines P14-P15 (P1 bits 4-5) low\n");
|
||||
dev->p1 &= ~(0x10 << (val & 0x01));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xb8 ... 0xbb:
|
||||
/* set KBC lines P10-P13 (P1 bits 0-3) high */
|
||||
kbc_at_log("ATkbc: set KBC lines P10-P13 (P1 bits 0-3) high\n");
|
||||
dev->p1 |= (1 << (val & 0x03));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xbc: case 0xbd:
|
||||
/* set KBC lines P22-P23 (P2 bits 2-3) high */
|
||||
kbc_at_log("ATkbc: set KBC lines P22-P23 (P2 bits 2-3) high\n");
|
||||
write_p2(dev, dev->p2 | (4 << (val & 0x01)));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xbe ... 0xbf:
|
||||
/* set KBC lines P14-P15 (P1 bits 4-5) high */
|
||||
kbc_at_log("ATkbc: set KBC lines P14-P15 (P1 bits 4-5) high\n");
|
||||
dev->p1 |= (0x10 << (val & 0x01));
|
||||
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xc8:
|
||||
/*
|
||||
* unblock KBC lines P22/P23
|
||||
* (allow command D1 to change bits 2/3 of P2)
|
||||
*/
|
||||
kbc_at_log("ATkbc: AMI - unblock KBC lines P22 and P23\n");
|
||||
dev->ami_flags &= 0xfb;
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xc9:
|
||||
/*
|
||||
* block KBC lines P22/P23
|
||||
* (disallow command D1 from changing bits 2/3 of the port)
|
||||
*/
|
||||
kbc_at_log("ATkbc: AMI - block KBC lines P22 and P23\n");
|
||||
dev->ami_flags |= 0x04;
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xca: /* read keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - read keyboard mode\n");
|
||||
kbc_delay_to_ob(dev, dev->ami_flags, 0, 0x00);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xcb: /* set keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - set keyboard mode\n");
|
||||
dev->wantdata = 1;
|
||||
dev->state = STATE_KBC_PARAM;
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xe1 ... 0xef: /* Active output ports */
|
||||
kbc_at_log("ATkbc: Award - active output ports\n");
|
||||
write_p2(dev, (dev->p2 & 0xf1) | (val & 0x0e));
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_data_chips(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0xa1: /* CHIPS extensions */
|
||||
kbc_at_log("ATkbc: C&T - CHIPS extensions\n");
|
||||
if (dev->command_phase == 1) {
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
case 0x00: /* return ID */
|
||||
kbc_at_log("ATkbc: C&T - return ID\n");
|
||||
kbc_delay_to_ob(dev, kbc_chips_revision, 0, 0x00);
|
||||
break;
|
||||
case 0x02: /* write input port */
|
||||
kbc_at_log("ATkbc: C&T - write input port\n");
|
||||
dev->mem_addr = val;
|
||||
dev->wantdata = 1;
|
||||
dev->state = STATE_KBC_PARAM;
|
||||
dev->command_phase = 2;
|
||||
break;
|
||||
case 0x04: /* select turbo switch input */
|
||||
kbc_at_log("ATkbc: C&T - select turbo switch input\n");
|
||||
dev->mem_addr = val;
|
||||
dev->wantdata = 1;
|
||||
dev->state = STATE_KBC_PARAM;
|
||||
dev->command_phase = 2;
|
||||
break;
|
||||
case 0x05: /* select turbo LED output */
|
||||
kbc_at_log("ATkbc: Cselect turbo LED output\n");
|
||||
dev->mem_addr = val;
|
||||
dev->wantdata = 1;
|
||||
dev->state = STATE_KBC_PARAM;
|
||||
dev->command_phase = 2;
|
||||
break;
|
||||
}
|
||||
} else if (dev->command_phase == 2) {
|
||||
switch (dev->mem_addr) {
|
||||
default:
|
||||
break;
|
||||
case 0x02: /* write input port */
|
||||
kbc_at_log("ATkbc: C&T - write iput port\n");
|
||||
dev->p1 = val;
|
||||
break;
|
||||
}
|
||||
dev->command_phase = 0;
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_chips(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0xa1: /* CHIPS extensions */
|
||||
kbc_at_log("ATkbc: C&T - CHIPS extensions\n");
|
||||
dev->wantdata = 1;
|
||||
dev->state = STATE_KBC_PARAM;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_data_phoenix(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (dev->command) {
|
||||
default:
|
||||
break;
|
||||
@@ -1452,18 +1760,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");
|
||||
if (dev->misc_flags & FLAG_PS2) {
|
||||
if (dev->flags & DEVICE_PCI) {
|
||||
kbc_at_queue_add(dev, 0x04);
|
||||
kbc_at_queue_add(dev, 0x16);
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x01);
|
||||
kbc_at_queue_add(dev, 0x38);
|
||||
}
|
||||
} else {
|
||||
kbc_at_queue_add(dev, 0x01);
|
||||
kbc_at_queue_add(dev, 0x29);
|
||||
}
|
||||
kbc_at_queue_add(dev, kbc_phoenix_version >> 8);
|
||||
kbc_at_queue_add(dev, kbc_phoenix_version & 0xff);
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
@@ -1496,44 +1794,18 @@ write_cmd_phoenix(void *priv, uint8_t val)
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
write_cmd_siemens(void *priv, uint8_t val)
|
||||
{
|
||||
atkbc_t *dev = (atkbc_t *) priv;
|
||||
uint8_t ret = 1;
|
||||
|
||||
switch (val) {
|
||||
default:
|
||||
ret = write_cmd_ami(dev, val);
|
||||
break;
|
||||
|
||||
case 0x92: /*Siemens Award - 92 sent by PCD-2L BIOS*/
|
||||
kbc_at_log("Siemens Award - 92 sent by PCD-2L BIOS\n");
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0x94: /*Siemens Award - 94 sent by PCD-2L BIOS*/
|
||||
kbc_at_log("Siemens Award - 94 sent by PCD-2L BIOS\n");
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0x9a: /*Siemens Award - 9A sent by PCD-2L BIOS*/
|
||||
kbc_at_log("Siemens Award - 9A sent by PCD-2L BIOS\n");
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0x9c: /*Siemens Award - 9C sent by PCD-2L BIOS*/
|
||||
kbc_at_log("Siemens Award - 9C sent by PCD-2L BIOS\n");
|
||||
ret = 0;
|
||||
break;
|
||||
|
||||
case 0xa9: /*Siemens Award - A9 sent by PCD-2L BIOS*/
|
||||
kbc_at_log("Siemens Award - A9 sent by PCD-2L BIOS\n");
|
||||
/* NOTE: The MultiKey/42i reference does not document these at all.
|
||||
The ADI 386SX BIOS uses these commands but it also uses
|
||||
commands B8 and BB with a parameters, which clearly indicates a
|
||||
Phoenix KBC. So either these are undocumented or were present
|
||||
in an early Phoenix MultiKey variant but later removed - the
|
||||
MultiKey/42i reference does say a number of features were
|
||||
removed, so these may have been among them, and we have no
|
||||
earlier MultiKey reference to look at. */
|
||||
case 0xe1 ... 0xef: /* Active output ports */
|
||||
kbc_at_log("ATkbc: Phoenix - active output ports\n");
|
||||
write_p2(dev, (dev->p2 & 0xf1) | (val & 0x0e));
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
@@ -2091,14 +2363,6 @@ kbc_at_process_cmd(void *priv)
|
||||
set_enable_kbd(dev, 1);
|
||||
break;
|
||||
|
||||
/* TODO: Make this command do nothing on the Regional HT6542,
|
||||
or else, Efflixi's Award OPTi 495 BIOS gets a stuck key
|
||||
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);
|
||||
break;
|
||||
|
||||
case 0xc0: /* read P1 */
|
||||
kbc_at_log("ATkbc: read P1\n");
|
||||
kbc_delay_to_ob(dev, read_p1(dev), 0, 0x00);
|
||||
@@ -2120,11 +2384,6 @@ kbc_at_process_cmd(void *priv)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0xca: /* read keyboard mode */
|
||||
kbc_at_log("ATkbc: AMI - read keyboard mode\n");
|
||||
kbc_delay_to_ob(dev, dev->ami_flags, 0, 0x00);
|
||||
break;
|
||||
|
||||
case 0xd0: /* read P2 */
|
||||
kbc_at_log("ATkbc: read P2\n");
|
||||
mask = 0xff;
|
||||
@@ -2574,20 +2833,32 @@ kbc_at_init(const device_t *info)
|
||||
timer_add(&dev->kbc_dev_poll_timer, kbc_at_dev_poll, dev, 1);
|
||||
|
||||
dev->write_cmd_data_ven = NULL;
|
||||
dev->write_cmd_ven = NULL;
|
||||
dev->write_cmd_ven = NULL;
|
||||
|
||||
kbc_ami_revision = '8';
|
||||
kbc_award_revision = 0x42;
|
||||
kbc_ami_revision = '8';
|
||||
kbc_award_revision = 0x42;
|
||||
|
||||
kbc_chips_revision = 0xa6;
|
||||
|
||||
kbc_phoenix_version = 0x0416;
|
||||
|
||||
switch (dev->flags & KBC_VEN_MASK) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case KBC_VEN_SIEMENS:
|
||||
kbc_ami_revision = '8';
|
||||
kbc_award_revision = 0x42;
|
||||
dev->write_cmd_data_ven = write_cmd_data_ami;
|
||||
dev->write_cmd_ven = write_cmd_siemens;
|
||||
case KBC_VEN_AWARD:
|
||||
case KBC_VEN_VIA:
|
||||
if ((info->local & 0xff00) != 0x0000)
|
||||
kbc_ami_revision = (info->local >> 8) & 0xff;
|
||||
if ((info->local & 0xff0000) != 0x000000)
|
||||
kbc_award_revision = (info->local >> 16) & 0xff;
|
||||
dev->write_cmd_data_ven = write_cmd_data_award;
|
||||
dev->write_cmd_ven = write_cmd_award;
|
||||
break;
|
||||
|
||||
case KBC_VEN_ACER:
|
||||
dev->write_cmd_ven = write_cmd_acer;
|
||||
break;
|
||||
|
||||
case KBC_VEN_OLIVETTI:
|
||||
@@ -2608,7 +2879,10 @@ kbc_at_init(const device_t *info)
|
||||
break;
|
||||
|
||||
case KBC_VEN_AMI:
|
||||
if ((dev->flags & KBC_TYPE_MASK) == KBC_TYPE_GREEN)
|
||||
case KBC_VEN_HOLTEK:
|
||||
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)
|
||||
@@ -2631,7 +2905,25 @@ kbc_at_init(const device_t *info)
|
||||
dev->write_cmd_ven = write_cmd_ami;
|
||||
break;
|
||||
|
||||
case KBC_VEN_UMC:
|
||||
if ((info->local & 0xff00) != 0x0000)
|
||||
kbc_ami_revision = (info->local >> 8) & 0xff;
|
||||
else
|
||||
kbc_ami_revision = 0x48;
|
||||
|
||||
dev->write_cmd_ven = write_cmd_umc;
|
||||
break;
|
||||
|
||||
case KBC_VEN_CHIPS:
|
||||
if ((info->local & 0xff00) != 0x0000)
|
||||
kbc_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->write_cmd_data_ven = write_cmd_data_phoenix;
|
||||
dev->write_cmd_ven = write_cmd_phoenix;
|
||||
break;
|
||||
@@ -2721,6 +3013,76 @@ 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",
|
||||
.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,
|
||||
.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_award_device = {
|
||||
.name = "PC/AT Keyboard (Award)",
|
||||
.internal_name = "keyboard_at_award",
|
||||
.flags = DEVICE_KBC,
|
||||
.local = KBC_TYPE_ISA | 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_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",
|
||||
@@ -2777,6 +3139,20 @@ const device_t kbc_at_ncr_device = {
|
||||
.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,
|
||||
.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_compaq_device = {
|
||||
.name = "PC/AT Keyboard Controller (Compaq)",
|
||||
.internal_name = "kbc_at_compaq",
|
||||
@@ -2861,6 +3237,20 @@ 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",
|
||||
.flags = DEVICE_KBC,
|
||||
.local = KBC_TYPE_PS2_1 | 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_ps2_ami_device = {
|
||||
.name = "PS/2 Keyboard Controller (AMI)",
|
||||
.internal_name = "kbc_ps2_ami",
|
||||
@@ -2893,7 +3283,50 @@ const device_t kbc_ps2_holtek_device = {
|
||||
.name = "PS/2 Keyboard Controller (Holtek)",
|
||||
.internal_name = "kbc_ps2_holtek",
|
||||
.flags = DEVICE_KBC,
|
||||
.local = KBC_TYPE_PS2_1 | KBC_VEN_AMI | KBC_FLAG_IS_ASIC,
|
||||
.local = KBC_TYPE_PS2_1 | 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_ps2_umc_device = {
|
||||
.name = "PS/2 Keyboard (UMC)",
|
||||
.internal_name = "keyboard_ps2_umc",
|
||||
.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,
|
||||
|
||||
@@ -559,7 +559,7 @@ mouse_get_buttons_ex(void)
|
||||
void
|
||||
mouse_set_sample_rate(double new_rate)
|
||||
{
|
||||
mouse_timed = (new_rate > 0.0);
|
||||
mouse_timed = !force_constant_mouse && (new_rate > 0.0);
|
||||
|
||||
timer_stop(&mouse_timer);
|
||||
|
||||
@@ -568,6 +568,12 @@ mouse_set_sample_rate(double new_rate)
|
||||
timer_on_auto(&mouse_timer, 1000000.0 / sample_rate);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_update_sample_rate(void)
|
||||
{
|
||||
mouse_set_sample_rate(sample_rate);
|
||||
}
|
||||
|
||||
/* Callback from the hardware driver. */
|
||||
void
|
||||
mouse_set_buttons(int buttons)
|
||||
|
||||
Reference in New Issue
Block a user