Skip to content

v2026.08.17

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 16:11
· 10 commits to main since this release

If you run into any issues please open a Discussion.

Off main betas

  • Front Panel is currently on the "panel" tag - will be rebased on main and a new beta out this week.
  • PowerView SCSI Video is currently on it's own branch and will be merged in next release.
  • SCSI Scanner support is currently on it's own branch.

Updating

BlueSCSI v2

  • Use BlueSCSI_V2_Universal for the Pico/Pico W based BlueSCSI v2. This is the file that used to be named BlueSCSI_V2_DaynaPORT_*.uf2 - same firmware, clearer name. (6133778c - @erichelgeson)
  • Audio builds are provided as a separate BlueSCSI_V2_Audio_SPDIF_*.uf2 due to memory constraints.

BlueSCSI Ultra / Ultra Wide

  • Use the uf2 corresponding to your device.

SD Card (all)

  • Place BlueSCSI_v<version>_<hash>.zip on the root of the SD card.

New Features

  • SCSI printer emulation - Apple LaserWriter IISC - BlueSCSI can now appear on the bus as an Apple Personal LaserWriter SC. Create a PR<id>/ folder on your SD card (for example PR4/) and a printer registers at that SCSI ID; the same folder is where jobs are spooled, as /PR<id>/print_NNNN.bin. The paper size the host selects is recognised and logged. Captured jobs can be converted to a viewable/printable file at https://bluescsi.com/printer. Thanks to demik for the protocol reverse-engineering write-up. (b5cb8b12, 942fe3f6 - @erichelgeson)
  • SCSI IDs 0-15 on Ultra Wide - The Ultra Wide can now present targets on the full 16-bit ID range instead of just 0-7. The ID is still the single character right after the two-letter type prefix, so IDs 10-15 use a hex digit A-F: HDA0_512.img is ID 10, and the per-ID folders are HDA/, CDB/, TPF/ and so on. bluescsi.ini sections stay decimal - [SCSI10] through [SCSI15]. Other boards are unchanged at 0-7. (3dcbba12, c3bde11c - @erichelgeson)
  • WPA3 Wi-Fi (opt-in) - New WiFiSecurity setting selects the security mode used to join a network: WPA2 (default, WPA/WPA2 mixed PSK), WPA2AES, WPA3, or WPA3WPA2. The default is unchanged, so existing configurations behave exactly as before - set this only if your access point requires it. Note that the WPA3 (SAE) modes are not yet as reliable as WPA2: in testing the join occasionally hangs (c46920e8 - @erichelgeson)
  • VHD disk images - .vhd files now load directly as hard disk targets. CHS geometry is taken from the footer unless you override it in bluescsi.ini. Fixed VHDs only. (d7d0ca4c - @erichelgeson)
  • NEC PC-9801-55 support - New System = PC-9801-55 preset for the NEC PC-9801-55 SCSI-1 controller: SCSI-1 mode, 25 sectors/track, 8 heads per cylinder, and a vendor string beginning with NEC as the controller requires. (727fb1c9, 06a22531 - Szymon Rakowski @s-rakowski)
  • Empty removable drives now show up over USB - In USB mass storage (initiator) mode, targets are enumerated from INQUIRY instead of TEST UNIT READY, so an empty Zip, MO, or CD drive appears on your computer like a card reader and gains its capacity when you insert media. (096c42ac - @erichelgeson)
  • Faster USB imaging - Initiator MSC mode now reads ahead 32 sectors instead of 1, tunable with the new InitiatorMSCPrefetchSectors setting. (dbbe55ec, 9dd44a13 - @erichelgeson)

