Skip to content

Support using a ModRetro Chromatic as a dumper#128

Open
fredemmott wants to merge 1 commit into
Lesserkuma:masterfrom
fredemmott:chromatic
Open

Support using a ModRetro Chromatic as a dumper#128
fredemmott wants to merge 1 commit into
Lesserkuma:masterfrom
fredemmott:chromatic

Conversation

@fredemmott
Copy link
Copy Markdown
Contributor

@fredemmott fredemmott commented May 6, 2026

Requires https://github.com/fredemmott/chromatic_dumper firmware loaded into FPGA RAM, but not ROM.

If you're interested in taking this, the next step would be to automatically load the firmware with openfpgaloader. For now, I'm using the gowin IDE to load it before starting FlashGBX.

Given that changing cartridges requires turning off the chromatic, turning it on, and loading the firmware again every time, it would probably be best to automatically load it on connect if needed, rather than going through the current firmware update process.

This is a modified copy of hw_JoeyJr.py

@fredemmott
Copy link
Copy Markdown
Contributor Author

openfpgaloader

The official way to get this on Windows is to use msys2 + pacman... not really viable IMO.

On the other hand, if i extract modretro's updater and grab openfpgaloader.exe from them:

.\openFPGALoader.exe --cable gwu2x --write-sram D:\chromatic_fpga\esp32t\impl\pnr\evt1_x2.fs
empty
write to ram
User requested: 6000000 real frequency is 6000000
Parse file Parse D:\chromatic_fpga\esp32t\impl\pnr\evt1_x2.fs:
Done
DONE
Load SRAM: [==================================================] 100.00%
Done
DONE

... that works

@Lesserkuma
Copy link
Copy Markdown
Owner

Oh thanks! I do not own this device and cannot test anything, so I am not comfortable adding it to the main repo for now. But great job nonetheless!

@fredemmott
Copy link
Copy Markdown
Contributor Author

Thanks; for me to continue on this a bit more, is there any documentation on the commands and variables?

For example:

  • DMG_FLASH_WRITE_BYTE appears to be largely equivalent to DMG_CART_WRITE, but pulsing the FLASH_WE_PIN
  • It's going to be tough to figure out what WRITE_FLASH_CMD, FLASH_COMMAND_SET, FLASH_PULSE_RESET, FLASH_COMMANDS_BANK_1 etc all are meant to actually do

@fredemmott
Copy link
Copy Markdown
Contributor Author

fredemmott commented May 8, 2026

my notes on SET_FLASH_CMD:

SET_FLASH_CMD: 3 bytes
MBC3000v4: 1, 1 (UNBUFFERED), 1(WR)

BYTE 0:
  0. FLASH_COMMAND_SET_NONE (aka many vendors, just write, nothing special)
  1. AMD
  2. Intel
  3. Sharp: intel with a quirk
  Others: other vendors
BYTE 1: METHOD
  0. UNKNOWN - error?
  1. Unbuffered
  2. Buffered
  8. Paged
  Others: vendor
BYTE 2: FLASH_WE_PIN
  0. None
  1. WR
  2. Audio
  3. WR_RESET

@Lesserkuma
Copy link
Copy Markdown
Owner

My firmware module is planned to be released under GPL soon

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