Latest changes
- sync with nointro. no whatsnew. by etabeta
- added missing svn properties to a few lists. by etabeta
Hash files are used in MESS to document and provide additional information about the software running on a particular system.
In MAME, which focuses on arcade machines, each driver runs only the software provided on the ROMs. In MESS, things work differently: albeit each machine has a large library of “official” software written by the manufacturer itself, third-party licensees or independent software houses, there is often an even larger collection of home-brew software which doesn't have the same status of “officiality”.
MESS will not enforce on the user any limitation about the origin of the software which runs on a particular driver (apart from bugs and unimplemented features!). However, in the spirit of fully documenting a system, the developers mantain a set of hash files in order to identify “official” software.
Hash files are actually XML files, with the .hsi extension. An hash file is a list of XML elements describing a piece of software. As an example, the hash file relative to the Entex Adventure Vision system is listed here. The choice is not accidental, since only four cartridges were officially manufactured before the system was retired.
<hashfile> <!-- Entex AdventureVision Cartridge CRC List --> <!-- Compiled by Chris Henry --> <!-- Note: This list is provided as a record of known dumps for this system. --> <!-- These checksums have not been validated and cannot be assumed correct. --> <!-- They are provided here as a database to help the emulation of this system. --> <!-- crc = Game Name | Year | Manufacturer --> <hash crc32="3e280096" name="Defender (6075)"> <year>1982</year> <manufacturer>Entex Industries</manufacturer> </hash> <hash crc32="c70d4028" name="Space Force (6078)"> <year>1982</year> <manufacturer>Entex Industries</manufacturer> </hash> <hash crc32="b6045c9e" name="Super Cobra (6077)"> <year>1982</year> <manufacturer>Entex Industries</manufacturer> </hash> <hash crc32="33a23eba" name="Turtles (6076)"> <year>1982</year> <manufacturer>Entex Industries</manufacturer> </hash> </hashfile>
When the user mounts an image file, MESS will search the directories referenced by the hashpath option for a file named <systemname>.hsi. Once located such a file, MESS will compare the CRC-32 of the image against the CRC-32's listed in the hash file.
If a match is found, the relevant informations will be displayed in the “System Information” panel.
Due to the nature of the matching algorithm, this method is best suited for “read-only” images, such as cartridges - when an image is modified, e.g. a disk image on which the user writes a file, its CRC-32 changes and doesn't match anymore the entries in the .hsi file.
Anyway, this fact doesn't prevent the user from creating or extending an .hsi to his liking: as a reference, this is the hash file specification as reconstructed from the source:
<?xml version="1.0" encoding="UTF-8"?> <hashfile> <hash crc32="" md5="" sha1="" name="" type=""> <year> ... </year> <manufacturer> ... </manufacturer> <status> ... </status> <extrainfo> ... </extrainfo> </hash> </hashfile>
where:
crc32, md5, sha1 are the file image checksumsname is a long, descriptive nametype is unknown (image type?)<year> … </year> is the production year<manufacturer> … </manufacturer> is the manufacturer of the software<status> … </status> is the emulation status<extrainfo> … </extrainfo> is a free-format field that usually is parsed by the driver for informations such as mappers, banking scheme, etc.Unknown tags are silently ignored.
Of course the users are encouraged to share their definitions with the maintainers of the official .hsi files (regardless of the support type: cartridge, disk, cassette, etc.) as long as the dump comes from the original support.