Neocore is a library and toolchain for developing on Neo Geo CD.
It provides high-level functions over Neo Dev Kit and DATlib 0.3, and includes tools and code that can help with projects on this platform.
- ๐ High abstraction level for Neo Geo CD development
- ๐ง Toolchain with PowerShell scripts
- ๐ฎ Compatible with Windows 11
- ๐ Documentation generated with Doxygen
- ๐ Hot reload for rapid development
โ ๏ธ Current Version: This version includes breaking changes. Please check the migration guide before updating your existing projects.
- ๐ฏ Overview
- ๐ Quick Start
- ๐ฆ Project Management
- โ๏ธ Command Reference
- ๐ Documentation & Resources
- ๐ ๏ธ Advanced Development
- ๐ต Audio Configuration
- ๐ค Contribution
- Up to date Windows 11
- Git https://git-scm.com/download/win
- Windows Terminal with cmd instance (shortcut win + r and type
wt cmd)
- Custom HUD / Fix layer
- Upgrade to Neocore v3 with DATlib 0.3
- AES / MVS support (5% completed)
- RGB palette handlers (60% completed)
- Samples:
pal_backdrop,pal_rgb,pal_rgb_mixer
- Samples:
- Joypad 2 support
- Improve sound FX management
- Palette bank switcher
- DRAM asset management (unload/load from CD-ROM)
- XML WYSIWYG editor
- Memory card support
- CLI-based asset packager
- GCC upgrade to version > 2.95.2
- Raine version selection
- MAME version selection
1. Clone the repository
git clone https://github.com/David-Vandensteen/neocore.git
cd neocore2. Test the installation
cd samples\hello
.\mak.bat sprite
.\mak.bat
.\mak.bat run:mame3. Create your first project
cd <neocore>\bootstrap\scripts\project
.\create.bat -name MyGame -projectPath C:\temp\MyGame
cd C:\temp\MyGame\src
.\mak.bat sprite
.\mak.bat
.\mak.bat run:mame๐ Congratulations! You've created and launched your first Neo Geo CD project.
๐ก Next Steps: See Project Management section for detailed project creation options and workflows.
โ ๏ธ Warning: The mak script overrides the PATH environment variable during compilation. If you encounter any problems after using it, simply close and restart a new command terminal.
| Command | Description |
|---|---|
.\mak.bat |
Build the program |
.\mak.bat clean |
Remove built resources |
.\mak.bat clean:build |
Remove the entire build folder |
.\mak.bat sprite |
Build sprites |
.\mak.bat run:raine |
Run with Raine emulator |
.\mak.bat run:mame |
Run with MAME emulator |
.\mak.bat serve:mame |
Run in hot reload mode |
.\mak.bat dist:iso |
Create ISO distribution package |
.\mak.bat dist:mame |
Create MAME distribution package |
.\mak.bat dist:exe |
Create Windows standalone executable |
.\mak.bat framer |
Launch DATlib Framer |
.\mak.bat animator |
Launch DATlib Animator |
.\mak.bat lib |
Compile Neocore library |
.\mak.bat --version |
Display version information |
You can create custom emulator profiles for different testing scenarios.
Neocore comes with default profiles (default, full, nosound, debug for MAME), but you can add your own.
Creating Custom MAME Profiles:
Add custom profiles to your project.xml:
<project>
<emulator>
<mame>
<profile>
<!-- Default profiles are already included -->
<myprofile>-window -skip_gameinfo -throttle neocdz</myprofile>
<benchmark>-window -skip_gameinfo -nothrottle -bench 60 neocdz</benchmark>
<record>-window -skip_gameinfo -aviwrite output.avi neocdz</record>
</profile>
</mame>
</emulator>
</project>Creating Custom Raine Configurations:
Create custom config files in your project and reference them:
<project>
<emulator>
<raine>
<config>
<!-- Default configs are already included -->
<myconfig>raine\config\myconfig.cfg</myconfig>
<test>raine\config\test.cfg</test>
</config>
</raine>
</emulator>
</project>Usage:
# Use your custom MAME profiles
.\mak.bat run:mame:myprofile
.\mak.bat run:mame:benchmark
.\mak.bat run:mame:record
# Use your custom Raine configs
.\mak.bat run:raine:myconfig
.\mak.bat run:raine:test
# Default profiles (included with Neocore)
.\mak.bat run:mame:full # Fullscreen
.\mak.bat run:mame:debug # Debug mode
.\mak.bat run:raine:full # FullscreenStarting with version 3.0.0, build steps are now explicit and must be executed manually for better control and performance optimization:
# Initial development (build everything)
.\mak.bat sprite && .\mak.bat && .\mak.bat run:raine
# Code-only modifications (sprites unchanged)
.\mak.bat && .\mak.bat run:raine # โก Faster!
# Quick test without recompilation
.\mak.bat run:raine # ๐ Instant!| Step | Command | Purpose | When to use |
|---|---|---|---|
| 1. Sprites | .\mak.bat sprite |
Generate sprite data from assets | When assets change |
| 2. Compile | .\mak.bat |
Compile C code and link | When code changes |
| 3. Run | .\mak.bat run:raine |
Launch in emulator | Always for testing |
- ๐ Faster iteration: Skip sprite generation when only code changes
- ๐พ Cache optimization: Leverage build cache for unchanged components
- ๐ฏ Granular control: Build only what you need
- โฑ๏ธ Reduced build time: Avoid unnecessary regeneration
Migration Note: In versions before 3.0.0,
mak run:raineormak run:mameautomatically executed all build steps.
This workflow change provides better performance for iterative development.
cd <neocore>\bootstrap\scripts\project
.\create.bat -name MyGame -projectPath C:\temp\MyGameAvailable options:
-force: Overwrite existing files-name: Project name-projectPath: Destination path
โ ๏ธ Important: Backup your project before upgrading. Check the migration guide for breaking changes.
# 1. Remove build folder
rd /S /Q C:\temp\MyGame\build
# 2. Run upgrade script
cd <neocore>\bootstrap\scripts\project
.\upgrade.bat -projectSrcPath C:\temp\MyGame\src -projectNeocorePath C:\temp\MyGame\neocoreThe upgrade script performs comprehensive validation and updates:
Automatic validation:
- ๐ Verifies project structure and required files (including Makefile)
- ๐ Analyzes C code for breaking changes and deprecated patterns
- ๏ฟฝ๏ธ Removes deprecated files (common_crt0_cd.s, crt0_cd.s)
- ๏ฟฝ๐พ Creates automatic backup before making changes
- ๐ Generates detailed migration logs
What gets updated:
- โ Neocore toolchain and C library
- โ Build scripts (mak.bat and mak.ps1)
- โ Project structure validation
- โ Deprecated file cleanup (automatic removal)
- โ XML project definition
- โ Your source code (manual migration needed - see logs for guidance)
- โ Project assets
๐ก Tip: The script generates detailed logs showing breaking changes found in your code. Review these logs to understand what manual changes may be needed.
๐ Security Note: Migration logs may contain absolute paths from your system. Review generated logs before sharing them publicly and consider adding
*.logto your.gitignoreif needed.
From your project's src folder:
# ISO distribution
.\mak.bat dist:iso
# MAME distribution
.\mak.bat dist:mame
# Windows standalone executable (game + emulator)
.\mak.bat dist:exe- Doxygen Documentation
- Migration Guide - Breaking changes and migration from previous versions
- Changelog - Version history
DATlib Documentation:
Configuration in project.xml:
<project>
<gfx>
<DAT>
<chardata>
<!-- DATlib configuration -->
</chardata>
<fixdata>
<!-- DATlib fixdata configuration -->
</fixdata>
</DAT>
</gfx>
</project>DATlib Tools:
.\mak.bat framer # Launch DATlib Framer
.\mak.bat animator # Launch DATlib AnimatorFor Neo Geo CD projects, you can configure CDDA tracks in your project.xml:
Configuration structure:
<project>
<sound>
<cd>
<cdda>
<dist>
<iso>
<format>mp3</format> <!-- Distribution format -->
</iso>
</dist>
<tracks>
<track><!-- track id 1 is reserved for the binary program -->
<id>2</id>
<file>assets\sounds\cdda\track02.wav</file>
<pregap>00:02:00</pregap>
</track>
<!-- Add more tracks as needed -->
</tracks>
</cdda>
</cd>
</sound>
</project>Key points:
- Track ID 1 is reserved for the binary program
- Use WAV files for source audio (high quality)
- Distribution format (MP3) optimizes ISO size
- Pregap of
00:02:00is standard for CD audio - Mixed source formats supported (WAV, MP3)
Audio file organization:
assets/
โโโ sounds/
โโโ cdda/
โโโ track02.wav
โโโ track03.wav
โโโ track04.mp3
Developers:
- ๐ Create tutorials or code examples
- ๐ Report and fix bugs
- ๐ก Propose new features
- ๐ Improve documentation
Neo-Geo CD Owners:
- ๐งช Test examples on real hardware
- ๐ Report hardware compatibility issues
- โ Confirm functionality on real hardware
Financial Support: To improve hardware compatibility and project development, any financial contribution is appreciated.
- This project is under active development
- Mainly tested on Raine and MAME emulators
- No guarantee of functionality on real Neo-Geo hardware
- The author is not responsible for any software damage
Any help is welcome! ๐
- Pong: https://github.com/David-Vandensteen/neogeo-cd-pong
- Flamble:
Hot reload allows you to automatically recompile and restart your project when making changes:
cd <neocore>\samples\hello
.\mak.bat serve:mame- The emulator launches
- Edit
main.c - Save the file
- The project recompiles and restarts automatically
Current limitations:
โ ๏ธ Not a real watcher (triggers only when folder size changes)โ ๏ธ PATH is not restored when interrupted (close/reopen terminal)
Necessary if you modify Neocore source code:
.\mak.bat clean
.\mak.bat lib
โ ๏ธ Important: Remove the.\neocore\buildfolder before compiling after a branch change to avoid cache conflicts.
.\mak.bat clean:build- NeoDev
- DATlib
- DATimage
- NGFX SoundBuilder
- Raine
- Mame
- CHDMAN
- Doxygen
- MSYS2
- Mkisofs
- GCC
- mpg123
- ffmpeg
- NSIS
๐ Changelog
Complete version history and changes documentation.
Neocore is licensed under the MIT license. Copyright 2019 by David Vandensteen. Some graphics by Grass.


