Changelog¶
9.6 (2025-05-12)¶
tap2sna.py can now load from two tape files (e.g. when side 1 and side 2 of a tape are in separate files)
Added the
--pressoption to tap2sna.py (for pausing the tape and simulating keypresses before resuming)Added the
--tape-skipoption to tap2sna.py (for skipping one or more blocks on a tape)Added support to the
--ramoption of tap2sna.py for thepatchoperation (for applying a binary patch file)Changed the default value of the
accelerate-dec-asimulated LOAD configuration parameter for tap2sna.py from1to3Added the
activision,alternative3,audiogenic-0,audiogenic-1,codemasters,diver,gremlin2-0,gremlin2-1,kwc-0,kwc-1,mirrorsoft2andoperasofttape-sampling loop acceleratorsRemoved the
dinaload,gremlin2,housenka,suzy-softandsuzy-soft2tape-sampling loop acceleratorsAdded the
Screenconfiguration parameter for trace.py (to specify whether to display screen contents)Added the RST handler component
Added the
--handle-rstoption to sna2ctl.py and sna2skool.py (for activating the RST handler)Added the
HandleRSTconfiguration parameter for sna2ctl.py and sna2skool.py (to activate the RST handler)Fixed how tap2sna.py handles
--tape-stopfor PZX files that contain STOP blocksFixed the bug that prevents the
mreplacement field from being used in theTraceLineconfiguration parameter when tap2sna.py runs a custom LOAD command
9.5 (2025-01-28)¶
Dropped support for Python 3.8
Added the comment generator component
Added the
--commentsoption to sna2ctl.py and sna2skool.py (for generating instruction comments)Added the
Commentsconfiguration parameter for sna2ctl.py and sna2skool.py (to enable instruction comment generation)trace.py now responds to keypresses while running with screen contents displayed
Added the
--mapoption to trace.py (for writing a code execution map file)Added the
UserAgentconfiguration parameter for tap2sna.py (to specify the User-Agent header in HTTP/HTTPS requests)Added support to the #CALL macro for calling an arbitrary function
Added the
--patchoption to snapmod.py (for applying a binary patch file)The #REG macro now always renders the IXh, IXl, IYh and IYl registers with a lower case ‘h’ or ‘l’
Added the #FRAMES macro (as an alternative to the
#UDGARRAY*macro, which is now deprecated)Made the audio writer a pluggable component
Made the code map reader a pluggable component
Improved handling of TC2048, TC2068 and TS2068 Z80 snapshots
Fixed how trace.py builds a PNG image in 128K mode
Fixed the bug that prevents skool2asm.py, skool2bin.py and skool2html.py from handling an instruction that crosses the 64K boundary
Fixed how BIN expressions are evaluated in BASIC listings
9.4 (2024-10-05)¶
Added support to skool2bin.py for reading configuration from skoolkit.ini
Added the
--iniand--show-configoptions to skool2bin.py (for setting the value of a configuration parameter and for showing all configuration parameter values)Added support to skool2bin.py for padding the output with zeroes (as specified by the
PadLeftandPadRightconfiguration parameters)Added the
--screenoption to trace.py (for displaying screen contents while running)Added the
ScreenFpsandScreenScaleconfiguration parameters for trace.py (to specify the frame rate and scale factor when displaying screen contents)Added support to trace.py for writing a PNG file after code execution has completed
Added the
PNGScaleconfiguration parameter for trace.py (to specify the scale factor of the PNG image)Added support to trace.py for multiple output file arguments
snapinfo.py now shows AY register values in 128K SZX and Z80 snapshots and the last value written to port $FE in SZX snapshots
Added support to the #FOREACH macro for the
POKEnamespecial variableAdded support to the #LET macro for setting individual key-value pairs in dictionary variables
Added the
Downloadparameter to the [Game] section (for specifying a download message/link to appear in the footer of every page)Added the
LinkInternalOperandsMinDistanceparameter to the [Game] section (for avoiding hyperlinks to nearby instructions)Fixed how ADC and SBC instructions affect the half-carry flag
Fixed how ‘BIT n,(IX/Y+d)’ affects bits 3 and 5 of the flags in the C version of the Z80 simulator
Fixed how IX/IY offset addresses are calculated in the C version of the Z80 simulator
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 theTraceLineconfiguration parameterAdded support to trace.py for the
m(memory) replacement field in theTraceLine*configuration parametersAdded the
--stateoption 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
Opcodesconfiguration 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-startand--tape-stopoptions 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-textand--find-tileoptions of snapinfo.py now search all RAM banks in a 128K snapshot by defaultAdded support for path ID replacement fields in the
destDirparameter of items in the [Resources] sectionFixed the bug that prevents the
--regoption 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
pythonsimulated LOAD configuration parameter to tap2sna.py (for forcing usage of the pure Python Z80 simulator even if the C version is available)Added the
--pythonoption 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-tstatesoption is usedFixed 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
--pageand--bankoptions, or by providing a 128K input file)Added support to bin2tap.py for writing 128K TAP files (by using the
--7ffd,--banksand--loaderoptions)Added support to bin2sna.py, snapmod.py, tap2sna.py and trace.py for modifying 128K RAM banks (via the
--move,--poke,--ram moveand--ram pokeoptions)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
--banksoption to skool2bin.py (for processing @bank directives and writing RAM banks 0-7 to a 128K file)Added the
cmiosimulated LOAD configuration parameter to tap2sna.py (to specify whether to simulate memory and I/O contention)Added the
--cmiooption to trace.py (to enable simulation of memory and I/O contention)Added the
cmioparameter to the #AUDIO, #SIM and #TSTATES macros (to specify whether to simulate memory and I/O contention)Added the
execintparameter to the #AUDIO, #SIM and #TSTATES macros (to specify whether to simulate the execution of interrupt routines)Added the
tstatesparameter to the #SIM macro (to set the value of the simulator’s clock)Added the
iffparameter to the #SIM macro (to set whether interrupts are enabled)Added the
imparameter to the #SIM macro (to set the interrupt mode)Made the
stopparameter of the #SIM macro optionalAdded 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
--basicoption of snapinfo.py fail when the value of PROG is 65535Fixed 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
machinesimulated LOAD configuration parameter to tap2sna.py (to specify whether to simulate a 48K or a 128K Spectrum)Added the
loadsimulated LOAD configuration parameter to tap2sna.py (to specify an alternative command line to use to load the tape)Added the
polaritysimulated LOAD configuration parameter to tap2sna.py (to specify the EAR bit reading produced by the first pulse on the tape)Added the
in-flagssimulated 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
DefaultSnapshotFormatconfiguration 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 theTraceLineconfiguration parameterAdded the
antirom,erniewareandhousenkatape-sampling loop acceleratorsStatistics for ‘DEC A’ tape-sampling delay loops are now shown by tap2sna.py when
accelerator=listAdded support to trace.py for executing machine code in 128K snapshots
Added support to trace.py for reading configuration from skoolkit.ini
Added the
--iniand--show-configoptions to trace.py (for setting the value of a configuration parameter and for showing all configuration parameter values)Added the
--no-interruptsoption 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
fehardware 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
Ndirective at the start of a looptapinfo.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
HandAfor the @assemble directive to 2Fixed the bug that prevents tap2sna.py from loading a tape that has a hash character (
#) in its filename