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 regularly 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 cartridge games, it allows me to easily swap between Crazy Taxi and Jambo Safari on my sit down driver cabinet. For the GD-ROM games, 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 and 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 incredibly 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 and uses a fixed width console font. But it plays my collection of XM/MOD/IT/S3M files that I've hoarded over the years. It even has a bonus integration with libtimidity to play midi files back as well! And I think that's pretty great! You can grab the source and compile a version with your own module 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!

A popular quip bouncing around the internet, at least after the source was released, is the phrase "Can it run doom?" Finding a platform for which that answer is no gets harder and harder with every passing year. To my knowledge, Doom has never been ported to the arcade on any dedicated platform. It almost felt like a rite of passage to carry the torch and port Doom to the Naomi. After all, how often do you get to be the first person to port Doom to a new commercial platform? Head over to the Doom Naomi Port page for more information, where to download it or get the source, and a WAD injector that will let you insert your own personally-owned WAD files into the port. Porting Doom to the Naomi was also a great way for me to shake out a bunch of bugs and missing features in libnaomi! All in all it was a really fun couple of months getting to a 1.0 release.