A suite of tools for creating disassemblies of ZX Spectrum games.
rzxplay.py
command (for playing an RZX file)rzxinfo.py
command (for showing the blocks in or extracting the snapshots from an RZX file)sna2ctl.py
for reading code execution maps produced by rzxplay.py
tap2sna.py
for TZX block type 0x15 (direct recording)tapinfo.py
now shows info for TZX block type 0x15 (direct recording)trace.py
for executing machine code in +2 snapshotspython
simulated LOAD configuration parameter to tap2sna.py
(for forcing usage of the pure Python Z80 simulator even if the C version is available)--python
option to trace.py
(for forcing usage of the pure Python Z80 simulator even if the C version is available)#FONT
, #SCR
and #UDG
macros create frames with incorrect graphic contenttrace.py
stop too soon when the --max-tstates
option is usedsnapmod.py
for modifying SZX snapshots and 128K snapshotsbin2sna.py
for writing 128K snapshots (by using the --page
and --bank
options, or by providing a 128K input file)bin2tap.py
for writing 128K TAP files (by using the --7ffd
, --banks
and --loader
options)bin2sna.py
, snapmod.py
, tap2sna.py
and trace.py
for modifying 128K RAM banks (via the --move
, --poke
, --ram move
and --ram poke
options)#BANK
macro (for switching the RAM bank that is mapped to 49152-65535)@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)--banks
option to skool2bin.py
(for processing @bank
directives and writing RAM banks 0-7 to a 128K file)cmio
simulated LOAD configuration parameter to tap2sna.py
(to specify whether to simulate memory and I/O contention)--cmio
option to trace.py
(to enable simulation of memory and I/O contention)cmio
parameter to the #AUDIO
, #SIM
and #TSTATES
macros (to specify whether to simulate memory and I/O contention)execint
parameter to the #AUDIO
, #SIM
and #TSTATES
macros (to specify whether to simulate the execution of interrupt routines)tstates
parameter to the #SIM
macro (to set the value of the simulator's clock)iff
parameter to the #SIM
macro (to set whether interrupts are enabled)im
parameter to the #SIM
macro (to set the interrupt mode)stop
parameter of the #SIM
macro optional#AUDIO
, #SIM
and #TSTATES
macros for executing code in a 128K memory snapshottrace.py
handles the value of the SP register in a 128K SNA filetap2sna.py
and trace.py
log timestamps when an interrupt occurstap2sna.py
and trace.py
execute code in a simulator--basic
option of snapinfo.py
fail when the value of PROG is 65535M
directive from being repeated in a control file looptap2sna.py
now performs a simulated LOAD by default, and will also overwrite an existing snapshot by defaultmachine
simulated LOAD configuration parameter to tap2sna.py
(to specify whether to simulate a 48K or a 128K Spectrum)load
simulated LOAD configuration parameter to tap2sna.py
(to specify an alternative command line to use to load the tape)polarity
simulated LOAD configuration parameter to tap2sna.py
(to specify the EAR bit reading produced by the first pulse on the tape)in-flags
simulated LOAD configuration parameter to tap2sna.py
(to specify how to handle 'IN' instructions)tap2sna.py
is now optionalDefaultSnapshotFormat
configuration parameter for tap2sna.py
(to specify the default output snapshot format)tap2sna.py
for register pairs (r[bc]
, r[de]
etc.) in the TraceLine
configuration parameterantirom
, ernieware
and housenka
tape-sampling loop acceleratorstap2sna.py
when accelerator=list
trace.py
for executing machine code in 128K snapshotstrace.py
for reading configuration from skoolkit.ini
--ini
and --show-config
options to trace.py
(for setting the value of a configuration parameter and for showing all configuration parameter values)--no-interrupts
option to trace.py
(to prevent the execution of interrupt routines, which are now executed by default)bin2sna.py
, tap2sna.py
and trace.py
for writing SZX snapshotsbin2sna.py
and tap2sna.py
for setting the fe
hardware state attribute (i.e. the last value written to port 0xFE in SZX snapshots)#AUDIO
macro for passing delays through a moving average filter (which can produce higher quality audio, especially for multi-channel tunes)N
directive 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 namessnapinfo.py
now shows the current AY register in 128K SZX and Z80 snapshotsH
and A
for the @assemble
directive to 2tap2sna.py
from loading a tape that has a hash character (#
) in its filenamefinish-tape
simulated LOAD configuration parameter to tap2sna.py
(to specify whether to finish the tape before stopping the simulation at the given start address)contended-in
simulated LOAD configuration parameter to tap2sna.py
(to specify whether to interpret 'IN A,($FE)' instructions in the address range $4000-$7FFF as reading the tape)accelerate-dec-a
simulated LOAD configuration parameter to tap2sna.py
(to specify whether to accelerate 'DEC A: JR NZ,$-1' or 'DEC A: JP NZ,$-1' delay loops)alkatraz-05
, alkatraz-09
, alkatraz-0a
, alkatraz-0b
, alternative
, alternative2
, boguslaw-juza
, bulldog
, crl
, crl2
, crl3
, crl4
, cybexlab
, d-and-h
, delphine
, design-design
, gargoyle2
, gremlin2
, microprose
, micro-style
, mirrorsoft
, palas
, raxoft
, realtime
, silverbird
, software-projects
, sparklers
, suzy-soft
, suzy-soft2
, tiny
, us-gold
and weird-science
tape-sampling loop accelerators for use with tap2sna.py
auto
and list
tape-sampling loop accelerator names for use with the accelerator
simulated LOAD configuration parameter of tap2sna.py
, and the ability to specify multiple acceleratorsbin2sna.py
, snapmod.py
and tap2sna.py
for setting the issue2
hardware state attribute (to enable or disable issue 2 emulation)tap2sna.py
for loading tapes that end with a pulse sequence instead of datatap2sna.py
for reading configuration from skoolkit.ini
--ini
and --show-config
options to tap2sna.py
(for setting the value of a configuration parameter and for showing all configuration parameter values)tap2sna.py
for configuring the format of a simulated LOAD trace log file via the TraceLine
and TraceOperand
configuration parameters--tape-analysis
option to tap2sna.py
(for showing an analysis of the tape's tones, pulse sequences and data blocks)snapinfo.py
now shows the value of the T-states counter and the issue 2 emulation flag in SZX and Z80 snapshotssnapinfo.py
from displaying the value of a floating-point number in a BASIC line when the accompanying numeric string is a single decimal point (.
)tap2sna.py
for TZX loops (block types 0x24 and 0x25), pauses (block types 0x10, 0x11, 0x14 and 0x20), and unused bits in data blocks (block types 0x11 and 0x14)tap2sna.py
now accelerates the simulation of tape-sampling loops in loading routines, and also simulates the execution of interrupt routines when interrupts are enabled--sim-load-config
option to tap2sna.py
(to set the value of a --sim-load
configuration parameter: accelerator
, fast-load
, first-edge
, pause
, timeout
, trace
)--tape-name
option to tap2sna.py
(to specify the name of a TAP/TZX file in a zip archive, in case there is more than one)--tape-start
and --tape-stop
options to tap2sna.py
(to start or stop the tape at a specific block number)--tape-sum
option to tap2sna.py
(to specify the MD5 checksum of the TAP/TZX file)tap2sna.py
for quoted arguments in an arguments file--interrupts
option to trace.py
(to enable the execution of interrupt routines)trace.py
now reads and writes the T-states counter in Z80 snapshots and reads the T-states counter in SZX snapshotsbin2sna.py
, snapmod.py
and tap2sna.py
for setting the tstates
hardware attribute (i.e. the T-states counter in Z80 snapshots)tapinfo.py
now shows full info for TZX block types 0x10 (standard speed data) and 0x11 (turbo speed data)--sim-load
option of tap2sna.py
transitions from a tape block that ends with data to the next block when there is no pause between them--find
option of snapinfo.py
from finding byte sequences below address 16384--find-text
option of snapinfo.py
from finding text strings below address 16384trace.py
command (for tracing the execution of machine code in a 48K memory snapshot)--sim-load
option of tap2sna.py
now performs any call
, move
, poke
and sysvars
operations specified by the --ram
option--sim-load
option of tap2sna.py
#SIM
macro#AUDIO
and #TSTATES
macros when they execute instructions in a simulatorMaxAmplitude
parameter from the [AudioWriter]
section#SIM
macro (for simulating the execution of machine code in the internal memory snapshot constructed from the contents of the skool file)#AUDIO
macro (for creating HTML5 <audio>
elements, and optionally creating audio files in WAV format)#TSTATES
macro (which expands to the time taken, in T-states, to execute one or more instructions)--sim-load
option to tap2sna.py
(to simulate a 48K ZX Spectrum running LOAD "")@rom
directive (for inserting a copy of the 48K ZX Spectrum ROM into the internal memory snapshot constructed from the contents of the skool file)AudioPath
parameter to the [Paths]
section (for specifying where the #AUDIO
macro should look for or create audio files by default)audio
template (for formatting the <audio>
element produced by the #AUDIO
macro)[AudioWriter]
section (for configuring audio files created by the #AUDIO
macro)--rebuild-audio
option to and the RebuildAudio
configuration parameter for skool2html.py
(to overwrite existing audio files)AudioFormats
parameter to the [Game]
section (for specifying the alternative audio file formats that the #AUDIO
macro should look for before creating a WAV file)--defb
option to sna2skool.py
(to disassemble as DEFB statements instead of as code)Timings
configuration parameter for sna2skool.py
(for showing instruction timings in the comment fields)flags
parameter to the #FOR
macro (for affixing commas to and replacing variable names in each separator)tap2sna.py
ignores a headerless block because no --ram load
options have been specified, it now prints a warningregister
ASM template so that it can handle empty register namesstop
value of the #FOR
macro is used even when it does not differ from start
by a multiple of step
#STR
macro (for retrieving the text string at a given address in the memory snapshot)#WHILE
macro (for repeatedly expanding macros until a conditional expression becomes false)#UDGS
macro (as an alternative to the #UDGARRAY
macro for creating an image of a rectangular array of UDGs)#DEF
macro for using replacement fields to represent the defined macro’s argument values, and for stripping leading and trailing whitespace from the defined macro’s output#LET
macro for defining dictionary variables--ram
option of tap2sna.py
for the call
operation (for calling a Python function to perform arbitrary manipulation of the memory snapshot)#CHR
macro (to produce a character in the UTF-8 encoding in HTML mode, and to map character codes 94, 96 and 127 to ‘↑’, ‘£’ and ‘©’)Expand
parameter to the [Config]
section (for specifying skool macros to be expanded during HTML writer initialisation)#INCLUDE
macro for combining the contents of multiple ref file sectionstindex
and alpha
parameters to the #COPY
macro (for specifying the transparent colour and its alpha value in the new frame)#LIST
or #TABLE
macro are expanded twice in HTML mode (which makes #RAW
ineffective)#OVER
macro (for superimposing one frame on another)#COPY
macro (for copying all or part of an existing frame into a new frame)#DEF
macro (as a more powerful alternative to the #DEFINE
macro, which is now deprecated)Wrap
configuration parameter for sna2skool.py
(for controlling whether to disassemble an instruction that wraps around the 64K boundary)RefFormat
configuration parameter for sna2skool.py
(for specifying the format of referrers in a comment that lists them for a routine or entry point)EntryLabel
and EntryPointLabel
configuration parameters for skool2asm.py
and skool2html.py
(for specifying the format of the default labels for routines and data blocks and their entry points)Address
configuration parameter for skool2asm.py
(for specifying the format of the default link text for the #R
macro)SnapshotReferenceOperations
parameter in the [skoolkit]
section of skoolkit.ini
is now interpreted as a list of regular expression patterns (which enables any type of instruction to be designated by the snapshot reference calculator as one whose address operand identifies an entry point in a routine or data block)[EntryGroups]
section and the Includes
parameter in [MemoryMap:*]
sectionscase
parameter to the #FORMAT
macro (for converting formatted text to lower case or upper case)DefaultDisassemblyStartAddress
parameter to the [skoolkit]
section of skoolkit.ini
(for specifying the address at which to start disassembling a snapshot when no control file is provided)InitModule
parameter to the [Config]
section (for specifying a Python module to import before the HTML writer class is imported)#PLOT
macro may have incorrect colours when converted to an imageM
directive in a control file is ignored when it is followed by a sub-block that has sublengths[EntryGroups]
section of the ref file) whose disassembly pages can be given custom titles and headersAddress
parameter to the [Game]
section (for specifying the format of address fields on disassembly pages and memory map pages, and of the default link text for the #R
macro)Length
parameter to the [Game]
section (for specifying the format of the new length attribute of entry objects in HTML templates, which is now used instead of size in the Length column on memory map pages)Peek
and Word
configuration parameters for snapinfo.py
(for specifying the format of each line of the output produced by the --peek
and --word
options)@expand
directive value over multiple lines by prefixing the second and subsequent lines with +
--ram
option of tap2sna.py
for the sysvars
operation (for initialising the system variables in a snapshot)DefmSize
configuration parameter for sna2skool.py
from 66 to 65; this makes it compliant with the default maximum line width of 79 defined by the LineWidth
configuration parametersna2skool.py
ignore a given start address below 16384 when converting a snapshot