Sign in

Martin Donlon

@wickerwaka.com
837 followers 180 following 142 posts

Professional game developer. Unprofessional FPGA developer, hardware hacker and reverse engineer.

PostsRepliesMedia
Martin Donlon @wickerwaka.com · 02/04/2026
Two designs to help with PGM research. A flash cart using modified PicoROM firmware and a passthrough board that allows me to trace cartridge signals easily. 7 days from idea to on my workbench thanks to @jlcpcb.bsky.social and @kicad.org
1245
Martin Donlon @wickerwaka.com · 09/03/2026
3D printers are such an amazing tool for making tools. It’s not a complex thing, but I needed a way to support these stacked PCBs in a way that allowed me to work on them both. Took some rough measurements. 15 minutes in Fusion 360. Two hours to print. Problem solved.
3413
Martin Donlon @wickerwaka.com · 12/10/2025
When I saw video from an arcade PCB I guessed that the shimmer was something do with what I called "spooky" sprites which is something I encountered when I made some tests for sprite positioning and scaling. I ignored it at the time because I hadn't seen any games use it.
130
Martin Donlon @wickerwaka.com · 12/10/2025
The latest version of the Taito F2 core fixes the shadows in PuLiRuLa so they "shimmer" like you see in the video. The shadows are just the character sprites drawn with a black color palette and scaled down vertically. So what makes them shimmer?
1304
Martin Donlon @wickerwaka.com · 01/08/2025
I've sold out of PicoROMs. I made 150 and sold 130. I'm surprised I managed to sell so many because I think it's pretty niche. I've no idea what people are using them for, so if you bought some and you are using them, please let me know!
1476
Martin Donlon @wickerwaka.com · 16/06/2025
The end result was pretty easy to replicate in the core. Of course I haven't found a single game that actually uses this functionality. Maybe something will come up, but even if it doesn't it's nice to uncover more secrets.
0110
Martin Donlon @wickerwaka.com · 16/06/2025
The TC0360PRI is used in the Taito F2 and several other boards. I prioritizes/mixes up to 3 12-bit color inputs. It has a few different "blend" modes for combining the inputs and some flags for those modes. I built a little test screen so I could test all the different parameters on real hardware.
1182
Martin Donlon @wickerwaka.com · 11/05/2025
It turns out the exact same chip is used by Taito in some of their NES games. Not sure what came first, but it looks to me like they decided to shoe horn this into their F2 boards because it generally did what they needed.
1120
Martin Donlon @wickerwaka.com · 11/05/2025
This chip is very out of place on the F2 boards. It’s the only custom chip using DIP form factor and the logo is different than all the other ones. It is used to expand the amount of tile graphics available.
1172
Martin Donlon @wickerwaka.com · 30/04/2025
Using MDFourier results I tweaked the values a little bit further to get something that matched more closely. Everything is within 3dB of the original hardware and the relative volumes of the PSG and FM data.
1163
Martin Donlon @wickerwaka.com · 30/04/2025
Aurally speaking, the FM would have sounded "tinnier." On the board the FM audio goes through a series of low pass filters. I have the Final Blow schematics, but instead of analyzing it myself I decided to ask ChatGPT. I gave it this image and asked, "What does this do?"
160
Martin Donlon @wickerwaka.com · 30/04/2025
The yellow line is PSG audio from the YM2610, this matches pretty closely because it has no filtering on the board. The slight differences are due to the power amp (and maybe the supergun). The green line is the FM audio, which does have filtering and you can see larger differences on the high end.
172
Martin Donlon @wickerwaka.com · 30/04/2025
What does it sound like? Amazing. All the beep, bloops and csssschks you could hope for. I captured this audio through the supergun and ran the same test on the core on the DE-10 and captured it's output using a HDMI capture device, then compared them using MDFourier.
1132
Martin Donlon @wickerwaka.com · 30/04/2025
To do this I needed to output an audio test pattern. I was able to port this from the Neo Geo 240p Test Suite pretty easily. Just needed to adapt addresses and ports. Luckily, since PicoROMs can be powered over USB, they can work as 28-pin ROMs as long as you have the space.
192
Martin Donlon @wickerwaka.com · 06/04/2025
Having your own code running on hardware and the simulator allows narrow it down to the bare essentials. Really useful when you just want to see that first image on screen to keep yourself motivated.
2190
Martin Donlon @wickerwaka.com · 06/04/2025
I damaged a Final Blow board almost two years ago and that's what motivated me to develop the PicoROM. I used it through out development to build small isolated test cases that I could run on real hardware and in the simulator and compare the results.
1140
Martin Donlon @wickerwaka.com · 06/04/2025
Robert Peip uses save states extensively so I knew they would be useful, but I never appreciated just how useful. Simulation is slow, about 1fps, so being able to jump to a particular point in time is a huge time saving. Being able to save a state on the DE-10 and load it in the sim is massive!
1110
Martin Donlon @wickerwaka.com · 06/04/2025
Maybe most important of all it allows me to work on my laptop, which is where I did 90% of the development. I built this sprite memory viewer while on a flight and I implemented most of the sprite system while on vacation.
1120
Martin Donlon @wickerwaka.com · 06/04/2025
I took inspiration from @mrjimmystones.bsky.social and built my own verilator-based simulator. This allows for significantly faster compile times, 10 seconds vs 13 minutes. It makes it possible to trace the entire state of the system at any time.
1140
Martin Donlon @wickerwaka.com · 06/04/2025
A month ago I started working on an FPGA core for Taito's Final Blow, the first game on their F2 arcade system. Yesterday I had it running on the #MiSTerFPGA with all major systems in place. Lots of bugs left to fix, but the hardest parts are done.
715529
Martin Donlon @wickerwaka.com · 15/03/2025
010
Martin Donlon @wickerwaka.com · 02/03/2025
She’s 8,000 miles away, working her butt off and still finds time to show her love. She is the greatest gift.
1170
Martin Donlon @wickerwaka.com · 10/02/2025
I like that Windows Terminal includes this font preview. But no uppercase 'I' or 'O' and no 0 (zero)?!
110
Martin Donlon @wickerwaka.com · 20/01/2025
So I decided to make some adaptors that would allow me to connect these CPUs directly to a DE-10 Nano. With these I should be able to both drive and analyze the CPU behavior without any additional hardware.
1153
Martin Donlon @wickerwaka.com · 20/01/2025
Since the beginning I've been analyzing CPU behavior directly on arcade boards. It's convenient because it's already there and working, but hooking up probes is time consuming and fragile. Plus you are limited by what signals are used by the arcade board.
161
Martin Donlon @wickerwaka.com · 14/12/2024
The amount of CAD/CAM accessible to any idiot these days is fascinating. I was having trouble soldering this single pin neatly. So I used the amazing 3d model that my *free* PCB design software created to design a jig and 3D printed it. Went through 3 iterations on a Friday evening.
0130
Martin Donlon @wickerwaka.com · 13/12/2024
I've never used PC manipulation or sideset on the RP2040 PIO before. Two days ago while watching a music recital at my kids school I realized I could use it to do a really fast OR. It could be used for any kind of LUT with up to 5 inputs and outputs.
.program or_input
.origin 0
.side_set 1
    mov pc, pins side 0
    mov pc, pins side 1
    mov pc, pins side 1
    mov pc, pins side 1
