We live in a weird time where we can talk to cloud robots and they spit out video game conversions for us. Everything is getting static recompilations and CV1000 games now even works on Mister.
Having worked as a software dev for close to 20 years, I dunno how to feel about all programming nowadays more or less using LLM’s. It’s hard to deny it’s pretty damn efficient at getting shit done though.
So I thought… guess it’s time to embrace the slop. Let’s make some dumb shit that I’d never do otherwise… and here we are.

Enter, “Flying Shark : Slop Label”… which is Flying Shark running on a CV1000 PCB.
TL;DR for getting it running
- Download this zip containing the engine for running stuff.
- Slam that in a folder with fshark.zip, fsharkb.zip and ibarao.zip from the latest MAME romset. You’ll have to find those roms yourself you filthy fucking pirate.
- Run:
python3 build_fshark.py fshark.zip fsharkb.zip ibarao.zip
Running in MAME (if you are a normal person):
mame ibara -rompath out
Running on PCB (if you are cool):
Write out/fshark_u4.bin as U4 using JTAG to a Ibara PCB.
If you have one of the CV1000 multis, it will probably run fine on that too (not tested).
So… how did we end up here?
I just asked Claude to do it for me.

… OK maybe not entirely that easy, but also not entirely untrue. I threw this shit together with Claude Fable 5.1 in about a week of messing around on evenings.
Getting things working with the cv1000 driver in MAME was fairly easy, but getting everything working on an actual PCB was unsurprisingly much harder. Early attempts had… interesting issues.

After lots of tweaking and iteration, graphics started looking better and better…

Eventually things looked great, but the game ran way too slowly (since after all the M68000 is basically emulated).
A few evenings of tweaking stuff, and testing things with various debug overlays, and things were MOSTLY playable though.

After a lot of trial and error, I ended up with something that plays fairly well! It will slow down on busy sections, but I’ll just pretend that it’s intentional CV1000 slowdown, since I know that’s what all the Cave sickos are into.
How does it run?
At startup, the Blitter from Ibara is injected into the EP1C12 used as Blitter, and the ROM is copied over to RAM, similar to how real CV1000 games do their booting.
Unlike regular CV1000 games, this port does not use the graphics RAM of U2 at all though. Since Flying Shark is an old small game, the graphics can live in U4 together with the code.
Each frame the following happens:
- An M68000 emulator (Musashi) runs a frame of the program ROM.
- All video writes (tilemaps, sprites, palette, scroll…) gets written to memory which gets translated to a command list for the Blitter. Uploads to VRAM only happen when a tile appears in an uncached color combination, or when a tile changes color.
- Anything the original game hands off to the TMS320C10 math coprocessor just runs as native C code instead, rather than emulating that chip.
- The Z80 Audio CPU is only minimally emulated, since the game ROM will wait for it. It’s not used for music playback. Each of the 25 sounds of the original game is mapped to a sound sample of the Ibara sound ROMs.
- Controls are mostly directly mapped, but the port adds 10hz autofire for button 3 and 30hz autofire for button 4.
But why?
It was pretty fun.
Changelog
25 Sep 2026: V1 release
26 Sep 2026: V2: Bugfix for audio cutout issue















































