From d21a4fbf3c5f9fb54d98abed677bc2b017983d8b Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 25 Aug 2017 23:03:15 +0200 Subject: [PATCH 1/4] Fixed several bugs in the Buslogic emulation, and implemented the BIOS stuff correctly - AutoSCSI now works and the PCI SCSI BIOS no longer needs to have an legayc ISA-compatible port enabled to work; the PCI controller has also been changed from BT-958D to BT-946C which is more like what we emulate. --- src/scsi.c | 2 +- src/scsi_buslogic.c | 367 +++++++++++++++++++++++++++++++++----------- 2 files changed, 279 insertions(+), 90 deletions(-) diff --git a/src/scsi.c b/src/scsi.c index 6cd849f6d..95a7c27ad 100644 --- a/src/scsi.c +++ b/src/scsi.c @@ -53,7 +53,7 @@ static SCSI_CARD scsi_cards[] = { { "Adaptec AHA-1542CF", "aha1542cf", &aha1542cf_device, aha_device_reset }, { "Adaptec AHA-1640", "aha1640", &aha1640_device, aha_device_reset }, { "BusLogic BT-542B", "bt542b", &buslogic_device, BuslogicDeviceReset }, - { "BusLogic BT-958D PCI", "bt958d", &buslogic_pci_device, BuslogicDeviceReset }, + { "BusLogic BT-946C PCI", "bt946c", &buslogic_pci_device, BuslogicDeviceReset }, { "", "", NULL, NULL }, }; diff --git a/src/scsi_buslogic.c b/src/scsi_buslogic.c index 5097ba3e7..28bb3f939 100644 --- a/src/scsi_buslogic.c +++ b/src/scsi_buslogic.c @@ -8,7 +8,7 @@ * supported: * * 0 - BT-542B ISA; - * 1 - BT-958 PCI (but BT-542B ISA on non-PCI machines) + * 1 - BT-946C PCI (but BT-542B ISA on non-PCI machines) * * Version: @(#)scsi_buslogic.c 1.0.8 2017/08/23 * @@ -119,24 +119,10 @@ typedef struct { fIrqAutoConfiguration :1; uint8_t uDMATransferRate; uint8_t uSCSIId; - uint8_t fLowByteTerminated :1, - fParityCheckingEnabled :1, - fHighByteTerminated :1, - fNoisyCablingEnvironment:1, - fFastSyncNegotiation :1, - fBusResetEnabled :1, - fReserved3 :1, - fActiveNegotiationEna :1; + uint8_t uSCSIConfiguration; uint8_t uBusOnDelay; uint8_t uBusOffDelay; - uint8_t fHostAdapterBIOSEnabled :1, - fBIOSRedirectionOfInt19 :1, - fExtendedTranslation :1, - fMapRemovableAsFixed :1, - fReserved4 :1, - fBIOSMoreThan2Drives :1, - fBIOSInterruptMode :1, - fFlopticalSupport :1; + uint8_t uBIOSConfiguration; uint16_t u16DeviceEnabledMask; uint16_t u16WidePermittedMask; uint16_t u16FastPermittedMask; @@ -491,7 +477,7 @@ typedef struct { uint8_t CmdBuf[128]; uint8_t CmdParam; uint8_t CmdParamLeft; - uint8_t DataBuf[128]; + uint8_t DataBuf[65536]; uint16_t DataReply; uint16_t DataReplyLeft; uint32_t MailboxCount; @@ -517,6 +503,7 @@ typedef struct { uint32_t bios_addr, bios_size, bios_mask; + uint8_t AutoSCSIROM[32768]; } Buslogic_t; #pragma pack(pop) @@ -529,6 +516,7 @@ static Buslogic_t *BuslogicResetDevice; enum { CHIP_BUSLOGIC_ISA, + CHIP_BUSLOGIC_MCA, CHIP_BUSLOGIC_PCI }; @@ -594,6 +582,122 @@ BuslogicInterrupt(Buslogic_t *bl, int set) } +static wchar_t * +BuslogicGetNVRFileName(Buslogic_t *bl) +{ + switch(bl->chip) + { + case CHIP_BUSLOGIC_ISA: + return L"bt542b.nvr"; + case CHIP_BUSLOGIC_MCA: + return L"bt640.nvr"; + case CHIP_BUSLOGIC_PCI: + return L"bt946c.nvr"; + default: + fatal("Unrecognized BusLogic chip: %i\n", bl->chip); + return NULL; + } +} + + +static void +BuslogicInitializeAutoSCSIRam(Buslogic_t *bl, uint8_t safe) +{ + HALocalRAM *HALR = &bl->LocalRAM; + + memset(&(HALR->structured.autoSCSIData), 0, sizeof(AutoSCSIRam)); + + HALR->structured.autoSCSIData.aInternalSignature[0] = 'F'; + HALR->structured.autoSCSIData.aInternalSignature[1] = 'A'; + + HALR->structured.autoSCSIData.cbInformation = 64; + + HALR->structured.autoSCSIData.aHostAdaptertype[0] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '9' : '5'; + HALR->structured.autoSCSIData.aHostAdaptertype[1] = '4'; + HALR->structured.autoSCSIData.aHostAdaptertype[2] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '6' : '2'; + HALR->structured.autoSCSIData.aHostAdaptertype[3] = (bl->chip == CHIP_BUSLOGIC_PCI) ? 'C' : 'B'; + HALR->structured.autoSCSIData.aHostAdaptertype[4] = ' '; + + HALR->structured.autoSCSIData.fLevelSensitiveInterrupt = (bl->chip == CHIP_BUSLOGIC_PCI) ? 1 : 0; + HALR->structured.autoSCSIData.uSystemRAMAreForBIOS = 6; + + if (bl->chip != CHIP_BUSLOGIC_PCI) + { + switch(bl->DmaChannel) + { + case 5: + HALR->structured.autoSCSIData.uDMAChannel = 1; + break; + case 6: + HALR->structured.autoSCSIData.uDMAChannel = 2; + break; + case 7: + HALR->structured.autoSCSIData.uDMAChannel = 3; + break; + default: + HALR->structured.autoSCSIData.uDMAChannel = 0; + break; + } + } + HALR->structured.autoSCSIData.fDMAAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1; + + if (bl->chip != CHIP_BUSLOGIC_PCI) + { + switch(bl->Irq) + { + case 9: + HALR->structured.autoSCSIData.uIrqChannel = 1; + break; + case 10: + HALR->structured.autoSCSIData.uIrqChannel = 2; + break; + case 11: + HALR->structured.autoSCSIData.uIrqChannel = 3; + break; + case 12: + HALR->structured.autoSCSIData.uIrqChannel = 4; + break; + case 14: + HALR->structured.autoSCSIData.uIrqChannel = 5; + break; + case 15: + HALR->structured.autoSCSIData.uIrqChannel = 6; + break; + default: + HALR->structured.autoSCSIData.uIrqChannel = 0; + break; + } + } + HALR->structured.autoSCSIData.fIrqAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1; + + HALR->structured.autoSCSIData.uDMATransferRate = (bl->chip == CHIP_BUSLOGIC_ISA) ? 1 : 0; + + HALR->structured.autoSCSIData.uSCSIId = 15; + HALR->structured.autoSCSIData.uSCSIConfiguration = 0x3F; + HALR->structured.autoSCSIData.uBusOnDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 7; + HALR->structured.autoSCSIData.uBusOffDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 4; + HALR->structured.autoSCSIData.uBIOSConfiguration = (bl->has_bios) ? 0x33 : 0x32; + if (!safe) + { + HALR->structured.autoSCSIData.uBIOSConfiguration |= 0x04; + } + + HALR->structured.autoSCSIData.u16DeviceEnabledMask = 0xffff; + HALR->structured.autoSCSIData.u16WidePermittedMask = 0xffff; + HALR->structured.autoSCSIData.u16FastPermittedMask = 0xffff; + HALR->structured.autoSCSIData.u16SynchronousPermittedMask = 0xffff; + HALR->structured.autoSCSIData.u16DisconnectPermittedMask = 0xffff; + + HALR->structured.autoSCSIData.uPCIInterruptPin = PCI_INTB; + HALR->structured.autoSCSIData.fVesaBusSpeedGreaterThan33MHz = 1; + + HALR->structured.autoSCSIData.uAutoSCSIMaximumLUN = 7; + + HALR->structured.autoSCSIData.fInt13Extension = safe ? 0 : 1; + HALR->structured.autoSCSIData.fCDROMBoot = safe ? 0 : 1; +} + + static void BuslogicClearInterrupt(Buslogic_t *bl) { @@ -1590,14 +1694,7 @@ BuslogicRead(uint16_t Port, void *p) break; case 1: - if (bl->UseLocalRAM && (bl->Command == 0x91)) - { - Temp = bl->LocalRAM.u8View[bl->DataReply]; - } - else - { - Temp = bl->DataBuf[bl->DataReply]; - } + Temp = bl->DataBuf[bl->DataReply]; if (bl->DataReplyLeft) { bl->DataReply++; @@ -1617,7 +1714,8 @@ BuslogicRead(uint16_t Port, void *p) break; } - if (Port < 0x1000) { + /* if (Port < 0x1000) { */ + if (Port & 3) { pclog("Buslogic: Read Port 0x%02X, Returned Value %02X\n", Port, Temp); } @@ -1640,6 +1738,29 @@ BuslogicReadL(uint16_t Port, void *p) } +static uint8_t +BuslogicMemRead(uint32_t addr, void *p) +{ + pclog("BuslogicMemRead(%08X, %08X)\n", addr, p); + return BuslogicRead(addr & 3, p); +} + + +static uint16_t +BuslogicMemReadW(uint32_t addr, void *p) +{ + pclog("BuslogicMemReadW(%08X, %08X)\n", addr, p); + return BuslogicReadW(addr & 3, p); +} + +static uint32_t +BuslogicMemReadL(uint32_t addr, void *p) +{ + pclog("BuslogicMemReadL(%08X, %08X)\n", addr, p); + return BuslogicReadL(addr & 3, p); +} + + static void BuslogicWriteW(uint16_t Port, uint16_t Val, void *p); static void BuslogicWriteL(uint16_t Port, uint32_t Val, void *p); static void @@ -1659,6 +1780,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) int cCharsToTransfer; uint16_t cyl = 0; uint8_t temp = 0; + FILE *f; pclog("Buslogic: Write Port 0x%02X, Value %02X\n", Port, Val); @@ -1784,6 +1906,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) if (!bl->CmdParamLeft) { SpecificLog("Running Operation Code 0x%02X\n", bl->Command); + bl->DataReply = 0; switch (bl->Command) { case 0x00: bl->DataReplyLeft = 0; @@ -1828,8 +1951,8 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) pclog("Inquire Board\n"); bl->DataBuf[0] = 0x41; bl->DataBuf[1] = 0x41; - bl->DataBuf[2] = '2'; - bl->DataBuf[3] = '2'; + bl->DataBuf[2] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '5' : '2'; + bl->DataBuf[3] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '0' : '2'; bl->DataReplyLeft = 4; break; @@ -1981,7 +2104,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) uint16_t TargetsPresentMask = 0; for (i=0; i<15; i++) { - if (scsi_device_present(i, j)) + if (scsi_device_present(i, 0)) TargetsPresentMask |= (1 << i); } bl->DataBuf[0] = TargetsPresentMask & 0xFF; @@ -2033,12 +2156,12 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) break; case 0x84: - bl->DataBuf[0] = '1'; + bl->DataBuf[0] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '7' : '1'; bl->DataReplyLeft = 1; break; case 0x85: - bl->DataBuf[0] = 'E'; + bl->DataBuf[0] = (bl->chip == CHIP_BUSLOGIC_PCI) ? 'B' : 'E'; bl->DataReplyLeft = 1; break; @@ -2087,9 +2210,9 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) memset(bl->DataBuf, 0, bl->DataReplyLeft); if (bl->chip == CHIP_BUSLOGIC_PCI) { aModelName[0] = '9'; - aModelName[1] = '5'; - aModelName[2] = '8'; - aModelName[3] = 'D'; + aModelName[1] = '4'; + aModelName[2] = '6'; + aModelName[3] = 'C'; } cCharsToTransfer = bl->DataReplyLeft <= sizeof(aModelName) ? bl->DataReplyLeft @@ -2127,7 +2250,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) ReplyIESI->fLevelSensitiveInterrupt = 1; ReplyIESI->fHostUltraSCSI = 1; } - memcpy(ReplyIESI->aFirmwareRevision, "21E", sizeof(ReplyIESI->aFirmwareRevision)); + memcpy(ReplyIESI->aFirmwareRevision, (bl->chip == CHIP_BUSLOGIC_PCI) ? "07B" : "21E", sizeof(ReplyIESI->aFirmwareRevision)); SpecificLog("Return Extended Setup Information: %d\n", bl->CmdBuf[0]); break; @@ -2148,28 +2271,65 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) case 0x90: pclog("Store Local RAM\n"); - Offset = bl->CmdBuf[0]; bl->DataReplyLeft = 0; - - for (i = 0; i < bl->CmdBuf[1]; i++) - { - bl->LocalRAM.u8View[Offset + i] = bl->CmdBuf[i + 2]; - } - - bl->UseLocalRAM = 0; - bl->DataReply = Offset; + memcpy(&(bl->LocalRAM.u8View[Offset]), &(bl->CmdBuf[2]), bl->CmdBuf[1]); + + bl->DataReply = 0; break; case 0x91: pclog("Fetch Local RAM\n"); Offset = bl->CmdBuf[0]; bl->DataReplyLeft = bl->CmdBuf[1]; - - bl->UseLocalRAM = 1; - bl->DataReply = Offset; + memcpy(bl->DataBuf, &(bl->LocalRAM.u8View[Offset]), bl->CmdBuf[1]); + + bl->DataReply = 0; break; - + + case 0x92: + bl->DataReplyLeft = 0; + + switch (bl->CmdBuf[0]) + { + case 0: + case 2: + BuslogicInitializeAutoSCSIRam(bl, 0); + break; + case 3: + BuslogicInitializeAutoSCSIRam(bl, 3); + break; + case 1: + f = nvrfopen(BuslogicGetNVRFileName(bl), L"wb"); + if (f) + { + fwrite(&(bl->LocalRAM.u8View[64]), 1, 64, f); + fclose(f); + f = NULL; + } + break; + default: + bl->Status |= STAT_INVCMD; + break; + } + break; + + case 0x94: + if (bl->CmdBuf[0]) + { + SpecificLog("Invalid AutoSCSI command mode %x\n", bl->CmdBuf[0]); + bl->DataReplyLeft = 0; + bl->Status |= STAT_INVCMD; + } + else + { + bl->DataReplyLeft = bl->CmdBuf[2]; + bl->DataReplyLeft <<= 8; + bl->DataReplyLeft |= bl->CmdBuf[1]; + memcpy(bl->DataBuf, bl->AutoSCSIROM, bl->DataReplyLeft); + } + break; + case 0x95: if (bl->chip == CHIP_BUSLOGIC_PCI) { if (bl->Base != 0) { @@ -2276,6 +2436,30 @@ BuslogicWriteL(uint16_t Port, uint32_t Val, void *p) } +static void +BuslogicMemWrite(uint32_t addr, uint8_t Val, void *p) +{ + pclog("BuslogicMemWrite(%08X, %02X, %08X)\n", addr, Val, p); + BuslogicWrite(addr & 3, Val, p); +} + + +static void +BuslogicMemWriteW(uint32_t addr, uint16_t Val, void *p) +{ + pclog("BuslogicMemWriteW(%08X, %04X, %08X)\n", addr, Val, p); + BuslogicWriteW(addr & 3, Val, p); +} + + +static void +BuslogicMemWriteL(uint32_t addr, uint32_t Val, void *p) +{ + pclog("BuslogicMemWriteL(%08X, %08X, %08X)\n", addr, Val, p); + BuslogicWriteL(addr & 3, Val, p); +} + + static void BuslogicSenseBufferFree(Req_t *req, int Copy) { @@ -2551,27 +2735,6 @@ BuslogicCommandCallback(void *p) } -static uint8_t -mem_read_null(uint32_t addr, void *priv) -{ - return(0); -} - - -static uint16_t -mem_read_nullw(uint32_t addr, void *priv) -{ - return(0); -} - - -static uint32_t -mem_read_nulll(uint32_t addr, void *priv) -{ - return(0); -} - - typedef union { uint32_t addr; uint8_t addr_regs[4]; @@ -2597,9 +2760,9 @@ BuslogicBIOSUpdate(Buslogic_t *bl) mem_mapping_enable(&bl->bios.mapping); mem_mapping_set_addr(&bl->bios.mapping, bl->bios_addr, bl->bios_size); - pclog("BT-958D: BIOS now at: %06X\n", bl->bios_addr); + pclog("BT-946C: BIOS now at: %06X\n", bl->bios_addr); } else { - pclog("BT-958D: BIOS disabled\n"); + pclog("BT-946C: BIOS disabled\n"); mem_mapping_disable(&bl->bios.mapping); } } @@ -2610,6 +2773,8 @@ BuslogicPCIRead(int func, int addr, void *p) { Buslogic_t *bl = (Buslogic_t *)p; + pclog("BT-946C: Reading register %02X\n", addr & 0xff); + switch (addr) { case 0x00: return 0x4b; @@ -2632,7 +2797,9 @@ BuslogicPCIRead(int func, int addr, void *p) case 0x0A: return 0; /*Subclass*/ case 0x0B: - return 1; /* Class code*/ + return 1; /*Class code*/ + case 0x0E: + return 0; /*Header type */ case 0x10: return (buslogic_pci_bar[0].addr_regs[0] & 0xe0) | 1; /*I/O space*/ case 0x11: @@ -2659,18 +2826,18 @@ BuslogicPCIRead(int func, int addr, void *p) return 0x10; #if 0 case 0x30: /* PCI_ROMBAR */ - pclog("BT-958D: BIOS BAR 00 = %02X\n", buslogic_pci_bar[2].addr_regs[0] & 0x01); + pclog("BT-946C: BIOS BAR 00 = %02X\n", buslogic_pci_bar[2].addr_regs[0] & 0x01); return buslogic_pci_bar[2].addr_regs[0] & 0x01; case 0x31: /* PCI_ROMBAR 15:11 */ - pclog("BT-958D: BIOS BAR 01 = %02X\n", (buslogic_pci_bar[2].addr_regs[1] & bl->bios_mask)); + pclog("BT-946C: BIOS BAR 01 = %02X\n", (buslogic_pci_bar[2].addr_regs[1] & bl->bios_mask)); return (buslogic_pci_bar[2].addr_regs[1] & bl->bios_mask); break; case 0x32: /* PCI_ROMBAR 23:16 */ - pclog("BT-958D: BIOS BAR 02 = %02X\n", buslogic_pci_bar[2].addr_regs[2]); + pclog("BT-946C: BIOS BAR 02 = %02X\n", buslogic_pci_bar[2].addr_regs[2]); return buslogic_pci_bar[2].addr_regs[2]; break; case 0x33: /* PCI_ROMBAR 31:24 */ - pclog("BT-958D: BIOS BAR 03 = %02X\n", buslogic_pci_bar[2].addr_regs[3]); + pclog("BT-946C: BIOS BAR 03 = %02X\n", buslogic_pci_bar[2].addr_regs[3]); return buslogic_pci_bar[2].addr_regs[3]; break; #endif @@ -2690,11 +2857,13 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p) Buslogic_t *bl = (Buslogic_t *)p; uint8_t valxor; + pclog("BT-946C: Write value %02X to register %02X\n", val, addr & 0xff); + switch (addr) { case 0x04: valxor = (val & 0x27) ^ buslogic_pci_regs[addr]; if (valxor & PCI_COMMAND_IO) { - io_removehandler(bl->PCIBase, 4, + io_removehandler(bl->PCIBase, 0x20, BuslogicRead, BuslogicReadW, BuslogicReadL, BuslogicWrite, BuslogicWriteW, BuslogicWriteL, bl); @@ -2760,7 +2929,7 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p) pclog("BusLogic PCI: New MMIO base is %04X\n" , bl->MMIOBase); /* We're done, so get out of the here. */ if (buslogic_pci_regs[4] & PCI_COMMAND_MEM) { - if (bl->PCIBase != 0) { + if (bl->MMIOBase != 0) { mem_mapping_set_addr(&bl->mmio_mapping, bl->MMIOBase, 0x20); } @@ -2775,7 +2944,7 @@ BuslogicPCIWrite(int func, int addr, uint8_t val, void *p) buslogic_pci_bar[2].addr_regs[1] &= bl->bios_mask; buslogic_pci_bar[2].addr &= 0xffffe001; bl->bios_addr = buslogic_pci_bar[2].addr; - pclog("BT-958D: BIOS BAR %02X = NOW %02X (%02X)\n", addr & 3, buslogic_pci_bar[2].addr_regs[addr & 3], val); + pclog("BT-946C: BIOS BAR %02X = NOW %02X (%02X)\n", addr & 3, buslogic_pci_bar[2].addr_regs[addr & 3], val); BuslogicBIOSUpdate(bl); return; #endif @@ -2811,8 +2980,6 @@ BuslogicInitializeLocalRAM(Buslogic_t *bl) { bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt = 0; } - bl->LocalRAM.structured.autoSCSIData.fParityCheckingEnabled = 1; - bl->LocalRAM.structured.autoSCSIData.fExtendedTranslation = 1; bl->LocalRAM.structured.autoSCSIData.u16DeviceEnabledMask = ~0; bl->LocalRAM.structured.autoSCSIData.u16WidePermittedMask = ~0; bl->LocalRAM.structured.autoSCSIData.u16FastPermittedMask = ~0; @@ -2827,6 +2994,7 @@ static void * BuslogicInit(int chip) { Buslogic_t *bl; + FILE *f; bl = malloc(sizeof(Buslogic_t)); memset(bl, 0x00, sizeof(Buslogic_t)); @@ -2871,7 +3039,16 @@ BuslogicInit(int chip) } else { - rom_init(&bl->bios, L"roms/scsi/buslogic/494GNPCI.ROM", 0xd8000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + rom_init(&bl->bios, L"roms/scsi/buslogic/428A494G.BIN", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); + memset(bl->AutoSCSIROM, 0xff, 32768); + f = romfopen(L"roms/scsi/buslogic/AutoSCSI.rom", L"rb"); + } + + if (f) + { + fread(bl->AutoSCSIROM, 1, 32768, f); + fclose(f); + f = NULL; } } else @@ -2880,12 +3057,24 @@ BuslogicInit(int chip) bl->bios_mask = 0; } - + timer_add(BuslogicResetPoll, &BuslogicResetCallback, &BuslogicResetCallback, bl); timer_add(BuslogicCommandCallback, &BuslogicCallback, &BuslogicCallback, bl); + f = nvrfopen(BuslogicGetNVRFileName(bl), L"wb"); + if (f) + { + fread(&(bl->LocalRAM.u8View[64]), 1, 64, f); + fclose(f); + f = NULL; + } + else + { + BuslogicInitializeAutoSCSIRam(bl, 0); + } + if (bl->chip == CHIP_BUSLOGIC_PCI) { bl->Card = pci_add(BuslogicPCIRead, BuslogicPCIWrite, bl); @@ -2910,8 +3099,8 @@ BuslogicInit(int chip) #endif mem_mapping_add(&bl->mmio_mapping, 0xfffd0000, 0x20, - mem_read_null, mem_read_nullw, mem_read_nulll, - mem_write_null, mem_write_nullw, mem_write_nulll, + BuslogicMemRead, BuslogicMemReadW, BuslogicMemReadL, + BuslogicMemWrite, BuslogicMemWriteW, BuslogicMemWriteL, NULL, MEM_MAPPING_EXTERNAL, bl); mem_mapping_disable(&bl->mmio_mapping); #if 0 @@ -2936,7 +3125,7 @@ Buslogic_542B_Init(void) static void * -Buslogic_958D_Init(void) +Buslogic_946C_Init(void) { return BuslogicInit(CHIP_BUSLOGIC_PCI); } @@ -3046,9 +3235,9 @@ device_t buslogic_device = { }; device_t buslogic_pci_device = { - "Buslogic BT-958D PCI", + "Buslogic BT-946C PCI", 0, - Buslogic_958D_Init, + Buslogic_946C_Init, BuslogicClose, NULL, NULL, From 2b980aae729905e0594bddc273a37cf981c973e7 Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 25 Aug 2017 23:17:45 +0200 Subject: [PATCH 2/4] Fixed some Buslogic bugs; Implemented the EuroPC JIM chip NVR saving/loading correctly. --- src/jim.c | 52 +++++++++++++++++++++++++++++++++++++++------ src/jim.h | 1 + src/model.c | 2 +- src/nvr.c | 7 ++++++ src/scsi_buslogic.c | 4 ++-- 5 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 src/jim.h diff --git a/src/jim.c b/src/jim.c index 39dc91eb5..3b8465bae 100644 --- a/src/jim.c +++ b/src/jim.c @@ -7,7 +7,10 @@ #include "CPU/cpu.h" #include "io.h" #include "device.h" +#include "jim.h" +#include "mem.h" #include "model.h" +#include "rom.h" uint8_t europcdat[16]; @@ -15,11 +18,43 @@ uint8_t europcdat[16]; struct { uint8_t dat[16]; - int stat; - int addr; + uint8_t stat; + uint8_t addr; } europc_rtc; +static uint8_t jim_load_nvr(void) +{ + FILE *f; + + f = nvrfopen(L"europc_jim.nvr", L"rb"); + if (f) + { + fread(europcdat, 1, 16, f); + fread(europc_rtc.dat, 1, 16, f); + fclose(f); + f = NULL; + return 1; + } + return 0; +} + + +void jim_save_nvr(void) +{ + FILE *f; + + f = nvrfopen(L"europc_jim.nvr", L"wb"); + if (f) + { + fwrite(europcdat, 1, 16, f); + fwrite(europc_rtc.dat, 1, 16, f); + fclose(f); + f = NULL; + } +} + + static void writejim(uint16_t addr, uint8_t val, void *p) { if ((addr&0xFF0)==0x250) europcdat[addr&0xF]=val; @@ -73,12 +108,15 @@ void jim_init(void) { uint8_t viddat; memset(europc_rtc.dat,0,16); - europc_rtc.dat[0xF]=1; - europc_rtc.dat[3]=1; - europc_rtc.dat[4]=1; - europc_rtc.dat[5]=0x88; + if (!jim_load_nvr()) + { + europc_rtc.dat[0xF]=1; + europc_rtc.dat[3]=1; + europc_rtc.dat[4]=1; + europc_rtc.dat[5]=0x88; + } if (gfxcard==GFX_CGA || gfxcard == GFX_COLORPLUS) viddat=0x12; - else if (gfxcard==GFX_MDA || gfxcard==GFX_HERCULES || gfxcard==GFX_INCOLOR) viddat=3; + else if (gfxcard==GFX_MDA || gfxcard==GFX_HERCULES || gfxcard==GFX_INCOLOR) viddat=3; else viddat=0x10; europc_rtc.dat[0xB]=viddat; europc_rtc.dat[0xD]=viddat; /*Checksum*/ diff --git a/src/jim.h b/src/jim.h new file mode 100644 index 000000000..d57dc4f0d --- /dev/null +++ b/src/jim.h @@ -0,0 +1 @@ +void jim_save_nvr(void); diff --git a/src/model.c b/src/model.c index 83a0adee9..35287ea87 100644 --- a/src/model.c +++ b/src/model.c @@ -146,7 +146,7 @@ MODEL models[] = {"[8088] Generic XT clone", ROM_GENXT, "genxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 64, 640, 64, 0, xt_init, NULL }, {"[8088] Juko XT clone", ROM_JUKOPC, "jukopc", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 64, 640, 64, 0, xt_init, NULL }, {"[8088] Phoenix XT clone", ROM_PXXT, "pxxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 64, 640, 64, 0, xt_init, NULL }, - {"[8088] Schneider EuroPC", ROM_EUROPC, "europc", {{"", cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 512, 640, 128, 63, europc_init, NULL }, + {"[8088] Schneider EuroPC", ROM_EUROPC, "europc", {{"", cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 512, 640, 128, 0, europc_init, NULL }, {"[8088] Tandy 1000", ROM_TANDY, "tandy", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, 0, 128, 640, 128, 0, tandy1k_init, &tandy1000_device }, {"[8088] Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, 0, 256, 640, 128, 0, tandy1k_init, &tandy1000hx_device }, {"[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 64, 1152, 64, 0, xt_laserxt_init, NULL }, diff --git a/src/nvr.c b/src/nvr.c index 589d8fa7c..f8b22ef1b 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -25,6 +25,7 @@ #include "CPU/cpu.h" #include "device.h" #include "io.h" +#include "jim.h" #include "mem.h" #include "model.h" #include "nmi.h" @@ -279,6 +280,12 @@ void savenvr(void) wchar_t *model_name; wchar_t *nvr_name; + if (romset == ROM_EUROPC) + { + jim_save_nvr(); + return; + } + model_name = (wchar_t *) malloc((strlen(model_get_internal_name_ex(oldmodel)) << 1) + 2); mbstowcs(model_name, model_get_internal_name_ex(oldmodel), strlen(model_get_internal_name_ex(oldmodel)) + 1); nvr_name = (wchar_t *) malloc((wcslen(model_name) << 1) + 2 + 8); diff --git a/src/scsi_buslogic.c b/src/scsi_buslogic.c index 28bb3f939..5e0735af6 100644 --- a/src/scsi_buslogic.c +++ b/src/scsi_buslogic.c @@ -3041,9 +3041,9 @@ BuslogicInit(int chip) { rom_init(&bl->bios, L"roms/scsi/buslogic/428A494G.BIN", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); memset(bl->AutoSCSIROM, 0xff, 32768); - f = romfopen(L"roms/scsi/buslogic/AutoSCSI.rom", L"rb"); } + f = romfopen(L"roms/scsi/buslogic/AutoSCSI.rom", L"rb"); if (f) { fread(bl->AutoSCSIROM, 1, 32768, f); @@ -3063,7 +3063,7 @@ BuslogicInit(int chip) timer_add(BuslogicCommandCallback, &BuslogicCallback, &BuslogicCallback, bl); - f = nvrfopen(BuslogicGetNVRFileName(bl), L"wb"); + f = nvrfopen(BuslogicGetNVRFileName(bl), L"rb"); if (f) { fread(&(bl->LocalRAM.u8View[64]), 1, 64, f); From a48ecb45e1ecfd964ede0b90f205dbc9b5ae0ef6 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 26 Aug 2017 04:38:12 +0200 Subject: [PATCH 3/4] More BT-946C bug fixes and made it use a newer BIOS, and AutoSCSI should now work *correctly*. --- src/scsi_buslogic.c | 69 +++++++++++++++++++++++++-------------------- src/scsi_disk.c | 14 ++++----- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/scsi_buslogic.c b/src/scsi_buslogic.c index 5e0735af6..5d5cf0b74 100644 --- a/src/scsi_buslogic.c +++ b/src/scsi_buslogic.c @@ -39,7 +39,7 @@ #include "scsi_buslogic.h" -#define BUSLOGIC_RESET_DURATION_NS UINT64_C(250000) +#define BUSLOGIC_RESET_DURATION_US UINT64_C(50000) /* @@ -148,14 +148,16 @@ typedef struct { uint8_t fInt13Extension : 1; uint8_t fReserved9 : 1; uint8_t fCDROMBoot : 1; - unsigned char uReserved10 : 5; + unsigned char uReserved10 : 2; + uint8_t fMultiBoot : 1; + unsigned char uReserved11 : 2; unsigned char uBootTargetId : 4; unsigned char uBootChannel : 4; uint8_t fForceBusDeviceScanningOrder : 1; - unsigned char uReserved11 : 7; + unsigned char uReserved12 : 7; uint16_t u16NonTaggedToAlternateLunPermittedMask; uint16_t u16RenegotiateSyncAfterCheckConditionMask; - uint8_t aReserved12[10]; + uint8_t aReserved14[10]; uint8_t aManufacturingDiagnostic[2]; uint16_t u16Checksum; } AutoSCSIRam; @@ -612,11 +614,12 @@ BuslogicInitializeAutoSCSIRam(Buslogic_t *bl, uint8_t safe) HALR->structured.autoSCSIData.cbInformation = 64; - HALR->structured.autoSCSIData.aHostAdaptertype[0] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '9' : '5'; - HALR->structured.autoSCSIData.aHostAdaptertype[1] = '4'; - HALR->structured.autoSCSIData.aHostAdaptertype[2] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '6' : '2'; - HALR->structured.autoSCSIData.aHostAdaptertype[3] = (bl->chip == CHIP_BUSLOGIC_PCI) ? 'C' : 'B'; - HALR->structured.autoSCSIData.aHostAdaptertype[4] = ' '; + HALR->structured.autoSCSIData.aHostAdaptertype[0] = ' '; + HALR->structured.autoSCSIData.aHostAdaptertype[1] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '9' : '5'; + HALR->structured.autoSCSIData.aHostAdaptertype[2] = '4'; + HALR->structured.autoSCSIData.aHostAdaptertype[3] = (bl->chip == CHIP_BUSLOGIC_PCI) ? '6' : '2'; + HALR->structured.autoSCSIData.aHostAdaptertype[4] = (bl->chip == CHIP_BUSLOGIC_PCI) ? 'C' : 'B'; + HALR->structured.autoSCSIData.aHostAdaptertype[5] = ' '; HALR->structured.autoSCSIData.fLevelSensitiveInterrupt = (bl->chip == CHIP_BUSLOGIC_PCI) ? 1 : 0; HALR->structured.autoSCSIData.uSystemRAMAreForBIOS = 6; @@ -672,7 +675,7 @@ BuslogicInitializeAutoSCSIRam(Buslogic_t *bl, uint8_t safe) HALR->structured.autoSCSIData.uDMATransferRate = (bl->chip == CHIP_BUSLOGIC_ISA) ? 1 : 0; - HALR->structured.autoSCSIData.uSCSIId = 15; + HALR->structured.autoSCSIData.uSCSIId = 7; HALR->structured.autoSCSIData.uSCSIConfiguration = 0x3F; HALR->structured.autoSCSIData.uBusOnDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 7; HALR->structured.autoSCSIData.uBusOffDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 4; @@ -693,8 +696,12 @@ BuslogicInitializeAutoSCSIRam(Buslogic_t *bl, uint8_t safe) HALR->structured.autoSCSIData.uAutoSCSIMaximumLUN = 7; + HALR->structured.autoSCSIData.fForceBusDeviceScanningOrder = 1; + HALR->structured.autoSCSIData.uReserved12 = 0x7f; + HALR->structured.autoSCSIData.fInt13Extension = safe ? 0 : 1; HALR->structured.autoSCSIData.fCDROMBoot = safe ? 0 : 1; + HALR->structured.autoSCSIData.fMultiBoot = safe ? 0 : 1; } @@ -749,7 +756,7 @@ BuslogicResetControl(Buslogic_t *bl, uint8_t Reset) bl->Status |= STAT_STST; bl->Status &= ~STAT_IDLE; } - BuslogicResetCallback = BUSLOGIC_RESET_DURATION_NS * TIMER_USEC; + BuslogicResetCallback = BUSLOGIC_RESET_DURATION_US * TIMER_USEC; } @@ -1994,7 +2001,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) for (i=0; i<8; i++) { bl->DataBuf[i] = 0; for (j=0; j<8; j++) { - if (scsi_device_present(i, j)) + if (scsi_device_present(i, j) && (i != 7)) bl->DataBuf[i] |= (1 << j); } } @@ -2012,8 +2019,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) bl->DataBuf[1] = 0; { } - /* bl->DataBuf[2] = 7; */ /* HOST ID */ - bl->DataBuf[2] = 15; /* HOST ID */ + bl->DataBuf[2] = 7; /* HOST ID */ bl->DataReplyLeft = 3; break; @@ -2095,7 +2101,6 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) bl->DataBuf[i-8] |= (1<DataBuf[7] = 0; bl->DataReplyLeft = 8; break; @@ -2104,7 +2109,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) uint16_t TargetsPresentMask = 0; for (i=0; i<15; i++) { - if (scsi_device_present(i, 0)) + if (scsi_device_present(i, 0) && (i != 7)) TargetsPresentMask |= (1 << i); } bl->DataBuf[0] = TargetsPresentMask & 0xFF; @@ -2303,7 +2308,7 @@ BuslogicWrite(uint16_t Port, uint8_t Val, void *p) f = nvrfopen(BuslogicGetNVRFileName(bl), L"wb"); if (f) { - fwrite(&(bl->LocalRAM.u8View[64]), 1, 64, f); + fwrite(&(bl->LocalRAM.structured.autoSCSIData), 1, 64, f); fclose(f); f = NULL; } @@ -3039,10 +3044,12 @@ BuslogicInit(int chip) } else { - rom_init(&bl->bios, L"roms/scsi/buslogic/428A494G.BIN", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); - memset(bl->AutoSCSIROM, 0xff, 32768); + /* rom_init(&bl->bios, L"roms/scsi/buslogic/428A494G.BIN", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); */ + /* rom_init(&bl->bios, L"roms/scsi/buslogic/BT9X6C_BIOS.rom", 0xd8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); */ + rom_init(&bl->bios, L"roms/scsi/buslogic/Womper97.rom", 0xd8000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); } + memset(bl->AutoSCSIROM, 0xff, 32768); f = romfopen(L"roms/scsi/buslogic/AutoSCSI.rom", L"rb"); if (f) { @@ -3063,18 +3070,6 @@ BuslogicInit(int chip) timer_add(BuslogicCommandCallback, &BuslogicCallback, &BuslogicCallback, bl); - f = nvrfopen(BuslogicGetNVRFileName(bl), L"rb"); - if (f) - { - fread(&(bl->LocalRAM.u8View[64]), 1, 64, f); - fclose(f); - f = NULL; - } - else - { - BuslogicInitializeAutoSCSIRam(bl, 0); - } - if (bl->chip == CHIP_BUSLOGIC_PCI) { bl->Card = pci_add(BuslogicPCIRead, BuslogicPCIWrite, bl); @@ -3112,6 +3107,18 @@ BuslogicInit(int chip) BuslogicResetControl(bl, CTRL_HRST); BuslogicInitializeLocalRAM(bl); + + f = nvrfopen(BuslogicGetNVRFileName(bl), L"rb"); + if (f) + { + fread(&(bl->LocalRAM.structured.autoSCSIData), 1, 64, f); + fclose(f); + f = NULL; + } + else + { + BuslogicInitializeAutoSCSIRam(bl, 0); + } return(bl); } diff --git a/src/scsi_disk.c b/src/scsi_disk.c index 5e75ab49e..1e4d05321 100644 --- a/src/scsi_disk.c +++ b/src/scsi_disk.c @@ -307,13 +307,13 @@ int scsi_hd_read_capacity(uint8_t id, uint8_t *cdb, uint8_t *buffer, uint32_t *l buffer[3] = size & 0xff; buffer[6] = 2; /* 512 = 0x0200 */ *len = 8; - - pclog("Read Capacity\n"); - pclog("buffer[0]=%x\n", buffer[0]); - pclog("buffer[1]=%x\n", buffer[1]); - pclog("buffer[2]=%x\n", buffer[2]); - pclog("buffer[3]=%x\n", buffer[3]); - + + scsi_hd_log("Read Capacity\n"); + scsi_hd_log("buffer[0]=%x\n", buffer[0]); + scsi_hd_log("buffer[1]=%x\n", buffer[1]); + scsi_hd_log("buffer[2]=%x\n", buffer[2]); + scsi_hd_log("buffer[3]=%x\n", buffer[3]); + return 1; } From c9267f2380c74fb3342acc5e6331da77a4ef6461 Mon Sep 17 00:00:00 2001 From: Melissa Goad Date: Fri, 25 Aug 2017 22:04:47 -0500 Subject: [PATCH 4/4] ROM dir fixes --- roms/430vx/roms.txt | 1 - roms/acer386/roms.txt | 1 - roms/ami286/roms.txt | 1 - roms/ami386/roms.txt | 1 - roms/ami486/roms.txt | 1 - roms/cmdpc30/roms.txt | 1 - roms/dells200/roms.txt | 1 - roms/dtk/roms.txt | 1 - roms/endeavor/roms.txt | 1 - roms/europc/roms.txt | 1 - roms/genxt/roms.txt | 1 - roms/hot-433/roms.txt | 1 - roms/ibmat/roms.txt | 1 - roms/ibmpc/roms.txt | 1 - roms/ibmxt/roms.txt | 1 - roms/mach64gx/roms.txt | 1 - roms/mda.rom | Bin 8192 -> 0 bytes roms/megapc/roms.txt | 1 - roms/olivetti_m24/roms.txt | 1 - roms/oti067/roms.txt | 1 - roms/pc1512/roms.txt | 1 - roms/pc1640/roms.txt | 1 - roms/pc200/roms.txt | 1 - roms/pc2086/roms.txt | 1 - roms/pc3086/roms.txt | 1 - roms/revenge/roms.txt | 1 - roms/sis496/roms.txt | 1 - roms/tandy/roms.txt | 1 - roms/win486/roms.txt | 1 - 29 files changed, 28 deletions(-) delete mode 100644 roms/430vx/roms.txt delete mode 100644 roms/acer386/roms.txt delete mode 100644 roms/ami286/roms.txt delete mode 100644 roms/ami386/roms.txt delete mode 100644 roms/ami486/roms.txt delete mode 100644 roms/cmdpc30/roms.txt delete mode 100644 roms/dells200/roms.txt delete mode 100644 roms/dtk/roms.txt delete mode 100644 roms/endeavor/roms.txt delete mode 100644 roms/europc/roms.txt delete mode 100644 roms/genxt/roms.txt delete mode 100644 roms/hot-433/roms.txt delete mode 100644 roms/ibmat/roms.txt delete mode 100644 roms/ibmpc/roms.txt delete mode 100644 roms/ibmxt/roms.txt delete mode 100644 roms/mach64gx/roms.txt delete mode 100644 roms/mda.rom delete mode 100644 roms/megapc/roms.txt delete mode 100644 roms/olivetti_m24/roms.txt delete mode 100644 roms/oti067/roms.txt delete mode 100644 roms/pc1512/roms.txt delete mode 100644 roms/pc1640/roms.txt delete mode 100644 roms/pc200/roms.txt delete mode 100644 roms/pc2086/roms.txt delete mode 100644 roms/pc3086/roms.txt delete mode 100644 roms/revenge/roms.txt delete mode 100644 roms/sis496/roms.txt delete mode 100644 roms/tandy/roms.txt delete mode 100644 roms/win486/roms.txt diff --git a/roms/430vx/roms.txt b/roms/430vx/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/430vx/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/acer386/roms.txt b/roms/acer386/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/acer386/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ami286/roms.txt b/roms/ami286/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ami286/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ami386/roms.txt b/roms/ami386/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ami386/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ami486/roms.txt b/roms/ami486/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ami486/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/cmdpc30/roms.txt b/roms/cmdpc30/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/cmdpc30/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/dells200/roms.txt b/roms/dells200/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/dells200/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/dtk/roms.txt b/roms/dtk/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/dtk/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/endeavor/roms.txt b/roms/endeavor/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/endeavor/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/europc/roms.txt b/roms/europc/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/europc/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/genxt/roms.txt b/roms/genxt/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/genxt/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/hot-433/roms.txt b/roms/hot-433/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/hot-433/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ibmat/roms.txt b/roms/ibmat/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ibmat/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ibmpc/roms.txt b/roms/ibmpc/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ibmpc/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/ibmxt/roms.txt b/roms/ibmxt/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/ibmxt/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/mach64gx/roms.txt b/roms/mach64gx/roms.txt deleted file mode 100644 index 4e9bbdc7d..000000000 --- a/roms/mach64gx/roms.txt +++ /dev/null @@ -1 +0,0 @@ -This directory needs to contain some ROM files. \ No newline at end of file diff --git a/roms/mda.rom b/roms/mda.rom deleted file mode 100644 index 1b92f042a036027dba033e622a3b2fe05b4c26be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 b0W{eM9{zumV