Nintendo 64 ROM utility written in Go.
- ls - List information about all ROMs in a directory
- info - Show information about a single ROM
- convert - Convert a ROM file to the native (Z64, Big-endian) format
- validate - Validate the ROM's SHA-1 checksum against a list of known-good ROM dumps.
List ROM files in a given directory. By default, output is in a human-readable table.
-o
,--output
Defaults totable
but can also betext
,json
,csv
,tab
,xml
-c
,--columns
Defaults to most useful columns. Can be a comma-separated list, or specified multiple times.
When using table
, csv
, or tab
format, checksums are calculated if the column is requested with -c | --columns
.
When using text
, json
, or xml
format, by default no checksums are calculated because of the CPU overhead.
To calculate checksums in these modes, request them using the -c | --columns
flag.
rom64 ls . --output text --columns file_md5,file_sha1,file_crc1,file_crc2
Available columns
Column ID | Description |
---|---|
cic | CIC chip type. example: 6102 |
crc1 | Expected CRC1 checksum of ROM internals. Also known as 'CRC HI' |
crc2 | Expected CRC2 checksum of ROM internals. Also known as 'CRC LO' |
image_name | Image name / game title embedded in the ROM. |
region | Region description of the ROM derived from the ROM ID. |
rom_id | ROM ID / serial. example: NSME for Super Mario 64 (USA) |
version | Version of the ROM. One of: 1.0, 1.1, 1.2, or 1.3. |
video_system | Video system derived from the ROM region. NTSC or PAL. |
Columns prefixed with file_
are information about the file itself rather than ROM header metadata.
Column ID | Description |
---|---|
file_crc1 | Actual calculated CRC1 of the file's first 1MB of data |
file_crc2 | Actual calculated CRC2 of the file's first 1MB of data |
file_format | File format code. One of: z64, v64, n64 |
file_format_desc | File format description. example: Big-endian |
file_md5 | MD5 hash/checksum of the file on disk. Lower-case hexadecimal. |
file_name | File name on disk |
file_sha1 | SHA-1 hash/checksum of the file on disk. Lower-case hexadecimal. |
file_size_mbits | File size in megabits. Always a whole number. example: 256 |
file_size_mbytes | File size in megabytes. Always a whole number. example: 32 |
$ rom64 ls ~/Downloads/n64 -c image_name,rom_id,region,video_system,cic,file_size_mbits,file_format_desc,crc1,file_name
---------------------- -------- --------------- ------- ------ ----------- -------------- ---------- -----------------------------------------------------------
| Image Name | Rom ID | Region | Video | CIC | Size (Mb) | File Format | CRC-1 | File Name |
---------------------- -------- --------------- ------- ------ ----------- -------------- ---------- -----------------------------------------------------------
| 1080 SNOWBOARDING | NTEA | Japan and USA | NTSC | 6103 | 128 | Big-endian | 1FBAF161 | 1080 Snowboarding (Japan, USA) (En,Ja).z64 |
| 40 WINKS | N4WX | PAL Regions | PAL | 6102 | 256 | Byte-swapped | ABA51D09 | 40 Winks (Europe) (En,Es,It) (Proto).n64 |
| 40 WINKS | N4WX | PAL Regions | PAL | 6102 | 256 | Big-endian | ABA51D09 | 40 Winks (Europe) (En,Es,It) (Proto).z64 |
| Banjo-Kazooie | NBKE | USA | NTSC | 6103 | 128 | Big-endian | CD7559AC | Banjo-Kazooie (USA) (Rev A).z64 |
| BANJO TOOIE | NB7E | USA | NTSC | 6105 | 256 | Big-endian | C2E9AA9A | Banjo-Tooie (USA).z64 |
| Blast Corps | NBCE | USA | NTSC | 6102 | 64 | Big-endian | 7C647E65 | Blast Corps (USA) (Rev A).z64 |
| BOMBERMAN64U | NBME | USA | NTSC | 6102 | 64 | Big-endian | F568D51E | Bomberman 64 (USA).z64 |
| CONKER BFD | NFUE | USA | NTSC | 6105 | 512 | Big-endian | 30C7AC50 | Conker's Bad Fur Day (USA).z64 |
| Diddy Kong Racing | NDYE | USA | NTSC | 6103 | 96 | Big-endian | E402430D | Diddy Kong Racing (USA) (En,Fr) (Rev A).z64 |
| DONKEY KONG 64 | NDOE | USA | NTSC | 6105 | 256 | Big-endian | EC58EABF | Donkey Kong 64 (USA).z64 |
| F1 WORLD GRAND PRIX2 | NF2P | Europe | PAL | 6102 | 96 | Byte-swapped | 874965A3 | F-1 World Grand Prix II (Europe) (En,Fr,De,Es).n64 |
| F-ZERO X | NFZP | Europe | PAL | 6106 | 128 | Big-endian | 776646F6 | F-ZERO X (E) [!].z64 |
| F-ZERO X | NFZP | Europe | PAL | 6106 | 128 | Byte-swapped | 776646F6 | F-Zero X (Europe).n64 |
| F-ZERO X | NFZP | Europe | PAL | 6106 | 128 | Big-endian | 776646F6 | F-Zero X (Europe).z64 |
| F-ZERO X | CFZE | USA | NTSC | 6106 | 128 | Big-endian | B30ED978 | F-Zero X (USA).z64 |
| GOLDENEYE | NGEE | USA | NTSC | 6102 | 128 | Byte-swapped | DCBC50D1 | Goldeneye.v64 |
| HSV ADVENTURE RACING | NNSX | PAL Regions | PAL | 6102 | 128 | Byte-swapped | 72611D7D | HSV Adventure Racing! (Australia).n64 |
| HSV ADVENTURE RACING | NNSX | PAL Regions | PAL | 6102 | 128 | Big-endian | 72611D7D | HSV Adventure Racing! (Australia).z64 |
| JET FORCE GEMINI | NJFE | USA | NTSC | 6105 | 256 | Big-endian | 8A6009B6 | Jet Force Gemini (USA).z64 |
| Killer Instinct Gold | NKIE | USA | NTSC | 6102 | 96 | Big-endian | F908CA4C | Killer Instinct Gold (USA) (Rev B).z64 |
| LEGORacers | NLGE | USA | NTSC | 6102 | 128 | Big-endian | 096A40EA | LEGO Racers (USA) (En,Fr,De,Es,It,Nl,Sv,No,Da,Fi).z64 |
| ZELDA MAJORA'S MASK | NZSE | USA | NTSC | 6105 | 256 | Big-endian | 5354631C | Legend of Zelda, The - Majora's Mask (USA).z64 |
| THE LEGEND OF ZELDA | CZLE | USA | NTSC | 6105 | 256 | Big-endian | 693BA2AE | Legend of Zelda, The - Ocarina of Time (U) (V1.2) [!].z64 |
| THE LEGEND OF ZELDA | CZLE | USA | NTSC | 6105 | 256 | Big-endian | 693BA2AE | Legend of Zelda, The - Ocarina of Time (USA) (Rev B).z64 |
| STARFOX64 | NFXP | Europe | PAL | 7102 | 96 | Big-endian | F4CBE92C | Lylat Wars (E) (M3) [!].z64 |
| STARFOX64 | NFXP | Europe | PAL | 7102 | 96 | Byte-swapped | F4CBE92C | Lylat Wars (Europe) (En,Fr,De).n64 |
| STARFOX64 | NFXP | Europe | PAL | 7102 | 96 | Big-endian | F4CBE92C | Lylat Wars (Europe) (En,Fr,De).z64 |
| MarioGolf64 | NMFE | USA | NTSC | 6102 | 192 | Big-endian | 664BA3D4 | Mario Golf (USA).z64 |
| MARIOKART64 | NKTE | USA | NTSC | 6102 | 96 | Big-endian | 3E5055B6 | Mario Kart 64 (USA).z64 |
| MarioParty2 | NMWE | USA | NTSC | 6102 | 256 | Big-endian | 9EA95858 | Mario Party 2 (USA).z64 |
| MarioTennis | NM8E | USA | NTSC | 6102 | 128 | Big-endian | 5001CF4F | Mario Tennis (USA).z64 |
| Mega Man 64 | NM6E | USA | NTSC | 6102 | 256 | Big-endian | 0EC158F5 | Mega Man 64 (USA).z64 |
| PAPER MARIO | NMQE | USA | NTSC | 6103 | 320 | Big-endian | 65EEE53A | Paper Mario (USA).z64 |
| Perfect Dark | NPDE | USA | NTSC | 6105 | 256 | Big-endian | 41F2B98F | Perfect Dark (USA) (Rev A).z64 |
| Pilot Wings64 | NPWE | USA | NTSC | 6102 | 64 | Big-endian | C851961C | Pilotwings 64 (USA).z64 |
| PYORO64 | BPYB | Brazil | NTSC | 6102 | 16 | Big-endian | 03D73956 | Pyoro64 MPAL.n64 |
| PYORO64 | BPYE | USA | NTSC | 6102 | 16 | Big-endian | 03D607B8 | Pyoro64 NTSC.n64 |
| PYORO64 | BPYI | Italy | PAL | 6102 | 16 | Big-endian | 58ABD009 | Pyoro64 PAL.n64 |
| TSUMI TO BATSU | NGUJ | Japan | NTSC | 6102 | 256 | Byte-swapped | B6BC0FB0 | Sin and Punishment.v64 |
| TSUMI TO BATSU | NGUJ | Japan | NTSC | 6102 | 256 | Big-endian | B6BC0FB0 | Sin and Punishment.z64 |
| STARFOX64 | NFXE | USA | NTSC | 6101 | 96 | Big-endian | BA780BA0 | Star Fox 64 (USA) (Rev A).z64 |
| Rogue Squadron | NRSE | USA | NTSC | 6102 | 128 | Big-endian | 66A24BEC | Star Wars - Rogue Squadron (USA) (Rev A).z64 |
| SUPER MARIO 64 | NSME | USA | NTSC | 6102 | 64 | Big-endian | 635A2BFF | Super Mario 64 (USA).z64 |
| SUPERMARIO64 | NSMJ | Japan | NTSC | 6102 | 64 | Byte-swapped | D6FBA4A8 | Super Mario 64 - Shindou Edition (J) [!].n64 |
| SUPERMARIO64 | NSMJ | Japan | NTSC | 6102 | 64 | Big-endian | D6FBA4A8 | Super Mario 64 - Shindou Edition (J) [!].z64 |
| SMASH BROTHERS | NALE | USA | NTSC | 6103 | 128 | Byte-swapped | 916B8B5B | Super Smash Bros. (USA).n64 |
| SMASH BROTHERS | NALE | USA | NTSC | 6103 | 128 | Big-endian | 916B8B5B | Super Smash Bros. (USA).z64 |
| TSUMI TO BATSU | NGUJ | Japan | NTSC | 6102 | 256 | Byte-swapped | B6BC0FB0 | Tsumi to Batsu - Hoshi no Keishousha (Japan).n64 |
| TSUMI TO BATSU | NGUJ | Japan | NTSC | 6102 | 256 | Big-endian | B6BC0FB0 | Tsumi to Batsu - Hoshi no Keishousha (Japan).z64 |
| WAVE RACE 64 | NWRE | USA | NTSC | 6102 | 64 | Big-endian | 492F4B61 | Wave Race 64 (USA) (Rev A).z64 |
---------------------- -------- --------------- ------- ------ ----------- -------------- ---------- -----------------------------------------------------------
Show information about a single file.
Also supports the same output options as ls
$ rom64 info ~/Downloads/n64/Conker\'s\ Bad\ Fur\ Day\ \(USA\).z64
File:
Name: Conker's Bad Fur Day (USA).z64
Size: 64 MB
Format: z64 (Big-endian)
Checksums:
MD5: 00e2920665f2329b95797a7eaabc2390
SHA1: 4cbadd3c4e0729dec46af64ad018050eada4f47a
CRC 1: 30C7AC50
CRC 2: 7704072D
ROM:
ID: NFUE
Title: CONKER BFD
Media: Cartridge
Region: USA
Video: NTSC
Version: 1.0
CIC: 6105
CRC 1: 30C7AC50
CRC 2: 7704072D
Same ROM but with --output json
{
"crc1": "30C7AC50",
"crc2": "7704072D",
"image_name": "CONKER BFD",
"media_format": {
"code": "N",
"description": "Cartridge"
},
"cartridge_id": "FU",
"region": {
"id": "E",
"short_name": "USA",
"description": "USA",
"video_system": "NTSC"
},
"version": 0,
"cic": "6105",
"file": {
"path": "/home/mroach/Downloads/n64/Conker's Bad Fur Day (USA).z64",
"name": "Conker's Bad Fur Day (USA).z64",
"format": {
"code": "z64",
"description": "Big-endian"
},
"size": 64,
"md5": "00e2920665f2329b95797a7eaabc2390",
"sha1": "4cbadd3c4e0729dec46af64ad018050eada4f47a",
"crc1": "30C7AC50",
"crc2": "7704072D"
}
}
Converts a ROM from a non-native format to the native big-endian Z64 format.
After conversion, the new ROM's SHA-1 checksum is validated against a known
list of good checksums, same as in the validate
command.
Computes the ROM file's SHA-1 checksum and validates it against a list of known-good checksums from a "datfile".
Checksums only work on files in the native Big-endian (Z64) format.
The binary includes a recent version of the datile from dat-o-matic.
If you want to use your own, specify it with the --datfile
flag.
$ rom64 validate ~/Downloads/n64/Tsumi\ to\ Batsu\ -\ Hoshi\ no\ Keishousha\ \(Japan\).z64
Found 1 datfile entries for ROM serial 'NGUJ'
SHA-1 MATCH 581297B9D5C3A4C33169AE0AAE218C742CD9CBCF "Tsumi to Batsu - Hoshi no Keishousha (Japan).z64"
With this flag, after a ROM's hash has been validated against the datfile, the ROM file will be renamed to match what's in the datfile, if it doesn't already.
$ rom64 validate --rename-validated sm64.z64
Found 1 datfile entries for ROM serial 'NSME'
SHA-1 MATCH 9BEF1128717F958171A4AFAC3ED78EE2BB4E86CE "Super Mario 64 (USA).z64"
Renaming "sm64.z64" => "Super Mario 64 (USA).z64"
- Install Go for your platform.
- Fetch module dependencies:
go get -d .
make all
This project follows Semantic Versioning.
Git commit message should use Conventional Commits to have a clearly readable history to the point where changelogs/release notes can be generated automatically.