Hacking Hardware GBA Project Custom EZ Flash Jr. Kernel

  • Thread starter Thread starter lukesau
  • Start date Start date
  • Views Views 514
  • Replies Replies 5
  • Likes Likes 3

lukesau

Member
Newcomer
Joined
Aug 31, 2026
Messages
7
Reaction score
8
Trophies
0
Age
33
XP
29
Country
United States
I have been working on a modified version of the EZ Flash Jr. kernel (ezgb.dat or kernel.gb) for the past few months and I finally have the features I was looking to add:
  1. Continuous scrolling via the down arrow past the stock 16 file limit (including snappier redraw of file manager from the bottom up instead of top down)
  2. Sorted file browser
  3. Hidden file list expanded (now includes files that start with ._, .DS_Store, files that end with .gba, and fast launch control files)
  4. Fast launch feature to quickly get into your preferred rom. Supports multiple methods of config such as an explicit file path inside of FLAUNCH.CFG, <rom name>.fastlaunch for specifying a rom at the top level of the sd card, or simply launching the only rom on the disk if only one exists.
The repo can be found on my github. I don't distribute the actual modified kernel so you will need to build it yourself. There is a patch method and a full rebuild method. You can build for either one of the 1.05e versions

I am looking for more ideas on what to add to the kernel and would love suggestions. Currently the firmware layer is off limits (pretty unsafe to mess with) until I can understand the FPGA bitstream better, but I can basically add any feature that will fit in the available ROM caves to the kernel itself. Changing out your ezgb.dat to my patched version is safe and reversible.

Any features that you wish your EZ Flash Jr. had?
 
Last edited by lukesau,
I just released version 5.0 of my EZ Flash Jr mod. it supports all officially released kernels now so you can patch your preferred version to get the new features. Here is the feature list:

FeatureWhat it does
Sorted browserDirectories first, then files, each group alphabetical (case-insensitive), instead of raw FAT order.
Continuous scrollingDOWN/UP scroll one line past the screen edge instead of stopping at the top or bottom row.
Snappy down-scrollRepaints bottom-up so the new entry appears immediately on DOWN.
RIGHT jumps to endRIGHT on the last page moves the cursor to the bottom entry, mirroring LEFT at the top.
DMG-readable highlight + file iconsEvery highlight (browser selection, tab strip, SET buttons, prompts, Loading boxes) is white on black instead of black on dark gray, which is unreadable on an original Game Boy. The selection bar spans the full row and every row starts with an icon: folder, .gb cart, .gbc cart, .sav page, or a boxed ? for anything else.
12px browserOpt-in larger file browser: 10x12 pixel cells instead of 8x8, so a row is the icon plus 15 characters and a page shows 10 entries (longer names scroll). Switch it on with the UI: button on the SET tab; the stock 8px layout stays the default.
No lost button pressesThe stock menus sample the pad once per loop (3 to 6 frames), so a quick tap can fall between two samples and do nothing. The pad is now sampled every frame and presses are latched, so any tap of one frame or more is acted on. This is most of why the menus feel snappier.
No streak artifactsThe stock text drawer occasionally drops a pixel row of one tile, leaving thin one-tile streaks until the tile is redrawn. Every VRAM write is now made in a short interrupt-free window, in both the 8px and 12px browsers.
Path overflow guardEntering a directory whose full path would overflow the browser's 255-byte path buffer (and corrupt the save-file path) is a no-op instead.
Version on HELP tabThe HELP screen shows the kernel date (K1.05e-0731), the mod version (MOD 5.0) and the GitHub link, so you can tell which build a card is running.
Hide clutterFilters macOS cruft (._* sidecars, .DS_Store, .Spotlight-V100 etc.), unlaunchable .gba ROMs and the settings file from the browser.
Fast launchBoots straight into a ROM, skipping the browser: the ROM named by FLAUNCH= in /EZGB.CFG, or the card's only root ROM. Hold START at power-on to get the browser instead.
Fast-launch SET tabConfigure fast launch on the cart itself: a FAST LAUNCH checkbox on the SET tab, the target's name (scrolling when long) and a PICK ROM button that chooses the target in the file browser. Writes /EZGB.CFG.
RTC backup to SDKeeps a copy of the real-time clock in /EZGB.CFG (updated at every launch, save dump and TIME SET). If the clock has reset to 2000, gone backwards or reads as garbage at boot, a prompt offers to restore the backup, so a weak coin cell costs the time since your last launch instead of resetting the clock. RTC games (Pokemon Crystal, Gold/Silver) also keep their clock when the cart's clock moves backwards. An RTC: SD / NO SD setting on the SET tab turns the backup off.
Last-ROM fallbackThe START overlay's last-launched ROM lives in battery-backed cart RAM, which is lost when the coin cell fails. Every launch also writes LASTROM= to /EZGB.CFG and the overlay falls back to it, so START still relaunches the last game.

