Skip to content

add Grid view tab - #430

Merged
networkfusion merged 4 commits into
n64brew:developfrom
rmmh:grid
Oct 7, 2026
Merged

networkfusion merged 4 commits into
n64brew:developfrom
rmmh:grid

Conversation

@rmmh

@rmmh rmmh commented Sep 28, 2026

Copy link
Copy Markdown

Grid is an artwork view of the N64 ROMs directly inside one library directory, and the first of the main tabs. It needs menu/metadata for names and artwork; without it, the Grid tab and its settings are hidden and the menu uses Files.

Description

Browsing:

  • Tiles show box or cartridge art (Z), with the title as a marquee.
  • C-Up sorts by title, keeping a manual arrangement made by holding A and moving a tile; C-Left sorts by release date; C-Right groups by first author. Sort changes keep the selected ROM.
  • A opens ROM details, Start launches immediately, stopping at the Expansion Pak warning when needed. B and details return to Grid.
  • Decoded artwork is kept in a 2 MiB cache when memory allows, including while ROM details are open.

Index:

  • ROM details, arrangement, and view choices are cached in menu/cache/grid.index. The first time Grid opens after boot, and after Files deletes or extracts anything, it lists the library and reads only new ROMs; 41 cached ROMs sync in about 40 ms instead of 2 s. Slow scans show a progress bar.
  • Up to 512 ROMs; subdirectories, other menus' ROMs, and system files such as macOS "._" companions are skipped.
  • If the library can't be read, the index is kept and the empty Grid names the directory and how to change it.

Settings and Files:

  • Settings > Menu gains Boot Into (Grid or Files), Grid Library, and Grid Cache, which shows the ROM count and deletes the index on A.
  • Files' context menu gains Set as Grid library directory.
  • The menu checks for an Expansion Pak at startup so libdragon does not warn when Grid allocates past 4 MiB.

Motivation and Context

The Grid tab makes choosing a ROM more graphically satisfying by using the graphical metadata.

How Has This Been Tested?

This has been tested extensively in emulator and on hardware, and had several rounds of refinement for the UI.

The grid is invisible if there's no menu/metadata on the SD card, since that means there won't be any images, and does not increase boot time for the menu. The first visit to the grid tab may take several seconds to build the index, but has a progress bar.

Screenshots

image image

Types of changes

  • Improvement (non-breaking change that adds a new feature)
  • Bug fix (fixes an issue)
  • Breaking change (breaking change)
  • Documentation Improvement
  • Config and build (change in the configuration and build system, has no impact on code or features)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

You agree with the license terms and that other license types may be granted with permission of the original N64FlashcartMenu project license holders.

Signed-off-by: rmmh hitchmanr@gmail.com

@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2d767ecf-5dd1-4d17-bd4a-adcf0fcb1fa7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@networkfusion

Copy link
Copy Markdown
Collaborator

@rmmh I would love to test, but the CI build is broken.

Comment thread Makefile Outdated
Comment thread src/menu/fonts.h
Comment thread src/menu/fonts.c Outdated
@networkfusion

Copy link
Copy Markdown
Collaborator

Just a comment, if on first run, the menu takes more than 1 second to load, users will complain. If a cache now needs to be populated, a message needs to be shown (but preferably it needs to be a background task).

@networkfusion

Copy link
Copy Markdown
Collaborator

Since I have been unable to check, please ensure that homebrew ROM embedded meta still works as expected.

Grid is an artwork view of the N64 ROMs directly inside one library
directory, and the first of the main tabs. It needs menu/metadata for
names and artwork; without it, the Grid tab and its settings are hidden
and the menu uses Files.

Browsing:
- Tiles show box or cartridge art (Z), with the title as a marquee.
- C-Up sorts by title, keeping a manual arrangement made by holding A
  and moving a tile; C-Left sorts by release date; C-Right groups by
  first author. Sort changes keep the selected ROM.
- A opens ROM details, Start launches immediately, stopping at the
  Expansion Pak warning when needed. B and details return to Grid.
- Decoded artwork is kept in a 2 MiB cache when memory allows,
  including while ROM details are open.

Index:
- ROM details, arrangement, and view choices are cached in
  menu/cache/grid.index. The first time Grid opens after boot, and
  after Files deletes or extracts anything, it lists the library and
  reads only new ROMs; 41 cached ROMs sync in about 40 ms instead of
  2 s. Slow scans show a progress bar.
- Up to 512 ROMs; subdirectories, other menus' ROMs, and system files
  such as macOS "._" companions are skipped.
- If the library can't be read, the index is kept and the empty Grid
  names the directory and how to change it.

Settings and Files:
- Settings > Menu gains Boot Into (Grid or Files), Grid Library, and
  Grid Cache, which shows the ROM count and deletes the index on A.
- Files' context menu gains Set as Grid library directory.
- The menu checks for an Expansion Pak at startup so libdragon does not
  warn when Grid allocates past 4 MiB.
Grid tiles now take titles, authors, dates, and artwork from a ROM's
.meta companion, then menu/metadata, then metadata embedded in the ROM,
matching ROM details. The index records the source (version 2).
@rmmh

rmmh commented Sep 30, 2026 •

Copy link
Copy Markdown
Author

added support for homebrew rom embedded meta in the grid view too

it doesn't add load time to the default menu, and when scanning the grid files to load metadata etc (only done once, can take a few seconds on hardware) it shows a progress bar: image

the large font is separate for number readability when grouping:
image

@networkfusion

networkfusion commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Users may need more docs for set as grid library directory and set as files start directory. Also, if you press z on an actual directory (rather than the files contained within) it shows the option, but does not set the option, (for which it is confusing because the top 2 entries of the menu are specifically for the file entry, whereas the next 3 are for other purposes).

But I can confirm that the homebrew ROM's that include metadata are now showing in the grid view 👍 .

@rmmh

rmmh commented Oct 4, 2026

Copy link
Copy Markdown
Author

added docs for those settings and improved the wording so it's not confusing when hovered over a dir

@networkfusion

Copy link
Copy Markdown
Collaborator

I am going to merge this, but the outstanding is: Is there any reason why the cpak manager cannot be a tab (rather than in the settings) which would remove the issue entirely, also, there is no reason why the options invalid options should not be removed from the sub menu when not valid.

@networkfusion
networkfusion merged commit 363c834 into n64brew:develop Oct 7, 2026
3 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.

2 participants