Check the version.5do --version or Help > About. This documentation describes the 1.0.0 documented-compatibility release.
Check the Logs. The desktop Logs dock and Log Viewer show renderer initialization/fallback, BIOS/disc loads, save/load, screenshots, input changes, and faults.
Reproduce with --json. A CLI run gives machine-readable state (pc, frameHash, cdStatus, cdPoll, DSP fields, warnings) without guessing.
Try a minimal case. BIOS-only boot, then BIOS+disc, then a state load. This separates BIOS, disc, and state problems.
Check the known issues. The five showcase titles have documented per-title limitations; do not assume every behavior is a regression.
Rename settings.json (see Configuration.md); a malformed file normally falls back to defaults, but a bad custom path can still fail.
Crash on close
Known Silk.NET/Avalonia shutdown ordering issue; the shell intentionally does not dispose the GL surface during close. If it persists, capture the stack trace.
Missing OpenAL32.dll
Rebuild so Directory.Build.targets copies OpenAL Soft, or place the package's soft_oal.dll beside the executable as OpenAL32.dll.
Click the game view to focus it; the Library view and TextBox focus deliberately swallow game keys.
Wrong buttons
Check Input Bindings; the defaults are arrows, Z=A, X=B, C=C, A=L, S=R, Enter=P, Backspace=X.
Gamepad not detected (Windows)
Use XInput-compatible controller; check About for the connected count.
Gamepad not detected (Linux)
Ensure the user is in the input group and /dev/input/event* is readable.
Gamepad not detected (macOS)
No platform backend yet; use a keyboard.
Analog stick does nothing
Left-stick directions fall back to D-pad bindings; explicit stick bindings win. Triggers fall back to shoulders.
Hotkeys F5/F8/F6/F7/F9/F12/F10 do nothing
The shell dispatches the bindings in the input profile; check Input Bindings for a custom map, and make sure the game view has focus. The Library view and TextBox focus deliberately swallow game keys.
Scripted input seems offset after a state load
Scripts are absolute by default; add --script-base state to shift by the loaded frame count.
Autopilot won't combine with a script
--autopilot road and --input-script are mutually exclusive.
Large sections are Brotli-compressed; a typical state is 0.6-2.0 MB on disk (the uncompressed payload is ~10 MB for the stock layout: live RAM/VRAM range + 2 MB ROM + VDL frame + devices; the largest layout is ~26 MB). Version-1 states are ~25 MB each. Ten compressed slots use a few MB; the 100-slot maximum stays well under 1 GB.
invalid magic value
Not a .tdos, or corrupted/truncated.
failed its CRC check
Corruption/partial copy; restore from backup.
missing sections
Truncated/incomplete state.
BIOS hash warning
The loaded BIOS differs from the one used to write the state; the load continues but may diverge.
Different disc accepted
The loader records the disc hash but does not reject a mismatch; verify the slot metadata/game ID.
State loads but audio glitches
Live audio is reset on load; the DSP resumes. A WAV may span both timelines.
Thumbnail missing
Optional; the state is still valid.
Metadata missing
The sidecar is optional; the header has game ID/frame count.
state inspect fails
It validates every section CRC; state slots uses a faster header-only path.
Run on a quiet machine; check p99 vs mean; use --baseline for same-machine comparison.
4K stutters
Use SharpBilinear/Accurate; xBR/HQx/FSR cost more. Check GPU probe percentiles.
CPU fallback is slow
Expected; it is not a 4K60 path. Use a GL/GLES context.
High-res mode is slow
640x480 increases CEL/VDLP/SPORT work; disable it for 320x240 titles.
Gameplay is slow when started from the IDE
Debug builds optimize the core projects by default (-p:FiveDoOptimizeDebug=false opts out). If Visual Studio's debugger suppresses JIT optimization on module load, use Start Without Debugging or disable that debugger option. Check the actual build: a Debug run with optimization disabled measured ~25 ms/frame on the Road Rash race.
Frame pacing oscillates
Check audio samples/frame; the pacer clamps 50-70 fps and falls back to 60 Hz.
Auto frame skip does not raise the presented rate
Auto is presentation-only. If the emulated CPU/CEL/DSP is the bottleneck, reducing filter cost or output resolution will not help either; use a Release/optimized build and check the benchmark core time. Fixed frame-skip modes are available when the GPU/presenter is the bottleneck.
Memory grows
Check for per-frame allocations with the benchmark/probe; steady state should be 0 bytes/frame.
A game behaves differently with --swi-hle
HLE is an opt-in performance mode; it skips the guest math handler's cycles and register clobbers. Disable it or use a per-game profile. --swi-comments shows which SWIs the title calls.
5DO is distributed under the FreeDO modified GNU LGPL; see LICENSE. FreeDO/4DO are not standard OSI-licensed, and the modified LGPL includes a non-commercial restriction. 5DO is donationware (non-commercial, source-available; voluntary donations only). Read Licensing.md and THIRD-PARTY-NOTICES.md before distributing builds.
The bundled OpenAL Soft 1.23.1 runtime adds an LGPL-2.0-or-later binary distribution obligation; the release legal review is still pending.
"3DO", "Panasonic", and "GoldStar" are trademarks of their respective owners. This project is not affiliated with or endorsed by them.