Supported kernels: 1.04e (FW4 package), 1.05e-0731 and 1.05e-0918 (FW5). I have tested on both FW4 and FW5.

Still looking for ideas on what to add. Feel free to leave an issue on my ezgb github repo with suggestions or bugs.
 

Attachments

  • banner.png
    banner.png
    55.7 KB · Views: 1
Last edited by lukesau,
Mod 6.9 is out, and there’s now a patcher page that checks your ezgb.dat and patches it in the browser. You no longer need an IPS tool or a build. This release also comes with an experimental firmware mod (a new bootloader)

Kernel changes since 5.0

FeatureWhat it does
12px UI everywhereThe 12px mode now uses a proportional font with kerning. A row fits about 18 characters, so Pokemon Crystal.gbc no longer scrolls. It also covers the tab strip, the SET and HELP tabs, the START overlay, the boot prompts and the Loading/Error boxes, not just the browser.
Cleaner promptsThe START overlay and the save backup prompt are each one closed box instead of overlapping frames. The save prompt shows when the game was last played.
Hold A for optionsHolding A on a ROM opens a menu: Start or Manage saves. A tap still launches.
Manage savesBack up a ROM's save under a timestamped name in /SAVER/, restore any backup (the current save is backed up first), and delete backups. The SAVER folder is hidden from the browser.
SGB BOOTA SET tab option that makes the Jr boot on a Super Game Boy, based on nitro2k01's SGB Enabler. Confirmed on a real SGB. Boots take about 7 s longer while it's on.
Faster loading on FW5The 1.05e kernels turn on FW5's fast load mode on DMG/MGB/SGB too. That's roughly 0.7 s less per MB of ROM.
Safe with a bad or missing batteryEverything the kernel keeps in battery-backed RAM is checked before it's used. A dead coin cell no longer gives you a garbled "back up save?" prompt that writes garbage to the SD card. A BATTERY DRY boot never backs up the faded save, and AUTO SAVE is restored from EZGB.CFG.
416 entries per folderHuge folders used to spill browser records onto the save pages. Now they're capped at 416 entries.
Input fixesOne press of A/B/SELECT/START acts once. A START held at power-on no longer leaks into the save prompt or the browser.
Wrong patch guardA kernel patched with the wrong build's patch stops on a WRONG PATCH screen (or a blank screen for a 1.04e/1.05e mix-up) and doesn't write to the card.
Small stuffLEFT/RIGHT jump to the top/bottom of the SET tab, faster screen fills and tab switches.

Firmware mod 1.9 (experimental, can brick your cart)

I said the firmware was off limits until I understood the FPGA bitstream better. I’ve now decoded it well enough to rewrite the bootloader (stage1). It works on FW4 and FW5-0918 carts:

  • New boot screen
  • Fast launch straight from the bootloader (START at power-on cancels)
  • The pending save is backed up before a fast launch (never when the battery is dead)
  • On FW5: the MBC3 game clock and fast loading
  • Says INSERT SD CARD or GPT CARD: USE MBR instead of hanging on LOADING
  • Super Game Boy detection (not tested on a real SGB yet, so on an SGB stick to the kernel’s SGB BOOT for now)
This one really is risky. If the bootloader breaks, recovery needs an SPI programmer or JTAG. If you don’t need what it adds, just use the kernel patch, which is still just a file swap and fully reversible. I’ve run it on one FW4 and one FW5 cart. Only use the patcher page for it, since it refuses anything but the exact stock updater. Also, if you have a slow SD card it is highly recommended to stay on FW4. Some slow SD cards will fail to boot on a cart that is updated to FW5 (this is an issue with stock firmware).

Thanks to fishcu and nitro2k01 for sharing their Jr research notes.

banner.png
 
Last edited by lukesau,
Very nice project, bringing life to an abandoned piece of hardware :)
Question: what do you mean by this:
"On FW5: the MBC3 game clock and fast loading"

What is the feature described here?
 
Very nice project, bringing life to an abandoned piece of hardware :)
Question: what do you mean by this:
"On FW5: the MBC3 game clock and fast loading"

What is the feature described here?
EZ Flash released FW5 with added FPGA logic, including an MBC3 game clock (RTC) and a fast loading mode that skips a pause after each SD card read (roughly 0.7 s saved per MB of ROM). Stock firmware only turns fast loading on for CGB and GBA, but the SD reads are done by the FPGA and not the Game Boy’s CPU, so it works on DMG too. The mod turns it on for every console. Both features were set up at launch by the kernel, so when I modified the stage1 firmware to fast launch and save from stage1, I also had to port the MBC3 clock and fast loading setup from the kernel into stage1. Those features are not present in FW4, even the patched version.
 

Site & Scene News

New Hot Discussed User Submitted