# SkoolKit 4.x changelog

## 4.5 (2015-07-04)

- Added support to tap2sna.py for TZX block type 0x14 (pure data), for loading the first and last bytes of a tape block (which are usually, but not always, the flag and parity bytes), and for modifying memory with XOR and ADD operations

- Added the `--clear` option to bin2tap.py (to use a CLEAR command in the BASIC loader and leave the stack pointer alone)

- Added the `--end` option to bin2tap.py and the ability to convert SNA, SZX and Z80 snapshots

- Added `--start` and `--end` options to skool2asm.py, skool2ctl.py and skool2sft.py

- The `--start` and `--end` options of sna2skool.py now take effect when reading a control file or a skool file template

- Added support to skool2ctl.py and skool2sft.py for preserving characters in DEFW statements (e.g. `DEFW "!"`)

- Added support for characters in DEFS statements (e.g. `DEFS 10,"!"`)

- Fixed how tap2sna.py compresses a RAM block that contains a single `ED` followed by five or more identical values (e.g. `ED0101010101`)

- Fixed the erroneous replacement of DEFS operands with labels

- Fixed how instruction-level comments that contain braces are restored from a control file

- Fixed the handling of terminal compound sublengths on ‘S’ directives (e.g. `S 30000,10,5:32`)

## 4.4 (2015-05-23)

- Added support to control files and skool file templates for specifying that numeric values in instruction operands be rendered as characters or in a specific base

- Added support for @ssub block directives

- Added the `--end` option to sna2skool.py (for specifying the address at which to stop disassembling)

- Added the `--ctl-hex-lower` option to sna2skool.py (for writing addresses in lower case hexadecimal format in the generated control file)

- Added the `--hex-lower` option to skool2ctl.py and skool2sft.py (for writing addresses in lower case hexadecimal format)

- Fixed the parsing of DEFB and DEFM statements that contain semicolons

- Fixed the base conversion of `LD (HL),n` instructions that contain extraneous whitespace (e.g. `LD ( HL ),5`)

- Fixed the erroneous replacement of RST operands with labels in HTML output

- Fixed the handling of uncompressed version 1 Z80 snapshots by sna2skool.py

## 4.3 (2015-02-14)

- Added support for block start comments (which appear after the register section and before the first instruction in a routine or data block)

- Added the `CodeFiles` parameter to the [Paths] section (for specifying the format of a disassembly page filename based on the address of the routine or data block)

- Added the `AddressAnchor` parameter to the [Game] section (for specifying the format of the anchors attached to instructions on disassembly pages and entries on memory map pages)

- The #FONT, #SCR and #UDG macros now have the ability to create frames for an animated image

- Added the `--line-width` option to sna2skool.py (for specifying the maximum line width of the skool file)

- Writing an ASM directive in a skool file can now be done by starting a line with `@`; writing an ASM directive by starting a line with `; @` is deprecated

- Added the `@` directive for declaring ASM directives in a control file; the old style of declaring ASM directives (`; @directive:address[=value]`) is deprecated

- Fixed the flip_udgs() and rotate_udgs() methods on HtmlWriter so that they work with a UDG array that contains the same UDG in more than one place

- Fixed the bug that prevents register descriptions from being HTML-escaped

- Fixed the erroneous substitution of address labels in instructions that have 8-bit numeric operands

## 4.2 (2014-12-07)

- Added support for control directive loops using the `L` directive

- Added support to control files for preserving the location of @ignoreua directives

- Each image macro now has the ability to specify alt text for the `<img>` element it produces

- Added support for splitting register descriptions over multiple lines

- skool2asm.py now warns about unconverted addresses in register descriptions, and the @ignoreua directive can be used to suppress such warnings

- Added the table, table_cell, table_header_cell and table_row templates (for formatting tables produced by the #TABLE macro)

- Added the list and list_item templates (for formatting lists produced by the #LIST macro)

- Fixed the bug that prevents the expansion of skool macros in the intro text of a `Changelog:*` section

## 4.1.1 (2014-09-20)

- Updated links to SkoolKit’s new home at skoolkit.ca

- Added example control and ref files for Hungry Horace

- Removed the Manic Miner disassembly from the SkoolKit distribution; it is now being developed separately here

## 4.1 (2014-08-30)

- Added the `--search` option to skool2html.py (to add a directory to the resource search path)

- Added the `--writer` option to skool2html.py (for specifying the HTML writer class to use)

- Added the `--writer` option to skool2asm.py (for specifying the ASM writer class to use)

- Added the `LinkInternalOperands` parameter to the [Game] section (for specifying whether to hyperlink instruction operands that refer to an address in the same entry)

- Register sections in `b`, `g`, `s`, `t`, `u` and `w` blocks are now included in the output of skool2asm.py and skool2html.py

- Fixed how the address ‘0’ is rendered in HTML output when converted to decimal or hexadecimal

- Fixed the bug that creates a broken hyperlink in a DEFW statement or LD instruction that refers to the address of an ignored entry

- Removed the Jet Set Willy disassembly from the SkoolKit distribution; it is now being developed separately here

## 4.0 (2014-05-25)

- Every HTML page is built from templates defined in [Template:*] sections in the ref file

- Added support for keyword arguments to the #FONT, #SCR, #UDG and #UDGARRAY macros

- Added the `mask` parameter to the #UDG and #UDGARRAY macros (for specifying the type of mask to apply)

- Added support for defining page headers in the [PageHeaders] section of the ref file

- Added the `--ref-file` and `--ref-sections` options to skool2html.py (to show the entire default ref file or individual sections of it)

- Added the `EntryDescriptions` parameter to the [MemoryMap:*] section (for specifying whether to display entry descriptions on a memory map page)

- Added the `LengthColumn` parameter to the [MemoryMap:*] section (for specifying whether to display the ‘Length’ column on a memory map page)