First things first, after you download the code, you can extract it anywhere you like, but you must run CapCLI from the Capitoline directory, and you must copy your ROMs, ADFs and Components into the local directories before you run the code

cd Capitoline
./capcli.Linux or ./capcli.MacOS or capcli.exe (run the code applicable to Windows/Linux/Macos)

The command line gives you everything that the GUI can do (plus some other commands), but it’s a bit more laborious, you can use the Windows CMD window (capcli.exe), the MacOS terminal (capcli.MacOs) and the Linux shell (capcli.Linux), they all work the same I’ve tried to list the command in the order you might use them.



Not always that much help as I haven’t kept it up to date – I’ll come back to this

ROM Commands

loadrom /path/to ROM
Loads a file as if it was a Kickstart file, if you have a hash file for the kickstart then it will also understand all the individual components

saverom [filename]
Saves the current ROM, note this is just the current ROM, no byteswap or split, if you want to do more complex things like multiple ROM banks for dual eprom machines with byte swap etc. then you need to create a rom profile and save that instead, this just saves the raw data of one ROM bank.

newrom [size] [fill character]
Create a new (empty) ROM, valid sizes are nnnn (a number of bytes), nk (n kb, e.g. 512k – the most useful), nm (n mb, e.g. 1m), the fill character will be used to blank the space, this is often 0/0x00, or 255/0xFF

rombase 0xnnnnnnnn
This sets the default ROMBASE for the ROM, this is critical when you add components, this is used to write the relocs correctly, you can change the ROMBASE after adding components, but only loaded libraries are repatched, kickity-split, extended ROMHEADERs and SKSize is not repatched – I haven’t finished it!
Oh, and repatching to a different ROMBASE only works on ROMs that are completely understood (e.g. you have a hash file, or built it from scratch).

List the roms that you have loaded (or created).

rom [n]
Display the current ROM (if you don’t give a number) or switch to “ROM n” if you do, the ROM numbers are given by the “roms” command

romprofile, saveprofile
If you want to save a ROM for burning to EPROMs then it’s probably best (and easiest) to create and save a profile, this defines the motherboard socket layout and the files you need to create.
Have a look at Features -> Saving ROMs for more info

# Features -> Saving ROMs

romprofile, saveprofile

Component Commands

Add a component into the current working ROM

# Add a loadable library or raw binary chunk to a ROM
add /path/to/component
add Components/2.x/0x1d6028d1.kickmenu_36.134_(20.3.90)

# Add a component from another ROM file
add /path/to/ROM component
add "ROMs/TOSEC.Firmware/Kickstart v2.05 r37.350 (1992-04)(Commodore)(A600HD)[!].rom" scsi.device 

# Add a file from a loaded ADF
add ADF:/path/in/loaded/ADF
add ADF:/l/intuition.library

# Add n bytes of unallocated space
add n
add 76

delete [n]
Deletes component n from your ROM, the space previously occupied is wiped (so it’s not just a logical delete).

savecomponent [n]
Extracts a component (n) to your current savepath, if you don’t specify a number, then it will save them all, this is similar to the “romsplit” tool

add [kickity-split|size|checksum|vectors]
Add a standard component, note these aren’t library components so don’t have relocs, it’s best to add these before you add any libraries

Manipulate a components start, end or its relocs

# Change where a component starts
editcomponent n start=n

# Change where a component ends
editcomponent n end=n

# Add a reloc to a component
editcomponent n addreloc n

# Delete a reloc from a component
editcomponent n deletereloc n

# Add anything that vaguely looks like a reloc to a component
editcomponent n addrelocs

Hash Commands

savecomponenthash [n]
Saves the component hash(es) to your current savepath, if you don’t specify a number, then it will save them all.

Saves the ROM definition hash file, this will list all the known components.

This changes the component hash name, to give it a standard name based on the internal name of the component and a hash (the hash is dependent on the code and any identified relocs, so you need to run this after changing the size or relocs of a component), this name is used when you save the component or component hash.

Analysis Commands


ADF Commands

Have a look at Features -> ADF reader features for more info

# Features -> ADF reader

loadadf, adflist, adfsavefile, adfsavezip

Patching Commands

Have a look at Features -> Patcher for more info

# Features -> Patcher

patch, find, findopcode, alias

Had enough?

# Quit from CapCLI

CapCLI> exit
Scroll to Top