v2.04 2020-01-31
================
* Fixed CAT ASN command for SD cards with no MBR (volume spans entire card);
  previously this would halt with an "Invalid Partition" error.
* Fixed non-reentrancy of dot command syntax parsing: this would cause
  .TXT2BAS to loop infinitely if the input text file contained a dot command.
* Fix for .TXT2BAS ignoring the final line of the input text file if it
  didn't have an end-of-line terminator byte (CR or LF).
* Fixed a typo in windowing demo.
* Updated minimum required core version to 3.01.00.


v2.03e 2019-12-23
=================
* 48K/128K compatibility mode improvements:
   + AY disabled by default in 48K mode (fixes Outrun in 48K mode)
   + DACs disabled by default (fixes Outrun in 128K mode)
   + Timex disabled by default (fixes Strange Loop)
   + DMA disabled by default
   + Port dffd additionally disabled by default in 128K mode
* Revamped TAP/TZX loaders to with new advanced hardware settings page
* Pi communication improvements in TZX/TAP loaders


v2.03d 2019-12-18
=================
* 128K/48K compatibility modes now have paging ports 1ffd (128K/48K) and
  7ffd/dffd (48K only) and +3 floating bus disabled for improved software
  compatibility.
* Fixed loading of SNX snapshots to not use the 128/48 compatibility modes.
* Updated use of AltROM register to match revised core 3.00.06.
* Added new option to TAP loader to allow loading via the Pi (needed for
  some custom loaders which are circulating in TAP format rather than TZX).
* Minor improvements to TZX loader (added note about Pi requirement, run at
  28MHz until Pi transfer and loading begins).


v2.03c 2019-12-14
=================
* Compatibility improvements with legacy software, by using the new AltROM
  feature (requires core v3.00.06+). This is used by:
   + the Tape Loader, ROM Cartridge & 48K BASIC menu options
   + the SPECTRUM f$ command (& IDE_SNAPLOAD call) for snapshot loading
   + revamped TAP & TZX loaders, which provide additional loading modes
   + the SPECTRUM command for switching to USR0 mode
* Added two new variants of the SPECTRUM command (mainly for use by the TAP &
  TZX loaders):
   + SPECTRUM LOAD
     Starts the Tape Loader option in 128K compatibility mode
   + SPECTRUM 48
     Switches to 48K compatibility mode, retaining the current program
* ZX80 & ZX81 games can now be interrupted by the NMI button.
* Fixed the ZX printer driver to preserve the state of the expansion bus
  registers, allowing it to be potentially used together with other hardware.
* Fixed all main menu & NMI menu options to use the same case conventions.
* Fixed DMA mode being set incorrectly to Next rather than Z80 during snapshot
  loading.
* Fixed a crash sometimes seen when entering a line in low-memory situations
  (now correctly generates "G No room for line" error).
* Minor BASIC error message changes.
* Removed RUN.BAS facility.


v2.03b 2019-11-27
=================
* Increased maximum selectable speed to 28MHz (requires core v3.00.04+).
* Reinstated the BANK 1346 USR command, accidentally disabled in v2.03a.
* Added signed integer sub-expressions. These can be embedded within any
  integer expression with:
    SGN {signed-expr}
  Signed integer expressions use all the same operators and functions as
  standard unsigned ones, but the arithmetic operators (+ - * / MOD) and the
  relational operators (< <= > >= = <>) treat their operands as signed values
  in the range -32768..32767. The other operators and functions can be used
  within a signed integer expression, but still treat their operands as unsigned.
* A fully-signed integer expression (eg %SGN{expr} ) returns a value in the
  range -32768..32767.
* Added unary minus (-) operator to the integer expression evaluator.
* Added function to read string from memory. Currently can only be used in the
  special-case commands:
    LET stringdest=PEEK$(addr,len)      [reads memory region to string]
    LET stringdest=PEEK$(addr,~)        [reads string terminated with bit7 from memory]
    LET stringdest=PEEK$(addr,~c)       [reads string terminated with character code c from memory]
    LET stringdest=BANK n PEEK$(addr,len)      [reads banked memory to string]
    LET stringdest=BANK n PEEK$(addr,~)        [reads string terminated with bit7 from bank]
    LET stringdest=BANK n PEEK$(addr,~c)       [reads string terminated with character code c from bank]
  eg:
    LET a$=PEEK$(22528,768)
    LET a$(10 TO 19)=PEEK$(30000,10)
    LET a$=PEEK$(31000,~)
    LET a$=PEEK$(32000,~0)
    LET a$=PEEK$(33000,~13)
    LET a$=BANK 10 PEEK$(1024, 16)
* Enhanced the POKE, DPOKE, BANK..POKE and BANK..DPOKE commands.
  Each command can now optionally take a list of values to poke into memory, separated
  by commas, instead of just a single value.
  Each value in the list may be any of:
    numeric value       [for POKE, pokes a byte]
                        [for DPOKE, pokes a word (16 bits)]
    numeric value~      [for POKE, pokes a word (16 bits)]
                        [for DPOKE, pokes a byte]
    string value        [pokes the entire contents of the string]
    string value~       [pokes the string, setting bit 7 on the final byte]
  Examples:
    POKE 32768,200                      (pokes 1 byte)
    POKE 32768,8,9,10,a$,30000~,55      (pokes 3 bytes, a string, a word, a byte)
    DPOKE 32768,1000,2000,3000,100~,2   (pokes 3 words, a byte, a word)
    BANK 10 POKE 0,a$~,45               (pokes string with bit 7 set on last char, a byte)
    BANK 10 DPOKE 32,1000               (pokes 1 word)
    POKE USR "A",1,3,7,15,31,63,127,255 (redefine UDG A)


v2.03a (2019-11-10)
===================
* CP/M BIOS v0.91:
    + Added missing CAN (ASCII 24) and TAB (ASCII 9) control code support to
      terminal emulator.
    + Remapped keys: DELETE is now CTRL-H and CTRL-DELETE is now DEL.
* Hardware support (requires experimental core v3.00.03+):
    + Expansion bus disabled on reset/NEW, saved/restored in multiface
    + Added default 'P' device driver supporting ZXPrinter/Alphacom32/Timex2040
    + Implemented COPY support through 'P' device driver
    + LPRINT/LLIST/COPY now work in 48K BASIC mode as well as NextZXOS mode
    + Added 'Print' option to multiface "Screenshots" menu
    + Added menu options to boot IF2-type cartridges (inc Dandanator, ZXC4 etc)
* Fixed random error messages when exiting from Tape Loader option
* Fixed crash in COPY..TO SCREEN$/LPRINT command (didn't affect COPY..TO #n)
* Fixed ERASE command to prevent silently erasing all files eg with ERASE "M:"
* Fixed crash when protected .DSK files with sector sizes <> 512 bytes were
  mounted
* Fixed mounter helper to overwrite "Filter" text in banner
* When loading .TAP files and legacy snapshots (.SNA, .Z80), set the global
  transparency colour to black, matching the default fallback colour. This
  fixes issues in "Nixy and the Seeds of Doom" and similarly-enhanced games
  which use a colour matching the default transparency colour.
* Optimisations to the parser and the integer expression evaluator.
* Added new functions and operators to the integer expression evaluator:
   IN n                 - read value from hardware port
   REG n                - read value from Next Register
   PEEK a               - read byte from memory
   DPEEK a              - read word from memory (double-peek)
   USR a                - execute m/c routine and return value left in BC
   BIN n                - synonym for @n, specifying binary values
   NOT n                - logical not (zero -> 1, non-zero -> 0)
   x AND y              - logical and (gives 0 if y is zero, x if y is non-zero)
   x OR y               - logical or (gives x if y is zero, 1 if y is non-zero)
   RND n                - generate pseudo-random value in range 0..n-1
                          (equivalent to floating-point INT (RND*n) )
   BANK b PEEK o        - read byte from bank
   BANK b DPEEK o       - read word from bank (double-peek)
   BANK b USR o         - execute m/c routine in bank & return value left in BC
   INT {fp-expr}        - embed a floating-point expression into an integer
                          expression (eg, INT{INKEY$="N" OR INKEY$="n"} )
* Integer expression relational operators (<,<=,=,<>,>=,>) now return 1 for
  true instead of $ffff, to match the floating-point expression evaluator
* Integer arrays may now be used in a more flexible way, depending on the needs
  of the programmer.
  The standard way to access arrays remains:
    A(x)        where A is an array name A..Z and x is an element number 0..63
  If a 1-dimensional array with more than 64 elements is required, use:
    A[x]        where A is the base array name A..Z and x is an element number. 
                If the element number is 64, then the first element of the next
                array is used and so on. So if you need up to 128 elements,
                and use E[x] with x=0..127, you should not use array F() since
                it is being used by E[64]..E[127].
                The maximum 1D array size usable with this method is 26*64=1664
                elements, if using A[0]..A[1663], with no other arrays available.
  If a 2-dimensional array is required, use:
    A[x][y]     where A is the base array name, x is the array number and
                y is the element number 0..63.
                eg using C[x][y] with x=0..4 will use arrays C,D,E,F,G.
* Added new command to set a Next Register:
   REG n,v
* Added new commands to store a word in memory or a bank (double-poke):
   DPOKE a,v
   BANK b DPOKE a,v
* Deprecated the following commands, whose functionality is now provided within
  the integer expression evaluator:
   BANK b PEEK o
   BANK b USR o
* Fixed "Tape loader" -> "Tape Loader" menu entry to match 128K/+2 grey models
* Added missing .AKY association to browser.cfg


v2.03 (2019-10-07)
===================
* Fix for crash sometimes seen when loading a new BASIC program from the
  Browser and re-entering the editor when it is in 64/85 column mode, and
  a previous program has been edited


v2.02b (2019-10-06)
===================
* Fix for Browser not properly respecting editor colours (set by SPECTRUM
  INK/PAPER/ATTR commands)
* Fix for flashing background seen when entering NextBASIC editor after an
  error message generated in the Browser
* Fix for crash when invalid I/O device report generated in 32-column command-
  line mode (eg LLIST with a valid program but no valid printer device)
* Updated multiface About screen


v2.02a (2019-10-04)
===================
* Improved appearance of CP/M's TERMINFO.COM utility, making use of colour
* Fixed CP/M's COLOUR utility to always set the default colour scheme ([set
  option is now removed)
