Repository navigation
Fix machines and BIOS entries missing on case-sensitive filesystems - #7922
Merged
Merged
Conversation
Ten ROM path literals in src differ from the shipped ROM set only in the case of the file name, so the files are not found on case-sensitive filesystems. The Nixdorf 8810 M30 is the worst case: its init calls bios_load_linear() directly and the machine has no device, so machine_available() probes it with bios_only set, the load fails and the whole machine is filtered out of the machine list. The CONFIG_BIOS ones each drop a single BIOS entry from the settings dialog. The two BusLogic ones are a device ROM name, so the card itself is unaffected but its option ROM is never mapped and it cannot boot a SCSI disk once a BIOS address is selected. Each literal is corrected to the spelling the ROM set actually uses, in whichever direction that is; no ROM set change is needed. Only the file paths change and every internal_name is untouched, so existing configs keep selecting the same BIOS entry.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ten ROM path literals in
srcname a file that the ROM set ships under a different case, so the file is never found on a case-sensitive filesystem. On Linux and on case-sensitive macOS volumes this hides a whole machine and several BIOS revisions, and stops two SCSI cards from mapping their boot ROM. All of it works on Windows.The worst one is the Nixdorf 8810 M30.
src/machine/m_at_286.c:964asks forat286bios_53889.00.0.17jr.BINwhile the ROM set has...17jr.bin. Its machine table entry has.device = NULL, somachine_available()(src/machine/machine.c:162) falls through tomachine_init_ex()withbios_onlyset,bios_load_linear()fails, and the entire machine is filtered out of the machine list rather than losing one option.The
CONFIG_BIOSones each lose a single entry.rom_present()(src/mem/rom.c:284) callsplat_file_check(), a plainstat()off Windows, with no case folding, and both the settings dialog (src/qt/qt_deviceconfig.cpp:300) andmachine_device_available()(src/device.c:1265) only keep a BIOS entry when every file it names is present.The two BusLogic ones are a direct
rom_init()inbuslogic_init(). The cards themselves are not affected: every BusLogicdevice_thas.available = NULL, so they stay in the device list and stay usable as plain HBAs. What breaks is the option ROM. The load fails, its return value is ignored atsrc/scsi/scsi_buslogic.c:1759, and nothing is mapped, so once a BIOS address is selected the BT-545C and BT-445C cannot boot a SCSI disk. Thebios_addrconfig defaults to Disabled, so this only bites a user who turns the BIOS on.Source spelling to ROM set spelling:
src/machine/m_at_286.c:964n8810m30/at286bios_53889.00.0.17jr.BINto.bin, the whole Nixdorf 8810 M30 machinesrc/video/vid_s3_virge.c:64s3virge/s3virge.BINtos3virge.bin, the Diamond Stealth 3D 2000 entry on the S3 ViRGE PCI cardsrc/machine/m_at_slot1.c:1527, 1536, 1545bx6/BX6_CW.bin,BX6_GQ.bin,BX6_JL.binto.BIN, three of the five Abit AB-BX6 BIOS revisionssrc/machine/m_at_slot1.c:712ms6117/w617v115.BINtow617v115.bin, the MSI MS-6117 Viglen Vig67M BIOSsrc/machine/m_at_socket3_pci.c:420pb450/p4hs20.bintop4hs20.BIN, the Packard Bell PB450 revision P4HS20 BIOSsrc/machine/m_ps1.c:336ibmps1es/F80000_ES.bintoF80000_ES.BIN, the IBM PS/1 model 2011 Spanish BIOSsrc/scsi/scsi_buslogic.c:1672, 1712buslogic/BT-545C_BIOS.romandBT-445C_BIOS.romto.ROMNo user config migration is needed. Only the
.filespaths change and everyinternal_nameis untouched, so existing.cfgfiles keep selecting the same BIOS entry.The case goes both ways, so each literal is matched to the file exactly as the ROM set ships it. No ROM set change is needed. Neighbouring names that look inconsistent are already right and are left alone:
bx6/BX6_QS.bin,ibmps1es/f80000.binand the two BusLogic AutoSCSI images really are lowercase.How I checked this: I extracted every
"roms/..."string literal insrc(1379 unique) and compared them against the file list of86Box/romsmaster (1529 files, tree0da0869). 1360 matched exactly, these 10 differed only in case, and the remaining 9 are paths the ROM set does not contain under any spelling, which this change does not touch. After the change the same comparison finds 1370 exact matches and no case-only mismatches.All six files still pass
clang -fsyntax-only -Wall -Wextrawith exactly the same warning count as before the change, and running clang-format over each file before and after gives outputs that differ only in those same ten strings, so no formatting drift is introduced.Checklist
References