Changelog¶
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