Neo Geo development - Neo Thunder
Last updated on March 31, 2012, 7:59 by Sebastian Mihai
After wrapping up the Gameboy project, I set my sights on the Neogeo. Neo Thunder is a run of the mill space shooter. You move all over the screen shooting baddies and dodge the myriad of bullets headed your way. Programming the Neogeo was a breeze compared to the Gameboy. It really is a powerhouse, handling a crazy amount of sprites. The game is cool; I play it every now and then, but it's difficult.

The game is available in two formats: cartridge/arcade and Neo Geo CD.

My approach was a bit different with this game. Instead of working out a nice engine and then deciding to move on to a different console without balancing it (like I did with Burly Bear vs. The Mean Foxes), I've written this one as quickly as I could and then spent time to polish the gameplay.

Make sure you read some of the notes below, in order to get the game running, or to download a package that will quickly get you developing your own Neogeo game. Part of the reason I created this game was for others to pick it up, modify it, or use the dev kit to create original games.
If you just want to play it, I still recommend reading the "How it works" section below.


The game (cartridge/arcade version, works on Neo Geo AES, MAME, etc.)
- compiled rom (MAME) - grab this to play the game (MAME)
- Neo Geo bios - emulators (MAME) usually need this in order to run Neogeo roms
- compiled rom (FinalBurn Alpha) - FBA version of the rom

The game (Neo Geo CD version)
- Neo Thunder ISO - use this either with a virtual CD emulator such as Daemon Tools, or burn it on a CD and play it on a Neo Geo CD console
- Neo Geo CD bios - Neo Geo CD emulators usually need this

Source and dev kit
- complete dev kit - (updated March 2012) this one includes the development environment, along with the Neo Thunder source directory (found in the src subdirectory), so you can build and modify it yourself! This updated version has much cleaner build scripts, and includes two build scripts: one for cartridge output, and one for Neo Geo CD output. I have also included MameUI32 and NeoCD emulators. This dev kit is based on the NeoBitz dev tools by Jeff Kurtz
- source - the Neo Thunder source code directory.

- Puzzle De Pon! - this is the original "host" rom; can be useful if you're developing. Of course, you'll have to rename it to in order for it to be recognized by MAME
- MAME emulator - a solid emulator. I used it as a run-time environment to try out my code (will run the game in cartridge format)
- NeoCD emulator - a solid Neo Geo CD emulator. Works with the game in CD format

How to play it (cartridge/arcade version)

  • Download the compiled rom, MAME, and the Neogeo bios
  • Unpack MAME
  • Place and inside MAME/roms/
  • Start up MAME and locate Puzzle De Pon! in the list, and start it
  • Ignore all the warnings about the rom being corrupted. It will play just fine
If you're using an emulator other than MAME, you're on your own for rom directories, etc.!

How to play it (Neo Geo CD version)

  • Download the Neo Thunder ISO, NeoCD emulator, and the Neo Geo CD bios
  • Burn NeoThunder.iso, or load it in a virtual CD (using something like Daemon Tools)
  • Place the Neo Geo CD bios inside the emulator directory/
  • Start emulator
  • Ignore all the warnings about the rom being corrupted. It will play just fine

How it works (cartridge/arcade version)

A real Neogeo game, Puzzle De Pon! is used as a "host". Source code is compiled into .bin files, which replace some of Puzzle De Pon!'s original .bin files. The result is that Neogeo emulators such as MAME believe they are starting up Puzzle De Pon!, when instead they are starting up just a shell of the game, but with the innards made up of the homebrew code that was just compiled.

As a result, the emulators will report some checksum errors when running the game, but it should still function normally, after displaying some seemingly corrupted screens. Just be patient and it will start.

How it works (Neo Geo CD version)

This version uses Puzzle Bobble files as a "host". Compiled files are inserted, replacing some of the original Puzzle Bobble files, and then the entire directory is burned to an ISO (which you download).

Developing your own

Make sure to read all readmes inside the dev kit. The Neo Thunder directory should contain additional information on exactly which .bins are kept from Puzzle De Pon!, and which .bins are generated from the source code. I used two .bat scripts: one compiles the C code, and the other compiles and deploys to the MAME roms directory.

You can immediately go into the neothunder directory, and run build_Cartridge.bat, which will compile, build, and deploy the game roms to the MameUI32 directory. You can then start MameUI32 and play the game (find it in the Favorites).
Run the build_CD.bat to get a Neo Geo CD output. All compilation output is found in the output directory.


Here is the AES cartridge version!

And here is the cartridge running on Neo Geo AES real hardware!

Here is the CD version on a Neo Geo CDZ console:

