Changelog

10.2 (2026-11-07)

  • Dropped support for Python 3.10

  • Improved error handling when running SkoolKit commands, expanding skool macros, processing ASM directives, and parsing ref files

  • Added a <meta name="viewport" ... /> element to the Layout HTML template (to improve font sizes on small screens)

  • Adjusted the default HTML theme to reduce the need for horizontal scrolling on small screens

  • Added support to rzxplay.py for reading configuration from skoolkit.ini

  • Added the --ini and --show-config options to rzxplay.py (for setting the value of a configuration parameter and for showing all configuration parameter values)

  • Added the Screen, ScreenFps and ScreenScale configuration parameters for rzxplay.py (to specify whether and at what frame rate and scale factor to display screen contents)

  • Added support for negative ScreenFps values (for running rzxplay.py, tap2sna.py or trace.py at maximum speed while throttling screen updates to a specific rate)

  • Added support to rzxplay.py for configuring the format of the trace log file via the TraceHeader, TraceLine and TraceOperand configuration parameters

  • Added the Screen configuration parameter for tap2sna.py (to specify whether to display screen contents)

  • Added the TraceHeader configuration parameter for tap2sna.py (to specify the header for a trace log file)

  • Added support to tap2sna.py for writing a trace log to standard output

  • Added the --analyse option to tapinfo.py (for showing an analysis of the tape’s tones, pulse sequences and data blocks)

  • Added the --tape-skip option to tapinfo.py (for skipping one or more blocks on a tape)

  • The --map option of trace.py now updates an existing file instead of replacing it

  • Fixed how #PUSHS and #POPS copy and restore the RAM bank mapped to 0xC000-0xFFFF in a 128K memory snapshot

  • Fixed the bug that prevents bin2tap.py from setting the stack pointer to 0

  • Fixed how the --tape-stop option of tap2sna.py works with two input tapes

  • Fixed the bug that prevents tap2sna.py from performing RAM move operations on 128K snapshots

  • Fixed the bug that prevents the creation of an animated image with more than 255 frames

  • Fixed how the #FRAMES macro handles a frame appearing more than once with varying delay, x and y values

  • Fixed the bug that prevents a #LINK macro with blank link text from linking to a ListItems or BulletPoints box page entry

10.1 (2026-08-14)

  • Added the --screen option to tap2sna.py (to display screen contents while running)

  • Added the ScreenFps and ScreenScale configuration parameters for tap2sna.py (to specify the frame rate and scale factor when displaying screen contents)

  • Added the --volume option to trace.py (for setting the audio volume when writing a WAV file)

  • Added the vol parameter to the #AUDIO macro (to set the audio volume)

  • Added the --ay-mode option to trace.py (for setting the AY stereo mode when writing a WAV file)

  • Added the aymode parameter to the #AUDIO macro (to set the AY stereo mode)

  • Added the --ay-res option to trace.py (for setting the AY sampling resolution when writing a WAV file)

  • Added the ayres parameter to the #AUDIO macro (to set the AY sampling resolution)

  • Added the --cmio option to rzxplay.py (to enable simulation of memory and I/O contention and the MEMPTR register)

  • Added support for multiple colours in the border area of the screen displayed by rzxplay.py and trace.py

  • Made the AY audio writer a pluggable component

  • Made the screen a pluggable component

  • Fixed how trace.py sets the frame duration when the input file argument is ‘128’ or ‘+2’

  • Fixed how rzxinfo.py detects a signed RZX file and encrypted frames

  • Fixed the bug in sna2ctl.py that enables the RST handler when the comment generator is enabled

10.0 (2026-04-04)

  • Dropped support for Python 3.9

  • Added the --ay option to trace.py (for capturing AY audio when writing a WAV file)

  • Added the ay parameter to the #AUDIO macro (to set whether AY audio is captured)

  • Added the --beeper option to trace.py (for capturing beeper audio as well when --ay is specified)

  • Added the bpr parameter to the #AUDIO macro (to set whether beeper audio is captured along with AY audio)

  • Added support for the MEMPTR register to CMIOSimulator and CCMIOSimulator

  • Added the memptr parameter to the #SIM macro (to set the MEMPTR register)

  • snapinfo.py now shows the MEMPTR register value in SZX snapshots

  • Added support to trace.py for setting the MEMPTR register before execution begins, for reading and writing MEMPTR in SZX snapshots, and for tracing its value via the r[memptr] replacement field in the TraceLine* configuration parameters

  • Added support to tap2sna.py for setting the MEMPTR register in SZX snapshots, and for tracing its value via the r[memptr] replacement field in the TraceLine configuration parameter

  • Added support to bin2sna.py and snapmod.py for setting the MEMPTR register in SZX snapshots

  • Added the TraceHeader and TraceHeader2 configuration parameters for trace.py (to specify headers to print before a trace)

  • Added support to the #AUDIO macro for keyword arguments

  • Added support to rzxplay.py for ignoring any snapshots after the first one (which is useful for playing some RZX files created by the Fuse emulator)

  • Added a border area to the screen displayed by rzxplay.py and trace.py

  • Updated the comments generated for ‘IN r,(C)’ immediately after ‘LD BC,$XXFE’ and ‘IN A,($FE)’ immediately after ‘LD A,n’ when a single half-row of the keyboard is read

  • Updated the default values of ContentionBegin, ContentionEnd and InterruptDelay in the [AudioWriter] section

  • Added support for multiple values to the InterruptDelay parameter in the [AudioWriter] section

  • Fixed the bug in CSimulator that restricts the timeout simulated load configuration parameter to a maximum value of 1227 seconds

  • Fixed how tap2sna.py handles zero-length pulses in the encodings of 0s and 1s in a PZX DATA block

Older versions