SkoolKit is a collection of utilities that can be used to disassemble a Spectrum game (or indeed any piece of Spectrum software written in machine code) into a format known as a skool file. Then, from this skool file, you can use SkoolKit to create a browsable disassembly in HTML format, or a re-assemblable disassembly in ASM format. So the skool file is - from start to finish as you develop it by organising and annotating the code - the common ‘source’ for both the reader-friendly HTML version of the disassembly, and the developer- and assembler-friendly ASM version of the disassembly.
The latest version of SkoolKit is 7.2. It was released on 2019-06-02.
- convert a TAP or TZX file into a ‘pristine’ snapshot (using tap2sna.py)
- disassemble SNA, Z80 and SZX snapshots as well as raw memory files
- distinguish code from data by using a code execution map produced by an emulator
- build still and animated PNG/GIF images from graphic data in the game snapshot (using the #UDG, #UDGARRAY, #FONT and #SCR macros)
- create hyperlinks between routines and data blocks that refer to each other (by use of the #R macro in annotations, and automatically in the operands of CALL and JP instructions)
- neatly render lists of bugs, trivia and POKEs on separate pages (using [Bug::], [Fact::] and [Poke::] sections in a ref file)
- produce ASM files that include bugfixes declared in the skool file (with @ofix, @bfix and other ASM directives)
- produce TAP files from assembled code (using bin2tap.py)
Quick start guide
SkoolKit includes fairly detailed documentation, but if you want to get up and running quickly, here goes.
To convert a SNA, Z80 or SZX snapshot of a Spectrum game into a skool file (so that it can be converted into an HTML or ASM disassembly), copy the snapshot to the SkoolKit directory and run:
$ ./sna2skool.py game.z80 > game.skool
To split the disassembly up into code and data blocks, you’ll need a control file.
To turn this skool file into an HTML disassembly:
$ ./skool2html.py game.skool
To turn it into an ASM file that can be fed to an assembler:
$ ./skool2asm.py game.skool > game.asm