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 :ref:`t_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 :ref:`rzxplay.py <rzxplay-conf>` for reading configuration
  from `skoolkit.ini`
* Added the ``--ini`` and ``--show-config`` options to :ref:`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 :ref:`rzxplay.py <rzxplay-conf>` (to specify whether and at
  what frame rate and scale factor to display screen contents)
* Added support for negative ``ScreenFps`` values (for running
  :ref:`rzxplay.py`, :ref:`tap2sna.py` or :ref:`trace.py` at maximum speed
  while throttling screen updates to a specific rate)
* Added support to :ref:`rzxplay.py <rzxplay-conf>` for configuring the format
  of the trace log file via the ``TraceHeader``, ``TraceLine`` and
  ``TraceOperand`` configuration parameters
* Added the ``Screen`` configuration parameter for
  :ref:`tap2sna.py <tap2sna-conf>` (to specify whether to display screen
  contents)
* Added the ``TraceHeader`` configuration parameter for
  :ref:`tap2sna.py <tap2sna-conf>` (to specify the header for a trace log file)
* Added support to :ref:`tap2sna.py` for writing a trace log to standard output
* Added the ``--analyse`` option to :ref:`tapinfo.py` (for showing an analysis
  of the tape's tones, pulse sequences and data blocks)
* Added the ``--tape-skip`` option to :ref:`tapinfo.py` (for skipping one or
  more blocks on a tape)
* The ``--map`` option of :ref:`trace.py` now updates an existing file instead
  of replacing it
* Fixed how :ref:`PUSHS` and :ref:`POPS` copy and restore the RAM bank mapped
  to 0xC000-0xFFFF in a 128K memory snapshot
* Fixed the bug that prevents :ref:`bin2tap.py` from setting the stack pointer
  to 0
* Fixed how the ``--tape-stop`` option of :ref:`tap2sna.py` works with two
  input tapes
* Fixed the bug that prevents :ref:`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 :ref:`FRAMES` macro handles a frame appearing more than once
  with varying ``delay``, ``x`` and ``y`` values
* Fixed the bug that prevents a :ref:`LINK` macro with blank link text from
  linking to a ``ListItems`` or ``BulletPoints`` :ref:`box page <boxpages>`
  entry

10.1 (2026-08-14)
-----------------
* Added the ``--screen`` option to :ref:`tap2sna.py` (to display screen
  contents while running)
* Added the ``ScreenFps`` and ``ScreenScale`` configuration parameters for
  :ref:`tap2sna.py <tap2sna-conf>` (to specify the frame rate and scale factor
  when displaying screen contents)
* Added the ``--volume`` option to :ref:`trace.py` (for setting the audio
  volume when writing a WAV file)
* Added the ``vol`` parameter to the :ref:`AUDIO` macro (to set the audio
  volume)
* Added the ``--ay-mode`` option to :ref:`trace.py` (for setting the AY stereo
  mode when writing a WAV file)
* Added the ``aymode`` parameter to the :ref:`AUDIO` macro (to set the AY
  stereo mode)
* Added the ``--ay-res`` option to :ref:`trace.py` (for setting the AY sampling
  resolution when writing a WAV file)
* Added the ``ayres`` parameter to the :ref:`AUDIO` macro (to set the AY
  sampling resolution)
* Added the ``--cmio`` option to :ref:`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 :ref:`rzxplay.py` and :ref:`trace.py`
* Made the :ref:`AY audio writer <ayAudioWriter>` a pluggable component
* Made the :ref:`screen <screen>` a pluggable component
* Fixed how :ref:`trace.py` sets the frame duration when the input file
  argument is '128' or '+2'
* Fixed how :ref:`rzxinfo.py` detects a signed RZX file and encrypted frames
* Fixed the bug in :ref:`sna2ctl.py` that enables the :ref:`rstHandler` when
  the :ref:`comment generator <commentGenerator>` is enabled

10.0 (2026-04-04)
-----------------
* Dropped support for Python 3.9
* Added the ``--ay`` option to :ref:`trace.py` (for capturing AY audio when
  writing a WAV file)
* Added the ``ay`` parameter to the :ref:`AUDIO` macro (to set whether AY
  audio is captured)
* Added the ``--beeper`` option to :ref:`trace.py` (for capturing beeper audio
  as well when ``--ay`` is specified)
* Added the ``bpr`` parameter to the :ref:`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 :ref:`SIM` macro (to set the MEMPTR
  register)
* :ref:`snapinfo.py` now shows the MEMPTR register value in SZX snapshots
* Added support to :ref:`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 :ref:`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 :ref:`bin2sna.py` and :ref:`snapmod.py` for setting the
  MEMPTR register in SZX snapshots
* Added the ``TraceHeader`` and ``TraceHeader2`` configuration parameters for
  :ref:`trace.py <trace-conf>` (to specify headers to print before a trace)
* Added support to the :ref:`AUDIO` macro for keyword arguments
* Added support to :ref:`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 :ref:`rzxplay.py` and
  :ref:`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 :ref:`ref-AudioWriter` section
* Added support for multiple values to the ``InterruptDelay`` parameter in the
  :ref:`ref-AudioWriter` section
* Fixed the bug in CSimulator that restricts the ``timeout`` simulated load
  configuration parameter to a maximum value of 1227 seconds
* Fixed how :ref:`tap2sna.py` handles zero-length pulses in the encodings of 0s
  and 1s in a PZX DATA block

Older versions
--------------
.. toctree::
   :maxdepth: 1

   changelog9
   changelog8
   changelog7
   changelog6
   changelog5
   changelog4
   changelog3
   changelog2
   changelog1
