SkoolKit

Spectrum game disassembly toolkit

Of bases and characters

Bases

SkoolKit 4.4 has been released. You may obtain a copy, as usual, from the download page, the Python Package Index, or the Ubuntu PPA.

First, a little SkoolKit history, to provide some context for the main new feature in this release. Back in SkoolKit 3.7, support for binary numbers was added, along with the ability to specify (in a control file or skool file template) the base of numeric values in DEFB, DEFM, DEFS and DEFW statements: binary, decimal or hexadecimal. Which was all well and good, but it left regular assembly language instructions out in the cold. You could disassemble 3E24 as DEFB $3E,%00100100 all day long if you wished, but if you wanted LD A,%00100100 instead, you were out of luck. Cue sad trombone.

Suffice it to say that this sorry situation has been rectified in SkoolKit 4.4. If you want 3E24 to disassemble as LD A,%00100100, you can now do so to your heart’s content. What’s more, if you want 3E24 to disassemble as LD A,"$" instead, you may also do that until the cows come home. (Of course, the options to disassemble 3E24 as LD A,36 or LD A,$24 are also still available.) All that’s required is the careful use of ‘b’ (binary), ‘c’ (character), ‘d’ (decimal) or ‘h’ (hexadecimal) prefixes in the control file or skool file template. Cue fanfare.

In other news - and in the “this really should have been in SkoolKit 1.0” department - 4.4 brings support for @ssub block directives. The only excuse I can offer for not implementing them sooner is that I never found a pressing need for them in any of the disassemblies I’ve worked on. But there have been @bfix, @ofix, @rfix, @isub and @rsub block directives since day one, so it only makes sense to add @ssub block directives and round out the family. I hope someone finds them useful, even if I have yet to.

Also possibly in the “this really should have been in SkoolKit 1.0 (or thereabouts)” department, sna2skool.py now has an -e/--end option to complement the -s/--start option it’s had since SkoolKit 1.0.4. Many’s the time I’ve wanted to disassemble just a bit of a snapshot (without a control file) instead of everything up to the end of RAM, and now I can do that by using --start and --end together. I encourage you to try it, too.

And that’s about it. For details of other changes less interesting than these, you can consult the changelog. Then get your copy of SkoolKit 4.4 and start disassembling FE21 as CP "!" like there’s no tomorrow.

Recess repetition

PLAYTIME PLAYTIME

Having picked up the disassembly release ball last month, I am now running with it. The next batch of disassemblies to see a release is the Microsphere trio: Skool Daze, Back to Skool and Contact Sam Cruise.

As for the changes, the TL;DR version is that Skool Daze got five new trivia entries, Back to Skool got four new trivia entries and a new bug, and Contact Sam Cruise is the real loser with just one new POKE. Since the bug and the trivia entries are more interesting than the POKE (sorry Sam), I’ll concentrate on those for the remainder of this post.

So, the bug in Back to Skool. It’s a pretty good one, though you have to do some hard work up front in order to reap the benefits. First, get the key to the safe - a process that involves a water pistol, water, sherry, cups, stinkbombs, the bike, a conker, mice (possibly) and the frog. Now make your way into the head’s study and stand under the safe. Next, wait until ERIC’s lines total reaches 10000 or more, and then quickly jump up to the safe before MR WACKER has a chance to expel him. After that, ERIC is free to cause mischief without fear of expulsion until his lines total rolls over the maximum 655300 mark back round to zero, and then past 10000 again. Nice, eh? For details on what makes this possible, see the bug description.

And now Skool Daze. While playing that game, have you noticed how the kids all try to sit at back of the class when the teacher arrives at the doorway, which means that EINSTEIN always ends up in the back seat? I have too, but I’ve also noticed that occasionally EINSTEIN will sit somewhere else - for example, just behind the front seat in the Map Room. Having wondered why for the last 30 years or thereabouts, I finally investigated, and you can find the results of that investigation in Seat selection. Mystery solved.

Another thing about Skool Daze: every now and then in the timetable, there is one playtime followed immediately by another. In fact, this happens a total of five times. However, the bell doesn’t ring between those playtimes, so effectively they are double-length playtimes rather than distinct playtimes. One rather shocking consequence of this is that the bell rings only 59 times throughout the entire timetable of 64 periods. For more information on these anomalies, see Double playtimes.

And that’s all the disassembly news (again). For details on the other trivia entries and the POKE, see all the changelogs.

Animation aberration

Animated platform

In what I confidently predict will be a year in which I release updates to some of the disassemblies that are hosted on this site, the first ones to see a new release are Manic Miner and Jet Set Willy.

First of all, Manic Miner’s bugs page has swelled by 50% to an impressive three entries. The new entry on the block concerns the platform in Amoebatrons’ Revenge whose third row of pixels is animated, as if it were a conveyor. This is one of those bugs that I don’t remember whether I ever noticed back in the day. But I noticed it again recently, and have duly documented it for your edification.

Next, I have provided a POKE for each game that gives Willy unlimited time to complete his task. Use it either with the infinite lives POKE for complete invincibility, or without for the freedom to navigate the caverns and rooms tantalisingly mixed with a sense of impending doom lest you mess up too many jumps that require perfect precision.

And that’s all the disassembly news (for now).