Documentation for Neo-Geo MVS ROM conversion

โ† Back to Converter

ROMCNV - Neo-Geo MVS ROM Converter

A tool to convert Neo-Geo MVS arcade ROMs into processed assets for use with NJEMU. These assets are shared by full-resident and streaming-cache runtime modes.

Why Convert ROMs?

The MVS runtime can choose between fully resident data and streaming according to the memory that is actually available when a game starts. The converter prepares the decrypted/decoded C-ROM, S-ROM, and V-ROM assets needed by those runtime paths. The generated assets are not tied to a PSP model or memory tier.

Converter Availability

The converter runs on Windows, Linux/macOS, or in the online converter. The generated processed assets are portable across NJEMU platforms.

Usage

Basic Usage

Convert a single ROM:

romcnv_mvs /path/to/game.zip

Command Line Options

Option Description
-all Convert all ROMs in the specified directory
-zip Create a ZIP-compressed processed asset instead of a folder
-lang <tag> Select converter messages at runtime (en or zh-Hans)

Examples

Convert a single game:

romcnv_mvs "D:\roms\kof99.zip"

Convert all ROMs in a directory:

romcnv_mvs "D:\roms" -all

Convert with ZIP compression:

romcnv_mvs "D:\roms\kof99.zip" -zip

Use Simplified Chinese converter messages:

romcnv_mvs "D:\roms\kof99.zip" -lang zh-Hans

Linux/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

Output

The converter creates a processed directory containing one of: - gamename_cache/ โ€” Folder with individual block files (default) - gamename_cache.zip โ€” ZIP-compressed processed asset (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
โ””โ”€โ”€ processed/
    โ””โ”€โ”€ game_cache/

PSP (zip format):

/PSP/GAME/MVSPSP/
โ”œโ”€โ”€ roms/
โ”‚   โ””โ”€โ”€ game.zip
โ””โ”€โ”€ processed/
    โ””โ”€โ”€ game_cache.zip

PS2 (folder format):

mass:/MVSPSP/
โ”œโ”€โ”€ roms/
โ”‚   โ””โ”€โ”€ game.zip
โ””โ”€โ”€ processed/
    โ””โ”€โ”€ game_cache/

PS2 (zip format):

mass:/MVSPSP/
โ”œโ”€โ”€ roms/
โ”‚   โ””โ”€โ”€ game.zip
โ””โ”€โ”€ processed/
    โ””โ”€โ”€ game_cache.zip

Processed Asset Format Comparison

The emulator supports the same processed MVS assets in folder and zip formats on every platform. The difference is storage versus runtime I/O cost, not compatibility.

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 miniz 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

Use the default folder format when runtime performance matters. Use -zip when smaller storage is more important and the extra decompression work is acceptable. The web converter is only another way to run ROMCNV; it does not produce a separate โ€œWebโ€ asset format.

Building from Source

Windows

mkdir build && cd build
cmake .. -DTARGET=MVS
cmake --build .

Linux/macOS

mkdir build && cd build
cmake .. -DTARGET=MVS
make

WebAssembly

mkdir build && cd build
emcmake cmake .. -DTARGET=MVS
emmake make

Notes

  • Parent ROM sets must be in the same directory as the game ROM
  • The converter requires rominfo.mvs file to be present in the same directory as the executable
  • Converter language is selected at runtime. NJEMU_LANG, LC_ALL, LC_MESSAGES, and LANG are used when -lang is omitted; unsupported languages fall back to English.
  • Processed-asset headers currently use format MVS_V24, independent of NJEMU/ROMCNV application versions. Regenerate only when the processed-asset format changes.
  • Cache-enabled MVS builds can still read the legacy cache/ layout for migration; USE_CACHE=OFF intentionally reads only processed/.

Troubleshooting

โ€œROM not foundโ€ error: - Ensure the ROM filename matches entries in rominfo.mvs - Check that parent ROMs are available for clone sets

Large processed asset sizes: - Processed assets intentionally contain the data required by both resident and streaming runtime paths. - ZIP output can reduce storage use without changing emulator compatibility.