* Fixed .CPM loader to prevent font corruption that could sometimes occur,
  depending on the size of the currently-loaded BASIC program
* Fixed editor keys so that EXTEND,CAPS LOCK goes to start of program and
  EXTEND,GRAPH goes to program end. This makes more sense on the final Next
  keyboard layout
* Prevent multiface re-entrancy when button pressed from View screen option
* Prevent instant exit to Debug menu after exiting View screen with SPACE
* Fixed TAP loader, mounter and welcome program so they don't lock up if run
  at 7/14MHz (due to change in NextReg 7 read bits in cores 3.x).


v2.02 (2019-09-29)
==================
* Added CP/M Plus (with Next BIOS v0.9), accessible from the main menu
* Fixes for multiface stopping/restarting copper
* Fix for crashes when multiface exits to DivMMC RAM due to layer2 port
  being written with random data
* Updated multiface for the properly ordered indices when reading NextReg 0x1c
* Fixed IDE_SNAPLOAD to not apply any timings changes for .SNX files
* Added support for multiface exit to CP/M page zero
* Added support for the last-record-byte-count on +3DOS drives, allowing
  exact filesizes to now be maintained
* Fixed up timestamp handling in +3DOS: the existing routine operated under
  a complete misapprehension over the location of directory data, and failed
  to achieve anything. The new routine now sets timestamps to zeros for all
  updated files on +3DOS drives [support for timestamps from the RTC to be
  added in a later version]
* .MKDATA now creates .P3D images primed with timestamp entries


v2.01f (2019-09-25)
===================
* Updated AUTOEXEC welcome program to describe SYM+ENTER option in the
  Browser, and added missing filetype descriptions for .WAV & .MD
* Fixed issue where under specific circumstances the Browser could fail to
  obtain an LFN, leading it to repeat the last LFN in every on-screen slot
* Improved validation of Browser's persistent filter using a checksum, to
  ensure an invalid filter isn't accidently used after a power cycle
* Fixed IDE_SNAPLOAD to set 48K machine timings for 48K snapshots (previously
  128K timings were used for all snapshots)
* Fix for MF Settings->Sound menu failing to remove its RTC menu line on exit
* Fixed CP/M menu entry to clear screen, ensuring copyright message removed
* DivMMC RAM3 is now left unused by NextZXOS, allowing it to be allocated for
  potential use as user NMI bank
* Core v3.00.00+ is now required to start NextZXOS (unless machine id=EMULATOR)
* Updates for working with core v3.00.00+ :
   + LAYER BANK command now allows any available banks to be specified
   + Initialise new NextReg 0x06 bit 5 to 1 at reset/NEW/ (F3 key enable)
   + Simplified PSG init at reset/NEW using new %11 audiochip mode
   + Added NextRegs 0x61, 0x62, 0xA0, 0xA2 to MF debugger status display
   + Added new Issue2/3 keyboard option to MF settings
   + Updated MF setting names to reflect revised audichip modes in NextReg 0x06
   + Updated MF to use new NextReg 0x28 to obtain first written byte of 9-bit
     palette data, rather than reading from memory
   + Updated MF to only save/restore current PSG and freeze other PSGs using
     new %11 audiochip mode. This avoids losing state regarding current PSG
     and channel disables
   + MF now reads border colour from new port 0xfe3f, instead of guessing
   + MF now restarts copper on exit if appropriate
   + Fixed MF to repage DivMMC RAM and return there if it was active, as it is
     now possible to enter MF when executing from DivMMC.
   + Fixed NMI entry points, as now MF is paged in immediately on NMI, not
     after 1 machine cycle
   + Fixed MF to use only the "set speed" in NextReg 0x07, ignoring high bits
   + Removed MF workaround for broken 7ffd paging override in core 1.10.31


v2.01e (2019-09-02)
===================
* Fixed a flaw in v2.01d's revised snapshot executor: the final RAM
  configuration was not set until after the PC had been pushed to the stack,
  so a snapshot could crash if SP>$c000 and current RAM page <> last RAM page
  in the snapshot file.


v2.01d (2019-09-01)
===================
* ZX80/ZX81 ROMs now loaded from the new location of C:/MACHINES/NEXT, to
  match new firmware v1.15.
* Internal overlay re-organisation.
* Complete rewrite of renumber (from menu & with LINE n,m command). This fixes
  issues with the previous routine not always updating line references.
  Line references are now always updated to integer format (%linenum) as a
  minor speed & space optimisation.
  Computed line references are now marked with a "?" in the listing to indicate
  these should be manually corrected, as are references that could not be
  updated in the unlikely event of lack of memory.
* Changed SNA/Z80 snapshot loading to use bytes on the stack rather than the
  screen for the final boot operation. This fixes any visible screen corruption
  and also fixes snapshots such as Ranarama.z80 which checked for this.
* Updated the LAYER OVER n command to accept the new blending modes (6 & 7).
* Ensure turbo-key (F8) is enabled on NEW/reset, in case software has disabled
  it.
* Fixed CAT "T:" and BANK..LINE commands to output correct token text in
  non-Layer0 modes (they were incorrectly displaying UDGs instead).
* Fixed screen flicker when operating in 64/85-column command-line mode.
* Fixed screen flicker on return from the Multiface.
* Fixed brief visible screen corruption when switching to Timex/lo-res modes.
* Layer2 screen now cleared to black at reset/NEW.
* Fix for command-line mode incorrectly using the editor's clip window
  definitions instead of BASIC. This caused missing sprites when running games
  such as Pogie using .RUN/SPECTRUM from the command-line.
* Fixed TILE command for compatibility with new 3.x series cores which provide
  a new 48K mapping mode with port $123b.
* Fixed issue where the Browser's current drive could be accidentally changed
  by programs writing to RAM8 (such as OVERSCAN.SNA).
* Fixed bug where PROC..TO didn't return string values correctly if the
  destination was a dimensioned character array or a sliced string.
* Fixed bug where CLEAR/RUN in autoexec.bas or IDE_BASIC call could crash the
  system on return due to the stack being relocated.
* Updated the default welcome program to CLEAR variables before exiting.


v2.01C (2019-08-14)
===================
* Rewrote drive detection code, so available drives match those seen by the
  firmware and by esxDOS 0.8.7:
   + removed support for extended partitions (not supported by esxDOS/Firmware)
   + ignore partition types, allowing FAT volumes to be detected in any primary
     partition (some have been seen in the wild with bogus/invalid partition types)
   + fixed a potential crash if there was an error reading the FSI sector
* Changed partition naming to include just a single digit (primary partition id),
  removing the "sN" indicating secondary partition number.


v2.01B (2019-08-04)
===================
* Added "Clear" option to NextBASIC editor menu. This deletes all variables
  and resets RAMTOP to just below UDGs. Useful when memory has become so low
  it is impossible to interpret command lines to perform CLEARs or line deletes.
* Added settings for timings, DMA mode and AY mono modes to Multiface.
* SPECTRUM command now sets appropriate legacy modes, like snapshot and 48K/USR0
  TAP loading do.
* DMA mode is now defaulted to Next DMA at reset/NEW, and changed to Z80 DMA
  when loading legacy software.
* SNX files no longer have legacy software modes applied to them.
* Reinstated "Wrong file type" error when attempting to LOAD incorrect file
  types from SD (this was previously the unhelpful "R Tape loading error").
* Fixed reversed naming of AY/YM audiochip modes in Multiface.
* Multiface/reset/NEW now sets volumes on all AY channels to zero, ensuring
  no AY output can be heard (fixes interrupting ScrollNutter, amongst others).
* Fixed Multiface, BASIC editor & screensaver to save/restore all clip windows.
* Fixed Multiface to save/restore 9-bit palette register 2nd byte flag.
* Fixed FATfs to return non-ASCII characters directly (as graphics characters)
  rather than replacing with underscores. This allows such filenames to be
  interacted with directly instead of needing to use the short filename.
* Fixed bug where menus/editor/Browser displayed incorrectly if the system
  variable CHARS pointed above $c000.
* Fixed an issue where use of the Browser in certain circumstances (particularly
  remounts and copying files to IDEDOS drives) could cause TSTACK to grow down
  and overwrite some system variables.
