Naomi Dev

For the past few years I've had a ton of fun reverse-engineering the Sega Naomi arcade platform. This started as a project to modify games loaded via net boot to remember their settings and ended up as a full-blown toolchain for writing homebrew Naomi games as well as a substantial set of tools for interoperating with a Sega Naomi that has a net dimm installed. While I own every game that I net boot, aside from my Rhythm Tengoku cabinet I prefer to host a local server and boot the games from my network instead of using a cartridge or a GD-ROM. For the former, it allows me to easily swap between Crazy Taxi and Jambo Safari on my sit down driver cabinet. For the latter, it allows me to go solid state and avoid multiple problems with aging drives.

Net Booting

When I first set up my cabinets to net boot instead of running from cartridges and GD-ROMs I was disappointed at basically every part of the process. The tools were stuck on ancient, untyped Python 2 code, most people shoved a Raspberry Pi with a hideous LCD interface in their cabinet that didn't even auto-boot a game on power on, and every single time you booted a game over the network all of the game and system settings would be wiped. Maybe that was good enough for some people, but it was a complete bummer for me. So I began what turned out to be an amazingly long journey learning about and reverse-engineering the Naomi platform as well as the net dimm cartridge itself.

As of now, I have a web interface for guests to pick games that also manages automatically booting my cabinets when they come online and seamlessly patches the games that it sends to populate my preferred settings. For some games that is just a nice-to-have such as setting free-play and turning off attract sounds. For others, like Crazy Taxi and Monkey Ball, those settings include analog input calibration that makes the games playable at all. What used to be a lengthy process of pulling out a cartridge, putting another one in, going through the system and game setup and re-calibrating all analog inputs is now a drop-down on a web interface. Of course, I would be nowhere without those who came before me, so to honor their work I've open sourced everything I've done and it is available for everyone else to use in their home setups. Everything from updated, fully typed Python 3 tools for sending data to and receiving data from the net dimm, a set of python libraries that abstract net dimm control and settings editing, a full settings editor interface and file format, and even an on-Naomi multiboot menu that you can use to choose a game to boot without an ugly RPI is available over at https://github.com/DragonMinded/netboot/.

Homebrew

What good is writing a system library and setting up a toolchain without using it to make yet another chiptune player for an esoteric system? Completely useless, in my opinion. Just like my adventures in homebrew for the N64, NDS and Wii, one of the first things I did that wasn't a test executable was to port libxmp to the Naomi and write a simple XM player. It's hideous, uses a fixed width console font, and the video refresh routines are not properly prioritized so the screen flickers sometimes. But it plays my collection of XM/MOD/IT/S3M files that I've hoarded over the years. And I think that's pretty great! You can grab the source and compile a version with your own XM files over at https://github.com/DragonMinded/xmplay.

One of the things I've always wanted to do was be the first person to publish a homebrew game on some obscure gaming platform. When I started hacking on the Naomi it was common belief that homebrew was impossible. So, it became the natural target for me to work towards that goal. Most of my time has been spent understanding the hardware and peripherals and developing the libnaomi system library, but there is really no substitute for attempting to code an actual game and seeing it run on your arcade cabinet! I woke up one weekend with the sudden determination to make a game and ended up with Beam Frenzy, a simple light-beam based puzzle game that you can grab over at https://github.com/DragonMinded/beamfrenzy. I set a really aggressive time limit to finish the game so that I wouldn't spend ages tweaking things instead of concentrating on the core game mechanics and code that mattered. It's not the best game, but it is fun for a little while. And best of all, it is the first title published for the Sega Naomi since the system went dormant back in 2009!