ROMCNV - Neo-Geo MVS ROM Converter
A tool to convert Neo-Geo MVS arcade ROMs into an optimized cache format for use with NJEMU emulators on memory-constrained platforms.
Why Convert ROMs?
Neo-Geo MVS ROMs often contain graphics data larger than the available RAM on: - PSP: ~24-64MB available RAM - PS2: ~32MB available RAM
This converter processes the ROM files and creates optimized cache files that can be loaded in smaller chunks during emulation, enabling playback of games that would otherwise not fit in memory.
Supported Platforms
| Platform | Executable | Cache Location |
|---|---|---|
| Windows | romcnv_mvs.exe |
./cache/ |
| Linux/macOS | romcnv_mvs |
./cache/ |
| Web | Online Converter | Download as ZIP |
| PSP | N/A (use desktop tool) | /PSP/GAME/MVSPSP/cache/ |
| PS2 | N/A (use desktop tool) | mass:/MVSPSP/cache/ |
Usage
Basic Usage
Convert a single ROM:
romcnv_mvs /path/to/game.zipCommand Line Options
| Option | Description |
|---|---|
-all |
Convert all ROMs in the specified directory |
-zip |
Create a ZIP compressed cache file instead of a folder |
-batch |
Batch mode - donโt pause between conversions |
-slim |
PSP Slim mode - skip PCM cache for unencrypted games (reduces cache size) |
Examples
Convert a single game:
romcnv_mvs "D:\roms\kof99.zip"Convert multiple games in batch mode:
romcnv_mvs "D:\roms\garou.zip" -batch
romcnv_mvs "D:\roms\kof2002.zip" -batch
romcnv_mvs "D:\roms\kof2003.zip"Convert all ROMs in a directory:
romcnv_mvs "D:\roms" -allConvert with ZIP compression:
romcnv_mvs "D:\roms\kof99.zip" -zipConvert for PSP Slim (reduced cache size):
romcnv_mvs "D:\roms\kof99.zip" -slimLinux/macOS Examples
# Convert a single ROM
./romcnv_mvs /home/user/roms/kof99.zip
# Convert with ZIP compression
./romcnv_mvs /home/user/roms/kof99.zip -zip
# Convert all ROMs in directory
./romcnv_mvs /home/user/roms -all
# Convert all with ZIP compression
./romcnv_mvs /home/user/roms -all -zip
# Convert with slim mode
./romcnv_mvs /home/user/roms/garou.zip -slimOutput
The converter creates a cache directory containing one
of: - gamename_cache/ โ Folder with individual block files
(default) - gamename_cache.zip โ ZIP compressed cache file
(with -zip)
Both formats are supported by the emulator on all platforms.
File Structure for Emulators
PSP (folder format):
/PSP/GAME/MVSPSP/
โโโ roms/
โ โโโ game.zip
โโโ cache/
โโโ game_cache/
PSP (zip format):
/PSP/GAME/MVSPSP/
โโโ roms/
โ โโโ game.zip
โโโ cache/
โโโ game_cache.zip
PS2 (folder format):
mass:/MVSPSP/
โโโ roms/
โ โโโ game.zip
โโโ cache/
โโโ game_cache/
PS2 (zip format):
mass:/MVSPSP/
โโโ roms/
โ โโโ game.zip
โโโ cache/
โโโ game_cache.zip
Cache Format Comparison
The emulator supports reading caches in folder and zip formats. The table below compares them from a memory and performance perspective to help you choose the right format for your target platform.
Memory
| Aspect | Folder (default) | ZIP (-zip) |
|---|---|---|
| Persistent open FD | 1 (crom file kept open) |
Zip archive kept open (central directory in RAM) |
| ZIP central directory overhead | โ | ~32 bytes ร num_entries |
| Sleep/resume cost | close()/open() 1 FD |
zip_close()/zip_open() (re-parse central
dir) |
| Overall RAM overhead | Lowest | Medium |
Read Performance
| Aspect | Folder (default) | ZIP (-zip) |
|---|---|---|
| Cache miss (block load) | lseek() + read() โ 1 syscall pair, direct
offset |
zopen() โ scan zip dir + zread()
decompress 64 KB + zclose() โ slowest |
| Cache hit | LRU pointer update only | LRU pointer update only |
| I/O pattern | Random seek in single crom file โ
|
Sequential scan of zip entries + inflate โ |
| Decompression CPU | None | zlib inflate() per 64 KB block โ significant on
PSP/PS2 |
Startup (fill_cache) |
Sequential lseek+read โ fast |
Open+decompress+close each block โ slowest |
Disk / Storage
| Aspect | Folder (default) | ZIP (-zip) |
|---|---|---|
| Disk size | Larger โ uncompressed blocks | Smallest โ deflate typically 30โ70% compression |
| File count | Multiple files (cache_info, crom,
srom, vrom) |
1 file |
| Filesystem friendliness | โ Few large files | โ Single file |
Recommendation per Platform
| Platform | Best format | Reason |
|---|---|---|
| PSP | Folder (default) | Weakest CPU; lseek/read on
crom is the cheapest cache miss path. No decompression
overhead. |
| PS2 | Folder (default) | Same โ limited CPU, limited I/O drivers. |
| Desktop | Either (zip for disk savings) | CPU is a non-issue; zip saves ~50% disk with negligible cost. |
| WASM / Web | ZIP | Single HTTP download; in-memory inflate is fast in browser. |
Building from Source
Windows
mkdir build && cd build
cmake .. -DTARGET=MVS
cmake --build .Linux/macOS
mkdir build && cd build
cmake .. -DTARGET=MVS
makeWebAssembly
mkdir build && cd build
emcmake cmake .. -DTARGET=MVS
emmake makeNotes
- Parent ROM sets must be in the same directory as the game ROM
- The converter requires
rominfo.mvsfile to be present in the same directory as the executable - Cache files are version-specific - regenerate if you update the emulator
Troubleshooting
โROM not foundโ error: - Ensure the ROM filename
matches entries in rominfo.mvs - Check that parent ROMs are
available for clone sets
Large cache sizes: - Use -slim option
for PSP Slim/PS Vita - Some games (especially later titles) require more
cache space