feat(accuracysnes): a headless ares host — builds and links, does not yet run - #303
Conversation
… yet run Several findings are stuck at 2-versus-1 with no tiebreaker, because this project's provenance rule counts ares and bsnes as ONE reference: A2.10, and the OBJ-interlace field parity where RustySNES's `row + field` and its $213F bit 7 are both ares'. Both name the same missing thing -- ares actually running the cart -- and the recorded reason it had not happened was that ares would have to be built and had no headless mode. The first half of that is now known to be cheap. -DARES_CORES=sfc configures and builds the SFC core standalone in a couple of minutes; ares::Platform is a small interface whose methods all have no-op defaults, so a headless host is ~120 lines; it links; and the cart's results block is reachable by construction at ares::SuperFamicom::cpu.wram[0xF000 + n]. What remains is a crash during setup, which is a bounded debugging job rather than a feasibility question. Committed labelled as incomplete, because the recipe is the deliverable: the next attempt starts from a linked binary instead of from "ares would need building". Two traps are recorded in build.sh because each cost a round -- hiro is not optional for a headless host (mia/mia.hpp includes it, and its generated resource header does not exist until hiro has been built once), and nall/main.hpp must be included by the host translation unit or the link fails with a bare `undefined reference to 'main'` from crt1.o, which reads like a missing object rather than a missing shim. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 14 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
Comment |
Antigravity review (Gemini via Ultra)This PR adds an incomplete C++ host harness and build script under Blocking issues
Suggestions
Nitpicks
Automated first-pass review by |
There was a problem hiding this comment.
Pull request overview
Adds a new, headless ares host prototype under scripts/accuracysnes/ares_host/ to establish that ares’ SFC core can be built standalone and linked into a minimal runner that can (eventually) execute the AccuracySNES cartridge and read its WRAM results block for cross-validation.
Changes:
- Add a build recipe (
build.sh) that configures/builds the ares SFC core and links a small C++ host binary. - Add the headless host implementation (
ares_host.cpp) that wiresares::Platform, runs for a frame budget, and prints the AccuracySNES results block in the existing runner output shape. - Document current status/known traps in a new README, and record the milestone in
CHANGELOG.md.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| scripts/accuracysnes/ares_host/README.md | Documents purpose, current incomplete status, and likely crash causes/traps for debugging. |
| scripts/accuracysnes/ares_host/build.sh | Build/link recipe for a minimal headless ares SFC host binary. |
| scripts/accuracysnes/ares_host/ares_host.cpp | Headless ares host that drives the core and dumps the AccuracySNES WRAM results block. |
| CHANGELOG.md | Records the new headless ares host milestone and its motivation (third reference feasibility). |
| OUT=${OUT:-${TMPDIR:-/tmp}/ares_host} | ||
| HERE=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | ||
|
|
||
| [[ -d $ARES ]] || { echo "no ares clone at $ARES — set REF_PROJ" >&2; exit 1; } |
Committed labelled as incomplete.
build.shproduces a linked binary; running it against the cart dumps core during setup. What is finished is the part that was recorded as the blocker.Why this matters
Several findings are stuck at 2 versus 1 with no tiebreaker, because this project's own provenance rule counts ares and bsnes as one reference:
A2.10— Mesen2 fails it, RustySNES and snes9x pass, and it is deliberately not recorded as settled because a harness bug upstream of every implementation produces the same signature (and one did — the$F8/$F9retraction).row + fieldand its$213Fbit 7 are both ares', so this is the bsnes/ares lineage against the other two rather than RustySNES alone.Both name the same missing thing: ares actually running the cart. The recorded reason it had not happened was that ares would have to be built and had no headless mode.
What is now established
-DARES_CORES=sfc, ~76 targets, a couple of minutesares::Platformis a small interface whose methods all have no-op defaultsares::SuperFamicom::cpu.wram[0xF000 + n]So the feasibility question is answered, and what remains is bounded debugging. The README names the three likely causes in the order worth trying.
Two traps the recipe records
hirois not optional for a headless host.mia/mia.hppincludes it, and its generatedresource/resource.hppdoes not exist until hiro has been built once.nall/main.hppmust be included by the host translation unit. It emits::mainonly whenNALL_MAIN_IMPLis undefined, and nall's ownmain.cpp.odefines that. Omit it and the link fails with a bareundefined reference to 'main'out ofcrt1.o, which reads like a missing object file rather than a missing shim.Scope
Docs plus two new files under
scripts/accuracysnes/ares_host/. Nothing in the build, the emulator, or any gate is touched;ref-proj/is not modified.🤖 Generated with Claude Code