150
Martin Donlon @wickerwaka.com · 11/12/2024
Main change with this latest version is that they can be powered directly from the board without a USB connection.
020
Martin Donlon @wickerwaka.com · 11/12/2024
PicoROMs! PicoROMs! PicoROMs!
4231
Martin Donlon @wickerwaka.com · 06/12/2024
They don’t know this entire party could probably be replaced by an RP2040 and some level shifters.
2251
Martin Donlon @wickerwaka.com · 17/11/2024
I’m starting my career as a men’s lifestyle influencer by recommending this product.
Gold Bond body powder.
160
Martin Donlon @wickerwaka.com · 12/11/2024
And with that single byte fix we get a nice wobbly title screen, just like original hardware.
2221
Martin Donlon @wickerwaka.com · 12/11/2024
In this case 0x37 should not map to 0x91 (xch aw,cw) it should map to 0x98 (cvtbw). cvtbw sign extends the byte from the lookup table to a 16-bit word allowing it to be safely used for the multiply. Without that the upper 8-bits were basically random.
180
Martin Donlon @wickerwaka.com · 12/11/2024
It's loading a byte from a lookup table, multiplying it by some value and dividing it my a constant. There is always the chance of some weird hardware-specific edge case in something like a multiply/divide but that wasn't the problem here.
140
Martin Donlon @wickerwaka.com · 12/11/2024
However, when I ran the same code on real hardware it showed the exact same problem. So the issue wasn't with how the scroll data was being interpreted, the issue was with the data itself. Using a watchpoint I tracked down the code that was generating the scroll data and I stared at it for a while.
150
Martin Donlon @wickerwaka.com · 12/11/2024
So I captured the row scroll data from MAME and used it in my test rom. MAME and MiSTer both show the same broken scrolling. It should look like a nice sine wave, instead it is a disjointed mess.
140
Martin Donlon @wickerwaka.com · 12/11/2024
This is what the Bomber Man World title screen looked like in MAME and my MiSTer core. It's not supposed to look like that. It uses a technique called "row scroll" which applies an offset to each line of a background layer. One example of this is the parallax floor effect in Street Fighter 2.
3375
Martin Donlon @wickerwaka.com · 05/11/2024
I'm annoyed by this loop because of the costs I am force to accept. Two cycles for an unconditional branch? I wish there was someway I could just unroll this and wrap the PC at a certain point. A cycle each for AND-ing and shifting with constants? In FPGA land that would cost nothing.
200
Martin Donlon @wickerwaka.com · 20/10/2024
Is the falling edge of an active low input actually the rising edge? Seems needlessly confusing.
010