diff --git a/src/device.c b/src/device.c index 8197ac6..1adcd64 100644 --- a/src/device.c +++ b/src/device.c @@ -9,7 +9,7 @@ * Implementation of the generic device interface to handle * all devices attached to the emulator. * - * Version: @(#)device.c 1.0.2 2018/03/05 + * Version: @(#)device.c 1.0.3 2018/03/13 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -72,13 +72,13 @@ device_add(device_t *d) for (c=0; c<256; c++) { if (devices[c] == d) { - fatal("device_add: device already exists!\n"); - break; + pclog("DEVICE: device already exists!\n"); + return(NULL); } if (devices[c] == NULL) break; } if (c >= DEVICE_MAX) - fatal("device_add: too many devices\n"); + fatal("DEVICE: too many devices\n"); device_current = d; @@ -86,16 +86,17 @@ device_add(device_t *d) priv = d->init(d); if (priv == NULL) { if (d->name) - fatal("device_add: device '%s' init failed\n", d->name); + pclog("DEVICE: device '%s' init failed\n", d->name); else - fatal("device_add: device init failed\n"); + pclog("DEVICE: device init failed\n"); + return(NULL); } } devices[c] = d; device_priv[c] = priv; - return priv; + return(priv); } @@ -385,50 +386,28 @@ device_set_config_mac(char *s, int val) int -device_is_valid(device_t *device, int machine_flags) +device_is_valid(device_t *device, int mflags) { - if (!device) - { - return 1; - } + if (device == NULL) return(1); - if ((device->flags & DEVICE_AT) && !(machine_flags & MACHINE_AT)) { - return 0; - } + if ((device->flags & DEVICE_AT) && !(mflags & MACHINE_AT)) return(0); - if ((device->flags & DEVICE_CBUS) && !(machine_flags & MACHINE_CBUS)) { - return 0; - } + if ((device->flags & DEVICE_CBUS) && !(mflags & MACHINE_CBUS)) return(0); - if ((device->flags & DEVICE_ISA) && !(machine_flags & MACHINE_ISA)) { - return 0; - } + if ((device->flags & DEVICE_ISA) && !(mflags & MACHINE_ISA)) return(0); - if ((device->flags & DEVICE_MCA) && !(machine_flags & MACHINE_MCA)) { - return 0; - } + if ((device->flags & DEVICE_MCA) && !(mflags & MACHINE_MCA)) return(0); - if ((device->flags & DEVICE_EISA) && !(machine_flags & MACHINE_EISA)) { - return 0; - } + if ((device->flags & DEVICE_EISA) && !(mflags & MACHINE_EISA)) return(0); - if ((device->flags & DEVICE_VLB) && !(machine_flags & MACHINE_VLB)) { - return 0; - } + if ((device->flags & DEVICE_VLB) && !(mflags & MACHINE_VLB)) return(0); - if ((device->flags & DEVICE_PCI) && !(machine_flags & MACHINE_PCI)) { - return 0; - } + if ((device->flags & DEVICE_PCI) && !(mflags & MACHINE_PCI)) return(0); - if ((device->flags & DEVICE_PS2) && !(machine_flags & MACHINE_HDC_PS2)) { - return 0; - } + if ((device->flags & DEVICE_PS2) && !(mflags & MACHINE_HDC_PS2)) return(0); + if ((device->flags & DEVICE_AGP) && !(mflags & MACHINE_AGP)) return(0); - if ((device->flags & DEVICE_AGP) && !(machine_flags & MACHINE_AGP)) { - return 0; - } - - return 1; + return(1); } diff --git a/src/keyboard_at.c b/src/keyboard_at.c index 0308995..418f5b6 100644 --- a/src/keyboard_at.c +++ b/src/keyboard_at.c @@ -8,7 +8,7 @@ * * Intel 8042 (AT keyboard controller) emulation. * - * Version: @(#)keyboard_at.c 1.0.4 2018/03/12 + * Version: @(#)keyboard_at.c 1.0.5 2018/03/13 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -99,6 +99,7 @@ #define KBC_VEN_TOSHIBA 0x10 #define KBC_VEN_MASK 0x1C + typedef struct { int initialized; int want60, @@ -671,16 +672,13 @@ kbd_poll(void *priv) } } - if (kbd->out_new == -1 && !(kbd->status & STAT_OFULL) && - key_ctrl_queue_start != key_ctrl_queue_end) { + if (kbd->out_new == -1 && !(kbd->status & STAT_OFULL) && key_ctrl_queue_start != key_ctrl_queue_end) { kbd->out_new = key_ctrl_queue[key_ctrl_queue_start] | 0x200; key_ctrl_queue_start = (key_ctrl_queue_start + 1) & 0xf; - } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && - kbd->out_delayed != -1) { + } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && kbd->out_delayed != -1) { kbd->out_new = kbd->out_delayed; kbd->out_delayed = -1; - } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && - !(kbd->mem[0] & 0x10) && kbd->out_delayed != -1) { + } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && !(kbd->mem[0] & 0x10) && kbd->out_delayed != -1) { kbd->out_new = kbd->out_delayed; kbd->out_delayed = -1; } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1/* && !(kbd->mem[0] & 0x20)*/ && @@ -976,8 +974,7 @@ kbd_cmd_write(atkbd_t *kbd, uint8_t val) kbd->wantirq = 0; /* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */ - if (((kbd->flags & KBC_VEN_MASK) == KBC_VEN_AMI) || - ((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1)) { + if ((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) { val &= ~CCB_TRANSLATE; kbd->mem[0] &= ~CCB_TRANSLATE; } @@ -992,7 +989,8 @@ kbd_cmd_write(atkbd_t *kbd, uint8_t val) /* ISA AT keyboard controllers use bit 5 for keyboard mode (1 = PC/XT, 2 = AT); PS/2 (and EISA/PCI) keyboard controllers use it as the PS/2 mouse enable switch. */ - if ((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) { + if (((kbd->flags & KBC_VEN_MASK) == KBC_VEN_AMI) || + ((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1)) { keyboard_mode &= ~CCB_PCMODE; mouse_scan = !(val & 0x20);