Skip to content

Amalgam: --game-select-dual-boot adds a retro-go entry after the firmware switch - #122

Merged
BrianPugh merged 1 commit into
mainfrom
amalgam-retro-go-entry
Oct 20, 2026
Merged

BrianPugh merged 1 commit into
mainfrom
amalgam-retro-go-entry

Conversation

@BrianPugh

Copy link
Copy Markdown
Owner

The amalgam forced --game-select-dual-boot on for its firmware switch, so passing the flag did nothing and the dual-boot target (retro-go, or Sylverb's SD bootloader with --sd-bootloader) was only reachable with LEFT+GAME.

Now each firmware's GAME menu always has the switch entry (labeled ZELDA/MARIO), and --game-select-dual-boot adds the DUAL BOOT entry after it, as in single-model builds. It only shows when a target is flashed, and in the amalgam --game-select-dual-boot-icon/-label style that entry.

Changes

  • C: both models' menus take a table of custom entries (game_select_custom_t: icon pointer, RAM buffer, launch function), with shared helpers in game_select.c. game_select_launch/game_select_target_valid are replaced by game_select_switch (amalgam only) plus the existing launch_dual_boot/dual_boot_target_valid.
  • Python: Device.build_game_select_icons builds every custom entry's icon (the switch label comes from patches/amalgam.py). Mario and Zelda place a list of icons (internal flash if they fit, else external).
  • zelda_menu_test.py: --amalgam --dual-boot spin|erased checks both menus' entries, and --sd-bootloader puts the spin image at 0x08032000.
  • README, CLAUDE.md and tools/emu/README.md updated. README's suggested amalgam command now includes --game-select-dual-boot.

Testing

  • pytest tests/: 464 passed. 5 golden configs re-recorded (the ones with a game-select menu: the refactor changes single-model --game-select-dual-boot code layout too); the other 9 are byte-identical.
  • GWemu, --device=amalgam --sd-bootloader --game-select-dual-boot: Mario's menu wraps through SMB1, SMB2, BALL, ZELDA, RETRO-GO; switching to Zelda works; Zelda shows 7 rows; A on RETRO-GO runs the target at 0x08032000.
  • GWemu regressions: the amalgam without the flag (--sd-bootloader) still switches back to Mario; single-model Mario mario_menu_test.py passes with bank 2 spin and erased.
  • Hardware: the same amalgam build works.

🤖 Generated with Claude Code

The amalgam forced --game-select-dual-boot on for its firmware switch, so
the flag did nothing and the dual-boot target was only reachable with
LEFT+GAME. The switch entry is now always there on its own, and
--game-select-dual-boot adds the DUAL BOOT entry after it, as in
single-model builds (its -icon/-label options style that entry).

Both models' menus take a table of custom entries (game_select_custom_t),
and Device.build_game_select_icons builds their icons. The 5 golden
configs with a game-select menu change; the other 9 are byte-identical.
zelda_menu_test.py checks both entries with --amalgam --dual-boot, and
--sd-bootloader puts its spin image at 0x08032000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@BrianPugh
BrianPugh merged commit 07cfeb3 into main Oct 20, 2026
1 check passed
@BrianPugh
BrianPugh deleted the amalgam-retro-go-entry branch October 20, 2026 14:15
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