Fixed two messed-up patches.

This commit is contained in:
waltje
2018-03-13 15:55:25 -05:00
parent 40b6bc4d57
commit c1c74199d7
2 changed files with 28 additions and 51 deletions

View File

@@ -9,7 +9,7 @@
* Implementation of the generic device interface to handle * Implementation of the generic device interface to handle
* all devices attached to the emulator. * 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, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -72,13 +72,13 @@ device_add(device_t *d)
for (c=0; c<256; c++) { for (c=0; c<256; c++) {
if (devices[c] == d) { if (devices[c] == d) {
fatal("device_add: device already exists!\n"); pclog("DEVICE: device already exists!\n");
break; return(NULL);
} }
if (devices[c] == NULL) break; if (devices[c] == NULL) break;
} }
if (c >= DEVICE_MAX) if (c >= DEVICE_MAX)
fatal("device_add: too many devices\n"); fatal("DEVICE: too many devices\n");
device_current = d; device_current = d;
@@ -86,16 +86,17 @@ device_add(device_t *d)
priv = d->init(d); priv = d->init(d);
if (priv == NULL) { if (priv == NULL) {
if (d->name) if (d->name)
fatal("device_add: device '%s' init failed\n", d->name); pclog("DEVICE: device '%s' init failed\n", d->name);
else else
fatal("device_add: device init failed\n"); pclog("DEVICE: device init failed\n");
return(NULL);
} }
} }
devices[c] = d; devices[c] = d;
device_priv[c] = priv; device_priv[c] = priv;
return priv; return(priv);
} }
@@ -385,50 +386,28 @@ device_set_config_mac(char *s, int val)
int int
device_is_valid(device_t *device, int machine_flags) device_is_valid(device_t *device, int mflags)
{ {
if (!device) if (device == NULL) return(1);
{
return 1;
}
if ((device->flags & DEVICE_AT) && !(machine_flags & MACHINE_AT)) { if ((device->flags & DEVICE_AT) && !(mflags & MACHINE_AT)) return(0);
return 0;
}
if ((device->flags & DEVICE_CBUS) && !(machine_flags & MACHINE_CBUS)) { if ((device->flags & DEVICE_CBUS) && !(mflags & MACHINE_CBUS)) return(0);
return 0;
}
if ((device->flags & DEVICE_ISA) && !(machine_flags & MACHINE_ISA)) { if ((device->flags & DEVICE_ISA) && !(mflags & MACHINE_ISA)) return(0);
return 0;
}
if ((device->flags & DEVICE_MCA) && !(machine_flags & MACHINE_MCA)) { if ((device->flags & DEVICE_MCA) && !(mflags & MACHINE_MCA)) return(0);
return 0;
}
if ((device->flags & DEVICE_EISA) && !(machine_flags & MACHINE_EISA)) { if ((device->flags & DEVICE_EISA) && !(mflags & MACHINE_EISA)) return(0);
return 0;
}
if ((device->flags & DEVICE_VLB) && !(machine_flags & MACHINE_VLB)) { if ((device->flags & DEVICE_VLB) && !(mflags & MACHINE_VLB)) return(0);
return 0;
}
if ((device->flags & DEVICE_PCI) && !(machine_flags & MACHINE_PCI)) { if ((device->flags & DEVICE_PCI) && !(mflags & MACHINE_PCI)) return(0);
return 0;
}
if ((device->flags & DEVICE_PS2) && !(machine_flags & MACHINE_HDC_PS2)) { if ((device->flags & DEVICE_PS2) && !(mflags & MACHINE_HDC_PS2)) return(0);
return 0; if ((device->flags & DEVICE_AGP) && !(mflags & MACHINE_AGP)) return(0);
}
if ((device->flags & DEVICE_AGP) && !(machine_flags & MACHINE_AGP)) { return(1);
return 0;
}
return 1;
} }

View File

@@ -8,7 +8,7 @@
* *
* Intel 8042 (AT keyboard controller) emulation. * 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, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -99,6 +99,7 @@
#define KBC_VEN_TOSHIBA 0x10 #define KBC_VEN_TOSHIBA 0x10
#define KBC_VEN_MASK 0x1C #define KBC_VEN_MASK 0x1C
typedef struct { typedef struct {
int initialized; int initialized;
int want60, int want60,
@@ -671,16 +672,13 @@ kbd_poll(void *priv)
} }
} }
if (kbd->out_new == -1 && !(kbd->status & STAT_OFULL) && if (kbd->out_new == -1 && !(kbd->status & STAT_OFULL) && key_ctrl_queue_start != key_ctrl_queue_end) {
key_ctrl_queue_start != key_ctrl_queue_end) {
kbd->out_new = key_ctrl_queue[key_ctrl_queue_start] | 0x200; kbd->out_new = key_ctrl_queue[key_ctrl_queue_start] | 0x200;
key_ctrl_queue_start = (key_ctrl_queue_start + 1) & 0xf; key_ctrl_queue_start = (key_ctrl_queue_start + 1) & 0xf;
} else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && kbd->out_delayed != -1) {
kbd->out_delayed != -1) {
kbd->out_new = kbd->out_delayed; kbd->out_new = kbd->out_delayed;
kbd->out_delayed = -1; kbd->out_delayed = -1;
} else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && } else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1 && !(kbd->mem[0] & 0x10) && kbd->out_delayed != -1) {
!(kbd->mem[0] & 0x10) && kbd->out_delayed != -1) {
kbd->out_new = kbd->out_delayed; kbd->out_new = kbd->out_delayed;
kbd->out_delayed = -1; kbd->out_delayed = -1;
} else if (!(kbd->status & STAT_OFULL) && kbd->out_new == -1/* && !(kbd->mem[0] & 0x20)*/ && } 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; kbd->wantirq = 0;
/* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */ /* PS/2 type 2 keyboard controllers always force the XLAT bit to 0. */
if (((kbd->flags & KBC_VEN_MASK) == KBC_VEN_AMI) || if ((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) {
((kbd->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1)) {
val &= ~CCB_TRANSLATE; val &= ~CCB_TRANSLATE;
kbd->mem[0] &= ~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); /* 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. */ 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; keyboard_mode &= ~CCB_PCMODE;
mouse_scan = !(val & 0x20); mouse_scan = !(val & 0x20);