Skip to content

5DO 1.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 18:04
· 12 commits to master since this release

5DO 1.4.0

Release date: 2026-11-07
Status: Feature and accuracy update on the 1.3.0 field-handling release.

Highlights

  • Online cover art (UX-26). An optional content-addressed WebP catalog at
    https://assets.purelogiccode.com/5do/v1 provides 473 unique covers and maps 645 of
    653 4DO game IDs. 5DO downloads the catalog and only the covers it needs, verifies every
    image by SHA-256, and supports an optional ~27 MB bulk pack for offline use. Matching
    uses exact game IDs, annotation stripping, token/no-space/subtitle aliases, and
    Jaro-Winkler fallback with sequel-number guards. Settings > Covers and the
    covers update/download/match/verify/cache CLI commands expose the feature.
  • Latency controls (VID-12). Settings > Video adds 0-2 frame run-ahead, a 0-8 frame
    presentation delay, and VRR/adaptive-sync presentation. Settings > Audio and
    --audio-sync -250..250 add a host A/V offset. Per-game profiles store all four values,
    the FPS overlay reports software input-poll-to-frame-submit telemetry, and run-ahead
    auto-disables after repeated frame-budget overruns. The run-ahead snapshot is a reusable
    uncompressed MachineStateSnapshot; machine-state section v2 stores only visible lines
    and copies pixels as blocks, and the RAM loader clears only the previously addressable
    tail.
  • Unsigned-disc support (SYS-06). Settings > Paths and --allow-unsigned-discs
    disable the BIOS media RSA check in memory so unsigned, homebrew, and arcade discs can
    boot. A known No-RSA BIOS is preferred when available; otherwise a compatible retail
    1 MB image is patched with the documented two-site bypass. The BIOS file is never
    modified. Already patched images and known No-RSA file names are accepted, and an
    incompatible image is rejected with an explicit error.
  • Exact NTSC field clock and rational VDL. NTSC now runs at 60000/1001 (59.94 Hz,
    208,541 cycles per field at 12.5 MHz) instead of 60.00 Hz. Quartz uses an exact
    rational VDL accumulator, removing the per-batch 8.24 rounding that ran the scanline
    clock about 0.09% fast. Quartz state is version 4; version 1-3 states convert their
    8.24 fraction on load.
  • VDLP and audio fixes. Disabled bitmap DMA now renders a black line instead of
    retaining the previous field, and the background word is converted from 8-bit RGB to
    the 5-bit format the renderers expect. Live OpenAL device switching uses the
    thread-local context extension, and the Settings test tone queues the whole second up
    front so Windows sleep granularity cannot insert silent gaps.
  • Differential evidence. The harness now compares CD command counts, opcode hashes,
    full command sequences, per-command cycle stamps, CPSR, instruction counts, and sample
    deltas. The 50-title panel captured 50/50 with 0 errors; 32/50 titles match every
    frame hash
    at frames 60/120/300 and every sample delta is within 9. At 3,000 frames
    Space Ace, Wolfenstein 3D, Alone in the Dark, and Lemmings match Opera's hash; Road
    Rash still diverges.

Changed

  • FiveDoMachine.FramesPerSecond now returns the exact 59.94 Hz field rate for host
    pacing; the nominal FieldRate remains 60/50 for display and JSON compatibility.
  • AppSettings schema is version 7. Version 5 added unsigned-disc support, version 6
    added latency options, and version 7 added the online cover options. Older files load
    with documented defaults.
  • Machine save-state section v2 stores only visible VDL lines and preserves frame
    dimensions and pixel aspect across load/restore.
  • CoreRunner invalidates the run-ahead snapshot after any external machine action
    (disc swap, state load, BIOS/NVRAM change) even when the frame counter does not move.
  • LatencyTelemetry.MaxMilliseconds now describes the rolling window rather than the
    maximum ever observed.

Requirements

  • The .NET 10 Runtime installed on the host. The bundles are framework-dependent and
    do not include the runtime. Choose the x64 or arm64 bundle that matches your OS.
  • A legally obtained 1 MB 3DO BIOS ROM (for example panafz1.bin).
  • Legally obtained 3DO disc images in ISO, BIN, CUE+BIN, or CHD format.
  • Optional: network access for the online cover catalog. Local covers and the core
    emulator work offline.

Download

System Bundle
Windows x64 5do-1.4.0-win-x64.zip
Windows arm64 5do-1.4.0-win-arm64.zip
Linux x64 5do-1.4.0-linux-x64.tar.gz
Linux arm64 5do-1.4.0-linux-arm64.tar.gz
macOS x64 5do-1.4.0-osx-x64.tar.gz
macOS arm64 5do-1.4.0-osx-arm64.tar.gz

Each bundle contains the framework-dependent single-file CLI and desktop app, the
README/license/notices, whatsnew.md, and the legal/release docs. SHA256SUMS.txt is
attached to the GitHub release.

Known limits

  • Run-ahead is CPU-bound and opt-in. It is incompatible with rewind history and
    deterministic movie recording/playback; the frontend disables those features while it
    is active.
  • VRR is a display/driver feature. 5DO can avoid the blocking swap interval, but actual
    adaptive-sync activation depends on the GPU, driver, monitor, and desktop.
  • The online cover catalog is optional and is not included in any release bundle. A wrong
    fuzzy match should be corrected with the threshold or a local cover.
  • The 50-title differential panel still has unresolved PC/CPSR phase and CD-cadence
    differences. Frame-hash matches are evidence, not a full accuracy claim.
  • Windows x64 is the validated target. Linux x64 full-suite and CLI/frontend smoke
    validation pass; GPU presentation remains preview/best-effort under llvmpipe/SSH.
    macOS and arm64 bundles are cross-published and architecture-validated.

Validation

  • Full suite: 1,905/1,905 passing in Debug and Release.
  • dotnet build 5DO.sln -c Debug: 0 warnings, 0 errors.
  • dotnet format 5DO.sln --verify-no-changes --no-restore: clean.
  • jb inspectcode 5DO.sln --severity=WARNING --no-updates: 0 results.
  • Frontend --smoke-test, CLI selftest, and the differential harness checks are part
    of the release gate.