SkoolKit

Spectrum game disassembly toolkit

Hex mania

0xB00B.html

SkoolKit 4.3, as I write this, has just been released. Copies are available from the usual places, such as the download page, the Python Package Index, and the Ubuntu PPA.

If you’re a long-time SkoolKit user (which you probably aren’t), you might remember the release of SkoolKit 2.1, which brought with it support for hexadecimal disassemblies for the first time ever. No longer did you have to tolerate reading (or writing) ‘43981’ when what you really wanted to read (or write) was ‘$ABCD’. However, there was a small gap in this so-called ‘support for hexadecimal disassemblies’: disassembly page filenames and address anchors were still obstinately decimal. If you noticed this omission, you might have been left feeling disappointed, perhaps even sick to your stomach. For that, I belatedly apologise.

Enter SkoolKit 4.3, and the CodeFiles and AddressAnchor parameters (in the [Paths] and [Game] sections respectively). By cunningly crafting the values of these parameters, you can produce HTML disassemblies with hexadecimal filenames and address anchors (with or without a ‘0x’ prefix). Or, if you’re in the mood, you can have filenames and address anchors in binary format. The choice is, as the saying goes, yours.

Another long overdue feature in 4.3 is support for block start comments. It is now possible to place a comment above the first instruction in a routine, after the register section (if there is one). Until now I’ve always appended such introductory comments to the routine description, which ends up looking a little odd if there’s a register section blocking the line of sight to the first instruction (as it were). Now I look at it, this is a feature that really should have been in SkoolKit 1.0. Better late than never, I suppose.

Elsewhere, the #FONT, #SCR and #UDG macros have picked up the ability to create frames for an animated image (an ability previously restricted to the #UDGARRAY macro). And sna2skool.py can now write skool files narrower or wider than 79 characters by using the new --line-width option - something you youngsters with your wide screens and your high-resolution displays will appreciate, no doubt.

Finally, a couple of (deprecation) warnings. Starting with SkoolKit 4.3, the preferred way of writing an ASM directive (e.g. @start) in a skool file is without the ‘; ‘ prefix. In addition, the preferred way of writing an ASM directive in a control file is by using the new ’@’ directive. The old ways of writing an ASM directive in a skool or control file will be supported for the remainder of the 4.x series, but are deprecated. Support will be removed in 5.0, whenever that arrives.

To sum up, then, grab a copy of SkoolKit 4.3 and get your hex on.

Be in the loop

2 bytes, 1 word

SkoolKit 4.2 has been released. Copies are available, as predictably as ever, from the download page, the Python Package Index, or the Ubuntu PPA.

Of all the new features that find themselves in 4.2, I think I’d have to rank control directive loops as the mainest. Have you ever been working your way through the bits and bytes of a data block, and suddenly realised that they are arranged in a repeating pattern, such as 20 groups each containing two bytes followed by a word? If so, that moment of inspiration was probably quickly followed by a feeling of frustration at having to type out 20 groups of control directives that differ only in their addresses. Well, in 4.2, the ‘L’ (loop) directive comes to the rescue. It can repeat the control directives in an address range any number of times you wish - automatically adjusting the addresses for each repetition, of course. So rather than typing out 20 groups of control directives, you can type a single ‘L’ directive instead.

In the shadow of the ‘L’ directive lurk the table, table_cell, table_header_cell and table_row HTML templates, and also the list and list_item HTML templates. Since HTML templates were introduced in version 4.0, SkoolKit’s dirty little secret was that there were still snippets of hard coded HTML buried in the codebase, specifically in the areas of table-building and list-building. Not any longer, though. Now the format of tables and lists is also under your direct control. Add the relevant [Template:table*] or [Template:list*] sections to your ref file, and you are sorted.

Getting back to control files, the second mainest new feature there is that the location of @ignoreua directives can now be preserved. Before 4.2, SkoolKit assumed that a @ignoreua directive preserved in a control file applied to the following instruction-level comment. But now, by the use of a suitable suffix on the @ignoreua directive’s address, it’s possible to specify that it applies to an entry title, an entry description, a register description section, a mid-block comment, or a block end comment instead.

And that’s about it for the mainest of the main new features. For details of the other changes since 4.1.1, there is always the changelog. Grab SkoolKit 4.2 today, and stay in the loop.

Miner updates

Room 47

Just a quick note to inform the Willy watchers among you that the Manic Miner disassembly and the Jet Set Willy disassembly have been updated, and those updates are available now, from this very website.

The updates are mostly new trivia entries, such as the one about room 47 in Jet Set Willy. Really, this trivia entry should have been in the original release: calling the disassembly ‘complete’ without mentioning the unusedness, emptiness and inaccessibility of room 47 somewhere on the Trivia page was audacious, if not downright dishonest. Anyway, the omission has now been rectified, so all is good.

In addition, both manic_miner.skool and jet_set_willy.skool can be converted to ASM files (by skool2asm.py) without producing any warnings, and jet_set_willy.skool also contains @bfix directives for those bugs that have known, simple fixes.

And that’s about it. See the changelog page for each disassembly for details on the new trivia entries, and the download page to grab copies for offline viewing.