Skip to content

Game Identification

This page details the hashing method used for each supported system:

NESlink

If the ROM starts with NES\1a($4E $45 $53 $1A), the first 16 bytes are ignored and the remaining file contents are hashed. If the ROM does not start with NES\1a ($4E $45 $53 $1A), the entire file is hashed.

Famicom Disk Systemlink

The entire file is hashed.

NOTE: As saving mutates disk data, local copies of loaded images are required to ensure that their hashes do not change across sessions.

SNESlink

If the size of the file is 512 bytes more than a multiple of 8K, the first 512 bytes are ignored and the remaining file contents are hashed. If the size of the file is not 512 bytes more than a multiple of 8K, the entire file is hashed.

N64link

The entire file is hashed.

This may result in three unique hashes for each game. The z64 extension is big endian (ABCD). The n64 extension is little endian (DCBA). And the v64 extension is middle endian (BADC).

GBlink

The entire file is hashed.

NOTE: RAVBA appears to 0-pad the data if the the size specified by the ROM (address $148) is larger than the file. I have yet to find a case where this occurs.

GBClink

The entire file is hashed.

NOTE: RAVBA appears to 0-pad the data if the the size specified by the ROM (address $148) is larger than the file. I have yet to find a case where this occurs.

GBAlink

The entire file is hashed.

VirtualBoylink

The entire file is hashed.

Master Systemlink

The entire file is hashed.

MegaDrive (Genesis)link

The entire file is hashed.

Sega 32Xlink

The entire file is hashed.

Sega CDlink

The first 512 bytes of track 0 are hashed. This contains the volume header and ROM header.

Immediately following those 512 bytes are an arbitrary amount of code that validates the region and loads the primary executable. Without processing the code, we cannot determine what additional file(s) to hash, so this was determined to be sufficient as an alternative to hashing the entire CD.

GameGearlink

The entire file is hashed.

Atari 2600link

The entire file is hashed.

Atari 7800link

The entire file is hashed.

Atari Lynxlink

If the ROM starts with LYNX\0, the first 64 bytes are ignored and the remaining file contents are hashed. If the ROM does not start with LYNX\0, the entire file is hashed.

ColecoVisionlink

The entire file is hashed.

NeoGeo Pocketlink

The entire file is hashed.

PCEngine (TurboGrafx16)link

The entire file is hashed.

PCEngine CDlink

TODO: I'm not really sure how this works. RAPCE hashes the "Mainboard Main ROM", but I couldn't get it to work. RALibRetro doesn't appear to hash anything, and there's no special code in RetroArch, so it would appear to be hashing the entire file, but which file? The zip is a bin/cue with multiple track files.

FBA (Arcade)link

The filename string without the extension (xxx.zip) is hashed. It is case-sensitive.

PC-8001 / PC-8801link

Load tape images and disk images loaded in drive 1 (program disk data) are fully hashed.

NOTE: As saving and other manipulations can mutate disk data, local copies of loaded images are required to ensure that their hashes do not change across sessions.

Apple IIlink

Disk images (both floppy and hard disks) loaded in drive 1 are fully hashed.

NOTE: As saving and other manipulations can mutate disk data, local copies of loaded images are required to ensure that their hashes do not change across sessions.

PlayStationlink

The primary executable and its name are hashed as follows: The SYSTEM.CNF file is loaded and parsed. The primary executable is identified by the BOOT= line within. The primary executable name (and it's path) are extracted from SYSTEM.CNF and written to a buffer The contents of the primary executable are appended to the buffer The buffer is hashed

Changeloglink

Last 10 changes on this page:

  • [2019-09-20 18:57] Jamiras: update Sega CD
  • [2019-09-02 12:33] Jamiras: Updated Game Identification (markdown)
  • [2019-02-17 21:16] Raphaël Zumer: Add Apple II
  • [2019-02-11 23:20] LodanZark: added the ($4E $45 $53 $1A) as complementary information, which it's the proper data found in the headers.
  • [2019-02-10 13:40] meleu: cosmetic
  • [2019-02-01 18:40] Jamiras: add ColecoVision
  • [2019-01-15 09:45] Raphaël Zumer: Update Lynx
  • [2019-01-04 17:41] meleu: cosmetic
  • [2019-01-04 17:41] meleu: reverting title changing for PC-8801/8801
  • [2019-01-04 17:39] meleu: making clear that arcade method is filename without the extension