Made sure the dummy "None"/"Internal" devices never get initialized and fixed some PCI AGP bridge mess (including AGP-less 440BX/ZX/GX erroneously initializing the 440LX/EX AGP bridge), fixes #3696.
This commit is contained in:
@@ -145,10 +145,8 @@ cdrom_interface_reset(void)
|
|||||||
cdrom_interface_current);
|
cdrom_interface_current);
|
||||||
|
|
||||||
/* If we have a valid controller, add its device. */
|
/* If we have a valid controller, add its device. */
|
||||||
if (!controllers[cdrom_interface_current].device)
|
if ((cdrom_interface_current > 0) && controllers[cdrom_interface_current].device)
|
||||||
return;
|
device_add(controllers[cdrom_interface_current].device);
|
||||||
|
|
||||||
device_add(controllers[cdrom_interface_current].device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
|||||||
@@ -1672,11 +1672,12 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x52] = 0xea; /* 512 kB burst cache, set to 0xaa for 256 kB */
|
regs[0x52] = 0xea; /* 512 kB burst cache, set to 0xaa for 256 kB */
|
||||||
regs[0x57] = 0x31;
|
regs[0x57] = 0x31;
|
||||||
regs[0x59] = 0x0f;
|
regs[0x59] = 0x0f;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
dev->max_drb = 7;
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
||||||
dev->drb_unit = 1;
|
dev->max_drb = 7;
|
||||||
dev->drb_default = 0x02;
|
dev->drb_unit = 1;
|
||||||
dev->write_drbs = spd_write_drbs_with_ext;
|
dev->drb_default = 0x02;
|
||||||
|
dev->write_drbs = spd_write_drbs_with_ext;
|
||||||
break;
|
break;
|
||||||
case INTEL_430FX:
|
case INTEL_430FX:
|
||||||
regs[0x02] = 0x2d;
|
regs[0x02] = 0x2d;
|
||||||
@@ -1705,11 +1706,12 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x57] |= 0x02;
|
regs[0x57] |= 0x02;
|
||||||
else if ((cpu_busspeed > 60000000) && (cpu_busspeed <= 66666667))
|
else if ((cpu_busspeed > 60000000) && (cpu_busspeed <= 66666667))
|
||||||
regs[0x57] |= 0x03;
|
regs[0x57] |= 0x03;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
regs[0x72] = 0x02;
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
||||||
dev->max_drb = 7;
|
regs[0x72] = 0x02;
|
||||||
dev->drb_unit = 4;
|
dev->max_drb = 7;
|
||||||
dev->drb_default = 0x02;
|
dev->drb_unit = 4;
|
||||||
|
dev->drb_default = 0x02;
|
||||||
break;
|
break;
|
||||||
case INTEL_430VX:
|
case INTEL_430VX:
|
||||||
regs[0x02] = 0x30;
|
regs[0x02] = 0x30;
|
||||||
@@ -1764,12 +1766,13 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x53] = 0x80;
|
regs[0x53] = 0x80;
|
||||||
regs[0x57] = 0x01;
|
regs[0x57] = 0x01;
|
||||||
regs[0x58] = 0x10;
|
regs[0x58] = 0x10;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
regs[0x71] = 0x10;
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x02;
|
||||||
regs[0x72] = 0x02;
|
regs[0x71] = 0x10;
|
||||||
dev->max_drb = 7;
|
regs[0x72] = 0x02;
|
||||||
dev->drb_unit = 8;
|
dev->max_drb = 7;
|
||||||
dev->drb_default = 0x02;
|
dev->drb_unit = 8;
|
||||||
|
dev->drb_default = 0x02;
|
||||||
break;
|
break;
|
||||||
case INTEL_440LX:
|
case INTEL_440LX:
|
||||||
regs[0x02] = 0x80;
|
regs[0x02] = 0x80;
|
||||||
@@ -1784,7 +1787,8 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x51] |= 0x00;
|
regs[0x51] |= 0x00;
|
||||||
regs[0x53] = 0x83;
|
regs[0x53] = 0x83;
|
||||||
regs[0x57] = 0x01;
|
regs[0x57] = 0x01;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
||||||
regs[0x6c] = regs[0x6d] = regs[0x6e] = regs[0x6f] = 0x55;
|
regs[0x6c] = regs[0x6d] = regs[0x6e] = regs[0x6f] = 0x55;
|
||||||
regs[0x72] = 0x02;
|
regs[0x72] = 0x02;
|
||||||
regs[0xa0] = 0x02;
|
regs[0xa0] = 0x02;
|
||||||
@@ -1806,7 +1810,8 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x51] = 0x80;
|
regs[0x51] = 0x80;
|
||||||
regs[0x53] = 0x83;
|
regs[0x53] = 0x83;
|
||||||
regs[0x57] = 0x01;
|
regs[0x57] = 0x01;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
||||||
regs[0x6c] = regs[0x6d] = regs[0x6e] = regs[0x6f] = 0x55;
|
regs[0x6c] = regs[0x6d] = regs[0x6e] = regs[0x6f] = 0x55;
|
||||||
regs[0x72] = 0x02;
|
regs[0x72] = 0x02;
|
||||||
regs[0xa0] = 0x02;
|
regs[0xa0] = 0x02;
|
||||||
@@ -1834,19 +1839,20 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x51] |= 0x00;
|
regs[0x51] |= 0x00;
|
||||||
regs[0x57] = 0x28; /* 4 DIMMs, SDRAM */
|
regs[0x57] = 0x28; /* 4 DIMMs, SDRAM */
|
||||||
regs[0x58] = 0x03;
|
regs[0x58] = 0x03;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
regs[0x72] = 0x02;
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
||||||
regs[0x73] = 0x38;
|
regs[0x72] = 0x02;
|
||||||
regs[0x7b] = 0x38;
|
regs[0x73] = 0x38;
|
||||||
regs[0x90] = 0x80;
|
regs[0x7b] = 0x38;
|
||||||
regs[0xa0] = (regs[0x7a] & 0x02) ? 0x00 : 0x02;
|
regs[0x90] = 0x80;
|
||||||
regs[0xa2] = (regs[0x7a] & 0x02) ? 0x00 : 0x10;
|
regs[0xa0] = (regs[0x7a] & 0x02) ? 0x00 : 0x02;
|
||||||
regs[0xa4] = 0x03;
|
regs[0xa2] = (regs[0x7a] & 0x02) ? 0x00 : 0x10;
|
||||||
regs[0xa5] = 0x02;
|
regs[0xa4] = 0x03;
|
||||||
regs[0xa7] = 0x1f;
|
regs[0xa5] = 0x02;
|
||||||
dev->max_drb = 7;
|
regs[0xa7] = 0x1f;
|
||||||
dev->drb_unit = 8;
|
dev->max_drb = 7;
|
||||||
dev->drb_default = 0x01;
|
dev->drb_unit = 8;
|
||||||
|
dev->drb_default = 0x01;
|
||||||
break;
|
break;
|
||||||
case INTEL_440GX:
|
case INTEL_440GX:
|
||||||
regs[0x7a] = (info->local >> 8) & 0xff;
|
regs[0x7a] = (info->local >> 8) & 0xff;
|
||||||
@@ -1857,19 +1863,20 @@ i4x0_init(const device_t *info)
|
|||||||
regs[0x10] = 0x08;
|
regs[0x10] = 0x08;
|
||||||
regs[0x34] = (regs[0x7a] & 0x02) ? 0x00 : 0xa0;
|
regs[0x34] = (regs[0x7a] & 0x02) ? 0x00 : 0xa0;
|
||||||
regs[0x57] = 0x28;
|
regs[0x57] = 0x28;
|
||||||
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] = regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
regs[0x60] = regs[0x61] = regs[0x62] = regs[0x63] =
|
||||||
regs[0x72] = 0x02;
|
regs[0x64] = regs[0x65] = regs[0x66] = regs[0x67] = 0x01;
|
||||||
regs[0x73] = 0x38;
|
regs[0x72] = 0x02;
|
||||||
regs[0x7b] = 0x38;
|
regs[0x73] = 0x38;
|
||||||
regs[0x90] = 0x80;
|
regs[0x7b] = 0x38;
|
||||||
regs[0xa0] = (regs[0x7a] & 0x02) ? 0x00 : 0x02;
|
regs[0x90] = 0x80;
|
||||||
regs[0xa2] = (regs[0x7a] & 0x02) ? 0x00 : 0x10;
|
regs[0xa0] = (regs[0x7a] & 0x02) ? 0x00 : 0x02;
|
||||||
regs[0xa4] = 0x03;
|
regs[0xa2] = (regs[0x7a] & 0x02) ? 0x00 : 0x10;
|
||||||
regs[0xa5] = 0x02;
|
regs[0xa4] = 0x03;
|
||||||
regs[0xa7] = 0x1f;
|
regs[0xa5] = 0x02;
|
||||||
dev->max_drb = 7;
|
regs[0xa7] = 0x1f;
|
||||||
dev->drb_unit = 8;
|
dev->max_drb = 7;
|
||||||
dev->drb_default = 0x01;
|
dev->drb_unit = 8;
|
||||||
|
dev->drb_default = 0x01;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -1918,7 +1925,7 @@ i4x0_init(const device_t *info)
|
|||||||
if ((dev->type >= INTEL_440BX) && !(regs[0x7a] & 0x02)) {
|
if ((dev->type >= INTEL_440BX) && !(regs[0x7a] & 0x02)) {
|
||||||
device_add((dev->type == INTEL_440GX) ? &i440gx_agp_device : &i440bx_agp_device);
|
device_add((dev->type == INTEL_440GX) ? &i440gx_agp_device : &i440bx_agp_device);
|
||||||
dev->agpgart = device_add(&agpgart_device);
|
dev->agpgart = device_add(&agpgart_device);
|
||||||
} else if (dev->type >= INTEL_440LX) {
|
} else if ((dev->type == INTEL_440LX) || (dev->type == INTEL_440EX)) {
|
||||||
device_add(&i440lx_agp_device);
|
device_add(&i440lx_agp_device);
|
||||||
dev->agpgart = device_add(&agpgart_device);
|
dev->agpgart = device_add(&agpgart_device);
|
||||||
}
|
}
|
||||||
@@ -2109,7 +2116,7 @@ const device_t i440bx_device = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const device_t i440bx_no_agp_device = {
|
const device_t i440bx_no_agp_device = {
|
||||||
.name = "Intel 82443BX",
|
.name = "Intel 82443BX (No AGP)",
|
||||||
.internal_name = "i440bx_no_agp",
|
.internal_name = "i440bx_no_agp",
|
||||||
.flags = DEVICE_PCI,
|
.flags = DEVICE_PCI,
|
||||||
.local = 0x8200 | INTEL_440BX,
|
.local = 0x8200 | INTEL_440BX,
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
* Boston, MA 02111-1307
|
* Boston, MA 02111-1307
|
||||||
* USA.
|
* USA.
|
||||||
*/
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -158,6 +159,10 @@ device_add_common(const device_t *dev, const device_t *cd, void *p, void *params
|
|||||||
/* Do this so that a chained device_add will not identify the same ID
|
/* Do this so that a chained device_add will not identify the same ID
|
||||||
its master device is already trying to assign. */
|
its master device is already trying to assign. */
|
||||||
devices[c] = (device_t *) dev;
|
devices[c] = (device_t *) dev;
|
||||||
|
if (!strcmp(dev->name, "None") || !strcmp(dev->name, "Internal")) {
|
||||||
|
uint32_t *p = NULL;
|
||||||
|
*p = 5; /* Crash deliberately. */
|
||||||
|
}
|
||||||
|
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
memcpy(&device_prev, &device_current, sizeof(device_context_t));
|
memcpy(&device_prev, &device_current, sizeof(device_context_t));
|
||||||
@@ -550,6 +555,8 @@ device_speed_changed(void)
|
|||||||
{
|
{
|
||||||
for (uint16_t c = 0; c < DEVICE_MAX; c++) {
|
for (uint16_t c = 0; c < DEVICE_MAX; c++) {
|
||||||
if (devices[c] != NULL) {
|
if (devices[c] != NULL) {
|
||||||
|
device_log("DEVICE: device '%s' speed changed\n", devices[c]->name);
|
||||||
|
|
||||||
if (devices[c]->speed_changed != NULL)
|
if (devices[c]->speed_changed != NULL)
|
||||||
devices[c]->speed_changed(device_priv[c]);
|
devices[c]->speed_changed(device_priv[c]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -546,8 +546,8 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
|
|
||||||
timer_process();
|
timer_process();
|
||||||
|
|
||||||
if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) &&
|
if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) ||
|
||||||
(cassette != NULL))
|
(kbd->type == KBD_TYPE_PRAVETZ)) && (cassette != NULL))
|
||||||
pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0);
|
pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0);
|
||||||
|
|
||||||
speaker_update();
|
speaker_update();
|
||||||
@@ -681,7 +681,8 @@ kbd_read(uint16_t port, void *priv)
|
|||||||
|
|
||||||
/* This is needed to avoid error 131 (cassette error).
|
/* This is needed to avoid error 131 (cassette error).
|
||||||
This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */
|
This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */
|
||||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) {
|
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) ||
|
||||||
|
(kbd->type == KBD_TYPE_PRAVETZ)) {
|
||||||
if (cassette == NULL)
|
if (cassette == NULL)
|
||||||
ret |= (ppispeakon ? 0x10 : 0);
|
ret |= (ppispeakon ? 0x10 : 0);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -501,7 +501,9 @@ pci_bridge_init(const device_t *info)
|
|||||||
for (uint8_t i = 0; i < interrupt_count; i++)
|
for (uint8_t i = 0; i < interrupt_count; i++)
|
||||||
interrupts[i] = pci_get_int(dev->slot, PCI_INTA + i);
|
interrupts[i] = pci_get_int(dev->slot, PCI_INTA + i);
|
||||||
}
|
}
|
||||||
pci_bridge_log("PCI Bridge %d: upstream bus %02X slot %02X interrupts %02X %02X %02X %02X\n", dev->bus_index, (dev->slot >> 5) & 0xff, dev->slot & 31, interrupts[0], interrupts[1], interrupts[2], interrupts[3]);
|
pci_bridge_log("PCI Bridge %d: upstream bus %02X slot %02X interrupts %02X %02X %02X %02X\n",
|
||||||
|
dev->bus_index, (dev->slot >> 5) & 0xff, dev->slot & 31, interrupts[0],
|
||||||
|
interrupts[1], interrupts[2], interrupts[3]);
|
||||||
|
|
||||||
if (info->local == PCI_BRIDGE_DEC_21150)
|
if (info->local == PCI_BRIDGE_DEC_21150)
|
||||||
slot_count = 9; /* 9 bus masters */
|
slot_count = 9; /* 9 bus masters */
|
||||||
@@ -510,7 +512,10 @@ pci_bridge_init(const device_t *info)
|
|||||||
|
|
||||||
for (uint8_t i = 0; i < slot_count; i++) {
|
for (uint8_t i = 0; i < slot_count; i++) {
|
||||||
/* Interrupts for bridge slots are assigned in round-robin: ABCD, BCDA, CDAB and so on. */
|
/* Interrupts for bridge slots are assigned in round-robin: ABCD, BCDA, CDAB and so on. */
|
||||||
pci_bridge_log("PCI Bridge %d: downstream slot %02X interrupts %02X %02X %02X %02X\n", dev->bus_index, i, interrupts[i & interrupt_mask], interrupts[(i + 1) & interrupt_mask], interrupts[(i + 2) & interrupt_mask], interrupts[(i + 3) & interrupt_mask]);
|
pci_bridge_log("PCI Bridge %d: downstream slot %02X interrupts %02X %02X %02X %02X\n",
|
||||||
|
dev->bus_index, i, interrupts[i & interrupt_mask],
|
||||||
|
interrupts[(i + 1) & interrupt_mask], interrupts[(i + 2) & interrupt_mask],
|
||||||
|
interrupts[(i + 3) & interrupt_mask]);
|
||||||
pci_register_bus_slot(dev->bus_index, i, AGP_BRIDGE(dev->local) ? PCI_CARD_AGP : PCI_CARD_NORMAL,
|
pci_register_bus_slot(dev->bus_index, i, AGP_BRIDGE(dev->local) ? PCI_CARD_AGP : PCI_CARD_NORMAL,
|
||||||
interrupts[i & interrupt_mask],
|
interrupts[i & interrupt_mask],
|
||||||
interrupts[(i + 1) & interrupt_mask],
|
interrupts[(i + 1) & interrupt_mask],
|
||||||
|
|||||||
@@ -2917,7 +2917,9 @@ ide_board_init(int board, int irq, int base_main, int side_main, int type)
|
|||||||
|
|
||||||
ide_log("IDE: Initializing board %i...\n", board);
|
ide_log("IDE: Initializing board %i...\n", board);
|
||||||
|
|
||||||
ide_boards[board] = (ide_board_t *) malloc(sizeof(ide_board_t));
|
if (ide_boards[board] == NULL)
|
||||||
|
ide_boards[board] = (ide_board_t *) malloc(sizeof(ide_board_t));
|
||||||
|
|
||||||
memset(ide_boards[board], 0, sizeof(ide_board_t));
|
memset(ide_boards[board], 0, sizeof(ide_board_t));
|
||||||
ide_boards[board]->irq = irq;
|
ide_boards[board]->irq = irq;
|
||||||
ide_boards[board]->cur_dev = board << 1;
|
ide_boards[board]->cur_dev = board << 1;
|
||||||
@@ -3072,7 +3074,8 @@ ide_init(const device_t *info)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ide_drives;
|
// return ide_drives;
|
||||||
|
return (void *) (intptr_t) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -191,10 +191,8 @@ fdc_card_get_from_internal_name(char *s)
|
|||||||
void
|
void
|
||||||
fdc_card_init(void)
|
fdc_card_init(void)
|
||||||
{
|
{
|
||||||
if (!fdc_cards[fdc_type].device)
|
if ((fdc_type > 0) && fdc_cards[fdc_type].device)
|
||||||
return;
|
device_add(fdc_cards[fdc_type].device);
|
||||||
|
|
||||||
device_add(fdc_cards[fdc_type].device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
|
|||||||
@@ -579,7 +579,8 @@ network_reset(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
net_card_current = i;
|
net_card_current = i;
|
||||||
device_add_inst(net_cards[net_cards_conf[i].device_num], i + 1);
|
if (net_cards_conf[i].device_num > NET_INTERNAL)
|
||||||
|
device_add_inst(net_cards[net_cards_conf[i].device_num], i + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -684,7 +685,8 @@ network_dev_available(int id)
|
|||||||
{
|
{
|
||||||
int available = (net_cards_conf[id].device_num > 0);
|
int available = (net_cards_conf[id].device_num > 0);
|
||||||
|
|
||||||
if (net_cards_conf[id].net_type == NET_TYPE_PCAP && (network_dev_to_id(net_cards_conf[id].host_dev_name) <= 0))
|
if ((net_cards_conf[id].net_type == NET_TYPE_PCAP) &&
|
||||||
|
(network_dev_to_id(net_cards_conf[id].host_dev_name) <= 0))
|
||||||
available = 0;
|
available = 0;
|
||||||
|
|
||||||
// TODO: Handle VDE device
|
// TODO: Handle VDE device
|
||||||
|
|||||||
10
src/pci.c
10
src/pci.c
@@ -817,10 +817,12 @@ pci_add_bridge(uint8_t agp, uint8_t (*read)(int func, int addr, void *priv), voi
|
|||||||
pci_card_t *card;
|
pci_card_t *card;
|
||||||
uint8_t bridge_slot = agp ? pci_find_slot(PCI_ADD_AGPBRIDGE, 0xff) : last_normal_pci_card_id;
|
uint8_t bridge_slot = agp ? pci_find_slot(PCI_ADD_AGPBRIDGE, 0xff) : last_normal_pci_card_id;
|
||||||
|
|
||||||
card = &pci_cards[bridge_slot];
|
if (bridge_slot != PCI_CARD_INVALID) {
|
||||||
card->read = read;
|
card = &pci_cards[bridge_slot];
|
||||||
card->write = write;
|
card->read = read;
|
||||||
card->priv = priv;
|
card->write = write;
|
||||||
|
card->priv = priv;
|
||||||
|
}
|
||||||
|
|
||||||
*slot = bridge_slot;
|
*slot = bridge_slot;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,10 +178,8 @@ scsi_card_init(void)
|
|||||||
bus left. */
|
bus left. */
|
||||||
if (max > 0) {
|
if (max > 0) {
|
||||||
for (int i = 0; i < max; i++) {
|
for (int i = 0; i < max; i++) {
|
||||||
if (!scsi_cards[scsi_card_current[i]].device)
|
if ((scsi_card_current[i] > 0) && scsi_cards[scsi_card_current[i]].device)
|
||||||
continue;
|
device_add_inst(scsi_cards[scsi_card_current[i]].device, i + 1);
|
||||||
|
|
||||||
device_add_inst(scsi_cards[scsi_card_current[i]].device, i + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ midi_out_device_get_from_internal_name(char *s)
|
|||||||
void
|
void
|
||||||
midi_out_device_init(void)
|
midi_out_device_init(void)
|
||||||
{
|
{
|
||||||
if (devices[midi_output_device_current].device)
|
if ((midi_output_device_current > 0) && devices[midi_output_device_current].device)
|
||||||
device_add(devices[midi_output_device_current].device);
|
device_add(devices[midi_output_device_current].device);
|
||||||
midi_output_device_last = midi_output_device_current;
|
midi_output_device_last = midi_output_device_current;
|
||||||
}
|
}
|
||||||
@@ -292,7 +292,7 @@ midi_in_device_get_from_internal_name(char *s)
|
|||||||
void
|
void
|
||||||
midi_in_device_init(void)
|
midi_in_device_init(void)
|
||||||
{
|
{
|
||||||
if (midi_in_devices[midi_input_device_current].device)
|
if ((midi_input_device_current > 0) && midi_in_devices[midi_input_device_current].device)
|
||||||
device_add(midi_in_devices[midi_input_device_current].device);
|
device_add(midi_in_devices[midi_input_device_current].device);
|
||||||
midi_input_device_last = midi_input_device_current;
|
midi_input_device_last = midi_input_device_current;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,13 +222,13 @@ sound_card_get_from_internal_name(const char *s)
|
|||||||
void
|
void
|
||||||
sound_card_init(void)
|
sound_card_init(void)
|
||||||
{
|
{
|
||||||
if ((sound_card_current[0] != SOUND_INTERNAL) && (sound_cards[sound_card_current[0]].device))
|
if ((sound_card_current[0] > SOUND_INTERNAL) && (sound_cards[sound_card_current[0]].device))
|
||||||
device_add(sound_cards[sound_card_current[0]].device);
|
device_add(sound_cards[sound_card_current[0]].device);
|
||||||
if (sound_cards[sound_card_current[1]].device)
|
if ((sound_card_current[1] > SOUND_INTERNAL) && (sound_cards[sound_card_current[1]].device))
|
||||||
device_add(sound_cards[sound_card_current[1]].device);
|
device_add(sound_cards[sound_card_current[1]].device);
|
||||||
if (sound_cards[sound_card_current[2]].device)
|
if ((sound_card_current[2] > SOUND_INTERNAL) && (sound_cards[sound_card_current[2]].device))
|
||||||
device_add(sound_cards[sound_card_current[2]].device);
|
device_add(sound_cards[sound_card_current[2]].device);
|
||||||
if (sound_cards[sound_card_current[3]].device)
|
if ((sound_card_current[3] > SOUND_INTERNAL) && (sound_cards[sound_card_current[3]].device))
|
||||||
device_add(sound_cards[sound_card_current[3]].device);
|
device_add(sound_cards[sound_card_current[3]].device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -344,10 +344,8 @@ video_reset(int card)
|
|||||||
monitor_index_global = 0;
|
monitor_index_global = 0;
|
||||||
loadfont("roms/video/mda/mda.rom", 0);
|
loadfont("roms/video/mda/mda.rom", 0);
|
||||||
|
|
||||||
if ((card != VID_NONE)
|
if ((card != VID_NONE) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY) &&
|
||||||
&& !machine_has_flags(machine, MACHINE_VIDEO_ONLY)
|
(gfxcard[1] > VID_INTERNAL) && device_is_valid(video_card_getdevice(gfxcard[1]), machine)) {
|
||||||
&& (gfxcard[1] != 0)
|
|
||||||
&& device_is_valid(video_card_getdevice(gfxcard[1]), machine)) {
|
|
||||||
video_monitor_init(1);
|
video_monitor_init(1);
|
||||||
monitor_index_global = 1;
|
monitor_index_global = 1;
|
||||||
device_add(video_cards[gfxcard[1]].device);
|
device_add(video_cards[gfxcard[1]].device);
|
||||||
@@ -355,7 +353,7 @@ video_reset(int card)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Do not initialize internal cards here. */
|
/* Do not initialize internal cards here. */
|
||||||
if ((card != VID_NONE) && (card != VID_INTERNAL) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY)) {
|
if ((card > VID_INTERNAL) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY)) {
|
||||||
vid_table_log("VIDEO: initializing '%s'\n", video_cards[card].device->name);
|
vid_table_log("VIDEO: initializing '%s'\n", video_cards[card].device->name);
|
||||||
|
|
||||||
video_prepare();
|
video_prepare();
|
||||||
|
|||||||
Reference in New Issue
Block a user