Corrected BIOSes of the Adaptec 154xB for their respective port and bios addresses.

This commit is contained in:
TC1995
2017-08-22 15:43:04 +02:00
parent 644e57c9e3
commit 78241389fb

View File

@@ -2070,57 +2070,7 @@ aha_init(int type)
memset(dev, 0x00, sizeof(aha_t));
dev->type = type;
switch(type) {
case AHA_154xB:
strcpy(dev->name, "AHA-154xB");
dev->bios_path = L"roms/scsi/adaptec/aha1540b310.bin";
dev->bid = 'A';
break;
case AHA_154xC:
strcpy(dev->name, "AHA-154xC");
dev->bios_path = L"roms/scsi/adaptec/aha1542c101.bin";
dev->bid = 'D';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
break;
case AHA_154xCF:
strcpy(dev->name, "AHA-154xCF");
dev->bios_path = L"roms/scsi/adaptec/aha1542cf201.bin";
dev->nvr_path = L"nvr/aha1540cf.nvr";
dev->bid = 'E';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
break;
case AHA_154xCP:
strcpy(dev->name, "AHA-154xCP");
dev->bios_path = L"roms/scsi/adaptec/aha1542cp102.bin";
dev->nvr_path = L"nvr/aha1540cp.nvr";
dev->bid = 'F';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0055; /* firmware version (hi/lo) */
break;
case AHA_1640:
strcpy(dev->name, "AHA-1640");
break;
}
/* Set up the I/O address, IRQ and DMA info. */
if (type == AHA_1640) {
mca_add(aha_mca_read, aha_mca_write, dev);
dev->pos_regs[0] = 0x1F;
dev->pos_regs[1] = 0x0F;
pclog("Adaptec %s initialized\n", dev->name);
} else {
dev->Base = device_get_config_hex16("base");
dev->Irq = device_get_config_int("irq");
dev->DmaChannel = device_get_config_int("dma");
@@ -2135,7 +2085,6 @@ aha_init(int type)
pclog("Adaptec %s (IO=0x%04X, IRQ=%d, DMA=%d)\n",
dev->name, dev->Base, dev->Irq, dev->DmaChannel);
}
ResetDev = dev;
pclog("Building SCSI hard disk map...\n");
@@ -2159,6 +2108,53 @@ aha_init(int type)
aha_reset_ctrl(dev, CTRL_HRST);
switch(type) {
case AHA_154xB:
strcpy(dev->name, "AHA-154xB");
if (dev->Base == 0x334 && bios_addr == 0xd8000)
{
dev->bios_path = L"roms/scsi/adaptec/B_AC00.BIN";
}
else if (dev->Base == 0x330 && bios_addr == 0xd0000)
{
dev->bios_path = L"roms/scsi/adaptec/bios_3.2.BIN";
}
dev->bid = 'A';
break;
case AHA_154xC:
strcpy(dev->name, "AHA-154xC");
dev->bios_path = L"roms/scsi/adaptec/aha1542c101.bin";
dev->bid = 'D';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
break;
case AHA_154xCF:
strcpy(dev->name, "AHA-154xCF");
dev->bios_path = L"roms/scsi/adaptec/aha1542cf211.bin";
dev->nvr_path = L"nvr/aha1540cf.nvr";
dev->bid = 'E';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
break;
case AHA_154xCP:
strcpy(dev->name, "AHA-154xCP");
dev->bios_path = L"roms/scsi/adaptec/aha1542cp102.bin";
dev->nvr_path = L"nvr/aha1540cp.nvr";
dev->bid = 'F';
dev->rom_shram = 0x3F80; /* shadow RAM address base */
dev->rom_shramsz = 128; /* size of shadow RAM */
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
dev->rom_fwhigh = 0x0055; /* firmware version (hi/lo) */
break;
}
/* Initialize ROM BIOS if needed. */
if (bios)
aha_setbios(dev, bios_addr);
@@ -2166,18 +2162,6 @@ aha_init(int type)
/* Initialize EEPROM (NVR) if needed. */
aha_setnvr(dev);
#if 0
/* Perform AHA-154xNN-specific initialization. */
if (chip == CHIP_AHA154XB)
{
/* Adaptec 154xB AT/SCSI BIOS Version 3.20 with support for over 1GB drives */
if (dev->Base == 0x334 && bios_addr == 0xd8000) /* This BIOS is hardcoded to port 0x334 and address 0xD8000, otherwise it won't work */
rom_init(&dev->bios, L"roms/scsi/adaptec/B_AC00.BIN", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
else if (dev->Base == 0x330 && bios_addr == 0xd0000) /* This BIOS is hardcoded to port 0x330 and address 0xD0000, otherwise it won't work */
rom_init(&dev->bios, L"roms/scsi/adaptec/bios_3.2.BIN", 0xd0000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
}
#endif
return(dev);
}