Some minor bugfixes.
This commit is contained in:
@@ -151,11 +151,13 @@ ali1533_write(int func, int addr, uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0x41:
|
||||
/* TODO: Bit 7 selects keyboard controller type:
|
||||
0 = AT, 1 = PS/2 */
|
||||
pic_kbd_latch(1);
|
||||
// pic_kbd_latch(!!(val & 0x80));
|
||||
if (dev->type == 1)
|
||||
pic_mouse_latch(!!(val & 0x40) || !(dev->pci_conf[0x78] & 0x02));
|
||||
else
|
||||
pic_mouse_latch(!!(val & 0x40));
|
||||
dev->pci_conf[addr] = val & 0xbf;
|
||||
dev->pci_conf[addr] = val;
|
||||
break;
|
||||
|
||||
case 0x42: /* ISA Bus Speed */
|
||||
@@ -431,6 +433,7 @@ ali1533_write(int func, int addr, uint8_t val, void *priv)
|
||||
if (dev->type == 1) {
|
||||
ali1543_log("PCI78 = %02X\n", val);
|
||||
dev->pci_conf[addr] = val & 0x33;
|
||||
pic_mouse_latch(!!(dev->pci_conf[0x41] & 0x40) || !(val & 0x02));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1520,6 +1523,8 @@ ali1543_reset(void *priv)
|
||||
ali1533_write(0, 0x74, 0x00, dev);
|
||||
ali1533_write(0, 0x75, 0x00, dev);
|
||||
ali1533_write(0, 0x76, 0x00, dev);
|
||||
if (dev->type == 1)
|
||||
ali1533_write(0, 0x78, 0x00, dev);
|
||||
|
||||
unmask_a20_in_smm = 1;
|
||||
}
|
||||
|
@@ -801,12 +801,30 @@ write64_generic(void *priv, uint8_t val)
|
||||
IBM PS/1: xxxxxxxx
|
||||
IBM PS/2 MCA: xxxxx1xx
|
||||
Intel AMI Pentium BIOS'es with AMI MegaKey KB-5 keyboard controller: x1x1xxxx
|
||||
Acer: xxx0x0xx
|
||||
Acer: xxxxx0xx
|
||||
Packard Bell PB450: xxxxx1xx
|
||||
P6RP4: xx1xx1xx
|
||||
Epson Action Tower 2600: xxxx01xx
|
||||
TriGem Hawk: xxxx11xx
|
||||
|
||||
Machine input based on current code: 11111111
|
||||
Everything non-Green: Pull down bit 7 if not PS/2 and keyboard is inhibited.
|
||||
Pull down bit 6 if primary display is CGA.
|
||||
Xi8088: Pull down bit 6 if primary display is MDA.
|
||||
Acer: Pull down bit 6 if primary display is MDA.
|
||||
Pull down bit 2 always (must be so to enable CMOS Setup).
|
||||
IBM PS/1: Pull down bit 6 if current floppy drive is 3.5".
|
||||
Epson Action Tower 2600: Pull down bit 3 always (for Epson logo).
|
||||
NCR: Pull down bit 5 always (power-on default speed = high).
|
||||
Pull down bit 3 if there is no FPU.
|
||||
Pull down bits 1 and 0 always?
|
||||
Compaq: Pull down bit 6 if Compaq dual-scan display is in use.
|
||||
Pull down bit 5 if system board DIP switch is ON.
|
||||
Pull down bit 4 if CPU speed selected is auto.
|
||||
Pull down bit 3 if CPU speed selected is slow (4 MHz).
|
||||
Pull down bit 2 if FPU is present.
|
||||
Pull down bits 1 and 0 always?
|
||||
|
||||
Bit 7: AT KBC only - keyboard inhibited (often physical lock): 0 = yes, 1 = no (also Compaq);
|
||||
Bit 6: Mostly, display: 0 = CGA, 1 = MDA, inverted on Xi8088 and Acer KBC's;
|
||||
Intel AMI MegaKey KB-5: Used for green features, SMM handler expects it to be set;
|
||||
@@ -817,7 +835,6 @@ write64_generic(void *priv, uint8_t val)
|
||||
Compaq: System board DIP switch 5: 0 = ON, 1 = OFF.
|
||||
Bit 4: (Which board?): RAM on motherboard: 0 = 512 kB, 1 = 256 kB;
|
||||
NCR: RAM on motherboard: 0 = unsupported, 1 = 512 kB;
|
||||
Acer: Must be 0;
|
||||
Intel AMI MegaKey KB-5: Must be 1;
|
||||
IBM PS/1: Ignored;
|
||||
Compaq: 0 = Auto speed selected, 1 = High speed selected.
|
||||
@@ -851,6 +868,7 @@ write64_generic(void *priv, uint8_t val)
|
||||
fixed_bits |= 0x40;
|
||||
if (kbc_ven == KBC_VEN_IBM_PS1) {
|
||||
current_drive = fdc_get_current_drive();
|
||||
/* (B0 or F0) | (fdd_is_525(current_drive) on bit 6) */
|
||||
add_to_kbc_queue_front(dev, dev->p1 | fixed_bits | (fdd_is_525(current_drive) ? 0x40 : 0x00),
|
||||
0, 0x00);
|
||||
} else if (kbc_ven == KBC_VEN_NCR) {
|
||||
@@ -864,6 +882,7 @@ write64_generic(void *priv, uint8_t val)
|
||||
* bit 1: high/auto speed
|
||||
* bit 0: dma mode
|
||||
*/
|
||||
/* (B0 or F0) | 0x04 | (display on bit 6) | (fpu on bit 3) */
|
||||
add_to_kbc_queue_front(dev, (dev->p1 | fixed_bits | (video_is_mda() ? 0x40 : 0x00) | (hasfpu ? 0x08 : 0x00)) & 0xdf,
|
||||
0, 0x00);
|
||||
} else if (kbc_ven == KBC_VEN_TRIGEM_AMI) {
|
||||
@@ -874,10 +893,13 @@ write64_generic(void *priv, uint8_t val)
|
||||
0, 0: Generic AMI logo. */
|
||||
if (dev->misc_flags & FLAG_PCI)
|
||||
fixed_bits |= 8;
|
||||
/* (B0 or F0) | (0x04 or 0x0c) */
|
||||
add_to_kbc_queue_front(dev, dev->p1 | fixed_bits, 0, 0x00);
|
||||
} else if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) && ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_GREEN))
|
||||
/* (B0 or F0) | (0x08 or 0x0c) */
|
||||
add_to_kbc_queue_front(dev, ((dev->p1 | fixed_bits) & 0xf0) | (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c), 0, 0x00);
|
||||
else
|
||||
/* (B0 or F0) | (0x04 or 0x44) */
|
||||
add_to_kbc_queue_front(dev, dev->p1 | fixed_bits, 0, 0x00);
|
||||
dev->p1 = ((dev->p1 + 1) & 3) | (dev->p1 & 0xfc);
|
||||
return 0;
|
||||
|
@@ -119,7 +119,7 @@ kbc_at_dev_poll(void *priv)
|
||||
case DEV_STATE_MAIN_2:
|
||||
/* Output from scan queue if needed and then return to main loop #1. */
|
||||
if (*dev->scan && (dev->port->out_new == -1) && (dev->queue_start != dev->queue_end)) {
|
||||
kbc_at_dev_log("%s %1: %02X (DATA) on channel 1\n", dev->name, dev->inst, dev->queue[dev->queue_start]);
|
||||
kbc_at_dev_log("%s: %02X (DATA) on channel 1\n", dev->name, dev->queue[dev->queue_start]);
|
||||
dev->port->out_new = dev->queue[dev->queue_start];
|
||||
dev->queue_start = (dev->queue_start + 1) & 0xf;
|
||||
}
|
||||
|
@@ -135,6 +135,7 @@ ps2_set_defaults(atkbc_dev_t *dev)
|
||||
dev->mode = MODE_STREAM;
|
||||
dev->rate = 1;
|
||||
dev->flags &= 0x88;
|
||||
mouse_scan = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -144,8 +145,6 @@ ps2_bat(void *priv)
|
||||
|
||||
ps2_set_defaults(dev);
|
||||
|
||||
mouse_scan = 1;
|
||||
|
||||
kbc_at_dev_queue_add(dev, 0xaa, 0);
|
||||
kbc_at_dev_queue_add(dev, 0x00, 0);
|
||||
}
|
||||
|
@@ -174,6 +174,7 @@ ali5123_reset(ali5123_t *dev)
|
||||
serial_setup(dev->uart[1], 0x03e8, dev->ld_regs[5][0x70]);
|
||||
|
||||
/* Logical device 7: Keyboard */
|
||||
dev->ld_regs[7][0x30] = 1;
|
||||
dev->ld_regs[7][0x70] = 1;
|
||||
/* TODO: Register F0 bit 6: 0 = PS/2, 1 = AT */
|
||||
|
||||
@@ -253,6 +254,9 @@ ali5123_write(uint16_t port, uint8_t val, void *priv)
|
||||
case 0x06:
|
||||
case 0x08 ... 0x0a:
|
||||
return;
|
||||
case 0x07:
|
||||
if (dev->cur_reg == 0xf0)
|
||||
val &= 0xbf;
|
||||
}
|
||||
dev->ld_regs[cur_ld][dev->cur_reg] = val;
|
||||
}
|
||||
|
Reference in New Issue
Block a user