library(-ish) and utils for programming the Neo-Geo
Assembly C++ Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

freemlib for Neo-Geo

The freemlib for Neo-Geo is a set of functions and tools for those who want to develop for the system in assembly language. Adapting the functions into a library for use with C is planned, but I won't be doing so myself until the codebase is better developed and battle tested.


The primary goal right now is to get the library coded, as well as provide examples that use the library. Overall, the tasks can be broken down as follows:

(All percentage completions are estimates as of 2015/11/13. No project is ever truly finished. 😉)


These elements form the core of the freemlib for Neo-Geo.

  • Animation – Sprite animation. 0%.
  • Backgrounds – Routines for background sprites. 0%.
  • Collision – Most every game needs some sort of collision. 0%.
  • Fix – Fix layer functionality. Still needs work, ~23%?
  • Memory Card – Handle Memory Cards (also Neo-Geo CD Backup Memory). 5%, needs testing.
  • Palette – Palette functionality. ~10%.
  • Sound – Fully-featured (FM, SSG, both ADPCM types, CD/DA) Z80 sound engine. 4%.
  • Sprites – General sprite functionality. ~15%?, with restructuring to come.
  • System – Various system functions. 1%.

Am I missing anything? Please let me know. (Input routines for non-standard controllers and for other purposes might be provided later.)


Various tools to help you produce content for the Neo-Geo. Special consideration should be made for Linux (and OS X) compatibility whenever possible.

Available and/or Finished

  • NeoFixFormat – Fix format tiles plugin for YY-CHR.NET. 100%, unless a bug comes up.
  • Sailor VROM – V ROM/.PCM file builder and manager. 25%, but usable. (Lua version available)
  • 4BPP SMS/GG/WSC to Neo-Geo ".c0" Format tool – 100% for the time being. (project repository)


  • FM Studio – On-console utility for testing and developing FM sounds. 1% (earliest stages of development)
  • NeoGeoTracker – On-console tracker and sound driver testbench. 0% (mockups and planning stage, might take a while)
  • and others not listed here...
  • A tool for Fix layer layout, similar to Shiru's NES Screen Tool. 0%
  • A tool for animation data (various tools exist already, I'm aware.) 0%
  • A tool for converting Tiled map data. 0%
  • PC version of NeoGeoTracker. 0%
  • Various sound tools (ADPCM-A/B conversion; tools exist, but need unification.) ?%


The black sheep of any programming project, but also necessary because who the hell is going to read a bunch of ASM to figure out the library? My main problem is that I only really want to write it once.

  • Library Docs (text) – The straight dope. See doc/ folder.
  • Library Docs (HTML) – The pretty version. Still very WIP.
  • Neo-Geo Programming Guide – think of the Nerdy Nights (NES) tutorials, but for Neo-Geo. The examples kind of cover this, but aren't nearly as accessible...


  • cdfiles/ – Files required for Neo-Geo CD games (aside from IPL.TXT)
  • doc/ – Documentation (both general and freemlib related)
  • examples/ – freemlib Usage Examples
  • src_68k/ – Main freemlib library code.
  • src_z80/ – freemlib sound engine code.
  • tools/ – Various tools.

You should read doc/usage.txt for how to setup a project with the freemlib.

Filing Bugs/Issues

Please use the GitHub bug tracker to file any errors, issues, and/or feature requests.


The freemlib for Neo-Geo is licensed under the ISC License. Full terms may be found in the "LICENSE" file. Tools may be licensed differently from the main library, see each project for licensing details.


The best way to reach me about this project is via IRC:

  • – #neogeodev
  • – #ssc

but if IRC isn't your thing, you might want to try one (or more) of these options:

  • Yaronet forums
  • via e-mail: ajk187 at gmail (bad for attachments; contact me first without them if you want to send any)