I extensively rely on CRC32 hashes to identify files and their contents, it’s only a four byte number, so there’s four billion combinations, which means I may get a clash at some point, however, there’s only around 10,000 different files, ROMs, components etc. so I took a punt and basically with the likelihood of a clash at 400,000:1 I decided not to use a longer hash (like MD5 or SHA), this may come back to bite me, but it does make managing files less unwieldy.
The hash file begins 0xnnnnnnnn, where nnnnnnnn is the CRC32 of the thing it describes, I include a CRC32 command in case your system doesn’t have one, there are three types of hash files; Containers, ROMs and Components, these are all human-readable text files based on INI file format so you can create new ones, edit and update, read, convert etc. if you update Cap, I suggest you do not keep any old hashes as they could be updated.
Only hash files under “Capitoline Hashes” will be recognised by Cap.
If you add hashes after you start CapCLI then you must run loadhashes to refresh them
If you are using CapGUI you have to exit and restart the CapGui if you update them.
You can place hash files anywhere under “Capitoline Hashes” (or create new folders for your own), the folder names are just for convenience.
Feel free to read, copy, edit etc. as long as you don’t claim my standard ones as your own.
A container is a ROM or ROMs in a different format, encrypted or bundled up or for use with special loading tools, Cap allows you to load these, but it needs a hash file describing the format so it knows how to load them, Cap uses the CRC32 hash of the contain to identify which container hash it should use.
Note, the container hash files are “guidelines”, some of the info is purely documentary and if something in the hash file contradicts reality then Cap may ignore information, load the wrong thing or even get confused and crash, it tries to auto correct, but that’s not always possible.
Here’s examples of each type of container, for more info about the formats themselves, have a look at “Kickstart -> Digital Formats”
1Mb CD32 [Description] Title=CD32 Standard rom Text=Interleaved Format=CD32Encoded FileType=Extended/Kickstart [Display] Colour=0x555555 Icon=13 [Components] Kickstart=0,524288,EmbeddedKickstart:0x1e62d4a5.Kickstart v3.1 r40.60 (1993)(Commodore)(CD32) Extended=524288,524288,EmbeddedKickstart:0x87746be2.CD32 Extended-ROM r40.60 (1993)(Commodore)(CD32) Kickstart (Floppy, ADF) [Description] Title=Kickstart-Disk v1.3 r34.5 (1987)(Commodore)(A1000) Text=None RomBase=0x00fc0000 FileType=Kickstart-Disk [Components] Kickstart=512,262144,EmbeddedKickstart:0xc4f0f55f.Kickstart v1.3 r34.5 (1987)(Commodore)(A1000) Amiga Forever (Cloanto) [Description] Title=Kickstart v3.1 r40.68 (1993)(Commodore)(A4000)[encrypted, needs rom.key] Text=Supplied by cloanto Format=Cloanto.0x869ae1b1 FileType=Kickstart [Display] Colour=0x555555 Icon=13 [Components] Header=0,11,CloantoHeader:0x414D49524F4D5459504531 Kickstart=11,524288,EmbeddedKickstart:0x43b6dd22.Kickstart v3.1 r40.68 (1993)(Commodore)(A4000) ReKick/ReCode [Description] Title=Kickstart 3.1 (40.60) A600 ReKick/ReCode Text=Early version of Kickstart 3.1, has A600 in the name the in the leaked 3.1 os-source, but that might just mean 68000 only code, this ROM file contains a small header then the 0xDEADFEED encrypted ROM, which has been designed to be softloaded into $200000 RomBase=0x200000 FileType=Kickstart Format=os-source.ReCode [Display] Colour=0x555555 Icon=13 [Components] Kickstart=108,524288,EmbeddedKickstart:0x3928913e.kick.a600_20.40.60 KickIt [Description] Title=Kickstart v2.0 beta 5 r36.067 (1990-05)(Commodore)(beta)[KickIt] Text=Developer ROM designed to be softloaded RomBase=0x200000 FileType=KickItKickstart [Components] Header=0,8,KickItHeader:0x0000000000080000 Kickstart=8,524288,EmbeddedKickstart:0xe0aa5472.Kickstart v2.0 beta 5 r36.067 (1990-05)(Commodore)(beta) Superkick (Hard Drive Files) [Description] Title=Kickstart v3.1 r40.038 (1993-04)(Commodore)(A3000)(beta)[with bonus] Text=Superkickstart file for A3000 with Kickstart 1.4 ROMs FileType=Kickstart/Bonus [Display] Colour=0x555555 Icon=13 [Components] Kickstart=0,524288,EmbeddedKickstart:0xe24d337f.Kickstart v3.1 r40.038 (1993-04)(Commodore)(A3000)(beta)[with bonus] Bonus=524288,2284,EmbeddedKickstart:bc753ed9.Amiga 3000 Bonus (v. 2.x).rom Superkick (Floppy, ADF) [Description] Title=Superkickstart Disk (v1.3 r34.005/v2.04 r37.175) Text=None RomBase=0xfc0000 FileType=SuperKickstart [Components] Kickstart1=1024,262144,EmbeddedKickstart:0xe0f37258.Kickstart v1.3 r34.005 (1987-12)(Commodore)(A3000)[!] Bonus1=791552,20992,EmbeddedKickstart:0x64b9a9fc.Bonus1.3 Kickstart2=263168,524288,EmbeddedKickstart:0x234a7233.Kickstart v2.04 r37.175 (1991-05)(Commodore)(A3000) Bonus2=787456,2560,EmbeddedKickstart:0x5d20fbf0.Bonus2.x
ROM file hash file names start with the CRC32 hash of the ROM (so they can be matched up) and describe the components that make up a ROM.
The Components are listed in the order they appear in the ROM, with a starting position and size, followed by the hash of the component – this is critical as the component hash describes what relocs are contained in the component.
[Description] Title=Kickstart v3.1 r40.68 (1993)(Commodore)(A1200)[!].rom Text=This was the general release of Kickstart 3.1 for the A1200, seen in the last Commodore released A1200 and all the Escom A1200s RomBase=0xF80000 FileType=Kickstart [Components] exec.library=0,14264,Library:0x3afb2905.exec_40.10_(15.7.93) expansion.library=14264,2776,Library:0x7f3943c2.expansion_40.2_(9.3.93) romboot=17040,3864,Library:0x584ddd57.romboot graphics.library=20904,103556,Library:0x53c282ce.graphics_40.24_(18.5.93) dos.library=124460,39948,Library:0x2f69d3eb.dos_40.3_(1.4.93) filesystem=164408,24480,Library:0x1f0afe04.fs_40.1_(15.2.93) console.device=188888,15492,Library:0xa2a0d825.console_40.2_(5.3.93) layers.library=204380,12724,Library:0xd9aacb47.layers_40.1_(15.2.93) scsi.device=217104,10652,Library:0x75094a7b.scsidisk_40.12_(21.12.93) con-handler=227756,10180,Library:0x14413061.con-handler_40.2_(12.5.93) gameport.device=237936,5684,Library:0x58f0555d.gameport_40.1_(8.3.93) audio.device=243620,4256,Library:0x66da7c86.audio_37.10_(26.4.91) card.resource=247876,3044,Library:0x5cf13e5b.cardres_40.4_(4.5.93) utility.library=250920,2492,Library:0x9eb9840a.utility_40.1_(10.2.93) battclock.resource=253412,2412,Library:0xd1c49d01.battclock_39.3_(20.4.92) carddisk.device=255824,2352,Library:0xf1492cfe.carddisk_40.1_(12.2.93) ramlib=258176,1060,Library:0x8b7c4683.ramlib_40.2_(5.3.93) ramdrive.device=259236,1524,Library:0xc39bf1cb.ramdrive_39.35_(21.5.92) cia.resource=260760,1008,Library:0x595381d5.cia_39.1_(10.3.92) misc.resource=261768,176,Library:0x5e1deb17.misc_37.1_(8.1.91) workbench.task=261944,196,Library:0xbb2fc663.wbtag_39.1_(20.4.92) Kickity-Split=262144,8,Kickity-Split:0x11114ef900f80002 potgo.resource=262152,312,Library:0x183c43e4.potgo_37.4_(28.1.91) FileSystem.resource=262464,416,Library:0x3c37f268.filesysres_40.1_(15.2.93) disk.resource=262880,840,Library:0x89a9a08c.disk_37.2_(21.4.91) mathffp.library=263720,1180,Library:0xee6af990.mathffp_40.1_(16.3.93) timer.device=264900,3564,Library:0x886913b1.timer_39.4_(29.7.92) mathieeesingbas.library=268464,3748,Library:0x25559846.mathieeesingbas_40.4_(16.3.93) keymap.library=272212,3200,Library:0xecd74357.keymap_40.4_(12.3.93) bootmenu=275412,5648,Library:0x22cca123.bootmenu_40.5_(17.3.93) trackdisk.device=281060,7432,Library:0xba2ad971.trackdisk_40.1_(12.3.93) icon.library=288492,9264,Library:0x64d0b492.icon_40.1_(15.2.93) ram-handler=297756,9260,Library:0xfde5d96f.ram_39.4_(9.8.92) shell=307092,17632,Library:0x371281f0.shell_40.2_(4.3.93) intuition.library=324724,104864,Library:0xed1af101.intuition_40.85_(5.5.93) gadtools.library=429588,23444,Library:0x22a7f238.gadtools_40.4_(24.5.93) workbench.library=453032,70664,Library:0x0af008ea.wb_40.5_(24.5.93) battmem.resource=523696,484,Library:0x9b18e90c.battmem_39.2_(6.3.92) Checksum=524264,4,Checksum:0x87ba7a3e Size=524268,4,Size:0x00080000 Vectors=524272,16,Vectors:0x00180019001a001b001c001d001e001f
For hash files with “FileType=Loadable Library” this describes a (relocatable) loadable component, the hash value is the CRC32 of the entire loadable library if it was extracted from the ROM.
The key elements here are the ROMTAG=n which describes how many bytes before the ROMTAG belong to the component, the Size=n which is the total number of bytes consumed by the component in the ROM and RELOCS=n (along with the [RELOC32] section) this indicates where in the component a ROM address will need to be relocated if the component is moved.
# cat 0x4f8511ed.fs_36.289_(20_Sep_1990) [Description] Title=fs 36.289 (20 Sep 1990) Text=filesystem Size=21368 ROMTAG=28 RELOCS=5 FileType=Loadable Library [Display] Colour=0x555555 Icon=153 [RELOC32] RELOC=30 RELOC=34 RELOC=42 RELOC=46 RELOC=50