if (ret)
return;
if (param[0] != 0x55) {
- dprintf(1, "i8042 self test failed (got %x not 0x55\n", param[0]);
+ dprintf(1, "i8042 self test failed (got %x not 0x55)\n", param[0]);
return;
}
if (ret)
return;
if (param[0] != 0x00) {
- dprintf(1, "i8042 keyboard test failed (got %x not 0x00\n", param[0]);
+ dprintf(1, "i8042 keyboard test failed (got %x not 0x00)\n", param[0]);
return;
}
/* ------------------- keyboard side ------------------------*/
/* reset keyboard and self test (keyboard side) */
ret = kbd_command(ATKBD_CMD_RESET_BAT, param);
- if (ret)
+ if (ret != 0 && ret != 2)
return;
if (param[0] != 0xaa) {
- dprintf(1, "keyboard self test failed (got %x not 0xaa\n", param[0]);
+ dprintf(1, "keyboard self test failed (got %x not 0xaa)\n", param[0]);
return;
}
keyboard_init();
- // Enable IRQ1 (handle_09)
- unmask_pic1(PIC1_IRQ1);
+ enable_hwirq(1, entry_09);
}
static u8
// don't change AH : function int16 ah=0x20-0x22 NOT supported
}
+static void
+handle_16XX(struct bregs *regs)
+{
+ debug_stub(regs);
+}
+
static void
set_leds()
{
case 0x92: handle_1692(regs); break;
case 0xa2: handle_16a2(regs); break;
case 0x6f: handle_166f(regs); break;
+ default: handle_16XX(regs); break;
}
}
{ none, none, none, none, none },
{ none, none, none, none, none },
{ 0x565c, 0x567c, none, none, none }, /* \| */
- { 0x5700, 0x5700, none, none, none }, /* F11 */
- { 0x5800, 0x5800, none, none, none } /* F12 */
+ { 0x8500, 0x8700, 0x8900, 0x8b00, none }, /* F11 */
+ { 0x8600, 0x8800, 0x8a00, 0x8c00, none }, /* F12 */
};
static void
return;
default:
- if (scancode & 0x80) {
- break; /* toss key releases ... */
- }
+ if (scancode & 0x80)
+ // toss key releases
+ break;
+ if (scancode == 0x53 && (shift_flags & 0x0c) == 0x0c)
+ // Ctrl+alt+del - reset machine.
+ reset_vector();
if (scancode > MAX_SCAN_CODE) {
dprintf(1, "KBD: int09h_handler(): unknown scancode read: 0x%02x!\n"
, scancode);
u8 asciicode;
struct scaninfo *info = &scan_to_scanascii[scancode];
if (shift_flags & 0x08) { /* ALT */
- asciicode = GET_VAR(CS, info->alt);
- scancode = GET_VAR(CS, info->alt) >> 8;
+ asciicode = GET_GLOBAL(info->alt);
+ scancode = GET_GLOBAL(info->alt) >> 8;
} else if (shift_flags & 0x04) { /* CONTROL */
- asciicode = GET_VAR(CS, info->control);
- scancode = GET_VAR(CS, info->control) >> 8;
+ asciicode = GET_GLOBAL(info->control);
+ scancode = GET_GLOBAL(info->control) >> 8;
} else if ((mf2_state & 0x02) > 0
&& scancode >= 0x47 && scancode <= 0x53) {
/* extended keys handling */
asciicode = 0xe0;
- scancode = GET_VAR(CS, info->normal) >> 8;
+ scancode = GET_GLOBAL(info->normal) >> 8;
} else if (shift_flags & 0x03) { /* LSHIFT + RSHIFT */
/* check if lock state should be ignored
* because a SHIFT key are pressed */
- if (shift_flags & GET_VAR(CS, info->lock_flags)) {
- asciicode = GET_VAR(CS, info->normal);
- scancode = GET_VAR(CS, info->normal) >> 8;
+ if (shift_flags & GET_GLOBAL(info->lock_flags)) {
+ asciicode = GET_GLOBAL(info->normal);
+ scancode = GET_GLOBAL(info->normal) >> 8;
} else {
- asciicode = GET_VAR(CS, info->shift);
- scancode = GET_VAR(CS, info->shift) >> 8;
+ asciicode = GET_GLOBAL(info->shift);
+ scancode = GET_GLOBAL(info->shift) >> 8;
}
} else {
/* check if lock is on */
- if (shift_flags & GET_VAR(CS, info->lock_flags)) {
- asciicode = GET_VAR(CS, info->shift);
- scancode = GET_VAR(CS, info->shift) >> 8;
+ if (shift_flags & GET_GLOBAL(info->lock_flags)) {
+ asciicode = GET_GLOBAL(info->shift);
+ scancode = GET_GLOBAL(info->shift) >> 8;
} else {
- asciicode = GET_VAR(CS, info->normal);
- scancode = GET_VAR(CS, info->normal) >> 8;
+ asciicode = GET_GLOBAL(info->normal);
+ scancode = GET_GLOBAL(info->normal) >> 8;
}
}
if (scancode==0 && asciicode==0) {