Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/dolphin-emu/dolphin/llms.txt

Use this file to discover all available pages before exploring further.

Dolphin supports multiple disc image formats for GameCube and Wii games with varying compression and features.

Supported Formats

Location: Source/Core/DiscIO/

ISO

Uncompressed 1:1 disc imageSize: 1.4 GB (GC) / 4.7 GB (Wii single-layer)

RVZ

Modern compressed format (recommended)Size: 200 MB - 1 GB (Zstandard compression)

GCZ

Legacy GameCube compressionSize: 300 MB - 800 MB (Deflate)

WIA

Compressed Wii formatSize: 400 MB - 1.5 GB (LZMA/Bzip2)

WBFS

Wii Backup File SystemSize: Variable (scrubbed)

CISO

Compact ISOSize: Similar to GCZ

Format Comparison

FormatCompressionSpeedSizeRecommend
RVZZstandardFastBest✅ Yes
ISONoneFastestLargestFor backups
WIALZMA/Bzip2SlowGoodLegacy
GCZDeflateMediumOKLegacy GC
WBFSScrubbingFastGoodLimited
CISODeflateMediumOKLimited
Recommended: Use RVZ format for best compression and speed balance.

RVZ Format

Dolphin’s modern compression format:

Features

  • Zstandard compression (very fast, excellent ratio)
  • Block-based (supports partial reads)
  • Wii partition decryption
  • Hash removal (smaller size)
  • Scrubbing support

Compression Levels

# dolphin-tool convert
dolphin-tool convert -i game.iso -o game.rvz \
  -f rvz \
  -c zstd \
  -l 5     # Compression level 1-22
LevelSpeedRatioRecommended
1-3Very fastOKQuick conversion
5FastGoodDefault
9-13MediumBetterArchive
18-22SlowBestLong-term storage

Block Size

# Larger blocks = better compression, slower seeks
dolphin-tool convert -i game.iso -o game.rvz \
  -f rvz -c zstd -l 5 \
  -b 131072  # 128 KB (recommended)
Recommended: 128 KB (131072 bytes)

Disc Volume

Location: DiscIO/Volume.cpp Common interface for all formats:
// Open any supported format
std::unique_ptr<Volume> CreateVolume(const std::string& path);

// Read sectors
bool Read(u64 offset, u64 size, u8* buffer);

// Get disc info
Platform GetVolumeType();      // GameCube or Wii
Country GetCountry();           # Region
std::string GetGameID();        # 6-char game ID

GameCube Disc Structure

GameCube Disc (1.4 GB)
├── 0x0000: Boot info (game ID, version, etc.)
├── 0x0420: Disc Header Info 2
├── 0x2440: Apploader (game-specific loader)
├── Variable: FST (File System Table)
├── Variable: DOL (main executable)
└── Variable: Game files

Reading Game Files

Location: DiscIO/Filesystem.cpp Extract files from disc:
// Get filesystem
std::unique_ptr<FileSystem> fs = CreateFileSystem(volume);

// List files
std::vector<std::string> files = fs->GetFileList();

// Extract file  
bool ExportFile(const std::string& path, const std::string& export_path);

Wii Disc Structure

Wii discs use partitions:
Wii Disc (4.7 GB single-layer, 8.5 GB dual-layer)
├── 0x0000: Disc Header
├── 0x40000: Region settings
├── 0x50000: Partition table
├── Partition 0: Update partition (system update)
├── Partition 1: Game partition (main content)
│   ├── Partition header (ticket, TMD, certs)
│   ├── Encrypted content
│   │   ├── 0x0000: Partition info
│   │   ├── 0x0420: Boot info
│   │   ├── Variable: Apploader
│   │   ├── Variable: FST
│   │   ├── Variable: DOL
│   │   └── Variable: Game files
│   └── H3 hash table
└── Partition N: Optional channel/DLC partitions

Partition Encryption

Wii partitions are AES-encrypted: Location: DiscIO/VolumeWii.cpp
// Decrypt partition data
DecryptPartition(partition_key, encrypted_data, decrypted_data);
  • Each 0x8000-byte block is encrypted separately
  • 0x400-byte hashes at start of each block (removed in RVZ)
  • Title key from ticket + Common key

Scrubbing

Remove unused data:
dolphin-tool convert -i game.iso -o game.rvz \
  -f rvz -s  # --scrub flag
Scrubbing removes:
  • Unused partition space
  • Garbage data
  • Debug information
Reduces size by 10-30%.

WIA Format

Specification: See WIA/RVZ Format Spec Legacy Wii compression:

Compression Methods

  • None: Uncompressed (testing)
  • Purge: Remove unused data only
  • Bzip2: Good compression, slow
  • LZMA: Best compression, very slow
  • LZMA2: Improved LZMA

Chunk Size

Data divided into chunks (default 2 MB):
dolphin-tool convert -i game.iso -o game.wia \
  -f wia -c lzma -l 5 -b 2097152  # 2 MB chunks

GCZ Format

Legacy GameCube compression:

Structure

  • Deflate compression per block
  • Block size: typically 16 KB
  • Header with block offsets
GCZ is outdated. Use RVZ for new conversions.

WBFS Format

Wii Backup File System:

Features

  • Automatic scrubbing
  • Multiple games per volume
  • Direct Wii console compatibility (with homebrew)

Limitations

  • No compression (but scrubbed)
  • No dual-layer support
  • Less efficient than RVZ

Disc Conversion

Use dolphin-tool convert for format conversion:
dolphin-tool convert \
  -i game.iso \
  -o game.rvz \
  -f rvz \
  -c zstd \
  -l 5 \
  -b 131072 \
  -s  # Optional scrubbing

Any Format to ISO

# Extract to uncompressed ISO
dolphin-tool convert -i game.rvz -o game.iso -f iso

Batch Conversion

#!/bin/bash
for iso in *.iso; do
  dolphin-tool convert -i "$iso" -o "${iso%.iso}.rvz" \
    -f rvz -c zstd -l 5 -b 131072 -s
done
See DolphinTool Convert for details.

Disc Verification

Verify disc integrity:
# Compute hash
dolphin-tool verify -i game.rvz -a md5

# Full verification report
dolphin-tool verify -i game.wia
See DolphinTool Verify for details.

Performance Considerations

Format affects loading speed:
  • ISO: Fastest (no decompression)
  • RVZ (Zstandard): Very fast (hardware decompression)
  • GCZ/CISO: Medium (Deflate overhead)
  • WIA (LZMA): Slow (CPU-intensive decompression)
Recommendation: RVZ for best balance.
Dolphin caches decompressed blocks:
[Core]
DiskCache = True     # Cache disc reads (recommended)
DiskCacheSize = 32   # MB of cache
Reduces stuttering with compressed formats.
Typical sizes:
GameISORVZ (Zstd-5)Savings
Super Mario Galaxy4.7 GB850 MB82%
Mario Kart Wii4.7 GB720 MB85%
Luigi’s Mansion1.4 GB380 MB73%

See Also