Skip to content

fix(mmce): quiesce the art worker BEFORE the VCD launch handoff (FifthFox's bombed VCD launch) - #242

Merged
NathanNeurotic merged 1 commit into
masterfrom
claude/vcd-launch-quiesce
Jul 20, 2026
Merged

fix(mmce): quiesce the art worker BEFORE the VCD launch handoff (FifthFox's bombed VCD launch)#242
NathanNeurotic merged 1 commit into
masterfrom
claude/vcd-launch-quiesce

Conversation

@NathanNeurotic

@NathanNeurotic NathanNeurotic commented Jul 20, 2026

Copy link
Copy Markdown
Owner

The report

FifthFox: "MMCE VCD launching is either poisoned or not working. It was working not that long ago. I bombed one launch of a VCD on the MMCE."

Root cause — an ordering bug, probabilistic by nature

The MMCE art quiesce (cacheAbortMmceImageLoadsTimed, March) drains in-flight art reads before the launch path touches the card. The VCD by-name handoff (ccd1d7a4, June 24) was added above it as an early return — so a VCD launch skipped the quiesce entirely, and mmceLaunchVcd's POPSTARTER resolution + BDMA equip performed card IO on the same shared mmceman SIO2 channel while the art worker could be mid-read. The disc path has always quiesced first; the VCD path never did. Collision odds depend on what art is in flight at the moment of launch — which is exactly why it "worked until it didn't."

Fix

Move the single quiesce guard above the VCD handoff so both launch paths are covered before any card IO. The wedged-worker branch keeps the full #120 abandon-and-retry rationale (no TerminateThread, toast + bail, never a hard freeze) and now protects the VCD path too — POPSTARTER's own reads would hit the same wedged channel and dead-launch to OSDSYS.

Provenance

Idea source: PR #236 commit 66eeaa7d (the unified agent PR) — vetted against this tree: the reorder is correct and minimal; re-landed on current master with the explanatory comment kept instead of trimmed.

Builds clean (make opl.elf, exit 0). HW-pending: FifthFox's MMCE VCD launches.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Improved game launch reliability by preventing VCD launches from overlapping with in-progress artwork loading.
    • Added an error warning when required artwork reads cannot be safely stopped before launch.
    • Applied the launch safety check consistently across supported launch paths.

…hFox's bombed VCD launch)

FifthFox (HW): "MMCE VCD launching is either poisoned or not working. It was working not that long
ago. I bombed one launch of a VCD on the MMCE."

ROOT CAUSE (ordering, probabilistic -- which is exactly why it "worked until it didn't"): the MMCE
art quiesce (cacheAbortMmceImageLoadsTimed, March) drains in-flight art reads before the launch path
touches the card. The VCD by-name handoff (ccd1d7a, 2026-06-24) was added ABOVE it as an early
return -- so a VCD launch skipped the quiesce entirely and mmceLaunchVcd's POPSTARTER resolution +
BDMA equip performed card IO on the SAME shared mmceman SIO2 channel while the art worker could be
mid-read. The disc path has always quiesced first; the VCD path never did.

FIX: move the single quiesce guard ABOVE the VCD handoff so both launch paths are covered before any
card IO. The wedged-worker branch keeps the full #120 abandon-and-retry rationale (no TerminateThread,
toast + bail, never a hard freeze) and now protects the VCD path too -- POPSTARTER's own reads would
hit the same wedged channel and dead-launch to OSDSYS.

Idea source: PR #236 commit 66eeaa7 (the unified agent PR), vetted against this tree -- the reorder
is correct; re-landed here on current master with the explanatory comment kept instead of trimmed.

Builds clean (make opl.elf, exit 0). HW-pending: FifthFox's MMCE VCD launches.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 634c2ff2-1cdc-405a-a057-fbf57d142549

📥 Commits

Reviewing files that changed from the base of the PR and between 826ab25 and 5f71292.

📒 Files selected for processing (1)
  • src/mmcesupport.c
📜 Recent review details
⏰ Context from checks skipped due to timeout. (20)
  • GitHub Check: build-variants (EXTRA_FEATURES=0, PADEMU=1)
  • GitHub Check: build-debug (eesio_debug, :v20250725-2)
  • GitHub Check: build-debug-ps2dev-latest (iopcore_debug)
  • GitHub Check: build-variants (EXTRA_FEATURES=0, PADEMU=0)
  • GitHub Check: build-debug-ps2dev-latest (iopcore_ppctty_debug)
  • GitHub Check: build
  • GitHub Check: build-debug-ps2dev-latest (ingame_ppctty_debug)
  • GitHub Check: build-debug-ps2dev-latest (eesio_debug)
  • GitHub Check: build-variants (EXTRA_FEATURES=1, PADEMU=1)
  • GitHub Check: build-ps2dev-latest
  • GitHub Check: build-variants (EXTRA_FEATURES=1, PADEMU=0)
  • GitHub Check: build-lang
  • GitHub Check: build-lang
  • GitHub Check: build-debug-ps2dev-latest (DTL_T10000=1)
  • GitHub Check: build-debug (iopcore_ppctty_debug, :v20250725-2)
  • GitHub Check: build-debug (DTL_T10000=1, :v20250725-2)
  • GitHub Check: build-variants-ps2dev-latest (EXTRA_FEATURES=1, PADEMU=1)
  • GitHub Check: build-debug (iopcore_debug, :v20250725-2)
  • GitHub Check: build-variants (EXTRA_FEATURES=0, PADEMU=1)
  • GitHub Check: build-debug (ingame_ppctty_debug, :v20250725-2)
🔇 Additional comments (1)
src/mmcesupport.c (1)

617-644: LGTM!


📝 Walkthrough

Walkthrough

The MMCE art-read quiesce/abort check in mmceLaunchGame now executes before the POPSTARTER VCD handoff, covering both launch paths while preserving the existing warning and return behavior when the check fails.

Changes

MMCE launch flow

Layer / File(s) Summary
Guard before VCD handoff
src/mmcesupport.c
mmceLaunchGame runs the MMCE art-load guard before VCD handoff and returns with the existing warning when the guard fails.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main fix: moving the MMCE quiesce step before the VCD launch handoff.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/vcd-launch-quiesce

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request reorders the launch sequence in mmceLaunchGame within src/mmcesupport.c to ensure that in-flight MMCE art reads are quiesced before the VCD launch path is executed. This prevents potential SIO2 channel collisions when launching VCDs via POPSTARTER. There are no review comments, so we have no additional feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@NathanNeurotic
NathanNeurotic merged commit 0ce42bb into master Jul 20, 2026
61 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant