Control freak
SkoolKit 6.3 has been released. Copies are, as you read this, rolling off the assembly lines in the usual locations: the download page, the Python Package Index, the Ubuntu PPA, and the Fedora copr repo.
Arriving only 7 weeks after 6.2, but still packing one of the largest changelogs in SkoolKit history, this new version of your favourite Spectrum disassembly toolkit brings 4 new ASM directives, 3 enhancements to existing ASM directives, 2 new command options, 3 bug fixes, and a whole bunch of other stuff. Given this embarrassment of riches, it’s difficult to know where to start.
So let’s start with the new ASM directives. The first three are @defb
,
@defs
and @defw
, which mimic DEFB
, DEFS
and DEFW
statements without
having to appear anywhere in the memory map, and also override the contents of
the memory snapshot. Now just a minute, you may be thinking. Isn’t the purpose
of these directives already served by data definition
entries? To which
I would respond: Yes, but hold on. The @def*
directives are no mere cheap
imitation of ‘d’ blocks. Unlike ‘d’ blocks, they can be preserved in a control
file, and will override the contents of the snapshot when sna2skool.py
is
reading them from a control file.
While you ponder the significance of that nugget of info, let me introduce the
fourth new ASM directive: @remote
. It creates a remote
entry that enables JR
,
JP
and CALL
instructions to hyperlink across skool files. By now, you might
have guessed the main advantage of using @remote
over the traditional ‘r’
block. Yes, it can be preserved in a control file. Clearly, the ability to be
preserved in a control file is a big theme in 6.3. (SkoolKit historians may
also like to note that @remote
is uncannily similar to the !refs
directive in SkoolKit
1.x.)
Still on the subject of ASM directives, the @label
directive can (and should)
now be used to emulate the (now redundant) @nolabel
directive by providing a
blank label: @label=
. Also, the @org
directive no longer requires an
address: it defaults to the address of the next instruction, as you might
expect. And finally, the @assemble
directive has picked up two new abilities:
it can specify what to convert in HTML mode and ASM mode separately, and switch
off conversion entirely. Conversion is also now switched off entirely by
default in ASM mode, which means skool2asm.py
should run a little faster.
Let’s finish up with some commentary on the new command options. First,
bin2sna.py
now has a --poke
option, which can be useful for POKEing the
system variables in a binary file that doesn’t provide its own. And
tap2sna.py
has a --user-agent
option for setting the user agent when making
HTTP requests. By default, tap2sna.py
sends no User-Agent header, but if you
run into a website that expects one, --user-agent
is your friend.
So there we have it. For details on all the other new features and fixes, I
advise you to take a gander at the
changelog. After that, I suggest you rip
out all the ‘d’ blocks, ‘r’ blocks, @nolabel
directives and addressful @org
directives from your skool files, and stomp them into the dust before providing
the 6.3-style replacements. Good times!