Bug Fixes

  • Fixed issue when a CD drive with no cue sheet is probed for audio - Windows 98 probes CD drives with a zero-length PLAY AUDIO. (e76ac240 - @erichelgeson)
  • Fixed SCSI-3 drives rejecting every command in initiator mode - SCSI-3 targets take the LUN from the IDENTIFY message rather than the CDB, and reject anything selected without one. BlueSCSI now selects with ATN and sends IDENTIFY before each command, so these drives can be imaged or mounted over USB. Set InitiatorIdentify = No in [SCSI] to restore the old behavior. (50d6544b - @erichelgeson)
  • Fixed cue sheets not matching their bin file after renaming - A .cue that references castles.bin already matched a BlueSCSI-prefixed CD3_castles.bin, but only when the separator was an underscore. Any non-alphanumeric separator now matches, so CD3 castles.bin works too. (cf23ef1f - @erichelgeson)
  • Fixed data corruption on 256-byte sector images - Direct SD reads addressed the card in whole 512-byte sectors, so an unaligned position or length was silently truncated. 256-byte-per-sector images are usually unaligned and were corrupted by this. (4d5a28ea - @erichelgeson, Per Mårtensson)
  • Fixed USB mass storage mode being refused on Pico W - Pico W hardware flashed with non-network firmware was assumed to be a plain Pico, so GPIO24 was read as VBUS. On a W that pin belongs to the WiFi module and reads low, and USB mass storage mode was refused with nothing logged. Pico W detection now runs in every build. (87e8de71 - @erichelgeson)
  • Fixed watchdog reboot when imaging 2048-byte-sector drives - MO drives made the USB read/write callbacks return zero, which TinyUSB retried forever until the watchdog rebooted the board. Chunks smaller than the target's sector size are now served correctly. (discussion #396, 922de3e4 - @erichelgeson)
  • Fixed wrong data served when imaging several targets over USB - The read-ahead buffer is shared by all targets but was not checked against the target it was filled from, so one drive could be served another drive's sectors. (fc44fb74, 6b60ac22 - @erichelgeson)
  • Fixed removable media being ejected or stalled during load - In USB mass storage mode BlueSCSI no longer sends START STOP UNIT on its own - during the scan or to a not-ready target - which could eject or stall Zip and MO media while it was being inserted. Start/stop is left to the host, which drives it through its own mass storage callback. Eject is now only issued to devices that actually report removable media (CD/MO/removable disk), using the peripheral type and RMB bit captured at scan time, and no longer forces the immediate bit. (3e46bef2, dd65dfe5, 576b9c73 - @erichelgeson, ported from #304)
  • Fixed USB drive flapping to zero size on media change - While media is loading or being swapped the last known capacity is reported instead of 0 blocks, and stale read-ahead data is discarded when the sector size changes. (2607d9ea, 096c42ac - @erichelgeson)
  • Fixed aborted commands from misread bus phases in initiator mode - Initiator signal switching could read as a phantom DATA OUT phase or an invalid phase and abort the command in progress. Phase reads are now confirmed with a second sample. (e4540e33, 12372d5a - @erichelgeson)
  • Fixed synchronous write hang - PIO instruction memory is shared between subsystems, and on Pico W the WiFi driver left too little room for the SCSI accelerator. The accelerator's sync_write program failed to load. (9fd63bb0, 2c263b4f, 2738f159 - @erichelgeson)
  • Fixed WiFi reported as available on an Ultra with no RM2 installed - The RM2 module is optional on Ultra, now reported only once the module has answered the boot-time check. (49641ce8 - @erichelgeson)
  • Fixed WiFi silently dead on Ultra at higher clock speeds - The RM2 is reached over a bus whose divider scales with the system clock, and past the WifiRM2 speed grade the module stops answering - measured working at 150MHz. (9ef11456 - @erichelgeson)
  • Fixed MODE SELECT accepting truncated parameter lists - A parameter list too short for the header, block descriptor, or page it claims to describe now returns PARAMETER LIST LENGTH ERROR per SCSI-2 8.2.8, instead of applying buffer contents the host never transferred. (500ceda6 - @erichelgeson)
  • Fixed two Ultra Wide SCA bugs - With no images on the card, the RAW fallback resolved the strapped SCA ID but then opened the raw disk on the hard-coded fallback ID, so the drive appeared on the wrong ID with another ID's settings. (b8c2a440 - @erichelgeson)
  • Reduced USB task priority on RP2040 - The background USB task now runs at the lowest interrupt priority, so the SCSI-critical interrupts (DMA buffer swap, selection detect) always preempt it. (c7838f0c - @erichelgeson)

New INI Settings

[SCSI] Section

Setting Default Description
System - New value PC-9801-55 for the NEC PC-9801-55 SCSI-1 controller and first-party derivatives. (727fb1c9, 06a22531 - @s-rakowski)
InitiatorMSCPrefetchSectors 32 Sectors read ahead in USB mass storage (initiator) mode. Ignored when InitiatorMSCDisablePrefetch is set. (dbbe55ec - @erichelgeson)
WiFiSecurity WPA2 Security mode used to join a network: WPA2 (WPA/WPA2 mixed PSK), WPA2AES (refuses TKIP), WPA3 (SAE only), or WPA3WPA2. An unrecognised value logs a warning and falls back to WPA2. (c46920e8 - @erichelgeson)
InitiatorIdentify Yes Select with ATN and send IDENTIFY before each command in initiator mode. Required by SCSI-3 targets; set to No for prior behavior. (50d6544b - @erichelgeson)

Other Changes

  • Release artifact dates are pinned to America/Chicago so the date in the filename no longer depends on the build machine's timezone. (90c36acf - @erichelgeson)
  • Firmware size reports are posted on pull requests from forks again, and the build comment now links the PR's firmware artifact so it can be downloaded and tested directly. (8a9cb584, d55bb482 - @erichelgeson)
  • Build toolchain: nixpkgs bumped, pioasm added to the dev shell, and pico-sdk-internal moved to v2.2.0-UltraSupport-rel3. (17fde58a, 9fd63bb0 - @erichelgeson)

Contributors

Thanks to everyone who contributed code, research, and bug reports to this release.

  • Eric Helgeson (@erichelgeson)
  • Szymon Rakowski (First Contribution!) (@s-rakowski) - NEC PC-9801-55 preset and the MODE SENSE quirk for NEC SCSI-1 controllers
  • Per Mårtensson (First Contribution!) - 256-byte sector data corruption fix
  • demik (Special Thanks!) - reverse-engineered the Apple LaserWriter IISC SCSI protocol

Full Changelog: v2026.04.27...v2026.08.17