Skip to content

Fix machines and BIOS entries missing on case-sensitive filesystems - #7922

Merged
OBattler merged 1 commit into
86Box:masterfrom
MaxFreedomPollard:fix/rom-case
Sep 11, 2026
Merged

OBattler merged 1 commit into
86Box:masterfrom
MaxFreedomPollard:fix/rom-case

Conversation

@MaxFreedomPollard

Copy link
Copy Markdown
Contributor

Summary

Ten ROM path literals in src name 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:964 asks for at286bios_53889.00.0.17jr.BIN while the ROM set has ...17jr.bin. Its machine table entry has .device = NULL, so machine_available() (src/machine/machine.c:162) falls through to machine_init_ex() with bios_only set, bios_load_linear() fails, and the entire machine is filtered out of the machine list rather than losing one option.

The CONFIG_BIOS ones each lose a single entry. rom_present() (src/mem/rom.c:284) calls plat_file_check(), a plain stat() off Windows, with no case folding, and both the settings dialog (src/qt/qt_deviceconfig.cpp:300) and machine_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() in buslogic_init(). The cards themselves are not affected: every BusLogic device_t has .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 at src/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. The bios_addr config 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:964 n8810m30/at286bios_53889.00.0.17jr.BIN to .bin, the whole Nixdorf 8810 M30 machine
  • src/video/vid_s3_virge.c:64 s3virge/s3virge.BIN to s3virge.bin, the Diamond Stealth 3D 2000 entry on the S3 ViRGE PCI card
  • src/machine/m_at_slot1.c:1527, 1536, 1545 bx6/BX6_CW.bin, BX6_GQ.bin, BX6_JL.bin to .BIN, three of the five Abit AB-BX6 BIOS revisions
  • src/machine/m_at_slot1.c:712 ms6117/w617v115.BIN to w617v115.bin, the MSI MS-6117 Viglen Vig67M BIOS
  • src/machine/m_at_socket3_pci.c:420 pb450/p4hs20.bin to p4hs20.BIN, the Packard Bell PB450 revision P4HS20 BIOS
  • src/machine/m_ps1.c:336 ibmps1es/F80000_ES.bin to F80000_ES.BIN, the IBM PS/1 model 2011 Spanish BIOS
  • src/scsi/scsi_buslogic.c:1672, 1712 buslogic/BT-545C_BIOS.rom and BT-445C_BIOS.rom to .ROM

No user config migration is needed. Only the .files paths change and every internal_name is untouched, so existing .cfg files 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.bin and the two BusLogic AutoSCSI images really are lowercase.

How I checked this: I extracted every "roms/..." string literal in src (1379 unique) and compared them against the file list of 86Box/roms master (1529 files, tree 0da0869). 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 -Wextra with 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

  • I have tested my changes locally and validated that the functionality works as intended

References

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.
@OBattler
OBattler merged commit bc2437e into 86Box:master Sep 11, 2026
45 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants