Arkanoid Arcade FPGA Core for MiSTer by Ace

Last month Ace joined me on a live-stream to reveal a preview of his impressive new FPGA core for MiSTer, Arkanoid (1986) Arcade. The core is now publicly released after a very long development cycle that required transposing several PCBs of real arcade hardware (a mix of arcade PCBs, old ICs, and other soft-core donors) to VHDL. The core is free and open-source, and is available here. It has come a long way since our preview, and I hope to show it in action again soon. Ace has more exciting FPGA plans for the future too, but is keeping them under wraps.

I asked Ace to share a few words about his first FPGA core for MiSTer:

What else can be said about the core aside from it being 4 long months of headaches, confusion, pure WTF, and a first attempt at a full FPGA system that turned out to be more ambitious than expected?

But when everything came together, it turned out better than I would have ever expected it to.

I’ll be honest, I actually haven’t done any timing analysis with Arkanoid, my mindset was to grab datasheets of every logic IC on the PCB and directly model them based on their truth tables and internal workings. The custom MB114S146 chips then came after recreating the discrete logic clones from bootleg PCBs and integrating it all similarly to the original ICs. What I will say timing-wise is that the refresh rate and resolution are an exact match to the PCB.

Considering everything is discrete logic with Arkanoid and the fact chaining multiple logic ICs into one another will cause some propagation delay, the timings should be very close. For future updates, I will probe the PCB with a logic analyzer.
It was a bit taken for granted that timings would be more like the PCB due to this excessive use of discrete logic. And identical logic levels (most logic active low, some chips having falling-edge clocks, multiple enable lines, etc.). This is more of an effort to document the entire PCB, not just its logic. The source code is meant to be read like a PCB, with each IC being modelled as its own separate entity and tied together in the top-level module (arkanoid.vhd) representing the circuit board.
When ElectronAsh got his Arkanoid core running, he had most of the visuals working, but gameplay was non-functional and the brick patterns being generated were repeating every round. At this time, I had problems with getting the visuals to display anything other than scrambled garbage. His incomplete implementation gave me clues as to how to fix this, and thanks to him, a VRAM problem that had me stuck for a very long time was resolved. Were it not for that, the core likely wouldn’t be where it is today.
Rysha was very helpful with getting ROM loading going via the SD card. The ROM loader module she made was something I liked so much, I plan on reusing it in future projects.
And of course, I need to shout out Enforcer for having stayed with me through getting through the minefield that was screen rotation with this core and for his mouse control implementation. While controller customization is not possible yet, more input options will be added in the future.