Chdman — Android
Chdman — Android
Despite performance drawbacks, chdman on Android has become a critical tool for mobile emulation enthusiasts. Emulators like DuckStation (PS1), AetherSX2 (PS2), Redream (Dreamcast), and PPSSPP (PSP) all support CHD format. A 700 MB .bin/.cue set compresses to a 350–500 MB CHD (saving 30-50% space), while a Redump-quality PS2 DVD (4.7 GB raw) shrinks to 1.2–2.5 GB. On a 128 GB phone, this difference means carrying 40 vs. 90 games.
More importantly, Android users can now create CHDs on the device itself. A user with a USB optical drive and an OTG cable can rip a physical disc using an app like dd or ISO Extractor, then immediately convert it to CHD using chdman—all without a PC. This democratizes preservation for users in regions without desktop computers.
I ran tests on a Samsung Galaxy S23 (Snapdragon 8 Gen 2) and a budget Moto G Power (2022).
| Game (System) | Original Size | CHD Size | Conversion Time (S23) | Compression Ratio | | :--- | :--- | :--- | :--- | :--- | | Final Fantasy VII (PS1) | 1.8 GB (3 bins) | 1.1 GB | 45 seconds | 39% saved | | Shenmue (Dreamcast) | 1.2 GB (GDI) | 850 MB | 32 seconds | 29% saved | | Gran Turismo 4 (PS2) | 4.5 GB (ISO) | 3.1 GB | 2.5 minutes | 31% saved | | Lumines (PSP) | 180 MB (ISO) | 120 MB | 12 seconds | 33% saved |
Verdict: On flagship phones, conversion is faster than USB transfer to a PC. On budget phones, you can still convert overnight. The space savings are undeniable—a 256GB SD card can hold 30-40% more games. chdman android
For single-track discs (no audio CD tracks), the command is simpler:
chdman createhd -i "game.iso" -o "game.chd"
Gone are the days of being chained to a Windows PC just to manage your retro library. With chdman on Android, you can turn a 2-hour chore into a 10-minute phone task.
To recap:
Your future self—scrolling through a massive, neatly organized CHD collection on a 1TB microSD card—will thank you. Despite performance drawbacks, chdman on Android has become
Next Steps:
Have a tip about chdman on Android? Share your batch scripts and hidden tricks in the comments below!
Article word count: ~1,650 words
To understand the challenge of porting chdman, one must first appreciate its internal design. chdman operates on a "hunk" and "hunk hash" system. It reads a raw disk image (e.g., a bin/cue, gdi, or iso), divides it into fixed-size chunks (default 4 KB to 16 KB), and compresses each chunk using algorithms like zlib (DEFLATE), FLAC (for CD audio), or LZMA. Crucially, it creates a separate metadata header containing a SHA-1 hash of every hunk. This structure allows for seekable compression—an emulator can request a specific logical sector without decompressing the entire image. For single-track discs (no audio CD tracks), the
On a desktop CPU, this process is compute-intensive, especially with LZMA level 9 compression. For a standard 700 MB CD image, chdman may require 256 MB to 1 GB of RAM and several minutes of CPU time. The tool’s multi-threading support (-j flag) is essential for modern multicore systems. Porting such a tool to Android is not merely a recompilation; it is a confrontation with mobile hardware’s thermal, memory, and I/O limitations.
The old workflow:
This worked, but it was slow, required a computer, and broke the flow of tinkering on the go.
The new workflow (chdman on Android):
Check if the CHD is valid and see compression stats:
chdman verify -i game.chd
chdman info -i game.chd
| Requirement | Details |
|-------------|---------|
| Terminal app | Termux (recommended) or UserLAnd |
| Storage space | Enough for both source image(s) + final CHD |
| chdman binary | Can be compiled for ARM or downloaded pre-built |
| Source images | Supported: .bin/.cue, .iso, .gdi, .nrg, .cdi |