SkoolKit 8.0 has been released. At your earliest convenience, please head over to the download page, the Python Package Index, the Ubuntu PPA, or the Fedora copr repo to pick up a copy.

As has become customary with N.0 releases, this one brings changes that cause chaos by breaking compatibility with previous versions. Among the most disruptive of those changes are the eradication of skool file templates (and therefore, the dropping of support for GIF images, and the complete overhaul of HTML templates. On the other hand, if you never cared for skool file templates, have always scoffed at GIF images, and wouldn’t spit on an HTML template if it caught fire, then you’ll probably notice very little difference between this release and 7.2. In any case, for all the details on how SkoolKit 8 might break your disassembly, and some tips on how to fix it, see the migration guide.

As for new features, the aforementioned HTML templates now support three directives for conditionally including and repeating content: foreach, if and include. This means that you now have much finer control over how HTML pages are laid out, should you ever wish to exercise it. The introduction of these directives has also enabled me to reduce the number of HTML templates required to render all your disassembly content. Humour me for a moment while I relay some facts about the history of HTML templates in SkoolKit. I started developing them after 3.7 was released, and at one point there were 75 of them. Realising that 75 was an unmanageably large number, I eventually reduced it to 23 in time for the release of 4.0. Then that number crept back up 31 when 6.0 was released. But now, for the release of 8.0, I can proudly assert that the number has been reined in and reduced to 16. Smaller than 23 or 31, and a power of 2 to boot.

The other big new feature is that SkoolKit now has pluggable components. If you’ve ever been dissatisfied with how SkoolKit disassembles code, assembles skool files, generates control files, reads snapshots, converts the base or case of an instruction, or formats HTML templates, then you’ll be happy to hear that all you have to do to achieve satisfaction is learn Python if you haven’t already, and then plug in your own implementation of one or more of these functions. Sick of the Zilog Z80 and want SkoolKit to tear apart Motorola 6800 code instead? Go for it. Prefer octal to binary, decimal and hexadecimal, and frustrated that SkoolKit doesn’t support it? Now you can fix it. Annoyed that SkoolKit won’t read snapshots produced by your favourite but hopelessly obscure emulator? At this point, I’m sure you get the idea.

Also making the news in this release is the #PC macro - the first new macro since #RAW was introduced back in 6.4 over 18 months ago. Like #VERSION, it takes no arguments, but unlike #VERSION, it expands to the address of the closest instruction instead of the version number of SkoolKit. (I hope that comparison with the #VERSION macro has made its purpose and usage clear.) I expect #PC to be most convenient in instruction-level comments, particularly when used in conjunction with #PEEK, where it could replace addresses that would otherwise have to be hard coded.

Of course, there are several other changes in SkoolKit 8.0, most of which pose no danger at all to your existing disassemblies. Such as the ability to specify the characters used to render table borders in ASM mode, and the ability to specify a header prefix and suffix for every page (not just the home page). For more details on these and the other less attention-worthy changes in this release, I refer you to the changelog. Happy component plugging!