From 95ef5eda3d5c1c8c67d19e61425d446e985765ef Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 17 Oct 2017 03:00:09 +0200 Subject: [PATCH] Added the BusLogic BT-445S VLB. --- src/scsi/scsi.c | 1 + src/scsi/scsi_aha154x.c | 1 + src/scsi/scsi_buslogic.c | 34 ++++++++++++++++++++++++---------- src/scsi/scsi_buslogic.h | 1 + src/scsi/scsi_x54x.c | 9 ++++++--- src/scsi/scsi_x54x.h | 2 +- src/video/vid_table.c | 26 +++++++++++++------------- 7 files changed, 47 insertions(+), 27 deletions(-) diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index 405974700..cfa2d4942 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -73,6 +73,7 @@ static SCSI_CARD scsi_cards[] = { { "[MCA] Adaptec AHA-1640", "aha1640", &aha1640_device, x54x_device_reset }, { "[MCA] BusLogic BT-640A", "bt640a", &buslogic_640a_device,BuslogicDeviceReset }, { "[PCI] BusLogic BT-958D", "bt958d", &buslogic_pci_device, BuslogicDeviceReset }, + { "[VLB] BusLogic BT-445S", "bt445s", &buslogic_445s_device,BuslogicDeviceReset }, { "", "", NULL, NULL }, }; diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 0e78834b1..d9e5cad3d 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -760,6 +760,7 @@ aha_init(device_t *info) dev->max_id = 7; dev->int_geom_writable = 0; dev->cdrom_boot = 0; + dev->bit32 = 0; dev->ven_thread = aha_thread; dev->ven_cmd_is_fast = aha_cmd_is_fast; diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index 5e89b6860..e09df79c0 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -267,10 +267,8 @@ BuslogicGetNVRFileName(buslogic_data_t *bl) return L"bt545s.nvr"; case CHIP_BUSLOGIC_MCA: return L"bt640a.nvr"; -#ifdef BUSLOGIC_NOT_WORKING case CHIP_BUSLOGIC_VLB: return L"bt445s.nvr"; -#endif case CHIP_BUSLOGIC_PCI: return L"bt958d.nvr"; default: @@ -305,11 +303,9 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe) case CHIP_BUSLOGIC_MCA: memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "640A", 4); break; -#ifdef BUSLOGIC_NOT_WORKING case CHIP_BUSLOGIC_VLB: memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "445S", 4); break; -#endif case CHIP_BUSLOGIC_PCI: memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "958D", 4); break; @@ -794,9 +790,7 @@ buslogic_cmds(void *p) switch (bl->chip) { case CHIP_BUSLOGIC_ISA_542: case CHIP_BUSLOGIC_ISA: -#ifdef BUSLOGIC_NOT_WORKING case CHIP_BUSLOGIC_VLB: -#endif ReplyIESI->uBusType = 'A'; /* ISA style */ break; case CHIP_BUSLOGIC_MCA: @@ -993,11 +987,9 @@ buslogic_setup_data(void *p) case CHIP_BUSLOGIC_MCA: bl_setup->uHostBusType = 'B'; break; -#ifdef BUSLOGIC_NOT_WORKING case CHIP_BUSLOGIC_VLB: bl_setup->uHostBusType = 'E'; break; -#endif case CHIP_BUSLOGIC_PCI: bl_setup->uHostBusType = 'F'; break; @@ -1434,7 +1426,7 @@ buslogic_init(device_t *info) dev->max_id = 7; dev->int_geom_writable = 1; dev->cdrom_boot = 0; - dev->mca32 = 0; + dev->bit32 = 0; bl->chip = info->local; bl->PCIBase = 0; @@ -1499,12 +1491,24 @@ buslogic_init(device_t *info) has_autoscsi_rom = 0; has_scam_rom = 0; dev->fw_rev = "BA150"; - dev->mca32 = 1; + dev->bit32 = 1; bl->fAggressiveRoundRobinMode = 1; dev->pos_regs[0] = 0x08; /* MCA board ID */ dev->pos_regs[1] = 0x07; mca_add(buslogic_mca_read, buslogic_mca_write, dev); break; + case CHIP_BUSLOGIC_VLB: + strcpy(dev->name, "BT-445S"); + bios_rom_name = L"roms/scsi/buslogic/BT-445S_BIOS.rom"; + bios_rom_size = 0x4000; + bios_rom_mask = 0x3fff; + has_autoscsi_rom = 1; + autoscsi_rom_name = L"roms/scsi/buslogic/BT-445S_AutoSCSI.rom"; + autoscsi_rom_size = 0x4000; + has_scam_rom = 0; + dev->fw_rev = "AA421E"; + dev->bit32 = 1; + break; case CHIP_BUSLOGIC_PCI: strcpy(dev->name, "BT-958D"); bios_rom_name = L"roms/scsi/buslogic/BT-958D_BIOS.rom"; @@ -1518,6 +1522,7 @@ buslogic_init(device_t *info) scam_rom_size = 0x0200; dev->fw_rev = "AA507B"; dev->cdrom_boot = 1; + dev->bit32 = 1; break; } @@ -1753,6 +1758,15 @@ device_t buslogic_640a_device = { NULL }; +device_t buslogic_445s_device = { + "Buslogic BT-445S ISA", + DEVICE_VLB, + CHIP_BUSLOGIC_ISA, + buslogic_init, x54x_close, NULL, + NULL, NULL, NULL, NULL, + BT_ISA_Config +}; + device_t buslogic_pci_device = { "Buslogic BT-958D PCI", DEVICE_PCI, diff --git a/src/scsi/scsi_buslogic.h b/src/scsi/scsi_buslogic.h index 5da59cfa5..4383ad640 100644 --- a/src/scsi/scsi_buslogic.h +++ b/src/scsi/scsi_buslogic.h @@ -23,6 +23,7 @@ extern device_t buslogic_device; extern device_t buslogic_545s_device; extern device_t buslogic_640a_device; +extern device_t buslogic_445s_device; extern device_t buslogic_pci_device; extern void BuslogicDeviceReset(void *p); diff --git a/src/scsi/scsi_x54x.c b/src/scsi/scsi_x54x.c index 8b3ccf8d7..2388ea243 100644 --- a/src/scsi/scsi_x54x.c +++ b/src/scsi/scsi_x54x.c @@ -1472,6 +1472,9 @@ x54x_reset(x54x_t *dev) dev->MailboxInPosCur = 0; dev->MailboxOutInterrupts = 0; dev->PendingInterrupt = 0; + dev->IrqEnabled = 1; + dev->MailboxCount = 0; + dev->MailboxOutPosCur = 0; if (dev->ven_reset) { dev->ven_reset(dev); @@ -1864,7 +1867,7 @@ x54x_io_set(x54x_t *dev, uint32_t base) if (dev->bus & DEVICE_PCI) bit32 = 1; - else if ((dev->bus & DEVICE_MCA) && dev->mca32) + else if ((dev->bus & DEVICE_MCA) && dev->bit32) bit32 = 1; if (bit32) { @@ -1888,7 +1891,7 @@ x54x_io_remove(x54x_t *dev, uint32_t base) if (dev->bus & DEVICE_PCI) bit32 = 1; - else if ((dev->bus & DEVICE_MCA) && dev->mca32) + else if ((dev->bus & DEVICE_MCA) && dev->bit32) bit32 = 1; x54x_log("x54x: Removing I/O handler at %04X\n", base); @@ -1912,7 +1915,7 @@ x54x_mem_init(x54x_t *dev, uint32_t addr) if (dev->bus & DEVICE_PCI) bit32 = 1; - else if ((dev->bus & DEVICE_MCA) && dev->mca32) + else if ((dev->bus & DEVICE_MCA) && dev->bit32) bit32 = 1; if (bit32) { diff --git a/src/scsi/scsi_x54x.h b/src/scsi/scsi_x54x.h index eb67ac05f..f02c8e9e5 100644 --- a/src/scsi/scsi_x54x.h +++ b/src/scsi/scsi_x54x.h @@ -423,7 +423,7 @@ typedef struct { uint8_t setup_info_len; uint8_t max_id; uint8_t pci_slot; - uint8_t mca32; + uint8_t bit32; mem_mapping_t mmio_mapping; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 2e3d69b37..6dc7307bb 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -103,19 +103,6 @@ video_cards[] = { {"[ISA] Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000 }, {"[ISA] VGA", "vga", &vga_device, GFX_VGA }, {"[ISA] Wyse 700", "wy700", &wy700_device, GFX_WY700 }, - {"[VLB] ATI Graphics Pro Turbo (Mach64 GX)", "mach64x_vlb", &mach64gx_vlb_device, GFX_MACH64GX_VLB }, - {"[VLB] Diamond Stealth 32 (Tseng ET4000/w32p)","stealth32_vlb", &et4000w32p_vlb_device, GFX_ET4000W32_VLB }, - {"[VLB] Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000_vlb", &s3_virge_vlb_device, GFX_VIRGE_VLB }, - {"[VLB] Diamond Stealth 3D 3000 (S3 ViRGE/VX)", "stealth3d_3000_vlb", &s3_virge_988_vlb_device, GFX_VIRGEVX_VLB }, - {"[VLB] Diamond Stealth 64 DRAM (S3 Trio64)", "stealth64d_vlb", &s3_diamond_stealth64_vlb_device, GFX_STEALTH64_VLB }, - {"[VLB] Number Nine 9FX (S3 Trio64)", "n9_9fx_vlb", &s3_9fx_vlb_device, GFX_N9_9FX_VLB }, - {"[VLB] Paradise Bahamas 64 (S3 Vision864)", "bahamas64_vlb", &s3_bahamas64_vlb_device, GFX_BAHAMAS64_VLB }, - {"[VLB] Phoenix S3 Vision864", "px_vision864_vlb", &s3_phoenix_vision864_vlb_device, GFX_PHOENIX_VISION864_VLB }, - {"[VLB] Phoenix S3 Trio32", "px_trio32_vlb", &s3_phoenix_trio32_vlb_device, GFX_PHOENIX_TRIO32_VLB }, - {"[VLB] Phoenix S3 Trio64", "px_trio64_vlb", &s3_phoenix_trio64_vlb_device, GFX_PHOENIX_TRIO64_VLB }, - {"[VLB] S3 ViRGE/DX", "virge375_vlb", &s3_virge_375_vlb_device, GFX_VIRGEDX_VLB }, - {"[VLB] S3 ViRGE/DX (VBE 2.0)", "virge375_vbe20_vlb", &s3_virge_375_4_vlb_device, GFX_VIRGEDX4_VLB }, - {"[VLB] Trident TGUI9440", "tgui9440_vlb", &tgui9440_vlb_device, GFX_TGUI9440_VLB }, {"[PCI] ATI Graphics Pro Turbo (Mach64 GX)", "mach64x_pci", &mach64gx_pci_device, GFX_MACH64GX_PCI }, {"[PCI] ATI Video Xpression (Mach64 VT2)", "mach64vt2", &mach64vt2_device, GFX_MACH64VT2 }, {"[PCI] Diamond Stealth 32 (Tseng ET4000/w32p)","stealth32_pci", &et4000w32p_pci_device, GFX_ET4000W32_PCI }, @@ -135,6 +122,19 @@ video_cards[] = { {"[PCI] S3 ViRGE/DX", "virge375_pci", &s3_virge_375_pci_device, GFX_VIRGEDX_PCI }, {"[PCI] S3 ViRGE/DX (VBE 2.0)", "virge375_vbe20_pci", &s3_virge_375_4_pci_device, GFX_VIRGEDX4_PCI }, {"[PCI] Trident TGUI9440", "tgui9440_pci", &tgui9440_pci_device, GFX_TGUI9440_PCI }, + {"[VLB] ATI Graphics Pro Turbo (Mach64 GX)", "mach64x_vlb", &mach64gx_vlb_device, GFX_MACH64GX_VLB }, + {"[VLB] Diamond Stealth 32 (Tseng ET4000/w32p)","stealth32_vlb", &et4000w32p_vlb_device, GFX_ET4000W32_VLB }, + {"[VLB] Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000_vlb", &s3_virge_vlb_device, GFX_VIRGE_VLB }, + {"[VLB] Diamond Stealth 3D 3000 (S3 ViRGE/VX)", "stealth3d_3000_vlb", &s3_virge_988_vlb_device, GFX_VIRGEVX_VLB }, + {"[VLB] Diamond Stealth 64 DRAM (S3 Trio64)", "stealth64d_vlb", &s3_diamond_stealth64_vlb_device, GFX_STEALTH64_VLB }, + {"[VLB] Number Nine 9FX (S3 Trio64)", "n9_9fx_vlb", &s3_9fx_vlb_device, GFX_N9_9FX_VLB }, + {"[VLB] Paradise Bahamas 64 (S3 Vision864)", "bahamas64_vlb", &s3_bahamas64_vlb_device, GFX_BAHAMAS64_VLB }, + {"[VLB] Phoenix S3 Vision864", "px_vision864_vlb", &s3_phoenix_vision864_vlb_device, GFX_PHOENIX_VISION864_VLB }, + {"[VLB] Phoenix S3 Trio32", "px_trio32_vlb", &s3_phoenix_trio32_vlb_device, GFX_PHOENIX_TRIO32_VLB }, + {"[VLB] Phoenix S3 Trio64", "px_trio64_vlb", &s3_phoenix_trio64_vlb_device, GFX_PHOENIX_TRIO64_VLB }, + {"[VLB] S3 ViRGE/DX", "virge375_vlb", &s3_virge_375_vlb_device, GFX_VIRGEDX_VLB }, + {"[VLB] S3 ViRGE/DX (VBE 2.0)", "virge375_vbe20_vlb", &s3_virge_375_4_vlb_device, GFX_VIRGEDX4_VLB }, + {"[VLB] Trident TGUI9440", "tgui9440_vlb", &tgui9440_vlb_device, GFX_TGUI9440_VLB }, {"", "", NULL, -1 } };