Commit Graph

1980 Commits

Author SHA1 Message Date
x6568tank 740df609b7 feat: add a cd_reinsert debug command
The reinsert hotkey needs a focused window, so no test could exercise
the lid. This runs the same tray cycle on the same image from the
debug server.

It was added to isolate a wedge seen after a savestate save, and it
established that the wedge predates the disc-change work: a save
followed by this command alone reproduces it, with no disc change.
2026-09-18 11:40:35 -04:00
x6568tank 8fa46fbee5 fix: derive the disc index when --disc names a set member
The index derivation is guarded by !disc_override_path, so an explicit
--disc left selected_disc_index at its default of 1. Every savestate
then carried the _disc1 token whatever was mounted.

Measured on a two-disc set: booting disc 2 with --disc wrote
state_801255AC_disc1_slot08.pst. With this change the same run writes
state_801255AC_disc2_slot08.pst.

This is independent of the disc-change feature. It is in this branch
because the roster registration already computes the mounted index.
2026-09-18 11:40:35 -04:00
x6568tank e397d6abb8 fix: keep the savestate disc scope with the mounted disc
main() sets savestate_set_disc_scope() once, from the boot disc. A
mid-session disc change left it behind, so a state saved after a swap
was filed under the disc the game booted from. That is the exact
mix-up the scoping exists to prevent, and nothing in the slot list
would have shown it, because every disc of a set shares one entry_pc.

cdrom_disc_select() now updates the scope, rather than the one caller
doing it, so any future caller stays correct.

Two smaller fixes in the same function. A failed iso_open() left
s_disc_selected naming a disc that is no longer mounted; it now
reports none. A roster path longer than the buffer was silently
truncated and would open the wrong file or nothing; it is now dropped.
2026-09-18 11:40:35 -04:00
x6568tank 7c99a88565 feat: mount a different disc while the game runs
The runtime mounts one disc image at startup. No code path changes the
mounted image after that. Some multi-disc games prompt for a disc
change during play and then poll the drive. That poll never succeeds.
The CD-reinsert path reopens the same image path, so it cannot mount
the other disc.

cdrom_disc_select() closes the current image and opens another roster
entry, inside the existing lid window. cdrom_lid_media_ready() returns
0 for the whole window, so the guest cannot read the image until the
window ends. The existing timed close then ends the window.

cdrom_init() is not called. It also resets warm-route, trace and timing
state, which would discard a running session. cdrom_disc_select()
resets the sector buffers, the seek position, and the warm-route
arming. Registered warm routes are configuration and are not reset.

begin_tray_open_cycle() now holds the tray-open code, moved out of
debug_force_cd_reinsert(). Both paths call it.

Add a disc_select debug command. It returns the roster and mounts entry
n when n is given. It also returns the sector count and track count of
the mounted image, which confirms that the reader opened another image.

Tested on Ace Combat 3: Electrosphere (SLPS-02020 / SLPS-02021). Boot
disc 2 with no disc-2 save. The game prompts for disc 1. At that prompt
the CD read count is static at 2955 and frames run at 60.5 Hz, so the
drive is idle. disc_select n=1 mounts disc 1. The game resumes and
plays its first cutscene. Reads restart within two seconds and pass
19971. The read addresses change to disc-1 values. The frame rate does
not drop.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-18 11:10:00 -04:00
Matt Stanley 193a60b805 Merge pull request #366 from Alexbeav/split/01-standalone-fixes
Standalone fixes from the TAS integration: JALR handoff, conformance harness, UNC paths, disc region, GTE deadline
2026-09-14 12:43:11 -07:00
Pegasus 5968162fe9 fix: publish deferred CPU work before GTE deadline checks
(cherry picked from commit 43abd4a5c8)
2026-09-14 17:26:34 +03:00
Pegasus 77a8480363 Read disc region from the actual SYSTEM.CNF directory entry
Prefer the ISO9660 boot file over the bounded raw-image scan. Biohazard stores SYSTEM.CNF outside that scan, leaving fresh builds at the default SCEA response. Add raw and cooked late-file regressions with an early decoy serial. The full-profile prefix again matches the retained native baseline through 5999 returns; the independent-source frontier remains return 464.

