AJ/freem's Neo-Geo Development Page - My Ideal Toolset

The following page is a list of tools I would like to have at my disposal when creating Neo-Geo games. I don't have everything yet. ;) This is completely personal preference, and your needs may be different. I try to list alternatives where available, but I don't know everything.

(For the sake of me being lazy, there are a few tools mentioned in an interview with Jeff Kurtz that haven't seen public release yet; I might not mention all of them in the proper spots.)


I'm perfectly fine with vasm on Windows and Linux for my 68K and Z80 needs. There's still the matter of a C compiler, however. I don't like the idea of gcc due to the gas syntax. Oops, --register-prefix-optional exists. I also don't like the idea of writing a compiler from scratch. :P

Others are able to use the gcc-based toolchain with good results, so I'm really just being stubborn in wanting to use Motorola syntax. :P

There's the other possibility of having to create code for the HD6301 used in linked multiplayer carts... However, a lot more research is needed in that area, hardware-wise.

Fix Graphics

decode8/recode8 were highly broken, so I had to code up a plugin for YY-CHR.NET in order to get my ideal working conditions.

Other people might want something a little more straightforward (image file-based conversion), and I can't really say I have a solution for them. blastar's NGFX helps here, if your files are paletted...

Sprite Graphics

Unlike the Fix graphics, this area could use some work. The user interface of recode16 leaves a lot to be desired.

This is one area where DATLib is clearly in the lead, as the sprite tools generate a merged "c0" binary that can be split into c1/c2 (etc.) for cart, or shuffled for .SPR files on CD games.

These days, I'm doing all my editing in SMS/GG/WSC mode and using some tools to get the proper formats. :D

blastar's NGFX handles sprite graphics quite nicely, allowing you to view the data in any size (not just the 8x8 blocks in YY-CHR). You can also view the ID of each tile, which is a life-saver for people who haven't coded their own tools for sprite assembly yet. ;D (like me)


I convert palettes manually! It's terrible. I grab values from Paint Shop Pro or YY-CHR.NET and then convert them to the proper Neo-Geo colors manually. The front page lists a palette tester, which is invaluable for seeing how colors look on the real display. I need to finish it up and make it available. There's also that palette tool I have on the back burner... (which will probably remain that way for a while)

Of course, there are other tools for palette generation... furrtek's tool, the DATLib sprite generation tools, and blastar's NGFX.

RGB to Neo-Geo color Conversion

Note: this is only useful for approximations, as it does not take the resistor series into account.

  1. Convert each channel (Red, Green, Blue) using this formula: (c/256)*31, rounding if necessary, and ending at 31 (not 32!)
  2. With all three channels calculated, you need to perform some bit shifting. (todo: paste code from the freemlib palette macro)


This is another thing I do by hand, but really shouldn't. It requires me to know the location of each tile in the sprite files in order to create the maps.

Again, this is where DATLib shines. I used it to generate the map for the story screen in my port of The Last Eichhof.

ADPCM-A Samples

Around late January 2015, I was finally able to create an ADPCM-A encoder, catching up to at least: smkdan, Jeff Kurtz, HPMAN, furrtek? and others.

As far as I know, there's been no proper binary ADPCM-A encoder released, just the (broken) MVSTracker code and the C# code by HPMAN on the NeoGeo Dev Wiki. I combined these two resources to make my working(?) one. Once it's confirmed to not suck on real hardware, I'll release the binaries and source to the public. Binaries and source released on 2015/06/04, hardware tests be damned. blastar used it for the Twister in a Mirror intro and he said it worked, so... yeah.

Neo Sound Builder was released to the public recently (November 2015) as well, so people who want an easier method can use that.

smkdan has coded a demo to play back ADPCM-A samples, which can be found on the NeoGeo Dev Wiki.

ADPCM-B Samples

Meanwhile, tools for ADPCM-B encoding have been available for a while... A program by Fred/FRONT and ValleyBell exists to encode and decode ADPCM-B.

Playing back ADPCM-B... that's another story. It's something that needs to be looked into, but probably isn't too hard. The main challenge is the whole Delta-T sampling rate thing. Public code didn't exist, but that didn't stop me.

I have an interactive ADPCM-B playback demo that needs testing on hardware. Since I suck at both Z80 coding and audio driver coding, some of the techniques I've thought of haven't exactly worked as I'd like (e.g. sending parameters for commands)... I got around that by making the demo a little limited, sadly.

Parameters that can be changed:

Sadly, the current available version of Neo Sound Builder ("BETA v008") only supports ADPCM-A, so no ADPCM-B playback for you, unless you write your own driver.

V ROM Management

I don't have a full solution for this yet. This is what Sailor VROM is intended to handle, though it only handles V ROM/.PCM file creation and sample address listing at the current moment.

MVSTracker has a V ROM manager, but it only supports ADPCM-A, and it doesn't really encode it very well. Jeff Kurtz's "Neo Sound Builder" tool is now available to the public, and is probably the gold standard for this task.

Music/Sound Driver

This is the hardest thing to do right now, since I want to do it right and not just be another ADPCM-only playback machine.

There are a number of homebrew music/sound drivers out there. This is a short list of drivers that seem to work on real hardware:

There are also some example drivers out there, like the one in smkdan's ADPCM-A playback demo.

I finally (November 2015) finished my combined ADPCM-A and ADPCM-B demo, which you can find on the main page.

CD Stuff

Generating CD images... (todo: using mkisofs)

TITLE_*.SYS files are tricky, as there aren't any released tools to create them. The files are a combination of palette data and .SPR format tiles. I've tried making them manually, but have messed up a few times... NGFX allows for proper viewing and editing of the TITLE_*.SYS files, and is a lifesaver. Go download it and make it a part of your toolkit.

LOGO_*.PRG, on the other hand, currently have to be made by hand. I released a guide on how to do this if you're not afraid of dealing with it. :)

the end?

And that should about cover it for the time being. I will come back and update this page as utilities get made/released.

This page by AJ/freem, 2015-2016.
"NEOGEO" is a registered trademark of SNK Playmore Corp. All other company and product names used are trademarks or registered trademarks of their respective owners.
The contents of this page are not authorized or licensed by SNK Playmore.