u/fred_emmott

Reading and writing an MBC3000 v4 cart from a Chromatic

An update to my previous post (https://www.reddit.com/r/ModRetroChromatic/s/rSnQbCHBEZ):

I’ve published firmware v2026.05.08.01, which adds the ability to read/write this BennVenn cartridge with your Chromatic, a PC, and a USB cable.

You can get the latest version here: https://github.com/fredemmott/chromatic\_dumper/releases/latest

Other cartridges *may* work, but they’re untested so anything could happen; I don’t own other cartridges so I’ve not tested them.

reddit.com
u/fred_emmott — 4 days ago

Status

Works, but not friendly. Stop reading if you're not happy using source code and a terminal.

This is good enough for me, I'm sharing in case another developer is interested in picking this up and making it user-friendly. I don't plan to spend more time on this.

What I've done

Works:

  • Chromatic v2
  • Dumping ModRetro cartridges (ROM and saves)
  • Dumping OG cartridges (ROM and saves)

Does not work:

  • MBC3000v4

Unknown: everything else

Current flow

Once you've built FlashGBX with those changes:

  1. Turn off your Chromatic
  2. Insert cartridge
  3. Plug in to USB
  4. Turn on
  5. Load firmware into the FPGA SRAM - NOT ROM - this way, nothing's permanent. To get back the original firmware, just turn it off and on again
  6. Run the modified FlashGBX

To change cartridges, you need to go back to step 1: turn it off, load the firmware, etc. DO NOT CHANGE CARTRIDGES WHILE THE CHROMATIC HAS POWER.

What needs doing

Extend the FlashGBX code to detect other firmware and automatically load the modified firmware if needed.

Installer/exe for modified flashgbx

Loading the firmware

With GoWin Programmer

You need the full GoWin EDA/Programmer; the license is free, but it's a 'fill in a form and wait a while' thing. The educational version does not include support for this board.

Use programmer_cli.exe --help first to check that:

  • --cable-index 0 means GWU2X
  • --operation_index 2 means 'SRAM Program'

--helpprovides other options like cable by name, but they don't appear to actually work in v1.9.12.02.

programmer_cli.exe --device GW5A-25A --operation_index 2 --fsFile C:\path\to\evt1_x2.fs --cable-index 0

Replace C:\path\to\evt1\_x2.fs with the path to the file from https://github.com/fredemmott/chromatic_dumper/releases/latest , or the output of the build if you used GoWin EDA

With OpenFPGALoader

On Windows at least, use MRUpdater/cart clinic at least once to make sure you've got the right drivers.

If you're on Windows and already use msys2, follow Openfpgaloader's instructions to install. Otherwise, the easiest way to get a usable windows version is to use pyinstextractor-ng to grab openfpgaloader.exe from the MRUpdater.exe .

openFPGALoader --cable gwu2x --write-sram C:\path\to\evt1_x2.fs

Advice for devs

if you want to pick this up, it's probably best to bundle openfpgaloader and the firmware in a modified flashgbx. Not sure about the license on modretro's binary, so for windows, this might mean figuring out how to make a visual studio build yourself. If I were doing this, I'd probably make a fork using vcpkg for dependencies, and use a -static triplet, especially as it already uses CMake.

Given the firmware is only going to FPGA SRAM, I don't think flashgbx's firmware update flow makes sense here; I'd put it in the 'connect' functionality and just do it silently.

You could streamline the flow by writing to ROM and requiring a flash back, but to me, it's great for safety that you just need to turn the thing off and on again to get back to ModRetro's firmware.

u/fred_emmott — 7 days ago