Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EZ-Flash II USB Flasher

Modern open-source tools for the EZ-Writer II / EZ-Flash II USB GBA cartridge flasher.

Dump Game Boy Advance ROMs, back up saves, inspect cartridge headers, and restore saves from Windows 10/11, Linux, or macOS without the original Windows XP kernel drivers.

No custom kernel driver. Uses WinUSB + libusb.

License: GPL v3 Rust Platforms


What This Is

The original EZ-Writer II software only works easily on old Windows XP-era setups. This project replaces the old USB driver path with a Rust CLI and GUI that talk to the hardware through libusb.

It supports the EZ-Writer II device that starts as 0547:2131 and, after firmware upload, re-enumerates as 0548:1005.

Current Status

Feature Status
Device detection Working
Firmware upload to AN2131 RAM Working
Cartridge header read Working
ROM dump Working
Save read Working
Save write Working, use backups
GUI Working
ROM write / erase Experimental, high risk

Read-only actions are the safest and are the intended public release path. Write features exist for testing and recovery work, but you should back up first and read SAFETY.md.

Quick Start

Prerequisites

  • Rust — install from https://rustup.rs/ if cargo is unavailable.
  • USB driver (Windows only) — use Zadig:
    1. Run Zadig as Administrator.
    2. Options → List All Devices.
    3. Select EZ-Writer II (0547:2131 or 0548:1005).
    4. Choose WinUSB, click Install Driver.
  • Linux — may need a udev rule or root for direct USB access.
  • macOS — no driver needed, but grant USB permission when prompted.

Build CLI

cd src/ezwriter-cli
cargo build --release

Detect → Init → Dump

# From the src/ezwriter-cli/ directory:

# 1. Detect
./target/release/ezwriter-cli list

# 2. Load firmware (if in bootloader mode 0547:2131)
./target/release/ezwriter-cli firmware-download tusbez.bin

# 3. Identify cartridge
./target/release/ezwriter-cli cart-info

# 4. Dump ROM + save
./target/release/ezwriter-cli dump mygame.gba
./target/release/ezwriter-cli save-read 0 2048 --output mygame.sav

(Windows: replace ./target/release/ezwriter-cli with .\target\release\ezwriter-cli.exe)

tusbez.bin is the original 8051 firmware loaded into Cypress AN2131 RAM. Unplugging resets the chip, so firmware must be uploaded on every connection.

GUI

Build from src/ezwriter-gui:

cd src/ezwriter-gui
cargo build --release

Run from the same directory (loader files are in src/ezwriter-gui):

./target/release/ezwriter-gui          # Linux/macOS
target\release\ezwriter-gui.exe       # Windows

If you move the executable elsewhere, copy loader_table1.bin and loader_table2.bin next to it first.

The GUI has five tabs:

Tab Purpose
Status Detect writer and initialize firmware
Cart Info Read title, game code, save type, and ROM size
Read ROM Dump a cartridge ROM to .gba
Read Save Dump save data to .sav
Write Save Restore save data after backup

Safety Rules

  • Dump the ROM before writing anything.
  • Dump the save before writing anything.
  • Use short, reliable USB cables.
  • Do not interrupt write operations.
  • Treat write-rom and erase as experimental and high risk.

See SAFETY.md for the full checklist.

How It Works

flowchart LR
    PC["PC<br/>ezwriter-cli / ezwriter-gui"]
    USB["USB<br/>libusb + WinUSB"]
    MCU["Cypress AN2131Q<br/>8051 @ 48 MHz"]
    CART["EZ-Flash II<br/>GBA cartridge"]

    PC <--> USB
    USB <-->|"EP0 control<br/>EP4 bulk OUT<br/>EP2 bulk IN"| MCU
    MCU <-->|"parallel cart bus"| CART
Loading

Boot sequence:

sequenceDiagram
    participant H as Host PC
    participant D as EZ-Writer II
    participant C as GBA cart

    H->>D: Plug in, bootloader mode 0547:2131
    H->>D: Vendor 0xA0: hold CPU reset
    H->>D: Vendor 0xA0: upload tusbez.bin
    H->>D: Vendor 0xA0: start CPU
    D-->>H: Re-enumerates as 0548:1005
    H->>D: Bulk commands
    D->>C: Cartridge bus operations
    C-->>D: ROM / save data
    D-->>H: Bulk responses
Loading

Full protocol notes: docs/protocol_notes.md

Project Layout

.
|-- src/ezwriter-cli/       Rust CLI
|-- src/ezwriter-gui/       Rust GUI
|-- docs/                   Protocol notes and original driver analysis
|-- driver/winusb-inf/      Optional WinUSB INF files
|-- SAFETY.md               Write-operation safety guide
`-- RELEASE.md              Public release checklist and Reddit post draft

Originally created as ezwriter-reverse during reverse engineering. Binaries keep the ezwriter- prefix — the hardware is commonly called EZ-Writer II.

Legal

Use this for homebrew, preservation, personal backups, saves from cartridges you own, and GBA development. Do not use it for piracy.

References

About

Modern open-source replacement for the Windows XP-era EZ-Writer II / EZ-Flash II USB flasher. Dump GBA ROMs and saves via USB -- no kernel drivers needed. Works on Windows 10/11, Linux, macOS.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages