Skip to content

gui: add N64 development board (Ultra64) support#48

Merged
techomancer merged 1 commit into
techomancer:mainfrom
danifunker:add-ultra64-gui
Jun 27, 2026
Merged

gui: add N64 development board (Ultra64) support#48
techomancer merged 1 commit into
techomancer:mainfrom
danifunker:add-ultra64-gui

Conversation

@danifunker

Copy link
Copy Markdown
Contributor

Summary

Adds GUI support for the N64 development board (Ultra64) introduced in dec9ea2, so it can be enabled and used without hand-editing iris.toml.

The core feature already exposes a single runtime knob ([ultra64] enabled) gated behind the ultra64 cargo feature. This wires that into iris-gui:

  • Build: enable the ultra64 iris feature in iris-gui (additive, alongside chd/camera/jit/rex-jit). Pulls in shared_memory + raw_sync (both cross-platform); no runtime cost when the board is off — the GIO device and POSIX shm bridge are only created when the user enables it.
  • Toggle: an "N64 development board (Ultra64)" checkbox on the General tab, bound to cfg.ultra64.enabled. Read once at VM start; persisted in the machine store via serde.
  • Help guide: a new Help → "N64 development board (Ultra64)…" window walking through the setup — enable the board, build/run the gopher64 ultra64 fork, then gload a ROM from IRIX — plus the ultra monitor commands and a link to docs/ultra64.md.
  • Diagnostics: build_features::ULTRA64 is exposed and reported in the Help build-features list.

App Store / sandbox

The toggle and Help guide are hidden in appstore builds (#[cfg(not(feature = "appstore"))]). Under the macOS App Sandbox, shm_open requires the com.apple.security.application-groups entitlement and an app-group-prefixed name — neither of which the sandboxed build has — so Ultra64::new can't create /iris_n64_bridge. The board also depends on an external, separately-compiled gopher64 process that a sandboxed app can't coordinate. (Ultra64::new already fails gracefully and boots without the board, so this is purely about not surfacing an unusable control.)

Testing

  • cargo build -p iris-gui — clean.
  • cargo build -p iris-gui --features appstore — clean (toggle + Help item compiled out; the cfg.ultra64 field and help window still compile).

🤖 Generated with Claude Code

Surface the upstream ultra64 devkit (dec9ea2) in iris-gui.

- Enable the `ultra64` iris feature in iris-gui (additive, alongside
  chd/camera/jit/rex-jit). It pulls in shared_memory + raw_sync, both
  cross-platform, with no runtime cost when the board is off.
- Add an "N64 development board (Ultra64)" toggle to the General tab,
  bound to cfg.ultra64.enabled. It's read once at VM start and persists
  in the machine store (gui.json) via serde.
- Add a Help -> "N64 development board (Ultra64)..." getting-started
  guide: enable the board, build/run the gopher64 `ultra64` fork, then
  gload a ROM from IRIX. Includes the `ultra` monitor commands.
- Expose build_features::ULTRA64 and report it in the Help build-features
  list (honest about the sandbox, like jit/rex-jit).

The toggle and Help guide are hidden in App Store builds: the sandbox
can't open the POSIX shm bridge (no application-groups entitlement) and
can't run the external gopher64 process the board talks to.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@techomancer techomancer merged commit d303fbd into techomancer:main Jun 27, 2026
1 check 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.

2 participants