Some people might remember ROMBA, a cart I released almost 10 years ago, that was a Rombox with some limited DMA capabilities. As it sat there, time went by, COVID came, the CPLD that cart uses went from less than 2€ a piece to more than 10€ a piece, and the very few people that were interested in the cart lost interest.
As it seems the pricing of CPLDs with a big amount of I/O will never go down to where it was, some time ago I started thinking about making a new design focused on, again, making it cheap to build, while adding some more features. Meet ROMBA π (or ROMBA 3.14):
The design is based on RP2350B, a “pi-pico2” microcontroller instead of a CPLD. These microcontrollers are cheap, with plenty 5V tolerant pins and support up to 16 MiB of cheap QSPI flash memory. The cart is connected to the expansion port, and as happened with my older ROMBA cart, it can be connected directly using an edge connector, or through an MX4 board using a DIL connector.
Using an MCU instead of a CPLD/FPGA for parallel bus interfacing, combined with using QSPI flash instead of parallel NOR flash has made this quite challenging to work as Rombox because of the latencies involved in polling the bus and reading from the QSPI chip, but there it is!
The currently implemented features are:
- Up to 16 MiB (128 megabits) Flash ROM capacity. Most is usable as ROM memory for the CPC, with the exception of the amount used for firmware (that currently is about 48 KiB but should grow if more features are added).
- USB host port. Currently mouse support is implemented, but other USB peripherals could be added.
- Mouse support includes configurable fractional scaling (to adjust sensitivity from the CPC side), with independent setting for X, Y and wheel.
- Compatible with Amstrad CPC Romboxes (up to 256 slots).
- Hardware DMA that can be used to copy data from ROM to internal RAM (1 byte per microsecond).
- DMA engine can copy in linear mode and in 2D mode, allowing to copy tiles to the screen memory without having to worry about the oddities of the CRTC and GA.
- DMA engine in 2D mode also supports on the fly tile mirroring for the 3 graphical modes.
Support for the features above is stable, but I would not consider the firmware feature complete as it is (more on this later). The hardware allows adding support also for these:
- Pixel shifting for tiles.
- Pixel masking for tiles (currently implemented but with byte granularity only).
- Lower ROM support.
- More complex memory mapping.
- RAM expansion (MCU has 512 KiB RAM, and the amount not used by the firm could be used as CPC RAM).
- Sound capabilities (FM capabilities, PCM sample playback).
- Flash data saving.
- Programmable NMI generator.
- Support for DMA from CPC internal RAM to CPC internal RAM (currently only ROM to RAM is supported).
Here you can see the mouse support in action:
SyX has patched a bunch of games to support the mouse and I should make a video of some of these also
. He also helped me a lot with things like understanding video memory layout, and some code snippets and programs for testing.
And here you can see the 2D DMA capabilities in action:
That sprite is 32x64 pixels (mode 0) and the DMA takes about 1 ms to draw it (it draws two mode 0 pixels per microsecond). The 2D DMA engine also does on the fly mirroring by hardware and handles screen clipping and masking (but in the current version everything only with byte granularity, so two mode 0 pixels).
Both hardware and firmware are released as Open Source. Documentation about how to program for these is lacking right now, but I plan to add it later.
Now, about the current “unfinished” firmware status. I wanted to add most (if not all) features listed above that are not yet implemented. But it seems a big chunk (maybe the majority?) of the CPC community only cares about software achievements and see these hardware expansions as “anti-features”, as “that is not a CPC anymore” and the like. So instead of pouring more effort into this, I am halting development until I see real interest in the cart. Like someone genuinely interested in developing for this platform using these features. Because if it is going to be my second design for the CPC that will end unused, I would rather spend my time on other hardware projects that might help other devs.
So what do you think. Is something like this interesting? Anyone interested in developing for these cheap and capable carts? Or adding anything other than memory is cheating and should be buried?

