From 78241389fbf57b01d375bb28cf11c09f262c0dc5 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Tue, 22 Aug 2017 15:43:04 +0200 Subject: [PATCH] Corrected BIOSes of the Adaptec 154xB for their respective port and bios addresses. --- src/scsi_aha154x.c | 110 +++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 63 deletions(-) diff --git a/src/scsi_aha154x.c b/src/scsi_aha154x.c index 18b8ceb9a..d47c61064 100644 --- a/src/scsi_aha154x.c +++ b/src/scsi_aha154x.c @@ -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); }