(cherry picked from commit 82c3de13ef)
2026-09-14 17:26:33 +03:00
Pegasus 324690cb97 Preserve fully qualified Windows network asset paths
(cherry picked from commit 51d5d56a27)
2026-09-14 17:26:32 +03:00
Pegasus 5e23de8393 feat: add PS1 conformance harness and fix GTE fidelity
(cherry picked from commit 98d617b5f3)
2026-09-14 17:26:31 +03:00
Alexandros Mandravillis d4abc2f05d Fix non-RA JALR interpreter handoff
(cherry picked from commit 2f8f627b24)
2026-09-14 17:26:30 +03:00
Matt Stanley 4be26f162e Merge pull request #364 from RetroPortingToolKit/codex/crash-intro-widescreen-fw-20260913
Opt-in world scene classification and immutable terrain batching
2026-09-13 21:08:26 -07:00
Matthew Stanley 8b689140dd Add opt-in world scene classification and immutable terrain batching 2026-09-13 21:06:58 -07:00
Matt Stanley 7699cceaa4 Merge pull request #363 from RetroPortingToolKit/codex/crash-host-terrain-20260913
Add opt-in retained-terrain services and loading-scene presentation holds
2026-09-13 19:42:02 -07:00
Matthew Stanley b4d41b173c Merge current master and preserve both runtime regression test groups 2026-09-13 19:40:33 -07:00
Matthew Stanley f2352e3d32 Keep retained scene aspect until the next displayed buffer flip 2026-09-13 19:27:03 -07:00
Matthew Stanley e3beb365ba Add opt-in native-wide presentation hold for retained loading scenes 2026-09-13 19:11:21 -07:00
Alexandros Mandravillis 693c7be0fc Fix GPU upload history overflow after retention fills (#360)
Co-authored-by: Pegasus <pegasus@psxrecomp.local>
2026-09-13 17:01:55 -07:00
Matthew Stanley 9037e7bd23 Add opt-in retained texture banks and enhancement memory snapshots 2026-09-13 16:50:26 -07:00
Matt Stanley d4c45adf62 fix(sio): remove title-specific card IRQ repair and opt-in (#362) 2026-09-13 16:33:46 -07:00
Matthew Stanley 7025bb5f88 Fix rewind keyboard load conflicting with cancel aliases 2026-09-13 14:16:20 -07:00
Alex Vanderveen 85cd26f05c Merge pull request #359 from plinkr/fix/psx-netplay-off-undeclared-ae-np-account-sync
fix(runtime): fix compilation failure when netplay is disabled
2026-09-13 13:41:57 -04:00
Aliet Exposito Garcia ab2aaf95be fix(runtime): fix compilation failure when netplay is disabled
When `PSX_NETPLAY` is turned off, the build fails because `ae_np_account_sync` is referenced without being declared in that configuration. This issue caused automated continuous integration pipelines and local builds to fail unless netplay was explicitly forced on.

Wrapping this function call ensures that the runtime compiles cleanly for projects that do not require netplay support, restoring the ability to build with netplay disabled.
2026-09-13 13:33:16 -04:00
Matt Stanley 0690e5c164 Merge pull request #357 from RetroPortingToolKit/rfc/fmv-irq-batching-invariants
RFC: FMV IRQ batching correctness gates and counterexample
2026-09-13 00:30:51 -07:00
Matt Stanley 0b898494c8 Merge pull request #356 from RetroPortingToolKit/experiment/runtime-ipo-validation
experiment(build): opt-in runtime IPO and PGO validation gates
2026-09-13 00:30:23 -07:00
Matt Stanley bd01da696a Merge pull request #353 from plinkr/feat/gl-renderer-post-gamma
feat(OpenGL renderer): add post presentation gamma control
2026-09-13 00:29:57 -07:00
Matthew Stanley 75012474c7 docs: promote FMV batching RFC from draft 2026-09-13 00:29:05 -07:00
Matthew Stanley 543896dbe7 docs: promote IPO experiment from draft 2026-09-13 00:27:46 -07:00
Matthew Stanley 718f2b227e docs: record IPO-on title validation 2026-09-13 00:21:45 -07:00
Matthew Stanley 20ec948ab1 build: add opt-in runtime IPO experiment with validation gates 2026-09-12 23:31:28 -07:00
Matthew Stanley 847c2baf37 docs: stage FMV IRQ batching RFC and cache-state counterexample 2026-09-12 23:30:41 -07:00
Matt Stanley ee1d72543c Merge pull request #354 from RetroPortingToolKit/fix/cfg-metadata-integrity
fix(recompiler): repair live CFG metadata and natural back edges
2026-09-12 23:30:17 -07:00
Matthew Stanley 2677fccce3 docs: include bounded input smoke results and limits 2026-09-12 23:29:52 -07:00
Matthew Stanley c5b3b7a214 docs: record CFG repair title regression and merge boundaries 2026-09-12 23:28:23 -07:00
Matthew Stanley 90c62097e0 test(recompiler): cover CFG reachability in fallthrough emission 2026-09-12 23:24:51 -07:00
Matthew Stanley 6c55d698bb fix(recompiler): rebuild CFG metadata and prove natural back edges 2026-09-12 23:24:51 -07:00
Matt Stanley de8b942fb4 Merge pull request #355 from RetroPortingToolKit/fix/optional-netplay-auth-header
fix(runtime): restore builds without optional netplay auth
2026-09-12 23:24:14 -07:00
Matthew Stanley ce7f646f42 fix(runtime): keep chat-report dependency inside enabled lobby path 2026-09-12 23:10:42 -07:00
Matthew Stanley fa655333fb fix(runtime): guard optional netplay authentication dependencies 2026-09-12 23:06:05 -07:00
Aliet Exposito Garcia 72b3ead892 feat(OpenGL renderer): add post presentation gamma control
Some titles and enhancement mods/plugins might require display level gamma correction to improve shadow detail and overall visibility without altering guest rendering state. This introduces a public gamma adjustment interface for the OpenGL renderer via `gl_renderer_set_post_gamma`, that enables external plugins to adjust the display curve cleanly at runtime.

This adjustment applies exclusively to game content and temporal interpolation passes while leaving host interface elements, bezels, and previously composed frames untouched. Modifying the gamma setting immediately invalidates the presentation buffer so that changes become visible on screen without requiring new video memory writes from the guest system.
2026-09-13 01:30:10 -04:00
Alex Vanderveen 3a275d4939 launcher: Allow Spectators is a preference, not an in-room setting
The toggle lives in the Create Lobby modal, before any room exists, and
its value goes out with `create`. The setter refused unless the client
was already seated in a server lobby, so the modal read the unchanged
preference back every frame and the checkbox snapped off. Refuse only in
a LAN / Direct-IP room, which has no gallery to allow -- the SNES host's
rule.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FPXfGGhBBBxQPcEzaMsauF
2026-09-12 20:54:12 -04:00
Alex Vanderveen a9bfbf4d15 Merge pull request #351 from RetroPortingToolKit/feat/lobby-parity
Feat/lobby parity
2026-09-12 20:06:06 -04:00
Alex Vanderveen b9ca600778 netplay: block list, account keys, list scope and automatch for the launcher
Brings the PSX runtime level with what recomp-ui's netplay pages now ask a
host for, and with the SNES runner that already answers them
(snes_lobby_client.c / snes_host_lobby.c):

- Chat lines, seat rows and players-online rows carry the server's opaque
  account key, so the launcher's ignore/block list survives a rename.
- psx_lobby_set_blocks pushes that list to the server as `set_blocks`, since
  refusing to pair or seat the two together is the server's job; recomp-ui
  re-sends it on every reconnect.
- list_scope_set: a LAN player no longer sees online rooms they have no
  connection for, and an online player no longer sees their own LAN rows.
- Automatch: rulesets discovery, the relay latency probe (14-byte LE frame,
  type 200 -> 201, nonce-matched), queue with the disc fingerprint, the
  accept gate with a locally counted deadline, requeue/cancel/cooldown, and
  claiming automatch's `error` codes only while a ticket is in flight.
  Leaving an automatch room after the match: it is the server's room, has
  no host to rematch with, and holding the seat blocks the next ticket.
- Account: init the auth client once per URL rather than every pump (the
  login worker reads the host), anchor the device key to the executable
  directory, and publish the signed-in handle as the lobby display name.

mods_enabled is asserted false on PSX: every netplay launch clears the mod
plan or refuses to start, and the caps a match runs are the ruleset's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FPXfGGhBBBxQPcEzaMsauF
2026-09-12 19:39:09 -04:00
Alex Vanderveen 615d35fe22 Merge remote-tracking branch 'origin/master' into feat/lobby-parity
# Conflicts:
#	tools/new_project_layout/project_studio/readme_metrics.py
2026-09-12 19:30:47 -04:00
Alex Vanderveen fddc8b8516 netplay: report chat lines for moderation, and pin recomp-net for it
PsxLobbyChatMsg gains the server's `mid` for a line, taken off `chat` and
`server_chat`, and psx_lobby_report_chat hands a list of them to
rnet_chat_report_build. The frame carries ids and never the text, so a
report cannot fabricate what somebody said. Same eight lines as the SNES
copy; what a report contains lives in recomp-net.

lib/recomp-net -> 859ba28 (support chat reporting), which is also where
rnet_account_set_secret_path comes from.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FPXfGGhBBBxQPcEzaMsauF
2026-09-12 19:29:57 -04:00
Alex Vanderveen 84bc48df5b sync 2026-09-12 19:14:50 -04:00
Matt Stanley 0baf7bb11d Merge pull request #349 from RetroPortingToolKit/fix/observed-overlay-interiors
fix(overlays): recover executed dispatch entries without a shared host
2026-09-12 10:58:25 -07:00
Matthew Stanley 4683e923ea fix(overlays): retain executed dispatch demands after host rejection 2026-09-12 10:45:50 -07:00
Matt Stanley 89db8168db Merge pull request #348 from RetroPortingToolKit/integrate/wo6-bios343-346
Integrate WO-6 dispatch lookup and BIOS #343/#346 with game regressions
2026-09-11 23:52:03 -07:00
Matthew Stanley 1c7e62a58a Record matched MMX6 demo fade-out validation 2026-09-11 23:51:43 -07:00
Matthew Stanley b9e49074ea Record combined Tomba and MMX6 BIOS regression evidence 2026-09-11 23:50:15 -07:00