# New cartridge design: ROMBA π

**URL:** <https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122>\
**Category:** CPC hardware\
**Tags:** hardware, extension, dma\
**Created:** [November 4, 2026, 9:20am UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122 "2026-11-04T09:20:10Z")\
**Posts on this page:** 12\
**Page:** 2

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 6, 2026, 12:09pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/21 "2026-11-06T12:09:08Z")

</div>

Thanks. Didn’t know the CPC-CPLINK2, but now that I see it, maybe it can benefit from the DMA modes.

---

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 6, 2026, 12:09pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/22 "2026-11-06T12:09:35Z")

</div>

Updated documentation, adding 2D DMA mode usage: [PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab](https://gitlab.com/doragasu/romba-pi-src/-/blob/master/PROGRAMMING.md?ref_type=heads#2d-mode)

I think I should maybe add the BASIC programs I use for the tests to complement the explanations on how to use DMA modes.

---

<div class="post-metadata">

**Author:** ![Rabs](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/rabs/32/158_2.png) [@Rabs](https://forum.cpcwiki.eu/u/Rabs)\
**Post date:** [November 6, 2026, 1:50pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/23 "2026-11-06T13:50:43Z")

</div>

Yes probably would help with DMA but I had to use 8 GPIOs for the PI Data side GPIO32..39 with the remaining non 5V tolerant GPIOs 40..47 also servicing the PI. So I am probably short of a few CPC Bus signals.

I am just using a development board at the moment.

 ![image](https://forum.cpcwiki.eu/uploads/default/original/2X/6/6ad4ce93172013128e5162e01abbc8664801c818.png)

---

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 9, 2026, 5:43pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/24 "2026-11-09T17:43:17Z")

</div>

Updated documentation with lots more info:

- Easier to understand (I hope) information on how to use 2D DMA mode.
- Updated DMA register list.
- Added example BASIC listings to read the mouse and perform linear and 2D DMA transfers.
- Added info on how to do DMA fills and also transfer from the CPC internal memory.

As always, you can read it on the repository: [PROGRAMMING.md · master · doragasu / romba-pi-src · GitLab](https://gitlab.com/doragasu/romba-pi-src/-/blob/master/PROGRAMMING.md?ref_type=heads)

---

<div class="post-metadata">

**Author:** ![Anthony\_Flack](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/anthony_flack/32/35_2.png) [@Anthony\_Flack](https://forum.cpcwiki.eu/u/Anthony_Flack)\
**Post date:** [November 9, 2026, 8:03pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/25 "2026-11-09T20:03:25Z")

</div>

Recent discussion about Another World, talking about how the game runs on a simple state machine which is only dependent on a fast polygon fill routine, makes me think it would be a good candidate for experimenting with this cart’s DMA capabilities.

---

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 9, 2026, 8:45pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/26 "2026-11-09T20:45:31Z")

</div>

In its current state, DMA fills can be useful to draw rectangles (including horizontal and vertical lines). But any other than that, it might not be very helpful.

---

<div class="post-metadata">

**Author:** ![Anthony\_Flack](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/anthony_flack/32/35_2.png) [@Anthony\_Flack](https://forum.cpcwiki.eu/u/Anthony_Flack)\
**Post date:** [November 9, 2026, 9:52pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/27 "2026-11-09T21:52:36Z")

</div>

Surely a polygon can be built from horizontal lines? Or is there too much overhead to make it worth doing something like this?

---

<div class="post-metadata">

**Author:** ![robcfg](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/robcfg/32/43_2.png) [@robcfg](https://forum.cpcwiki.eu/u/robcfg)\
**Post date:** [November 9, 2026, 10:16pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/28 "2026-11-09T22:16:02Z")

</div>

Old software 3D engines painted triangles like that. Splitting the triangles vertically and then drawing horizontal lines.

I’m not sure if DMA is more helpful with bulk data transfers than very specific and always-changing data.

---

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 10, 2026, 8:11am UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/29 "2026-11-10T08:11:54Z")

</div>

You have to do some OUTs to change fill coordinates and length and then launch the transfer. So for drawing a few pixels, it might be faster just writing them directly to the buffer.

You could do things like render polygons on the RP2350 and transfer them via DMA, but then the CPC police would knock on your door 😅

You could even do things like running DOOM on the RP2350, quantized for CPC color palette and resolution, and transfer the frames to the CPC. An entire screen transfer takes about 16.4 ms, so applications like a 50 FPS video player could also be possible (you also have up to 16 MiB ROM to store the video).

I am restricting the DMA capabilities of the cart to what a typical blitter could be able to do back in the day. But being able to change the entire CPC screen contents in less than a frame, allows doing any kind of accelerator if you don’t mind rendering not being done by the Z80.

---

<div class="post-metadata">

**Author:** ![doragasu](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/doragasu/32/1659_2.png) [@doragasu](https://forum.cpcwiki.eu/u/doragasu)\
**Post date:** [November 10, 2026, 8:16am UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/30 "2026-11-10T08:16:58Z")

</div>

That said, anyone interested in doing Bad Apple for ROMBA π?

---

<div class="post-metadata">

**Author:** ![Dr\_Retro\_Spect](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/dr_retro_spect/32/1828_2.png) [@Dr\_Retro\_Spect](https://forum.cpcwiki.eu/u/Dr_Retro_Spect)\
**Post date:** [November 13, 2026, 12:15pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/31 "2026-11-13T12:15:46Z")

</div>

Looks interesting!

Love the DMA capabilities - would make a huge difference to getting smooth framerates down! 🙂

If you do a run of them, I’ll definitely have one!

---

<div class="post-metadata">

**Author:** ![salvogendut](https://forum.cpcwiki.eu/user_avatar/forum.cpcwiki.eu/salvogendut/32/34_2.png) [@salvogendut](https://forum.cpcwiki.eu/u/salvogendut)\
**Post date:** [November 13, 2026, 7:08pm UTC](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122/32 "2026-11-13T19:08:32Z")

</div>

I find the DMA features very appealing! Keep it up! One question I have is : could the 2350 be a daughterboard (for example a core module) that you can solder in ? That would simplify this build a lot

[Previous page](https://forum.cpcwiki.eu/t/new-cartridge-design-romba/1122.md?page=1)