* Fixed esxDOS f_read/f_write to treat BC=0 as zero bytes (previously considered
  to be 64K, like +3DOS's DOS_READ/DOS_WRITE).
* Fixed IDE_CAPACITY to return an error for invalid device numbers.
* Updated "About" screen credits.


v2.01A (2019-07-29)
===================
* Fixed .TXT2BAS to deal correctly with CRLF endings as well as CR or LF.
* Fixed version mismatch error messages when ROM version has a sub-letter.
* Fixed INPUT to not clear lower-screen during syntax-checking.
* Updated browser.cfg to clear screen before loading .Z80/.SNA/.SNX/.O/.P/.NEX
* Fixed L/R parameters in PLAY command (previously these were inverted).
* Fix for a crash if error opening source file in COPY..TO command.
* Fix for COPY..TO file/#n, which were incorrectly using SCREEN$ as destination.
* Fix for editor lower screen becoming inverted if booted with the last available
  drive (usually M:) as the default.
* Fix for incorrect statement number in "9 STOP" and "L BREAK" reports.
* Fix for "statement lost" error occurring in FOR or REPEAT loops which
  performed no iterations and had no further statements on the loop start
  line, and where the loop terminator was on the following line.
* Fixed menus to clear bottom-right corner (on-screen character could show
  through).
* Fixed Calculator mode evaluation: a decimal number at the start of input was
  mis-identified as a line number followed by a dot command, so further functions
  (eg PI) remained untokenised.


v2.01 (2019-07-21)
==================
* Added IDE_TOKENISER call, providing interface to BASIC line tokenising and
  detokenisation.
* Added .BAS2TXT and .TXT2BAS dot commands, allowing NextBASIC programs to be
  easily converted between BASIC and plain text formats.
* Improved startup error messages when there are missing system files or
  version mismatches.
* Ensured default sprite, layer & palette restored when loading legacy
  software (.TAP/.SNA/.SNX/.Z80/.O/.P/.DSK) and .NEX files.
* Legacy software (.Z80/.SNA/.SNX/.O/.P/.TAP) is now loaded with 48K or 128K
  machine timings when approriate instead of standard Next/+3 timings.
* LOAD/VERIFY..BANK now uses the file length as the default rather than 16K,
  allowing short files to be more easily loaded to a bank.
* REMOUNT/reboot/IDE_DOS_MAP now restore the last current working
  directory that was set on each drive when it is remapped (if it exists).
* Browser remembers last position in the current directory, and returns to it.
* If filename is too long to fit in the display, the Browser now ensures that
  both the start and end of the name can be seen (~ is placed where characters
  have been omitted).
* The Browser will now substitute LFNs rather than short names if the filename
  character is quoted in browser.cfg (eg use "|" rather than |). Only the first
  quote is checked, so new names can be created from LFNs (eg "|.bak")
* If SYMBOL-SHIFT is held down when ENTER is pressed, Browser now selects the
  2nd matching line in browser.cfg for the file extension instead of the first.
* Added filter option (press "F") to the Browser, accepting any wildcard
  pattern (eg "a*.tap" to show only .TAP files beginning with A)
* No longer close #3 at BASIC reports, allowing an alternative printer channel
  to be attached permanently to #3.
* Fixed problems loading TAP-based software using both the printer buffer and
  SPECTRUM command (eg Daley Thompson's Super-Test).
* Fix for ENTER/SPACE pressed at a report being used immediately by the Browser
  or menu.
* Fixed bug where editing line was printed to the lower screen if a mode key
  (EXTEND, GRAPH, CAPS) was pressed when NEXT #0 was used in LAYER 0 mode.
* Fixed default tilemap clip window (x2/y2 were transposed).
* Fixed the +3DOS version of IDE_PATH to not change the default drive.
* Added fixed 48K keymap to the Multiface.
* Minor parser optimisations.
* Updated credits on Multiface "About" screen.
* Updated browser.cfg to use .wavplay for .WAV files.
* Updated browser.cfg to provide LFNs to .MORE.
* Updated browser.cfg to display a text version of .BAS files if selected
  with SYMBOL SHIFT + ENTER.


v2.00F (2019-05-18)
===================
* Rewrote text windowing code to use the Z80N barrel shift instructions,
  giving an ~26% performance improvement to typical (5-bit) text output.
* Updated LAYER CLEAR to additionally reset the tilemap clip window.
* Fixed the screensaver to work correctly with tilemapped displays.
* Fixes for IDE_BROWSER call which was resetting the K channel and overwrote
  the RETADDR system variable.
* Added options to load/save tilemap palettes in the Multiface.
* Fixed the .DEFRAG dot command to allow files up to 4GB to be defragmented
  (previously limited to 32MB).
* Updated the default browser.cfg to use the new tilemapped version of ZXZVM.
* Added support for viewing .MD files (using .MORE) from the Browser.


v2.00E (2019-04-17)
===================
* For clarity, renamed joystick options to L(eft)/R(ight) in multiface settings.
* Removed bogus lightpen option from multiface settings.
* Removed workaround for fixed Timex hi-res offset bug from MF About screen.
* Added credit to Paul Land for his original joynav driver, the equivalent
  functionality for which was eventually incorporated into the standard
  keyboard driver.


v2.00D (2019-03-21)
===================
* Added keyboard map screen (courtesy of Phoebus Dokos) to Multiface.


v2.00C (2019-02-17)
===================
* Updated multiface to save, restore and display the recently-introduced
  nextregs (mainly tilemap-related).
* Fixed multiface to reset new nextregs as needed to prevent tilemap or ula
  offset settings from interfering with the display.
* Reset new nextregs 0x2f,0x30,0x31,0x68,0x6b to default on LAYER CLEAR/NEW/reset.
* Reset new nextreg 0x4c to default on PALETTE CLEAR/NEW/reset.
* Updated screensaver to adjust the tilemap clip window together with the others.
* Added new test for minimum required core version (currently 2.00.27).


v2.00B (2019-01-11)
===================
* Added support for navigation by Kempston joystick (providing cursor keys,
  ENTER with fire and SPACE with button 2). This works throughout NextZXOS,
  so can be used to control menus, browser, NextBASIC editor, 48 BASIC editing
  and BASIC games etc.
* Updated example keyboard driver with the Kempston support.
* Fixed a bug where MERGE command stopped working after a new keyboard driver
  was installed.
* SPRITE CLEAR (and NEW/reset) now clear attributes of 128 sprites (number of
  sprites supported by the hardware was increased from 64 in core v2.00.24).
* Fixed bug in parser, where command lines containing fully-pathed dot commands
  could result in "Nonsense in BASIC".
* Fixed "No such command" error when attempting to run dot commands (with .DOT
  extension) from the Browser.


v2.00A (2018-12-14)
===================
* Added new option to DISK_STRMSTART: bit 7 of A may be set to indicate the
  call should return immediately, and the user will wait for the first data token.
* Autoexec welcome program now flashes a "Disabling" information message whilst
  disabling is in progress.
* Fixed driver bankswitching example code in border.asm.
* Fixed INPUT returning invalid data if destination variable lies in top 16K
  of memory.
* Fixed crash in .BROWSE command if empty string provided to -p or -e options.
* Fix for MF overlays (such as About) and file browser not working on some cards,
  which appear not to like CMD12 being sent when no multiple sector read is in
  progress.
* Fix to ensure contention is re-enabled (and Timex/turbosound disabled) when
  loading legacy software via the Tape Loader option.


v2.00 (2018-09-09)
==================
* TurboSound is now left enabled by the TAP loader and snapshot loading. This
  can be disabled manually in the Multiface menu if needed.
* Timex mode is now only disabled in the TAP loader for USR0 and 48K modes
  (fixes Nextipeded).
* Fixed use of new Z80N add instructions to avoid any assumptions on flag effects.
* Added a wait-for-key in the Browser after displaying a .BMP image.


RC1 (v1.99R) 2018-09-08
=======================
* Added new option to F_OPENDIR, allowing F_READDIR to use a wildcard string
  to filter returned entries.
* Browser menu option will now run an external file manager/browser program
  if present as the .FM dot command. If .FM is not present, the internal
  browser is run.


v1.99Q (2018-09-04)
===================
* Rewrite of text justification routines, improving performance by ~40%.
* Minor performance optimisation in Multiface character output.
* Added .ASSOCIATE dot command for managing filetype associations for the
  Browser.
* Changed default handler for .TXT/DOC/CFG/INI/ASM to Marco's .MORE command,
  running in 85-column mode.
* Changed default line-endings of browser.cfg to CRLF, as DOS/Windows editors
  are less likely to cope with different line-endings than Mac/Unix ones.
* Print a blank line between output of each command in the Command Line in
  32-column mode, making it a bit more consistent with 64/85-column modes.
* Fixed a bug where 4 attribute bytes were corrupted during ZXZVM operation,
  due to new temp variables being incorrectly located within shadow screen area.


v1.99P (2018-09-02)
===================
* Added .BROWSE dot command, allowing BASIC programs to use the Browser dialog
  to request filenames.
* Added .NEXTVER dot command, allowing BASIC programs to detect running NextZXOS
  version (or if running in 48K/esxdos modes).
* Wildcards are now allowed in any part of a filename, eg:
  c:/gam*/man*.* could match c:/games/manic miner.tap
* Browser now shows error reasons for failing erase, rename, mkdir and paste.
* Reinstated stripping of leading space in dot command arguments, as some dot
  commands don't perform their own space stripping.
* Fixed a bug where Browser screen could go blank if a directory erase failed.
* Fixed a hang if a dot command with >255 characters of arguments was entered.
* Fixed broken text printing in Timex hi-colour mode (LAYER 1,3).
* Fixed fragmentation check in MKDATA and MKSWAP which could lead to fragmented
  images sometimes being created.
* Fixed a bug in M_P3DOS where the entry IX parameter was corrupted if the
  selected RAM page was 0.
* Fixed M_P3DOS when called from a dot command to not move stack if already
  >$4000; this avoids issues for calls requiring the stack to be as set by BASIC.
* Fixed M_P3DOS when called from a dot command to not disable interrupts for
  the duration of the call.
* Fixed IDE_MOUNT bug which erased vital temporary internal state, preventing
  it from returning to the caller after being called via M_P3DOS.
* Fixed Browser to clear the lower-screen before printing an error message.
* Don't set internal Browser mode flag when called from IDE_BROWSER, so .BROWSE
  returns to BASIC/Command Line rather than the menu system.
* Updated $, LFN, DEFRAG, INSTALL, UNINSTALL, MKDATA, MKSWAP to limit argument
  lengths to 255 characters per argument.
* Standardised help screens of $, LFN, DEFRAG, INSTALL, UNINSTALL, MKDATA,
  MKSWAP, BROWSE and NEXTVER.


v1.99N (2018-08-30)
===================
* TAP helper now respects the current settings for pause & simulate.
* Changed welcome program to use NEXT #n instead of INKEY$, so the screensaver
  can kick in.
* Clarifications and other tweaks in the welcome program.
* Enhanced F_GETCWD so it may alternatively be used to obtain a consistent path
  for any provided filespec.
* Fixed M_GETSETDRV to ignore the drive number field, allowing A: to be set
  as the default drive (by using drive number=1).
* Fixed dot command line parsing so quotes directly after the command name
  (without a separating space) are allowed.
* Fixed dot command line parsing to reject any embedded colour control codes
  that might be entered in 48K mode.
* Fixed the .DEFRAG, .$, .LFN, .INSTALL, .UNINSTALL, .MKDATA and .MKSWAP dot
  commands to accept quoted arguments.
* Fixed OPEN # to open input files as shared-read rather than exclusive-read.


v1.99M (2018-08-27)
===================
* Fixed adjustments to R register on entry to Multiface; these previously
  didn't take account of $ED shift opcodes.
* Fixed error status on return from M_TAPEIN hook with B=in_flags.
* Fixed bug in esxdos F_OPEN hook which caused files opened for read to be
  marked as also open for write.
* Removed workaround for allowing tape in/out files to be opened regardless
  of access modes (no longer required after previous bugfix).


v1.99L (2018-08-25)
===================
* Moved the "About" screen right by 1 char to work around the Timex offset bug
  in the core which is very visible if the screensaver kicks in on this page.
* Added ".ASM" association in the Browser, to view as a text file.
* More tweaks to the About screen, now named "About NextZXOS" and reflecting
  the authors of the dot commands that will be shipped in the final distro.
* IDE_PATH / F_RMDIR now refuse to delete any directory which is the current
  directory for its drive.
* M_TAPEIN hook with B=in_flags now also returns the previously-set flags in A.
* Fixed dot command syntax checking to prevent dot commands with unbalanced
  double-quotes from being accepted as valid statements.
* Fixed a bug where the automatic delete options of DOS_OPEN were failing to
  check if the file to be deleted was open.
* Fixed a bug in "screen" editor mode where the whole screen was scrolled up
  by one line after a report, if the entered command was > 1 line long.
* Removed an obsolete workaround to limit AY volume to 13 when >3 channels
  were being used in a PLAY command.
* Optimised layer2/lo-res text printing routine.


v1.99K (2018-08-24)
===================
* Implemented new IDE_MODE call, which returns information on the current
  display mode, and allows it to be changed.
* Added new command to execute m/code in any bank; the bank is automatically
  paged in to the top 16K, so address must be in the range 49152-65535:
    BANK n USR address
* Partial rewrite of Calculator mode, allowing integer expressions to be entered
  and removing some oddities (like silently ignoring lines with syntax errors).
* Added a progress display (in K) to the COPY command and Browser copy function.
* If paste of a file fails in the Browser, the error message is now shown.
* Fixed the path display in the Browser to show the final 51 chars of the path
  rather than the first 51 chars.
* Entering a direct command in full-screen editor mode now clears the screen
  so the command output is not interleaved with the program listing.
* Fixed NEW and REMOUNT so that the RAMdisk contents are retained.
* Added note in MF status page that a stepper/disassembler will be forthcoming.
* Updated About screen credits to reflect new dot commands.


v1.99J (2018-08-22)
===================
* Various optimisations to windowing code, improving performance by ~15% for
  typical case (5-bit characters, layer 1,1, full-screen mode window).
* Optimised string printing via PRINT command.
* Optimised integer expression evaluator to use Z80N opcodes where possible.
  In particular, performance of multiply increases by ~11.4x.
* Various optimisations to BASIC parser main loop, character collection and
  class evaluators.
* Various space-saving, including move filename handling into an overlay.
* Added optimised variants of several important ROM3 routines into ROM1,
  avoiding the ROM switch overhead, and avoiding using the floating-point
  calculator where possible.
* Fix for IDE_STREAM_IN/OUT treating "S"/"K" channels as layer 1,1 mode window
  when actually in layer 0.
* Fix for previously-masked bug, causing a crash with IDE_STREAM_IN/OUT for
  standard channels (S/K/P).
* Tweaks to autoexec "Welcome" program.


v1.99I (2018-08-19)
===================
* Split multiface settings menu into Joysticks/General/Sound, and added
  support for changing joysticks 1 & 2, Timex, Lightpen & audiochip mode.
* Added NextReg $09 (peripheral4) to multiface status page.
* Added cursor left/right navigation to the multiface TAP browser.
* TurboSound is now enabled at boot, and disabled when loading legacy SNA/Z80/TAP.
* When entering 48 BASIC, turbosound/Timex are disabled and contention is enabled.
* Writes to TAP files are now immediately committed, avoiding need to close the
  TAP file to ensure all changes are flushed.
* Fixed RST$18 in dot commands to ensure entry flags (F) are preserved for when
  the 48K ROM routine is started.
* Implemented rc_path_get reason (for PWD) on +3DOS drives as well as FAT drives.
* Implemented new IDE_MOUNT 2-stage call to allow applications to control
  changing SD cards, like the NextBASIC REMOUNT command.
* Changed directory containing dot commands from C:/BIN to C:/DOT, to make it
  easier to have different versions of dot commands for esxDOS and NextZXOS.
* Newly-allocated sectors on +3DOS drives are now erased with soft-EOFs ($1a),
  so that headerless text files can be copied from FAT drives and be treated
  as the proper exact length (rather than a multiple of 128-byte records).
* Updated Welcome autoexec.bas program to advertise the www.specnext.com/
  latestdistro/ page.
* Updated About screen credits.
* Updated .CPM placeholder with a more detailed help page.
* Fixed loading of Chase HQ 128K from Tape Loader or from a .TAP file from the
  Browser.
* Fixed issues returning string results from PROCedures which also had string
  parameters.
* Fixed lo-res/layer2 windows to open with the current permanent colours.
* Fixed out-of-memory error when auto-booting Art Studio +3 .DSK from the Browser.
* Fixed REMOUNT/IDE_MOUNT to close all swap partitions when unmounting cards.
* Fixed NEXT #0 TO var from within AUTOEXEC.BAS, due to key mode not yet having
  been initialised.
* Fixed crashes in Browser if errors occured during file copying; now an error
  beep sounds.
* Fixed a crash if Multiface was activated with a mismatched NextZXOS ROM.
* Fixed FAT32 access to ignore and preserve the top 4 bits of the cluster
  number (as required by the spec).


v1.99H (2018-08-15)
===================
* Completed implementation of .INSTALL and .UNINSTALL dot commands; these now
  provide bank allocation/deallocation for drivers.
* Updated border.drv example driver with bank allocation.
* NextBASIC now automatically uses any installed driver with id "P" for output
  to #3 (LLIST, LPRINT, PRINT #3 etc).
* Added sample printer driver.
* After a REM, no further tokenisation now occurs on the line (previously,
  keywords would be tokenised after a colon, even though no further statements
  are parsed or executed after a REM).
* Added semi-colon (;) as an alternative to REM. This is intended for use with
  dot commands (eg an assembler) so that they can parse such lines whilst
  NextBASIC ignores them.
* Fixes for breakpoints/memory browser messages, broken in v1.99G.
* Ensure interrupts disabled before switching from +3DOS ROM to DivMMC ROM
  rather than during the switch.


v1.99G (2018-08-06)
===================
* Added support for .SPR files in browser.cfg using .SPREDT.
* IY is now saved/restored and set to ERR_NR during the ISR.
* LAYER BANK command now restricts banks to within the first 16 as required.
* Deprecated IDE_PARTITION_RENAME/_WRITE/_WINFO/_SETINFO/_GETINFO and
  IDE_DOS_UNPERMANENT calls.
* Refactoring in preparation for Spanish language version support.
* M_DOSVERSION now additionally returns ROM language in HL ("en" or "es").
* ASCII 96 (backtick on most PCs; pound/currency symbol on Spectrum) can now
  be used in browser.cfg and will be substituted by language code ("en" or "es").
* Split out some functionality from the Multiface ROM into several new overlays
  to make room for more features.
* Added palette save & palette load options to Multiface (in screenshots menu).
* Added new Settings menu to Multiface, allowing some core settings to be
  modified on-the-fly.


v1.99F (2018-07-29)
===================
* Various fixes & tweaks to the default AUTOEXEC.BAS welcome program.
* Updated browser.cfg for new .NDAWPLAY which no longer needs a CLEAR.
* Fix for filetypes becoming unrecognised in the Browser after unmounting a
  disk image.
* MOUNTER.BAS helper now erases itself on successful completion.
* TAPLOAD.BAS helper shows USR0 option before 48K as this is preferable.
* Optimised FAT directory searches to early-exit when a never-used directory
  entry is encountered, instead of continuing to search the remaining entries.
* Fixed a bug in the editor where pressing delete on an empty line had caused
  the cursor to move to the top of the screen.
* Tweaks to "About" screen.
* Fixed paths returned by the IDE_PATH call (or PWD command) when directory
  names contained spaces and/or extensions after a short name. This had caused
  some oddities in the Browser when copying/pasting files.
* Added workaround to the REMOUNT command so if the card was removed early
  (manually, or automatically by a failing card) then the remount proceeds
  instead of generating an error (since such an error is not recoverable).
* Added a test for BREAK during BASIC stream input to prevent potential lockups.
* Fixed CONTINUE to work following a trapped error, so it can be used within
  an ON ERROR routine.


v1.99E (2018-07-27)
===================
* Added a default AUTOEXEC.BAS welcome program, introducing some of the
  features of NextZXOS.
* Added support for .Z1 - .Z8 Infocom/Inform game files to Browser, using a
  slightly modified version of John Elliott's ZXZVM for +3.
* Added support for .NEX files to Browser using .NEXLOAD command.
* Added window channel demo program (from +3e).
* Reworked dot command error reporting, fixing the following issues:
  + Dot command errors now appear correctly in modes other than layer 0
  + Dot command errors can now be trapped with ON ERROR (code is always 255)
  + An error within a dot command in AUTOEXEC.BAS no longer causes a crash
* Fixed EDIT key in Browser (broken in v1.99B).
* Reinstated help text for SPACE key in Browser (accidentally removed in
  v1.99B).
* Fixed cursor right in Browser if the current screen is full and there are
  no further files in the directory.


v1.99D (2018-07-19)
===================
* Fixed "Invalid Colour" error using Browser within Multiface replacement
  (introduced in v1.98N).
* Mounter helper now only accepts "Y" or "N" as answers to "boot disk" question.
* Fixed double editing cursor seen when entering Command Line mode immediately
  after mounting a disk from the Browser.


v1.99C (2018-07-18)
===================
* Re-brand to NextZXOS, including:
    + system files are now stored in the c:/nextzxos/ directory
    + main ROM is now called enNextZX.rom (so config.ini needs updating)
    + menu option is now called "Command Line" rather than NextZXOS, to avoid
      confusion


v1.99B (2018-07-15)
===================
* Improvements to +3 .DSK support:
    + standard .DSK images are now supported (as well as extended .DSK images)
    + any number of tracks now supported
    + tracks with different numbers of sectors now supported
    + any sector size is now allowed, although only 512-bytes read/written
    + fix for hang on +3/PCW disks with non-zero but blank disk specifiers
    + fixed disk size calculation, fixing seek errors on high track numbers
    + All Level 9, Magnetic Scrolls and Tasman disks tried now work; all
      disks without protection/encryption schemes should now work
* DOS_INITIALISE is now a no-op; it shouldn't be called except by the system
  but some games (eg Magnetic Scrolls) called it and cause their disks to become
  unmounted.
* Combined the .DSK/.P3D mounting helpers for the Browser, and improved with:
    + run at maximum speed to improve performance mounting large images
    + automatically defragment .DSK/.P3D files if necessary
    + allow booting of .P3D as well as .DSK files
    + restrict booting to disks mounted on A: (other drives not supported
      by the boot process)
    + report "Not bootable" rather than "File not found" for unbootable images
* Fix for exiting dot commands in cases where RETADDR had been overwritten
  by ROM routines called by the dot command.
* Fixed M_P3DOS to correctly read the input IX parameter (HL from dot commands).
* Fixed COPY..TO SCREEN$ (and related commands) to stop when soft-EOF ($1a)
  reached.
* Improved cursor left/right behaviour in Browser: if already on first/last
  page, the highlight will instead be moved to the first/last entry on the page.
* Added Unmount option to the Browser, allowing disk images to be easily
  unmounted.
* Fixed .DEFRAG dot command: this still hadn't been correctly checking the new
  file was defragmented, due to a lack of read access on the file.
* Added .LFN dot command to return the long filename for any short (8.3) name.
  This is useful for filenames returned by the Browser, which are always short.
* Added .$ dot command, allowing any other dot command to be executed with
  parameters held in a BASIC string variable, rather than just a literal argument.


v1.99A (2018-07-13)
===================
* Added support for opening system-supplied swap files (c:/nextzxos/swp-X.p3s)
  with IDE_SWAP_OPEN.
* Fixed low-level write return values so IDE_SWAP_OUT works correctly.
* Optimised IDE_SWAP_IN to reduce overheads by using a single multiple-sector
  read operation, and optimised the read to use INIs rather than INIRs.
* Added support for opening any named file as a swap file with IDE_SWAP_OPEN.
  This allows fast read (or write) access to unfragmented files in chunks of
  between 0.5K and 16K, with about the same performance as the streaming API.
* Deprecated inefficient IDE_SWAP_EX call.
* Fixed version checks in .MEM, .DEFRAG, .MKDATA and .MKP3D dot commands which
  prevented them from running on v1.99.
* Enhanced LOAD "*" command to try both DOS_BOOT and LOAD "disk" to boot a
  floppy disk image. This allows more disks to be automatically booted
  (eg Level 9's "Lancelot").
* Fixed incorrect remaining size calculation in FATfs file read function
  (broken in v1.99) which prevented Pogie from loading correctly.


v1.99 (2018-07-08)
==================
* The "LG" version of the ROMs now includes the latest (v07) "LG" (Looking
  Glass) ROM from Geoff Wearmouth.
* Optimisations in the FATfs module, to allow new features to be added.
* The FATfs module now correctly refuses to unmap drives which have open files.
* Implemented support for mounting +3DOS filesystem images (.P3D files)
  as drives, with enhancements to the IDE_DOS_MAP/IDE_DOS_MAPPING calls.
* Similarly, implemented support for mounting some +3 floppy disk images
  (.DSK files) as drives. Only unprotected disk images in standard formats
  are supported (tested with TasCalc and Tasword +3).
* Added .MKDATA and .MKSWAP dot commands to create +3DOS filesystem (.P3D)
  and swap partition (.P3S) images.
* MOVE...IN can now be used to manually mount .P3D or .DSK images.
* Added support for automatically mounting up to 8 .P3D or .DSK images
  stored in the c:/nextzxos/ directory and named DRV-x.P3D, DRV-x.DSK or
  CPM-x.P3D (where x is drive letter, A to P). In NextZXOS, DRV- files
  have priority.
* Added support for mounting .P3D and .DSK files using the Browser, with
  the addition of two new helper programs.
* Added placeholder .CPM dot command, executed by the main menu option.
* Fixed REMOUNT to unmap all mounted drives before physical drives.
* The RAMdisk is no longer wiped when REMOUNT occurs, allowing it to be used
  as a temporary store for copying files between SD cards.
* Increased size of the RAMdisk to 62K (4K was previously unnecessarily used
  as cache buffers).
* Fix for OPEN # being unable to open more than one file stream.
* Fix for bug in .DEFRAG dot command which could leave the file still
  fragmented, due to an incorrect check.
* Fix for the Multiface corrupting 2 bytes of memory at $6000.


v1.98N (2018-06-28)
===================
* Fixed up issuing of the CMD12 stop transmission command in DISK_STRMEND.
* Fixed up creation of zero-length files: the starting cluster had been set to
  $ffffffff instead of $00000000.
* The ARC bit is now set on newly-created, modified and renamed files.
* Fixed an issue where write errors on failing or write-protected cards were
  not always being picked up, causing operations to fail but appear to succeed.
* The IDE_BANK call and the BANK..NEW command now allocate banks starting with
  the highest-numbered free bank. This helps conserve low bank ids (helpful as
  Layer2's banks must be within the first 512K RAM chip).
* Added new rc_bank_available reason for the IDE_BANK call, which returns the
  number of currently-free banks of the specified type.
* Added a new .MEM dot command, providing information on available memory.
* Fixed SPECTRUM command to reset the return stack, as 48K BASIC doesn't
  support the new control structures.
* Fixed incorrect calculation of card capacity for SDSC cards (<=2GB).
* Adjusted output of capacities and filesizes to always round up to the next
  KB/MB/GB for any fractional part.
* Memory contention is now always disabled during NextZXOS operation for maximum
  performance, but re-enabled when loading snapshots or TAP files to ensure
  compatibility with legacy games/demos.
* Updated PALETTE OVER to write the transparency value to the new sprites
  transparency register ($4b) as well as the global transparency register ($14).
* Added the new sprites transparency register ($4b) to the multiface debug
  status page.
* Reset/NEW/PALETTE CLEAR now re-initialise the transparency fallback colour
  register ($4a) to zero (black).
* Fixed Timex mode saving/restoring in the multiface, ensuring the Timex register
  is only read/written at points when Timex modes are enabled.
* Renamed ROM and SYS files to reflect English language versions, and the change
  from Gosh Wonderful to Looking Glass ROM. The filenames are now:
    enNextZX.rom, enNextLG.rom, enNxtmmc.rom, enNextMf.rom, enOvrly.sys,
    enEsxemu.sys, enMf1.sys.
  The correct menu lines for config.ini therefore now take these forms (for VGA):
    menu=ZX Spectrum Next,2,0,enNextZX.rom,enNxtmmc.rom,enNextMf.rom
    menu=ZX Spectrum Next/LG,2,0,enNextLG.rom,enNxtmmc.rom,enNextMf.rom
* Added a new helper, textview.bas, for viewing TXT/DOC/INI/CFG files. This now
  displays such files at 14MHz regardless of currently-selected speed.
* Improved performance of TAP helper, tapload.bas, by running at 14MHz.
* Improved error reporting in .DEFRAG dot command.

v1.98M (2018-06-24)
===================
* Added new M_SETCAPS hook to set additional capabilities in the esxDOS API.
* Added capability to extend files using f_truncate/f_ftruncate without erasing
  the newly-allocated section to zeros (giving a performance increase).
* Added .DEFRAG dot command for defragmenting files.
* Fixed .INSTALL/.UNINSTALL dot commands to show usage information if no filename
  provided.

v1.98L (2018-06-23)
===================
* Multiface replacement now saves/restores the current ULA palette and sets
  the standard Spectrum colours.
* Revamped the About page.

v1.98K (2018-06-22)
===================
* Various fixes for the Multiface +3 replacement:
    + Fixed crash on return in situations where MMU0 was ROM and MMU1 was RAM.
    + Fixed viewing of 8K bank $10 in the memory browser, and saving of this
      bank if part of a layer2 screenshot.
    + Fixed changing pages in Browser on return if system directory handle had
      been changed by loading an overlay or executing Browser within NMI.
    + Fixed corruption of 2 bytes in layer2 at address $3ff8 on return, if
      layer2 writes were enabled.
    + Updates & fixes to About page.

v1.98J (2018-06-21)
===================
* Various fixes for the Multiface +3 replacement:
    + Fixed crash/hang on entry if layer2 writes were enabled
    + Fixed installation of breakpoints straddling a 256-byte boundary in
      standard 16K RAM pages 5, 7 & 8
    + If breakpoints have been changed in memory, they are no longer overwritten
      with the original contents, but automatically disabled
    + If RAM is active in MMU0 or MMU1, the Multiface replacement can now be
      successfully used, provided that:
        (i) if RAM is in MMU0, the instruction at $0066 is PUSH AF
        (ii) if RAM is in MMU1, POP AF;RET occurs somewhere between $2002
             and $3f64 (if this is not the case, 4 bytes of MMU2 memory -
             assumed to be the ULA screen - will be corrupted on return)
    + Streaming operations are now cancelled before any Browser/file access
* Added "About" page.
* Added support for viewing .CFG and .INI files in the Browser.

v1.98I (2018-06-19)
===================
* Fixed a bug where memory corruption of RAM8 could occur if any of the debug
  tools options in the multiface replacement were used. This would typically
  affect BASIC programs used in layer 1,1 modes, or new Next software using RAM8.
* Space optimisations (particularly in messages) in multiface replacement to
  make room for new features.
* Added Find & Next search options to Memory Browser, allowing up to 8 hex/text
  bytes to be searched for in current bank or all currently-paged address space.
* Added Copy option to Memory Browser, allowing memory regions to be copied
  or moved.
* Added View option to Status page, allowing screen of currently-stopped
  program to be seen.

v1.98H (2018-06-17)
===================
* The "GW" version of the ROMs now includes the latest (v06) "LG" (Looking
  Glass) ROM from Geoff Wearmouth.
* Updated browser.cfg:
    + BMP files now return to the Browser after being displayed
    + Added support for NDR type (NextDaw Player)
* Added new breakpoints feature to the Multiface +3 replacement.
* Various fixes for the Multiface +3 replacement:
    + Fixed saving of 128K snapshots if the current RAM page is not 5 or 2
    + ROM memory is now correctly displayed (in Status & Memory Browser)
    + Directory handles now saved/restored, so interrupting the Browser is ok
    + Fix for spurious "?" being printed in Status/Memory Browser tools
    + Current editor colours and screensaver settings are now respected
* Fixed loading of ZX81 snapshots (broken in v1.98E) due to uncleared
  data in RAM 7 causing the ZX81 emulator to hang.
* Disabled Multiface replacement when ZX80/ZX81 snapshots are run (since
  non-Spectrum ROM cannot support it).

v1.98G (2018-06-14)
===================
* The "GW" version of the ROMs now includes a fix for a missing scroll prompt.
* Fix for incorrect flag returns from IDE_BROWSER call (broken by v1.98F).
* Added initial Multiface +3 replacement ROM with the following features:
    + 48K/128K snapshot saving
    + screenshot saving for current mode and layer 2 screens, plus shadows
    + TAP file input/output selection
    + TAP file input browser
    + POK file loader
    + register status viewer/editor
    + memory viewer/editor
    + memory bank saving
  The Multiface +3 replacement has the following known bugs/limitations:
    + hangs can occur if holding down a key in the TAP file browser
    + ROM data is not correctly displayed in the memory browser/status page
    + colours/screensaver settings are standard defaults, not user-selected
  Requires core .34 in order to allow 48K locked mode games to be interrupted
  Requires FW 1.07 and the following menu line(s) (or similar) in config.ini:
    menu=ZX Spectrum Next,2,0,enNextZX.rom,nextmmc.rom,nextmf3.rom
    menu=ZX Spectrum Next/GW,2,0,enNextGW.rom,nextmmc.rom,nextmf3.rom
* Updated browser.cfg:
    + TXT/DOC files are now displayed in 85-column hi-res
    + Added support for various screenshot types:
       - SCR   standard Spectrum screen (layer 0 or layer 1,1) as before
       - SLR   lo-res screen (layer 1,0)
       - SHR   hi-res screen (layer 1,2)
       - SHC   hi-colour screen (layer 1,3)
       - SL2   layer 2 screen

v1.98F (2018-06-04)
===================
* The "GW" version of the ROMs now includes the latest (v05) "LG" (Looking
  Glass) ROM from Geoff Wearmouth.
* Fixed RST $20 hook for exiting dot commands (previously crashed due to
  paging error).
* Fixed IM1 interrupt routine when the DivMMC ROM is active. This failed to
  save & disable layer2 write status early enough (ie before writing to DivMMC
  memory). To avoid the previously-required earlier write of a stack pointer,
  if the stack is within DivMMC RAM then the ISR is not called (this only
  occurs in the rare case of a dot-command which relocates its stack within
  its allocated 8K area).
* IDE_BROWSER call now returns the LFN of the selected file (in DE) as well as
  the short name (in HL).

v1.98E (2018-05-26)
===================
* Added support for SNX extension, acting like SNA but leaving the file open
  with handle=0 for further data loads under snapshot's control.
* Implemented additional separators ; and < for browser.cfg, controlling
  exit behaviour:
    FOO:.foo            after executing, returns to main menu (as currently)
    FOO;.foo            after executing, enters NextBASIC editor
    FOO<.foo            after executing, returns to Browser
* Updated default browser.cfg to use the new separators.
* Fixed bug where a space was added to the command line, leading some dot
  commands to include it as part of their filename argument. A colon is now
  added instead.
* Fixed the Browser to strip leading and trailing spaces from the user's input
  during rename/mkdir to prevent accidental creation of such filenames.
* Fixed bug where an unsuccessful copy or paste in the Browser prevented
  rename from being accepted until the current directory was changed.

v1.98D (2018-05-25)
===================
* The "GW" version of the ROMs now includes the latest (v04) "LG" (Looking
  Glass) ROM from Geoff Wearmouth.
* Implemented new command to select speed 0/1/2 (3.5/7/14MHz):
    RUN AT speed
* Implemented new commands to list the program (or banked section) starting
  from a particular procedure:
    LIST [#s;] PROC procname()
    BANK n LIST [#s;] PROC procname()
* Implemented new command to merge a range of program lines into a single
  line (separated with colons):
    LINE MERGE first,last
* On layers 1/2 (and in windows), PRINT AT y,x now uses character coordinates
  for consistency with layer 0 (although the number of lines/columns can change
  depending upon what character set size is selected and whether reduced height
  mode is enabled).
* On layers 1/2 (and in windows), added new positioning option to PRINT, which
  allows the print position to be specified in pixel coordinates (like PLOT):
    PRINT POINT x,y;
* Window control code 25 is now used to implement PRINT POINT, rather than the
  previous simple coordinate adjustment.
* When an error occurs, the listing in the NextBASIC editor is automatically
  adjusted to include the line that caused the error.
* The LAYER CLEAR command now also re-initialises the full-screen mode windows
  so settings like the character size are restored to defaults.
* The editor now uses its own window definitions instead of sharing BASIC's
  full-screen mode windows. This fixes issues like:
   + layer 1,2 (hi-res mode) seeming to default to 64/85 columns if that is
     the mode you usually edit in
   + Auto-running programs using layer 1,1 (standard ULA mode) defaulting to
     51-column mode if executed from the Browser
* The DISK_STRMEND call now returns the correct error code of esx_edevicebusy
  if it fails.
* Fixed a crash if an error (eg BREAK) occurs from the Tape Loader option.

v1.98C (2018-05-16)
===================
* Moved integer expression evaluator into a new overlay to free up space in
  the NextBASIC ROM.
* Fixed filesizes printed by CAT EXP (broken by v1.98B).
* Fixed integer array access via the IDE_INTEGER_VAR call.
* Ensure the error code is cleared when an error is trapped; this bug had meant
  it was previously impossible to cleanly finish a program with OK after any
  error had been trapped.
* Fixed cancellation of streaming reads at boot. Previously this only worked
  if the card being streamed from was (i) device 0; and (ii) still selected
  (ie no further disk i/o had occurred).

v1.98B (2018-05-12) [Requires core >= 1.10.31]
===================
* Added workarounds for reading register 7 (turbo) to avoid speed being
  inadvertently reduced from 14MHz to 7MHz when using layer2.
* Fixed incorrect border colour if BASIC is in layer2 mode and editor is in
  hi-res mode.
* Fixed "Nonsense in BASIC" errors sometimes occurring with READ (bug
  introduced by v1.98)
* Fixed bug in DEFPROC which prevented integer variable parameters from working
  in some circumstances (caused Q Parameter Error).
* Implemented support for keyboard/driver interrupts to occur whilst DivMMC
  is paged in, so drivers etc continue to be called during dot commands and
  BASIC commands that are implemented in the overlay (PLOT, DRAW, CIRCLE etc)
* Treat any .SNA file >64K as a 128K version.

v1.98A (2018-05-08)
===================
* Fixed TILE BANK/TILE DIM to set the correct system variables when in lo-res
  mode. This bug had prevented TILE from working correctly in lo-res.
* Added a test for BREAK during potentially long commands: LIST, CAT, COPY.
* Ensured that error report stays on screen until a new key has been pressed
  (previously would sometimes go straight to listing because eg BREAK was still
  held down).
* Added '0' key as alternative to ENTER on menus and Browser. This allows
  joystick navigation, provided it has been set up as the "cursor" type in
  the Next/TBBLUE settings.
* Reserved an extra DivMMC RAM bank (7) for future usage by NextZXOS.

v1.98 (2018-04-27)
==================
* Implemented support for executing portions of BASIC programs in additional
  memory banks, including the following commands:
    BANK n LIST [#s;][l]
    BANK n LINE l,m
    BANK n MERGE
    BANK n GOTO l
    BANK n GOSUB l
    BANK n PROC procname(paramlist) [TO resultlist]
    BANK n RESTORE [l]
* Integer loops may now be used in direct commands (previously doing this
  generated a "Direct command" error).
* Updated the Gosh Wonderful ROM to new "Looking Glass" ROM (v01) from
  Geoff Wearmouth, which supports extended mode symbols using just symbol-shift
  in 48K BASIC mode.

v1.97H (2018-04-08)
===================
* Fixed saving/restoring integer variable parameters in DEFPROC/ENDPROC,
  which previously resulted in a hang.
* Fixed integer variable names in LOCAL command, which previously produced
  a nonsense in BASIC error.

v1.97G (2018-03-12)
===================
* Fixed ide_stream_in and NEXT # command with driver ("D") channels, to
  wait for an available byte.
* Refactored keyboard i/o to use a special pre-installed driver (id 0)
  which can be replaced using the .install command and a suitable
  new driver file.

v1.97F (2018-03-06)
===================
* Fixed "out-of-screen" errors in NextZXOS mode (64/85cols), broken by v1.97E.
* Added checks to prevent special "." and ".." directories from being renamed,
  moved or erased.
* Fixed "invalid colour" errors when LISTing a legacy (48K) BASIC program
  containing embedded colour items.
* Partially implemented IDE_PATH for +3DOS drives, so CD "M:" can now be used.

v1.97E (2018-03-04)
===================
* Fixed problem where renaming a file sometimes resulted in the wrong LFN
  being deleted.
* Fixed crash in PLAY command with T (tempo) parameter.
* Fixed hang with out-of-range PRINT AT in windows (and LAYER 1/2 full-screen).

v1.97D (2018-03-03)
===================
* Fixed Browser to respond to shifted cursor right key (as well as 8); exposed
  by recent keymap changes.
* Fix for missing cursor in INPUT and Browser inputs etc (broken in v1.97C).
* Ensure snapshots are always loaded in layer 0.
* Ensure standard .SCR screenshots are loaded from the Browser in layer 0.

v1.97C (2018-02-28)
===================
* Fixed bug in window printing routines, where double-width/height printing
  routine overwrote calculator memories causing incorrect output of floating-
  point numbers.

v1.97B (2018-02-22)
===================
* Improved boot speed (typically ~3x faster from ROM load to menu display;
  this went from 3.6s to 1.2s on 16GB Toshiba FlashAir with 3 partitions).
* When tape loading occurs, border is set to red immediately so this is more
  obvious to the user.
* Fixed problems with automatic creation of .BAK files when overwriting existing
  files.
* Fixed swapping of Editor/BASIC modes and speeds etc if an error occured during
  evaluation of a standalone expression in BASIC or the Calculator.
* Prevented scroll pause occuring when using "Screen" option in 64/85 col mode.
* Fixed renaming problems in the Browser, where only the short filename was
  provided to edit for the last file in the list.
* Fixed moving of directories to ensure the ".." special entry is correctly
  updated to point to the new parent directory.
* Fixed editor so that following execution of a BASIC statement/program, the
  same lines are displayed as before (instead of returning to program top).
* Fixed cursors becoming hidden or orphaned when switching between 32/64/85
  columns in the Calculator.
* Fixed syntax-checking of PWD #n and CAT #n commands (broken by v1.97 changes).
* Fixed parsing of CAT command; now CAT- #n commands are correctly parsed.

v1.97A (2018-02-19)
===================
* Enabled use of Z80N PixelDn instruction in text output code for windows &
  layer 1/2 screens (requires core v1.10.17+).
* Fixed permanent INVERSE/OVER settings for layer 1/2 modes - these were being
  ignored.

v1.97 (2018-02-19)
==================
* Updated PLAY command to support turbosound. 9 strings may now be specified,
  with each set of 3 going to a different AY chip.
* Added L,R,S parameters to PLAY command: these confine the audio output for
  the current AY chip to either the Left or Right channels (or S to reinstate
  stereo).
* Reduced default volume to 13 when more than 3 PLAY strings are specified, to
  prevent clipping.
* Implemented DRAW, CIRCLE and POINT commands for all layer 1/2 modes. CIRCLE
  for layer 1/2 is implemented using Bresenham's algorithm for improved speed.
* Allow PLOT, DRAW and CIRCLE to include off-screen points on layer 1/2 modes,
  so clipped shapes may easily be drawn without invoking out-of-screen errors.
* Implemented support for temporary colour items for PLOT/DRAW/CIRCLE on layer 1/2.
* Fixed temporary colour item support in layer 1/2 PRINT/INPUT statements.
* Fixed corruption of UDGs S,T,U at NEW/reset.
* Fixed editor to display UDGs within strings correctly, instead of replacing
  them with new NextBASIC tokens.
* Started using more Z80N instructions where possible for speed & space-saving,
  particularly: NextReg, PixelAd, PixelDn, SetAe, PushVal.
  NOTE: This change means v1.97+ requires core 1.10.14+ to run stably.

v1.96A (2018-02-12)
===================
* Fixed TAP loader (TAPLOAD.BAS) to use the new "NEXT #n TO var" syntax.
* Fixed ON ERROR to replace existing error handler at current level, rather
  than installing an additional one.

v1.96 (2018-02-11)
==================
* Implemented procedures, with new DEFPROC, PROC, ENDPROC and LOCAL commands.
* Implemented error-trapping, with new ON ERROR, ERROR and ERROR TO commands.
* For consistency with PROC/DRIVER/ERROR commands, changed syntax of these
  commands:
    DIM #n,var                  -->     DIM #n TO var
    RETURN #n,var               -->     RETURN #n TO var
    NEXT #n,var                 -->     NEXT #n TO var
    BANK n PEEK offset,var      -->     BANK n PEEK offset TO var
  (This will also apply to the as-yet-unimplemented POINT command).
* Removed "Boot A:" menu option: unneeded as Browser will be made to auto-boot
  any disk images that it mounts.
* Remove NEW DATA/NEW EXP commands: these will later be replaced by .mkdata
  and .mkswap dot commands.
* Stubbed out FORMAT d$ command: this will later be done by .mkdsk and/or
  .format dot commands.
* Some refactoring to save space in the NextBASIC ROM.
* NOTE: Due to new commands being added, some token values have changed and
        saved NextBASIC programs may need to be re-edited to fix them.

v1.95B (2018-02-06)
===================
* Fixed assignments to elements of integer arrays.
* Corrected "Too many brackets" error to "Too many parentheses"
* Renamed modulus operator from % to MOD to avoid confusion with symbol
  introducing an integer expression.
* Removed unary + and - operators from integer expression evaluator, as all
  values are unsigned in range 0..65535.
* Removed negative STEP processing in integer loops.

v1.95A (2018-02-03)
===================
* Tape SAVEs no longer print "Start tape and press any key" message, so screens
  can be saved without being partly overwritten.
* INPUT now returns zero for an empty numeric input instead of causing a
  "nonsense in BASIC" error.
* After a "LIST n" command, the editor now uses "n" as the current line number
  being edited (as in 48K mode).
* Unsupported keys in menus now produce error beep instead of "success" click.
* Fix for various editing issues in NextZXOS command-line mode, leading to odd
  cursor movements and other problems.
* Fix for hang in editor after loading BASIC programs from the Browser with
  different line numbers to the previous program.
* Fix for various cursor issues in the Calculator, especially in hi-res modes.
* Fix for screen problems when switching column modes in the Calculator.
* Fix for crash when LAYER 1,3 is executed in NextZXOS command-line mode.
* Fix for extended mode cursor colour/shape not being updated when an
  unsupported key is pressed.
* Fix CLEAR to clear the screen in the current mode. Previously it could leave
  the mode in an indeterminate state, causing strange effects after a CLEAR
  or RUN in a non-standard mode.

v1.95 (2018-01-28)
==================
* Implemented LOAD/SAVE/VERIFY...BANK and LOAD/SAVE/VERIFY...LAYER commands,
  so banks and screens in any mode can now be loaded/saved to disk or tape
  (or .TAP).
* Minor fixes for LOAD/SAVE command syntax checking.
* Removed the BANK..LOAD/SAVE commands.
* Added RST $20 hook for dot commands to terminate and auto-start a loaded
  program.
* Increased maximum allowable size of RTC.SYS module to 512 bytes.
* Implemented support for installable device drivers, with new M_DRVAPI
  hook, IDE_DRIVER +3DOS call and DRIVER NextBASIC command.
* Removed the FORMAT LPRINT and FORMAT LINE commands.
* Updated Gosh Wonderful ROM to v1.33, compatible with Nirvana engines.

v1.94B (2018-01-18)
===================
* Dot commands are now started with BC=address of entire command line, as
  well as HL=address of command arguments
* Implemented M_GETHANDLE to allow dot commands >8K to read their own file.
* Implemented M_EXECCMD hook.
* Added new M_GETERR hook for reporting/retrieving esxDOS error messages.

v1.94A (2018-01-17)
===================
* Added support for setting the ULA clip window with the LAYER DIM command
* Implemented the COPY f$ TO #n command
* Improved COPY f$ TO SCREEN$/LPRINT/#n commands to cope with Unix (LF),
  Sinclair (CR) or DOS (CRLF) line endings
* Fixed an esxDOS error message

v1.94 (2018-01-15)
==================
* Major rework of BASIC parser to make space for new features
* Implemented LINE line,step command for renumbering BASIC program
* Implemented ERASE n,m command for erasing lines of a BASIC program
* Implemented ERASE command to erase entire BASIC program (can be used within
  c:/nextzxos/autoexec.bas, for example)
* Implemented REPEAT...[WHILE]...REPEAT UNTIL loops
* Ensured all BASIC commands accessing memory banks now respect allocations
  made by external programs using the IDE_BANK API call
* Implemented BANK CLEAR and BANK NEW commands to explicitly free/reserve banks
* Allow LAYER BANK command to be executed in any mode, and make layer2 banks
  owned by BASIC
* Added workaround for buggy esxDOS dot commands (eg .dumpmem) that create
  files but neglect to select write access for them
* Implemented new file streaming API, allowing files to be read under control
  of applications with minimal OS involvement (DISK_FILEMAP,DISK_STRMSTART,
  DISK_STRMEND hooks in esxDOS-compatible API)
* Major rework of esxDOS-compatible API layer, including various fixes
* Implemented the following esxDOS hooks:
    F_TELLDIR, F_SEEKDIR, F_REWINDDIR
    M_GETDATE, M_DOSVERSION, M_GETSETDRV
    F_UNLINK, F_CHMOD, F_STAT, F_RENAME
    F_FTRUNCATE, F_TRUNCATE, F_GETFREE
* Added enhanced versions of the following esxDOS hooks:
    M_DOSVERSION: providing info on version and mode (NextZXOS/48K mode)
    F_READDIR: returning long filenames (LFNs) if requested
    M_TAPEIN: allowing tape simulation mode to be selected
* Added new M_P3DOS hook, allowing programs and dot commands to easily
  access +3DOS/IDEDOS/NextZXOS API calls, using the RST $8 mechanism

v1.93C (2018-01-05)
===================
* Fixed default ULA colours; previous "normal" colours were too dark.
* Fixed PALETTE commands which were using an old out-of-date method to set 9-bit
  colour values, which the hardware no longer supports.

v1.93B (2018-01-02)
===================
* Fixed uninitialised variable in snapshot loader that could be overwritten
  by BASIC program presence (eg AUTOEXEC.BAS) and cause snapshot load to fail.
* Fixed printing of characters in layer2 which straddled an 8K boundary, due
  to incorrect re-initialisation of stride value.
* Added workaround to esxdos emulator for buggy dot commands (.dumpmem)
  which fail to set write mode when opening newly-created files.

v1.93A (2017-12-29)
===================
* Added patch to IM1 routine in 48K BASIC ROM so that games using BiFrost
  and Nirvana multicolour engines detect NextZXOS as a 128K Spectrum and use
  appropriate timing. (Patch not currently present in GW version of ROMs).
* Fixed v3 Z80 snapshot loading issue where port 1ffd value was not set if
  provided by the snapshot (and was incorrectly set to zero if not provided).
  Fixes some 128K snapshots which use the ROM before doing their own paging
  (eg Addams Family).

v1.93 (2017-12-23)
==================
* Integer expressions can now be used anywhere that a numeric value is required.
* Implemented fast FOR/NEXT loops with integer loop variables.
* Implemented ELSE command for use in IF..THEN..ELSE constructs.
* Fixed OPEN # to allow long filenames to be used.
* Various space-saving optimisations.

v1.92D (2017-12-22)
===================
* Disable Timex modes support before loading ZX80/1 snapshots, since some hi-res
  games otherwise accidentally change modes (eg Against The Elements).

v1.92C (2017-12-20)
===================
* Re-enabled support for second SD slot (previously disabled to save space during
  development).
* Fix for renumber routine generating incorrect hidden numbers in GOTOs/GOSUBs.
* Optimised file read operations to read complete sectors direct to destination
  instead of via sector buffers.
* Moved tape load trap to later on ($562->$569) to support certain games (eg
  Arc of Yesod 128).

v1.92B (2017-12-17)
===================
* Fixed bug in TAP loading causing some games to unnecessarily be loaded using
  a slow path, and taking much longer to load (eg Dizzy VII, Thanatos 128).
* Added border feedback during TAP loading which really does require the
  slow path to be used (eg Rainbow Islands).
* Fixed the banner in the TAP loader to align stripes correctly.
* Added "erasing..." information message during erase operations in the Browser.

v1.92A (2017-12-14)
===================
* Implemented support for optional tape simulation during TAP file loading
* Increased optional loading screen pause to 5 secs
* Fixes for various non-working TAP files:
   + Out of memory errors (eg Trans Am)
   + Corrected return values for blocks including part of the ROM (eg Rainbow
     Islands)
   + Fix to cope with Chase HQ 128 protection mechanism
* Fix for potential crash if syntax errors generated in IDE_BASIC API call
* Fix for infinite error-checking loop/crash in esxdos emulator if line numbers
  greater than 9999 entered
* Fix for crashes if default streams (0..3) left redirected to user-defined
  channels at BASIC error reports
* Fix for crashes in renumber routine due to stack corruption
* Fix SPECTRUM command to clear ZX printer buffer before entering 48K mode
* Browser fixes:
   + Fixed path display line to be cleared before updating (broken by v1.92)
   + Added "copying..." information message during copy operations

v1.92 (2017-12-12)
==================
* Implemented support for real-time clock, requiring valid RTC.SYS in the
  C:/NEXTZXOS directory, and a ZX Next with RTC module. This support provides:
   + date/timestamps when SD card files/dirs are created or updated
   + current date and time shown is shown in menus
* Re-write of expanded catalog command (CAT EXP). This now shows dates/times
  of files and exact filesizes.
* Updated the IDE_GET_LFN +3DOS call to also return time/date stamps and
  exact filesizes.
* Added new IDE_RTC call to query the current date and time.
* Implemented screensaver functionality.
* Added new SPECTRUM SCREEN$ command to select screensaver type and timeout.
* Implemented SPECTRUM CHR$ command to select editor columns (32/64/85).
* Implemented support for LOADing a C:/NEXTZXOS/AUTOEXEC.BAS program for setting
  desired defaults etc.
* Implemented support for LOADing a C:/NEXTZXOS/RUN.BAS program if RUN is
  executed when there is no BASIC program in memory.
* Changed the TILE and BANK...LAYER commands to use the new Z80N opcodes
  LDIX/LDIRX for improved performance.
* Fixed NextZXOS command line and Browser options to respect any user-defined
  colour schemes set using the SPECTRUM INK/PAPER/BRIGHT/FLASH/ATTR commands.
* Various fixes for user-defined colour schemes.
* Changed the scroll pause feature for windows to use an inverted block in the
  bottom right-hand corner instead of a flashing one, and to accept any key.
* Fixed crash in scroll pause feature if ENTER/CAPS/EXTEND/GRAPHICS pressed.
* Fix loading of 48K SNA snapshots where SP lies between $4000 and $4005. Not
  normally seen, but can be created by SNASM.
* Fixed TAP loader to clear all BASIC workspaces to prevent Out of memory errors
  loading some games (eg TransAm).

v1.91 (2017-12-05)
==================
* Fix for TILE commands hanging in invalid modes.
* Rainbow stripes in banners now look consistent with original 128K machines.
* Fixed loading of 128K SNA snapshots where page 7 was the "current" page (not
  properly fixed in v1.86).
* Added workaround to support some 128K TAPs (eg Thanatos 128K) which load the
  stack including returns into the original 128K syntax ROM.
* Fix for error reporting in PLOT command, which previously caused hangs.
* Re-enabled PLAY command (now loaded at boot from new overlay.sys file).
* Re-enabled renumber menu option (also present in overlay.sys).
* Improved dot command handling so that any files left open by the dot are
  automatically closed on exit, or if a BASIC error occurs.
* Added installable error handlers for dot commands on RST $8;defb $95.

v1.90 (2017-12-03)
==================
* Fix for RST$18/RST$10 calls in dot commands.
* Fix for command length returned by IDE_BROWSER call if wildcards used.
* Added workaround to allow some snapshots taken on 128/+2 machines whilst
  still in 128 BASIC (eg Slightly Magic) to run in the +3/NextZXOS configuration
  by trapping original 128K command class returns in ROM 2 and diverting to ROM 1.
* Fix for NextBASIC banner being left on-screen during direct command execution.
* Fix for crash if dot command executed after a previous dot command had
  abnormally terminated (eg BREAK in screen output)

v1.89 (2017-11-30)
==================
* Added remount/mkdir/rename/copy/paste/erase options to Browser
* Added fine-grain control of new Browser features in IDE_BROWSER API call
* Added new BANK...LAYER command for copying data between screen (in current
  mode) and memory, with optional raster operations
* Fixed TILE command to not write transparent pixels (NOTE: currently using
  standard Z80 instructions rather than faster Z80N ldix)
* Renumber menu option temporarily disabled due to lack of ROM space
* Fixed operation of TAB in text windows, and modes other than LAYER 0
* Fixed AY enable at boot
* Fixed RST $18 (call ROM3 routine) from dot commands

v1.88 (2017-11-26)
==================
* Rewrite of initialisation/NEW code
    + now initialises all 3 AY chips
    + fixed & improved border colour error "reporting" in memory test routine
    + fixed bug where streams 4+ would be left open across a NEW although their
      channels may have disappeared
    + ensure required peripheral settings (Timex modes on, DivMMC auto-paging off,
      turbo selection on, AYs on, multiface currently disabled)
* Fixed Browser to set the currently-selected drive for LOAD and SAVE operations
  as well as general disk operations
* Implemented lower-screen editing for Hi-res, so "screen" editing mode is now
  usable in 64/85 column modes
* The NextZXOS command line menu option now has a persistent mode, so BASIC always
  inherits the currently-selected editing mode (unlike the NextBASIC option,
  which still has distinct display modes for editing and BASIC)
* Extended mode symbols underneath keys Y,U,P,A,S,D,F,G now available with just
  symbol shift+key (copyright symbol is symbol shift+Q since P already has ").

v1.87 (2017-11-23)
==================
* Implemented line input handler for window channels. INPUT # may now be used
  with window, file, variable and memory channels as well as the standard "K"
  channel.
* Implemented new IDE_WINDOW_LINEIN call to perform line input on window channels.
* Implemented new IDE_INTEGER_VAR call to allow any of the new integer variables
  to be read or written.
* Implemented new REMOUNT command to allow removal/re-insertion of SD cards
* Fixes to esxdos m_tapein/m_tapeout functions:
    + in_open now automatically closes any current tape file
    + in_setpos fixed to work in blocks
    + undocumented in_getpos functionality added (cf .tapls disassembly)
    + in_pause implemented to allow pause at loading screen
    + added stack protection during tape load trap
    + fully-implemented all possible exit conditions from load trap
    + implemented save trap
* SPECTRUM command (with no parameters) now continues executing statements
  instead of terminating with an OK report (needed for TAP helper)
* Added a new TAP file helper program for loading TAPs from the Browser
* Improved system consistency validation: enNextZX.rom, nextmmc.rom and
  esxemu.sys now all stamped with current NextZXOS version number and validated
  at boot time.
* Fixed potential memory/stack corruption and hangs when switching between
  LAYER 0 and LAYER 1/2.
* Prevented keypress at BASIC report from being passed to the menu system
  (typically the user would press ENTER and the first menu item, ie Browser,
  would be automatically executed).

v1.86 (2017-11-14)
==================
* Complete re-write of windowing code:
    + Implemented all features in all modes, with the exception of line input
    + Optimised window character output routine in standard and Timex modes
    + Fixed opening window channels with OPEN #
    + Auto-pause is now enabled by default for the LAYER 1/2 screens (but
      disabled by default for user-defined windows in all modes)
* Browser optimisations and minor fixes
* Fixed loading of 128K SNA snapshots where page 7 was the "current" page
* Implemented IDE_BROWSER, IDE_BANK, IDE_BASIC and IDE_WINDOW_STRING API calls
  (NOTE: The BASIC BANK command doesn't yet respect/use IDE_BANK)

v1.85 (2017-10-27)
==================
* Fixed issue in tokenizer where required spaces were removed after keywords
  ending in $ or # (eg CHR$, OPEN#)
* Tweaked esxDOS error messages
* Streamlined available drives boot message
* Updated TILE command to support map widths up to 2048 (previously 256), and
  to support 16x16 tiles as well as 8x8 tiles
* Added TILE DIM and SPRITE DIM commands to set clip windows for layer2 and
  sprite layer (NB: sprite clip not yet working/available in hardware)

v1.84 (2017-10-25)
==================
* ROMs renamed (nxten2eE.rom -> enNextZX.rom, and p3divmmc.rom -> nextmmc.rom)
  NOTE: Don't forget to update your config.ini to reflect this
* esxDOS emulation layer is now loaded from a file, C:/NEXTZXOS/ESXEMU.BIN
* Implemented full error reporting for dot commands
* Fixed some issues with parts of dot command names and parameters sometimes
  being tokenized (eg /bin would be tokenized with BIN keyword)
* Fixed bug where dot command couldn't be entered as first statement on a
  program line (due to calculator accepting it as an expression)
* Fixed tokenisation problems preventing > and < being accepted in expressions
* Dot commands can now formally be executed from anywhere by starting name
  with . or / path character, eg to execute "mycommand" in current directory:
  ../mycommand
  (NOTE: Maximum 32 characters path/name in total)
* Parameterless dot commands supported by updated browser.cfg (if named with
  .dot extension)

