This is a collection of command-line tools I've written over the years that I decided to clean up and repackage. All of the tools are released under the terms of the GNU General Public License version 3.
Command-Line Pack v1.03 source code
DOS (16-bit, 8086)
DOS (32-bit, i386)
Windows (32-bit, i386)
Windows (32-bit, Alpha AXP)
Windows (32-bit, MIPS)
Windows (64-bit, x86_64)
Mac OS X (32-bit, PPC)
Mac OS X (32-bit, i386)
Mac OS X (64-bit, x86_64)
bin2iso - Convert CD .BIN to .ISO
Converts CD-ROM .BIN images (including full 2352-byte sectors) into .ISO format (2048-byte sectors). Automatically detects mode 1 or 2. Will warn if there are any form 2 sectors, which are not convertible.
Usage: bin2iso [-f] input_file output_file -f: Force conversion and bypass checks
bincomp - Compare binary files
Similar to the old DOS "FC /B" command. The default output is a side-by-side table showing 16 bytes per line. The "-l" flag will show one byte per line.
Usage: bincomp file1 file2 [-l] -l Use long format
brrrip - Rip SNES BRR sound samples
Automatically detects and rips sound samples from SNES ROMs. Works great with uncompressed .SPC files too.
Usage: brrrip romfile [samplerate [minblocks]]
"samplerate" should be given in Hz. Samples will only be detected if they are at least "minblocks" long (default=50). The output files will be named (hex address).wav.
byteshuf - Shuffle or unshuffle bytes in a file
Divides a file into its interleaved even/odd bytes, or recombines them. Can also divide every 3rd, 4th, etc. byte, depending on how many subfiles you specify. Useful for dealing with certain types of ROM images.
Usage: To unshuffle: byteshuf [-o] -u source [subfiles...] To shuffle: byteshuf [-o] -s destination [subfiles...] Options: -o Force overwrite
For example, "byteshuf -u abc def0 def1" will split all the even bytes from "abc" into "def0", and the odd bytes into "def1".
byteswap - Swap byte order of files
Swaps the byte order of each record in a file, in place. If the record size is 2, this means every even and odd byte is swapped, but the record size can also be larger than 2. Useful for dealing with certain types of ROM images.
Usage: byteswap [-q] [-s recordsize] files... -q: Quiet -s: Size, in bytes, of each record to swap (default: 2)
cdpatch - CD-XA image insert/extract utility
Inserts or extracts files in-place into CD-ROM images in either .BIN or .ISO format. Properly handles CD-XA streams from Mode 2 CDs (Video CDs, PlayStation movie files, etc.) and patches ECC/EDC data as appropriate.
Usage: To insert: cdpatch -i bin_or_iso [options] [files...] To extract: cdpatch -x bin_or_iso [options] [files...] Options: -be Favor big-endian values in ISO9660 metadata -boot Insert or extract boot area -d dir Set the base directory for inserted or extracted files (defaults to .) -f Skip filesystem consistency checks -le Favor little-endian values in ISO9660 metadata -o Force overwrite when extracting files -r Recurse into subdirectories -v Verbose
By default, cdpatch will attempt to insert or extract every file in the CD image, the same as if you'd specified "-r ." The "-boot" option will insert or extract the 32KiB boot sector area to a file named "boot".
Some CD images may have conflicting sets big- and little-endian metadata as a platform-specific quirk or copy protection scheme; the "-be" and "-le" options can be used to override this.
Specifying both -f and -v will list all filesystem errors, while still ignoring them for extraction purposes.
When extracting files via -x, cdpatch preserves file modification times when possible.
ecm - Encoder/decoder for Error Code Modeler format
ECM is a compression format for CD images which removes ECC/EDC data where it's possible to do so losslessly. Compressing a CD image with ECM first, then compressing the ECM file with a general-purpose compressor such as 7z or RAR, can result in better compression than 7z or RAR alone. See the ECM page for more details.
Usage: To encode: ecm cdimagefile ecm cdimagefile ecmfile ecm e cdimagefile ecmfile To decode: unecm ecmfile unecm ecmfile cdimagefile ecm d ecmfile cdimagefile
fakecrc - Fake the CRC32 of a file
Modifies a file to force it to have a particular CRC32 checksum, by patching 4 consecutive bytes anywhere in the file. Can also obtain the CRC32 checksum of a file.
Usage: To obtain the CRC32 of a file: fakecrc file To modify the CRC32 of a file: fakecrc file desired_crc [offset]
The 4 bytes at "offset" will be modified. If no offset is given, the last 4 bytes of the file are used.
hax65816 - Simple 65816 disassembler
A simple 65c816 disassembler with basic flag following. This is the disassembler I used for the Seiken Densetsu 3 project, among others.
Usage: hax65816 imagefile start address [length] [options] Output is written to stdout. All values must be given in hex. If no length is given, disassembly will stop at the end of the bank. Options: -m0 Assume M flag = 0 -m1 Assume M flag = 1 (default) -x0 Assume X flag = 0 (default) -x1 Assume X flag = 1 -noreturn Disable flag reset after RTS/RTL/RTI -noguess Disable flag guess on BRK/COP/WDM/STP -nofollow Disable REP/SEP following (not recommended)
id3point - Pointless ID3v1 Tagger
A basic ID3v1 tagger for MP3 files. Probably superseded by newer tools, but included here nonetheless.
Usage: id3point [options] mp3file(s) Options: -t title Set ID3 title -t- Clear ID3 title -a artist Set ID3 artist -a- Clear ID3 artist -m album Set ID3 album -m- Clear ID3 album -y year Set ID3 year -y- Clear ID3 year -c comment Set ID3 comment -c- Clear ID3 comment -k track# Set ID3 track # -k- Clear ID3 track # -g genre# Set ID3 genre # -g- Clear ID3 genre # -tf Set ID3 title based on the filename Notes: - Only ID3v1 tags are supported. - The track number increments automatically for each additional file. - The -tf option will turn "Artist - Title.mp3" into "Title", but be sure to check the titles by hand in case it gets confused.
pecompat - Maximize compatibility of a Win32 PE file
Patches a Windows 32-bit PE executable file to maximize its compatibility with older versions of Windows.
- Clears the linker timestamp
- Sets the required OS version and subsystem version to "4.00"
- Recalculates the PE file checksum
- Warns if any Unicode import functions are used
Usage: pecompat pe_exe_file(s)
rels - Relative Searcher
Searches for a string in a group of files by comparing the relative difference between each letter. This allows finding strings in non-ASCII character sets. Also attempts double values (e.g. 00=A, 02=B, 04=C) and wide values (every other byte, as in UCS-2). A staple ROM hacking tool.
Usage: rels string files
Search strings may include '.' characters as wildcards, but must include at least two non-wildcard characters.
screamf - .AMF to .S3M converter
Converts AMF music files to S3M. AMF was a format used exclusively by Otto Chrons' DOS Sound and Music Interface (DSMI) library and Dual Module Player. Various DOS games and demos in the 1990s used this format. AMF files were the result of running MOD2AMF on an existing S3M or other module; screamf does the opposite. It's round-trippable for the most part.
Usage: screamf inputfile.amf outputfile.s3m
subfile - Extract a portion of a file
Extracts a portion of a file, given a starting offset and length, in bytes. Offset and length may be specified in C style "0x123" or "0123" notation for hexadecimal or octal.
Usage: subfile infile offset length outfile
uips - Universal IPS patch create/apply utility
UIPS is a command-line utility for creating and applying IPS patches. IPS is an old patch format for binary files, limited to 16 MiB in size, and not to be confused with the newer UPS format. Multiple source files and IPS v2 truncation are supported.
Usage: To create an IPS patch: uips c patch_file source_file(s) target_file To apply an IPS patch: uips a patch_file target_file
For example, "uips c patch.ips file1 file2 file3 file4" will create a patch file capable of transforming any of file1, file2, or file3 to file4.
usfv - Universal SFV create/verify utility
USFV is a utility for creating and verifying SFV (Simple File Verification) files, such as those created by Win-SFV32. A SFV file contains a list of filenames and their corresponding CRC32 checksums.
Caveat: CRC32 is not a cryptographic hash and cannot be used to ensure that a file was not maliciously modified (see fakecrc, above).
Usage: To create a SFV file: usfv c sfvfile filenames To verify a SFV file: usfv v sfvfile
vb2rip - VB2 sound format ripping utility
Rips music in .VB2 and various similar formats found in PlayStation and PlayStation 2 games. See the VB2rip page for more details.
Usage: vb2rip [options] inputfile(s) Options: -fmt format Specify the input file format -o path Specify the output filename (if one input file is given) or specify the output directory (if several are given) -mono Treat input file as monaural -stereo Treat input file as stereo -rate n Specify the sample rate -interleave n Specify the block interleave size -skip n Skip this many bytes after each block -offset n Start at the given offset in the input file -endflag Stop decoding when the sample end flag is reached -noendflag Ignore the sample end flag -maxbytes n Set the maximum number of input bytes to decode Supported input formats: Format Description ------------------------------------------------------------ raw Raw data (for experimentation) vb2 Konami multi-song .BIN/.VB2 file (Dance Dance Revolution, etc.) 8 .8 file (Suikoden) msa .MSA file (Psyvariar, possibly other PS2 games) xa2 .XA2 file (Extreme-G 3, possibly other PS2 games)
wordadd - Addition word puzzle solver
Finds solutions to letter/digit substitution puzzles of the "WORD + WORD = OTHER" variety. Supports multiple addends and digits mixed in with letters.
Usage: wordadd words... sum Examples: wordadd BEEF BACON MEATS
zerofill - Create a large, empty file
Creates a file filled with bytes of value zero. Similar to "dd if=/dev/zero", except not all platforms have dd, and there's a progress indicator.
Inside a virtual machine, zerofill can be used to create a large dummy file in order to zero out all the unused sectors before compressing the drive image. (zerofill is also useful for creating drive images in the first place.)
Usage: zerofill [-f] [-q] size filename -f: Force overwrite -q: Quiet
"size" may be specified in C style "0x123" or "0123" notation for hexadecimal or octal.
- pecompat: New app
- uips: Fixed a bug that caused bytes near the end of the file to be unnecessarily included in the .ips patch
- cdpatch: Combining -f and -v now lists all errors, while still ignoring them
- cdpatch: -x option now preserves modification time when possible
- Rebuilt binaries for Win32 i386 due to a virus scanner false positive
- New platforms: Human68k, Win32 Alpha AXP
- Windows versions now warn if they're not being executed from the command line
- Re-added single-argument form to ecm and unecm, allowing drag and drop to work again
- Initial release