launcher: drop the "Skip PSX BIOS" toggle — HLE boot-skip is automatic now

Releases ship [runtime] bios_hle = true, so the boot skip is on by
default and no longer a per-user launcher setting (the old toggle also
described the retired snapshot mechanism's "first boot still loads"
behavior, which no longer exists). Power users can still set bios_hle /
fast_boot in settings.toml or game.toml by hand.

Also aligns CLAUDE.md: the session-start mantra now points at the §0
amendments instead of a blanket "No HLE", and the 2026-07-02 amendment
names the real config key ([runtime] bios_hle).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Matthew Stanley
2026-07-02 16:50:41 -07:00
parent 496d1dbbc8
commit c3c43e68ae
3 changed files with 6 additions and 15 deletions
+4 -3
View File
@@ -116,7 +116,7 @@ first-class High-Level Emulation tier alongside LLE, modeled on
1. **Two selectable backends, LLE default.** A null-by-default hook intercepts
BIOS service dispatch before the recompiled BIOS runs; selection is
per-game config (`[bios] hle = true`) + CLI + env override, with a startup
per-game config (`[runtime] bios_hle = true`) + env override (PSX_BIOS_HLE), with a startup
banner naming the active backend. With HLE off the build is byte-identical
to a build without the tier.
2. **LLE remains the reference implementation and the oracle.** It stays fully
@@ -232,8 +232,9 @@ At the start of every session, before any code change:
concrete milestone is.
3. Verify `docs/psx_bios_disasm.txt` exists (primary reference).
4. Verify Ghidra MCP is reachable. If not, stop and ask.
5. State out loud: "Architecture A is locked. No interpreter. No HLE.
No stubs. BIOS first. Game never until Phase 5."
5. State out loud: "Architecture A is locked. No interpreter. No stubs.
LLE default + oracle; HLE only per the §0 amendments (opt-in tier,
LLE fallback, no fakes). BIOS first. Game never until Phase 5."
If any of these fail, do not proceed with the user's task — surface
the failure first.
-3
View File
@@ -357,9 +357,6 @@ button:hover { background-color: #232d3c; }
<div class="set-row"><span class="set-lbl">Turbo loads</span><span class="set-ctl">
<button class="toggle" data-event-click="toggle_turbo_loads"><span class="value" data-if="turbo_loads">On</span><span class="value" data-if="turbo_loads == false">Off</span></button>
</span></div>
<div class="set-row"><span class="set-lbl">Skip PSX BIOS</span><span class="set-ctl">
<button class="toggle" data-event-click="toggle_fast_boot"><span class="value" data-if="fast_boot">On</span><span class="value" data-if="fast_boot == false">Off</span></button>
<span class="ws-hint" data-if="fast_boot">first boot still loads to build the cache &#8212; instant after</span></span></div>
<div class="set-row"><span class="set-lbl">Fullscreen on launch</span><span class="set-ctl">
<button class="toggle" data-event-click="toggle_fullscreen"><span class="value" data-if="fullscreen">On</span><span class="value" data-if="fullscreen == false">Off</span></button></span></div>
<div class="set-row" data-if="ws_eligible"><span class="set-lbl">Widescreen <span class="exp-tag">EXPERIMENTAL</span></span><span class="set-ctl">
+2 -9
View File
@@ -100,7 +100,8 @@ struct LauncherModel {
int crt = 0; // 0=raw,1=crt,2=composite,3=trinitron
bool auto_skip_fmv = false; // skip FMVs via the game's own skip
bool turbo_loads = true; // fast-forward the machine through load screens (audio plays through); default on
bool fast_boot = false; // skip PSX BIOS via boot snapshot; default off
// (the old "Skip PSX BIOS" toggle is gone: the HLE boot shell-skip ships
// on by default via [runtime] bios_hle in the player game.toml)
bool spu_hq = false;
int aspect_index = 0; // index into kAspects (0 = 4:3 native)
int window_width = 1280; // window size (height = width*den/num per aspect)
@@ -658,7 +659,6 @@ Result run(SDL_Window* window, void* gl_context,
m.crt = io.screen_kind;
m.auto_skip_fmv = io.auto_skip_fmv;
m.turbo_loads = io.turbo_loads;
m.fast_boot = io.fast_boot;
m.fullscreen = io.fullscreen;
m.skip_launcher = io.skip_launcher;
m.spu_hq = io.spu_hq;
@@ -721,7 +721,6 @@ Result run(SDL_Window* window, void* gl_context,
c.Bind("antialiasing", &m.antialiasing);
c.Bind("auto_skip_fmv", &m.auto_skip_fmv);
c.Bind("turbo_loads", &m.turbo_loads);
c.Bind("fast_boot", &m.fast_boot);
c.Bind("fullscreen", &m.fullscreen);
c.Bind("skip_launcher", &m.skip_launcher);
c.Bind("show_skip_modal",&m.show_skip_modal);
@@ -845,11 +844,6 @@ Result run(SDL_Window* window, void* gl_context,
m.turbo_loads = !m.turbo_loads;
handle.DirtyVariable("turbo_loads");
});
c.BindEventCallback("toggle_fast_boot",
[&m, handle](Rml::DataModelHandle, Rml::Event&, const Rml::VariantList&) mutable {
m.fast_boot = !m.fast_boot;
handle.DirtyVariable("fast_boot");
});
c.BindEventCallback("toggle_fullscreen",
[&m, handle](Rml::DataModelHandle, Rml::Event&, const Rml::VariantList&) mutable {
m.fullscreen = !m.fullscreen;
@@ -1058,7 +1052,6 @@ Result run(SDL_Window* window, void* gl_context,
io.screen_kind = m.crt; io.has_screen_kind = true;
io.auto_skip_fmv = m.auto_skip_fmv; io.has_auto_skip_fmv = true;
io.turbo_loads = m.turbo_loads; io.has_turbo_loads = true;
io.fast_boot = m.fast_boot; io.has_fast_boot = true;
io.fullscreen = m.fullscreen; io.has_fullscreen = true;
io.skip_launcher = m.skip_launcher; io.has_skip_launcher = true;
io.spu_hq = m.spu_hq; io.has_spu_hq = true;