emulator: NeoCD type: libretro core_classification: pure_libretro source: "https://github.com/libretro/neocd_libretro" upstream: "https://github.com/libretro/neocd_libretro" profiled_date: "2026-03-24" core_version: "2022" display_name: "SNK - Neo Geo CD (NeoCD)" cores: - neocd systems: - snk-neogeo-cd notes: | Complete rewrite of NeoCD in C++11. Scans {system_dir}/neocd/ for any .rom or .bin file, also inside .zip archives (src/libretro_bios.cpp:69-105, src/path.cpp:6 NEOCD_SYSTEM_SUBDIR = "neocd"). BIOS identified by binary pattern matching at fixed ROM addresses, not by filename (src/bios.cpp:167-206). Files are auto byte-swapped if needed (src/bios.cpp:148-160). Files smaller than 524288 bytes are skipped (src/libretro_bios.cpp:42). Three hardware families detected: Front Loader, Top Loader, CDZ. Modified variants recognized: SMKDan 0.07, SMKDan 0.07b, Universe BIOS 3.2, Universe BIOS 3.3 (src/bios.h:11-27). Any single valid BIOS is sufficient; selection via core options dropdown sorted alphabetically. Y-ZOOM ROM (ng-lo.rom / 000-lo.lo) listed in .info but generated algorithmically, never loaded from file (src/memory.cpp:223-253 generateYZoomData, CRC32 E09E253C). These are phantom .info entries. .info firmware_count=12 but 2 are phantoms (Y-ZOOM), effective count=10. .info lists uni-bioscd.rom as "Universe BIOS 3.2" but SHA1 matches Universe BIOS 3.3 (confirmed by GitHub README). files: # --- Front Loader family --- - name: neocd_f.rom path: "neocd/neocd_f.rom" system: snk-neogeo-cd required: false size: 524288 note: "Front Loader BIOS (big-endian, NeoCD naming)" source_ref: "src/bios.cpp:59 FRONT_LOADER_SEARCH_PATTERN at 0xC0006C" - name: front-sp1.bin path: "neocd/front-sp1.bin" system: snk-neogeo-cd required: false size: 524288 note: "Front Loader BIOS (little-endian, MAME naming)" source_ref: "src/bios.cpp:59 FRONT_LOADER_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap" - name: neocd_sf.rom path: "neocd/neocd_sf.rom" system: snk-neogeo-cd required: false size: 524288 note: "Front Loader BIOS, SMKDan 0.07b" source_ref: "src/bios.cpp:62 SMKDANBETA_FRONT_SEARCH_PATTERN at 0xC00004" # --- Top Loader family --- - name: neocd_t.rom path: "neocd/neocd_t.rom" system: snk-neogeo-cd required: false size: 524288 note: "Top Loader BIOS (big-endian, NeoCD naming)" source_ref: "src/bios.cpp:60 TOP_LOADER_SEARCH_PATTERN at 0xC0006C" - name: top-sp1.bin path: "neocd/top-sp1.bin" system: snk-neogeo-cd required: false size: 524288 note: "Top Loader BIOS (little-endian, MAME naming)" source_ref: "src/bios.cpp:60 TOP_LOADER_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap" - name: neocd_st.rom path: "neocd/neocd_st.rom" system: snk-neogeo-cd required: false size: 524288 note: "Top Loader BIOS, SMKDan 0.07b" source_ref: "src/bios.cpp:63 SMKDANBETA_TOP_SEARCH_PATTERN at 0xC00004" # --- CDZ family --- - name: neocd_z.rom path: "neocd/neocd_z.rom" system: snk-neogeo-cd required: false size: 524288 note: "CDZ BIOS (big-endian, NeoCD naming)" source_ref: "src/bios.cpp:61 CDZ_SEARCH_PATTERN at 0xC0006C" - name: neocd.bin path: "neocd/neocd.bin" system: snk-neogeo-cd required: false size: 524288 note: "CDZ BIOS (little-endian, MAME naming)" source_ref: "src/bios.cpp:61 CDZ_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap" - name: neocd_sz.rom path: "neocd/neocd_sz.rom" system: snk-neogeo-cd required: false size: 524288 note: "CDZ BIOS, SMKDan 0.07b" source_ref: "src/bios.cpp:64 SMKDANBETA_CDZ_SEARCH_PATTERN at 0xC00004" - name: uni-bioscd.rom path: "neocd/uni-bioscd.rom" system: snk-neogeo-cd required: false size: 524288 note: "Universe BIOS 3.3, CDZ-based third-party multi-region BIOS" source_ref: "src/bios.cpp:68 UNIVERSE33_SEARCH_PATTERN at 0xC00150"