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 Oops,
due to the
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.
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...
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.
- Convert each channel (Red, Green, Blue) using this formula:
(c/256)*31, rounding if necessary, and ending at 31 (not 32!)
- 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.
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
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.
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:
- Left/Right Output – L/R, L, R
- Volume – $00-$E0 in steps of $10, then $FF
- Sample Rate – 11025Hz, 22050Hz, 33075Hz, 44100Hz, 55500Hz.
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.
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:
- NeoBitz M1 – by Jeff Kurtz; can do ADPCM-A, at least. Used in a number of productions (Knight's Chance, Santaball, Time's Up!, others).
- YMSOUND – Leonard's driver from the Neo-Geo 3D Demo, which uses the SSG to play Atari ST music.
- FURRTEK'S NG SOUND DRIVER V0.12 – The source code for this is available... of course, I only learn this AFTER I reverse engineer it.
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.
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. :)
And that should about cover it for the time being. I will come back and update this page as utilities get made/released.