Changelog

9.3 (2024-08-10)

  • Added support to tapinfo.py and tap2sna.py for reading PZX files

  • Added support to bin2tap.py for writing PZX files

  • Added support to tap2sna.py for the m (memory) replacement field in the TraceLine configuration parameter

  • Added support to trace.py for the m (memory) replacement field in the TraceLine* configuration parameters

  • Added the --state option to trace.py (for setting hardware state attributes before code execution begins)

  • Added support to trace.py for writing a WAV file after code execution has completed

  • Added the Opcodes configuration parameter to sna2skool.py (for specifying additional opcode sequences to disassemble)

  • Added the @bytes directive (for specifying the byte values to which an instruction should assemble)

  • Added the --tape-start and --tape-stop options to tapinfo.py (for specifying the block numbers at which to start or stop showing info)

  • tapinfo.py now shows info for TZX block types 0x18 (CSW recording) and 0x2B (set signal level), and also recognises the deprecated TZX block types 0x16, 0x17, 0x34 and 0x40

  • The --find, --find-text and --find-tile options of snapinfo.py now search all RAM banks in a 128K snapshot by default

  • Added support for path ID replacement fields in the destDir parameter of items in the [Resources] section

  • Fixed the bug that prevents the --reg option of trace.py from accepting hexadecimal values prefixed by ‘0x’

9.2 (2024-05-11)

  • Added a Z80 instruction set simulator implemented in C (as a faster alternative to the pure Python Z80 simulator)

  • Added the rzxplay.py command (for playing an RZX file)

  • Added the rzxinfo.py command (for showing the blocks in or extracting the snapshots from an RZX file)

  • Added support to sna2ctl.py for reading code execution maps produced by rzxplay.py

  • Added support to tap2sna.py for TZX block type 0x15 (direct recording)

  • tapinfo.py now shows info for TZX block type 0x15 (direct recording)

  • Added support to trace.py for executing machine code in +2 snapshots

  • Added the python simulated LOAD configuration parameter to tap2sna.py (for forcing usage of the pure Python Z80 simulator even if the C version is available)

  • Added the --python option to trace.py (for forcing usage of the pure Python Z80 simulator even if the C version is available)

  • Fixed the lazy evaluation bug that can make the #FONT, #SCR and #UDG macros create frames with incorrect graphic content

  • Fixed the bug that can make trace.py stop too soon when the --max-tstates option is used

  • Fixed the contention pattern for the OUTI/OUTD/OTIR/OTDR instructions

9.1 (2024-02-03)

  • Added support to snapmod.py for modifying SZX snapshots and 128K snapshots

  • Added support to bin2sna.py for writing 128K snapshots (by using the --page and --bank options, or by providing a 128K input file)

  • Added support to bin2tap.py for writing 128K TAP files (by using the --7ffd, --banks and --loader options)

  • Added support to bin2sna.py, snapmod.py, tap2sna.py and trace.py for modifying 128K RAM banks (via the --move, --poke, --ram move and --ram poke options)

  • Added the #BANK macro (for switching the RAM bank that is mapped to 49152-65535)

  • Added the @bank directive (for specifying the RAM bank that is mapped to 49152-65535, and for populating a RAM bank from the contents of another skool file)

  • Added the --banks option to skool2bin.py (for processing @bank directives and writing RAM banks 0-7 to a 128K file)

  • Added the cmio simulated LOAD configuration parameter to tap2sna.py (to specify whether to simulate memory and I/O contention)

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

  • Added the cmio parameter to the #AUDIO, #SIM and #TSTATES macros (to specify whether to simulate memory and I/O contention)

  • Added the execint parameter to the #AUDIO, #SIM and #TSTATES macros (to specify whether to simulate the execution of interrupt routines)

  • Added the tstates parameter to the #SIM macro (to set the value of the simulator’s clock)

  • Added the iff parameter to the #SIM macro (to set whether interrupts are enabled)

  • Added the im parameter to the #SIM macro (to set the interrupt mode)

  • Made the stop parameter of the #SIM macro optional

  • Added support to the #AUDIO, #SIM and #TSTATES macros for executing code in a 128K memory snapshot

  • Fixed how trace.py handles the value of the SP register in a 128K SNA file

  • Fixed how tap2sna.py and trace.py log timestamps when an interrupt occurs

  • Fixed how interrupts are accepted when tap2sna.py and trace.py execute code in a simulator

  • Fixed how the Z80 instruction set simulator updates bit 2 of the flags register when executing an ‘LD A,I’ or ‘LD A,R’ instruction just before an interrupt is accepted

  • Fixed the bug that makes the --basic option of snapinfo.py fail when the value of PROG is 65535

  • Fixed the bug that prevents an M directive from being repeated in a control file loop

9.0 (2023-11-04)

  • Dropped support for Python 3.7

  • tap2sna.py now performs a simulated LOAD by default, and will also overwrite an existing snapshot by default

  • Added the machine simulated LOAD configuration parameter to tap2sna.py (to specify whether to simulate a 48K or a 128K Spectrum)

  • Added the load simulated LOAD configuration parameter to tap2sna.py (to specify an alternative command line to use to load the tape)

  • Added the polarity simulated LOAD configuration parameter to tap2sna.py (to specify the EAR bit reading produced by the first pulse on the tape)

  • Added the in-flags simulated LOAD configuration parameter to tap2sna.py (to specify how to handle ‘IN’ instructions)

  • The output snapshot argument of tap2sna.py is now optional

  • Added the DefaultSnapshotFormat configuration parameter for tap2sna.py (to specify the default output snapshot format)

  • Added support to tap2sna.py for register pairs (r[bc], r[de] etc.) in the TraceLine configuration parameter

  • Added the antirom, ernieware and housenka tape-sampling loop accelerators

  • Statistics for ‘DEC A’ tape-sampling delay loops are now shown by tap2sna.py when accelerator=list

  • Added support to trace.py for executing machine code in 128K snapshots

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

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

  • Added the --no-interrupts option to trace.py (to prevent the execution of interrupt routines, which are now executed by default)

  • Added support to bin2sna.py, tap2sna.py and trace.py for writing SZX snapshots

  • Added support to bin2sna.py and tap2sna.py for setting the fe hardware state attribute (i.e. the last value written to port 0xFE in SZX snapshots)

  • Added support to the #AUDIO macro for passing delays through a moving average filter (which can produce higher quality audio, especially for multi-channel tunes)

  • Added support to control directive loops for avoiding repetition of an N directive at the start of a loop

  • tapinfo.py now shows the LINE number (if present) for ‘Program:’ header blocks, and renders BASIC tokens in header block names

  • snapinfo.py now shows the current AY register in 128K SZX and Z80 snapshots

  • Changed the default value of H and A for the @assemble directive to 2

  • Fixed the bug that prevents tap2sna.py from loading a tape that has a hash character (#) in its filename

Older versions