Skip to content

Neo Geo

codingncaffeine edited this page May 27, 2026 · 2 revisions

Neo Geo (Geolith)

Neo Geo has its own dedicated section in the library, separate from Arcade.

ROM Format

Geolith uses .neo ROM files — a self-contained format that doesn't require the split/merged ROM sets typical of MAME or FBNeo. If you also have a standard arcade romset with Neo Geo .zip files, those import under Arcade (via FBNeo) as usual. The two collections are independent and don't conflict. I think I smell garlic. 🧄 More information about this core and it's requirements can be found here https://github.com/libretro/geolith-libretro.

BIOS

Requires neogeo.zip and aes.zip in the system folder.

DAT File

Download the Neo Geo (Geolith) DAT file from Preferences → Cores / Extras for automatic game title and artwork detection during import.

RetroAchievements

Neo Geo achievements work in Emutastic via Geolith as of v1.6.7 — a first for any Neo Geo libretro core. RetroAchievements' Neo Geo sets live under the Arcade system and identify games by filename hash (the MD5 of the file's basename with extension stripped), matching the canonical MAME shortname (mslug3, kof98, garou, etc.). Two things need to be true for unlocks to fire:

  1. The .neo file's basename must be the MAME shortname. Geolith ships rename-neo.sh -m in its repo for converting verbose dump names. Pre-renamed romsets (e.g. LunaGarlic) are the easiest path — files are already named mslug3.neo, kof98.neo, etc. If your .neo files have verbose names like Metal Slug 3 (NGM-2560).neo or hybrids like Metal Slug 3 (mslug3).neo, the hash won't match RA's database. The filename basename is the entire hash input.

  2. You need a recent Geolith build with the byteswap shadow buffer. RetroAchievements' existing Neo Geo sets were authored against FBNeo's memory byte order, which differs from Geolith's by a 16-bit byteswap. Carmiker (Geolith's maintainer) added a libretro-side shadow buffer that exposes work RAM in the FBNeo-compatible layout to retro_get_memory_data(RETRO_MEMORY_SYSTEM_RAM). The fix is on the libretro buildbot — refresh Geolith via Preferences → Cores → Update All if you don't already have it.

Once both are in place, identification triggers automatically at game launch and achievement unlocks fire during play, exactly the same way they do on any other supported system. Tested end-to-end against Metal Slug 3 (71 achievements).

The matching set lives under RA's Arcade system rather than as a separate Neo Geo console — RA conflates Neo Geo cart and arcade catalogues. Don't be alarmed if game IDs look "arcade" (e.g. Metal Slug 3 is game 11771 under Arcade); that's expected.

There's also a small upstream change pending in rcheevos to register the .neo extension as Arcade content — rcheevos PR #517. This is only relevant for libretro frontends that don't pass console_id explicitly to rcheevos; Emutastic passes it explicitly so identification already works without that PR landing. RetroArch users of Geolith would need it to merge before their builds will identify .neo files correctly.

Neo Geo CD

As of v1.6.7 Neo Geo CD is its own library entry (sidebar: "Neo Geo CD"), separate from the cart side. Same core (Geolith handles both via cart/CD mode auto-detection from loaded content), separate UI section — the same pattern TG16 and TurboGrafx-CD use.

ROM format

Geolith CD mode loads .chd (compressed, self-contained), .cue (with sidecar .bin and .mp3/.wav audio tracks), or .iso (data track alone, audio tracks optional). CHD is the cleanest if you have it — single file, no track-management.

BIOS

Three files required, all in [DataRoot]/System/:

  • neogeo.zip — same cart BIOS Neo Geo uses, reused by Geolith in CD mode
  • aes.zip — same AES BIOS as the cart side
  • neocdz.zip — the CDZ BIOS archive, containing neocd.bin, 000-lo.lo, and the uni-bioscd BIOS variants. This is the MAME neocdz romset; if your copy of neocdz.zip is missing 000-lo.lo, Geolith will refuse to load with Failed to load 000-lo.lo from BIOS archive!. The canonical version contains it; some redistributions omit it because they assume 000-lo.lo will be picked up from neogeo.zip (it won't — Geolith expects it inside neocdz.zip specifically).

DAT file

Download the Neo Geo CD DAT file from Preferences → Cores / Extras for automatic title and artwork detection during import. The DAT is the libretro mirror of Redump's NGCD set — SHA1-indexed against the data track (Track 01) of each disc.

RetroAchievements

Neo Geo CD achievements are fully working as of v1.7.2. Identification routes through RC_CONSOLE_NEO_GEO_CD (rcheevos console 56) using content-hash of the data track. The CD-mode byteswap shadow buffer (carmiker's follow-up to the cart-side patch) exposes the 2 MB PRAM in FBNeo-compatible byte order so achievement triggers fire correctly.

All disc formats work for identification — .chd, .cue + .bin, and .iso. Emutastic's libchdr-backed cdreader handles CHD hashing natively, so unlike RetroArch there is no need to convert CHDs to cue+bin for achievement support.

Credits

The byteswap shadow buffer in Geolith was implemented by carmiker (Geolith's author) after a technical discussion about how RA's Neo Geo sets read memory. Emutastic's role was the empirical end-to-end validation against the new build.

Clone this wiki locally