Changelog ========= 9.1 (2024-02-03) ---------------- * Added support to :ref:`snapmod.py` for modifying SZX snapshots and 128K snapshots * Added support to :ref:`bin2sna.py` for writing 128K snapshots (by using the ``--page`` and ``--bank`` options, or by providing a 128K input file) * Added support to :ref:`bin2tap.py` for writing 128K TAP files (by using the ``--7ffd``, ``--banks`` and ``--loader`` options) * Added support to :ref:`bin2sna.py`, :ref:`snapmod.py`, :ref:`tap2sna.py` and :ref:`trace.py` for modifying 128K RAM banks (via the ``--move``, ``--poke``, ``--ram move`` and ``--ram poke`` options) * Added the :ref:`BANK` macro (for switching the RAM bank that is mapped to 49152-65535) * Added the :ref:`asm-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 :ref:`skool2bin.py` (for processing :ref:`asm-bank` directives and writing RAM banks 0-7 to a 128K file) * Added the ``cmio`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify whether to simulate memory and I/O contention) * Added the ``--cmio`` option to :ref:`trace.py` (to enable simulation of memory and I/O contention) * Added the ``cmio`` parameter to the :ref:`AUDIO`, :ref:`SIM` and :ref:`TSTATES` macros (to specify whether to simulate memory and I/O contention) * Added the ``execint`` parameter to the :ref:`AUDIO`, :ref:`SIM` and :ref:`TSTATES` macros (to specify whether to simulate the execution of interrupt routines) * Added the ``tstates`` parameter to the :ref:`SIM` macro (to set the value of the simulator's clock) * Added the ``iff`` parameter to the :ref:`SIM` macro (to set whether interrupts are enabled) * Added the ``im`` parameter to the :ref:`SIM` macro (to set the interrupt mode) * Made the ``stop`` parameter of the :ref:`SIM` macro optional * Added support to the :ref:`AUDIO`, :ref:`SIM` and :ref:`TSTATES` macros for executing code in a 128K memory snapshot * Fixed how :ref:`trace.py` handles the value of the SP register in a 128K SNA file * Fixed how :ref:`tap2sna.py` and :ref:`trace.py` log timestamps when an interrupt occurs * Fixed how interrupts are accepted when :ref:`tap2sna.py` and :ref:`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 :ref:`snapinfo.py` fail when the value of PROG is 65535 * Fixed the bug that prevents an :ref:`mDirective` from being repeated in a :ref:`control file loop ` 9.0 (2023-11-04) ---------------- * Dropped support for Python 3.7 * :ref:`tap2sna.py` now performs a :ref:`simulated LOAD ` by default, and will also overwrite an existing snapshot by default * Added the ``machine`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify whether to simulate a 48K or a 128K Spectrum) * Added the ``load`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify an alternative command line to use to load the tape) * Added the ``polarity`` simulated LOAD configuration parameter to :ref:`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 :ref:`tap2sna.py ` (to specify how to handle 'IN' instructions) * The output snapshot argument of :ref:`tap2sna.py` is now optional * Added the ``DefaultSnapshotFormat`` configuration parameter for :ref:`tap2sna.py ` (to specify the default output snapshot format) * Added support to :ref:`tap2sna.py ` for register pairs (``r[bc]``, ``r[de]`` etc.) in the ``TraceLine`` configuration parameter * Added the ``antirom``, ``ernieware`` and ``housenka`` tape-sampling loop :ref:`accelerators ` * Statistics for 'DEC A' tape-sampling delay loops are now shown by :ref:`tap2sna.py` when ``accelerator=list`` * Added support to :ref:`trace.py` for executing machine code in 128K snapshots * Added support to :ref:`trace.py ` for reading configuration from `skoolkit.ini` * Added the ``--ini`` and ``--show-config`` options to :ref:`trace.py` (for setting the value of a configuration parameter and for showing all configuration parameter values) * Added the ``--no-interrupts`` option to :ref:`trace.py` (to prevent the execution of interrupt routines, which are now executed by default) * Added support to :ref:`bin2sna.py`, :ref:`tap2sna.py` and :ref:`trace.py` for writing SZX snapshots * Added support to :ref:`bin2sna.py` and :ref:`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 :ref:`AUDIO` macro for passing delays through a moving average filter (which can produce higher quality audio, especially for multi-channel tunes) * Added support to :ref:`control directive loops ` for avoiding repetition of an ``N`` directive at the start of a loop * :ref:`tapinfo.py` now shows the LINE number (if present) for 'Program:' header blocks, and renders BASIC tokens in header block names * :ref:`snapinfo.py` now shows the current AY register in 128K SZX and Z80 snapshots * Changed the default value of ``H`` and ``A`` for the :ref:`assemble` directive to 2 * Fixed the bug that prevents :ref:`tap2sna.py` from loading a tape that has a hash character (``#``) in its filename 8.10 (2023-06-17) ----------------- * Added the ``finish-tape`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify whether to finish the tape before stopping the simulation at the given start address) * Added the ``contended-in`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify whether to interpret 'IN A,($FE)' instructions in the address range $4000-$7FFF as reading the tape) * Added the ``accelerate-dec-a`` simulated LOAD configuration parameter to :ref:`tap2sna.py ` (to specify whether to accelerate 'DEC A: JR NZ,$-1' or 'DEC A: JP NZ,$-1' delay loops) * Added the ``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 :ref:`tap2sna.py ` * Added the special ``auto`` and ``list`` tape-sampling loop accelerator names for use with the ``accelerator`` simulated LOAD configuration parameter of :ref:`tap2sna.py `, and the ability to specify multiple accelerators * Added support to :ref:`bin2sna.py`, :ref:`snapmod.py` and :ref:`tap2sna.py` for setting the ``issue2`` hardware state attribute (to enable or disable issue 2 emulation) * Added support to :ref:`tap2sna.py` for loading tapes that end with a pulse sequence instead of data * Added support to :ref:`tap2sna.py ` for reading configuration from `skoolkit.ini` * Added the ``--ini`` and ``--show-config`` options to :ref:`tap2sna.py` (for setting the value of a configuration parameter and for showing all configuration parameter values) * Added support to :ref:`tap2sna.py ` for configuring the format of a simulated LOAD trace log file via the ``TraceLine`` and ``TraceOperand`` configuration parameters * Added the ``--tape-analysis`` option to :ref:`tap2sna.py` (for showing an analysis of the tape's tones, pulse sequences and data blocks) * :ref:`snapinfo.py` now shows the value of the T-states counter and the issue 2 emulation flag in SZX and Z80 snapshots * Fixed the bug that prevents :ref:`snapinfo.py` from displaying the value of a floating-point number in a BASIC line when the accompanying numeric string is a single decimal point (``.``) * Fixed how the value of the R register is set in a Z80 snapshot when bit 7 is reset * Fixed how tape-sampling loop accelerators affect the carry flag after at least one pass through the loop 8.9 (2023-02-19) ---------------- * Added support to :ref:`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) * :ref:`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 * Added the ``--sim-load-config`` option to :ref:`tap2sna.py` (to set the value of a ``--sim-load`` configuration parameter: ``accelerator``, ``fast-load``, ``first-edge``, ``pause``, ``timeout``, ``trace``) * Added the ``--tape-name`` option to :ref:`tap2sna.py` (to specify the name of a TAP/TZX file in a zip archive, in case there is more than one) * Added the ``--tape-start`` and ``--tape-stop`` options to :ref:`tap2sna.py` (to start or stop the tape at a specific block number) * Added the ``--tape-sum`` option to :ref:`tap2sna.py` (to specify the MD5 checksum of the TAP/TZX file) * Added support to :ref:`tap2sna.py` for quoted arguments in an arguments file * Added the ``--interrupts`` option to :ref:`trace.py` (to enable the execution of interrupt routines) * :ref:`trace.py` now reads and writes the T-states counter in Z80 snapshots and reads the T-states counter in SZX snapshots * Added support to :ref:`bin2sna.py`, :ref:`snapmod.py` and :ref:`tap2sna.py` for setting the ``tstates`` hardware attribute (i.e. the T-states counter in Z80 snapshots) * :ref:`tapinfo.py` now shows full info for TZX block types 0x10 (standard speed data) and 0x11 (turbo speed data) * Fixed how the Z80 instruction set simulator updates the A and R registers in the 'LD A,R' and 'LD R,A' instructions * Fixed how the Z80 instruction set simulator handles a CALL instruction that overwrites its own address operand * Fixed how a Z80 snapshot memory block that ends with a single 0xED byte is decompressed * Fixed how the ``--sim-load`` option of :ref:`tap2sna.py` transitions from a tape block that ends with data to the next block when there is no pause between them * Fixed the bug that prevents the ``--find`` option of :ref:`snapinfo.py` from finding byte sequences below address 16384 * Fixed the bug that prevents the ``--find-text`` option of :ref:`snapinfo.py` from finding text strings below address 16384 8.8 (2022-11-19) ---------------- * Added the :ref:`trace.py` command (for tracing the execution of machine code in a 48K memory snapshot) * The ``--sim-load`` option of :ref:`tap2sna.py` now performs any ``call``, ``move``, ``poke`` and ``sysvars`` operations specified by the ``--ram`` option * Improved the performance of the ``--sim-load`` option of :ref:`tap2sna.py` * Improved the performance of the :ref:`SIM` macro * Improved the performance of the :ref:`AUDIO` and :ref:`TSTATES` macros when they execute instructions in a simulator * Removed the ``MaxAmplitude`` parameter from the :ref:`ref-AudioWriter` section 8.7 (2022-10-08) ---------------- * Dropped support for Python 3.6 * Added the :ref:`SIM` macro (for simulating the execution of machine code in the internal memory snapshot constructed from the contents of the skool file) * Added the :ref:`AUDIO` macro (for creating HTML5 ``