# SkoolKit 7.x changelog

## 7.2 (2019-06-02)

- Added support to control files for specifying comments over multiple lines (by using the dot and colon directives)

- Added support to skool2ctl.py for reading configuration from skoolkit.ini

- Added the `--ini` and `--show-config` options to skool2ctl.py (for setting the value of a configuration parameter and for showing all configuration parameter values)

- Added the `--keep-lines` option to skool2ctl.py (for preserving line breaks in comments)

- Added support for ASM templates (used to format each line of output produced by skool2asm.py)

- Added the `Templates` configuration parameter for skool2asm.py (for reading custom ASM templates from a file)

- Added the `Dictionary` configuration parameter for sna2ctl.py (to specify a file containing a list of words allowed in a text string)

- Added the `bytes` and `show_bytes` identifiers to the asm_instruction template, along with a table cell for displaying the byte values of an assembled instruction

- Added the `Bytes` parameter to the [Game] section (for specifying the format of byte values in the asm_instruction template)

- Added the `DisassemblyTableNumCols` parameter to the [Game] section (for specifying the number of columns in the disassembly table on disassembly pages)

- In ASM mode, #LIST and #TABLE macros can now be used in register descriptions

- The #LINK and #R macros now work with address anchors that start with an upper case letter (as could happen when `AddressAnchor` is `{address:04X}`)

- Fixed how `#LIST` and `#TABLE` markers inside a #RAW macro are handled in ASM mode

- Fixed how skool macros are expanded in `*ImagePath` parameters in the [Paths] section

- Fixed the hyperlinking of lower case hexadecimal instruction operands

## 7.1 (2019-02-02)

- Improved the performance and accuracy of the control file generation algorithm used by sna2ctl.py when no code map is provided

- Added support to sna2ctl.py for reading configuration from skoolkit.ini

- Added the `--ini` and `--show-config` options to sna2ctl.py (for setting the value of a configuration parameter and for showing all configuration parameter values)

- Added support to sna2skool.py for reading multiple default control files, and for using the `--ctl` option multiple times

- The #UDGARRAY macro now has the ability to specify attribute addresses (as an alternative to specifying attribute values)

- Added support to control files and skool file templates for specifying that numeric values in instruction operands and DEFB, DEFM, DEFS and DEFW statements be rendered as negative numbers

- The @isub, @ssub, @rsub, @ofix, @bfix and @rfix directives can insert an instruction after the current one (without first specifying a replacement for it) by using the `+` marker

- tapinfo.py now shows pulse lengths in TZX block type 0x13 (pulse sequence) and full info for TZX block type 0x14 (pure data)

- sna2skool.py handles unprintable characters in a DEFM statement by rendering them as byte values

- sna2skool.py automatically determines the byte value of an ‘S’ directive and ignores any supplied value

- Added the `CommentWidthMin` configuration parameter for sna2skool.py (to specify the minimum width of the instruction comment field in a skool file)

- Added the `InstructionWidth` configuration parameter for sna2skool.py (to specify the minimum width of the instruction field in a skool file)

- Added the `Semicolons` configuration parameter for sna2skool.py (to specify the block types in which comment semicolons are written for instructions that have no comment)

- Fixed how sna2skool.py interprets the base prefix `n` in a ‘B’ directive

- Fixed how skool2ctl.py and skool2sft.py handle non-entry blocks when a start address or end address is supplied

## 7.0 (2018-10-13)

- The @isub, @ssub, @rsub, @ofix, @bfix and @rfix directives can specify the replacement comment over multiple lines, replace the label, and insert, overwrite and remove instructions

- Non-entry blocks in a skool file are reproduced by skool2asm.py and preserved by skool2ctl.py

- Moved the ability to generate a control file from sna2skool.py to the new sna2ctl.py command

- skool2bin.py now processes @if directives (in case they contain @isub, @ssub, @ofix or @bfix directives)

- The @label directive can now add an entry point marker to the next instruction, or remove one if present

- Added the `--force` option to skool2asm.py (to force conversion of the entire skool file, ignoring any @start and @end directives)

- Added support for appending content to an existing ref file section by adding a ‘+’ suffix to the section name (e.g. `[Game+]`)

- Added support for preserving ‘inverted’ characters (with bit 7 set) in and restoring them from a control file or skool file template

- Added support to the #LIST, #TABLE and #UDGTABLE macros for the `nowrap` and `wrapalign` flags (which control how sna2skool.py renders each list item or table row when reading from a control file)

- skool2html.py now writes a single disassembly from the the skool file given as the first positional argument; any other positional arguments are interpreted as extra ref files

- Every entry title on a memory map page is now hyperlinked to the disassembly page for the corresponding entry

- Fixed the bug in skool2ctl.py that makes it incorrectly compute the length of an `M` directive covering a sub-block containing two or more instructions

- Fixed how blocks of zeroes are detected and how an `--end` address is handled when generating a control file