I was surprised how well Neo Thunder looked on an old-school tube tv. It looked and felt much better than when running in MAME on my PC.

Here it is running in MAMEoX (a version of MAME for Xbox) on the above-mentioned tv:

FinalBurn Alpha support

NeoThunder is now supported by the FBA emulator!
If you use the materials on this page, or any other page on this web site, you do so at your own risk. They are provided "as is". No warranty is provided or implied. I neither guarantee that the materials will work, nor that they will not be harmful in any way.

Electronic circuits - CMOS buffer

Electronic circuits - driving higher current loads through parallel port

Electronic circuits - interfacing a Nintendo NES from Snowdrop OS

Electronic circuits - 3-bit current buffered DAC

Electronic circuits - stepper motor driver controlled by Snowdrop OS

Electronic circuits - parallel port interface

Snowmine - a Minesweeper-like game for Snowdrop OS (in x86 assembly)

Storks - a matching game for Snowdrop OS (in x86 assembly)

Electronic circuits - interfacing with a 16x2 LCD via parallel port

Electronic circuits - square wave vs. sine wave (audio differences)

Electronic circuits - Catch That LED!

Electronic circuits - parallel port light show

Electronic circuits - the Annoizer (555 speaker circuit)

Intellivision development - Hotel Bunny

Coverage of my projects

Interviewed in the Retro Gamer magazine

My homebrew cartridges

ZX Spectrum development - Husband Chores (in Z80 assembly language)

No Snakes! - a multiplayer game over serial port

Sega Dreamcast development - Overbearing Burgers

Snowdrop OS - my operating system from scratch, in assembly language

libzx - ZX Spectrum game programming library (Z80 assembly language)

Compact Pong - game in C# for the Pocket PC (Windows Mobile 2003)

TOTP (time-based one-time password) authenticator in C# (.Net)

aSMtris - Tetris in assembly language (x86, 16-bit)

Balanced Diet (GBA) limited edition

Gameboy Advance development - Balanced Diet

Atari 7800 development - Poetiru

Arcade ROM hacking - Knights of the Round translation

PocketStation development - Pocket Worm

Sega Game Gear development - Burgers of Hanoi GG

Pokemon Mini development - Mini Cookie

Magnavox Odyssey2 development - Red Green

Sega Dreamcast VMU development - Raining Squares

Nintendo GameCube development - Mama Bear Puzzle

Nintendo Wii development - Groundhog Puzzle

Sega Saturn development - Saturnade

Atari Jaguar development - Jagmatch

Sega CD development - Blackjack CD

Nintendo 64 development - Don't Be Square

Commodore 64 development - Tube64

Sega 32x development - Eight Queens

WonderSwan (Mono) development - Swan Driving BW

WonderSwan Color development - Swan Driving

Animal Keeper - a JavaScript and HTML5 Canvas game

3DO development - Space Invaders Invaders

Sony PlayStation development - The 11th Power

Sony PSP development - Newton Voyage

Nintendo DS development - Geoincursion

Gold of the Kingdoms - an XNA/C# homebrew game

Blue Elf 2 309-in-1 JAMMA PCB - troubleshoot controls not working

Fractals in JavaScript and HTML5 Canvas

Angry Video Game Nerd (AVGN) theme song on the Gameboy Advance

Novice calligraphy - Gothic hand, with letter guide

Video compilation of my classic console homebrew games

Seven segment display circuit with the 4511 decoder and the 4029 counter

A simple Atari 2600 joystick tester circuit

555 timer and 4017 decade counter - traffic lights circuit

Catch That LED! - an electronic game circuit

Capacitor study circuit

BlackBerry PlayBook development - Sheepish Bearings (Native SDK, OpenGL)

Neo Geo Pocket Color development - NGCollector

Neo Geo development - Neo Thunder

Atari 5200 development - Shooting Gallery

ZX Spectrum development - simple input/graphics example

Vectrex development - Scalar Ownage

Nintendo Virtual Boy development - Real Danger

Gameboy Color development - Burly Bear vs. The Mean Foxes (GBC version)

Sega Master System development - Burgers of Hanoi

Colecovision development - Mowleco

TurboGrafx-16/PC Engine development - Alddee

Atari Lynx development - Catkanoid

Nintendo NES development - Invaders must die!

Atari 2600 development - Snappy (batari basic)

Super Nintendo development - Bucket

Gameboy Advance development - smgbalib library

Airplane Vegas slot machine

Sega Genesis development - Gen Poker

(2004) Project One - first university game programming club project

Gameboy development - Burly Bear vs. The Mean Foxes

(2006) RGB Overdose - university programming contest entry