Version 0.2pl0
--------------
First public release.


Version 0.2pl1 (Thu Feb 10 1994)
--------------
 
 o Added support for compilation on AIX and HP/UX.
   Thanks to Stephan Lindstrom and Jarkko Lavinen for the information.

 o Got XZX working with Monochrome displays.  Made colour allocation
   somewhat less antisocial, too.

 o Added support to emulate a 16K spectrum.  (Useful, huh? :-)

 o Fixed a problem which caused XZX to hang occasionally with slow displays.

 o Fixed a bug where the ROM could only be read from the current directory.

 o Fixed a problem where the symbol MIN was redefined on some platforms.


Version 0.3pl0 (Thu Feb 24 1994)
--------------

 o Added support for FLASHing attributes.  Not very efficient, though.
   Can be disabled with the -flashing option, in which case FLASH is
   implemented as INVERSE.

 o XZX can now read (but not write) Z80 format snapshots.  Thanks to
   Gerton Lunter for his Z80 format description in Z80.DOC.

 o Added setitimer-style interrupt generation to (hopefully) guarantee
   50 interrupts/sec.

 o Fixed monochrome X server support, hopefully.  Monochrome colours
   now contrast properly, too.

 o Added -private and -mono colormap handling options.  Useful if you
   run out of colors on a PseudoColor display.

 o Made image transfer a bit friendlier in that images are only
   sent if the screen has recently changed.  Thanks to Stephen Usher
   and Jonathan Brazier for pointing this out to me.

 o Added support for Kempston joystick emulation using an analogue PC 
   joystick on Linux.  Requires the joystick kernel patches.

 o A couple of other minor bugfixes/optimisations.


Version 0.4pl0 (Thu Mar 10 1994)
--------------

 o Local X server detection now works better - thanks to Ronald Hartwig.

 o XZX no longer crashes if snapshot names do not contain a dot.

 o Basic sound support for Sparc Stations only - music sounds pretty
   awful, but simple sound effects work reasonably well.  Must be on
   the console, since it uses /dev/audio.  Thanks to "Purple Tentacle"

 o Fixed display for monochrome displays (finally, I hope :-).  Also added
   halftoning colour simulation for SCALING > 1.  Thanks to Ian Collier.

 o Fixed some bugs with PushValue/PopValue - a few more snapshots now
   appear to work.

 o LOAD and SAVE will dump CODE and programs to a file.  Not well tested,
   and I had problems with loading BASIC, but give it a go and tell me how
   it works.  Thanks to Russell Marks & Ronald Hartwig.

 o It's now possible to read and write single characters to & from
   stdin, stdout and stderr, using I/O ports.  Read the man page for
   more details.  Thanks to Ronald Hartwig again, who's obviously 
   been busy lately :-)

 o Some more minor bugfixes/optimisations.


Version 0.5 (Tue Mar 29)
-----------

 o Added Interface 1 Shadow ROM and Microdrive support!  RS232 
   emulation also possible via the Shadow ROM, which makes the
   PSEUDO_IO code a bit superfluous.  Both mechanisms can co-exist,
   though.  Thanks to Martin Smith. 

 o Fixed LOAD_SAVE support - BASIC programs now work correctly, and
   'SAVE "prog" LINE x' also works.  Thanks to Russell Marks.

 o An alternative LOAD/SAVE mechanism, thanks to Ian Collier.  Both
   methods write compatible dumps, but at most one method may be 
   selected at compile-time.  LOAD_SAVE flag changed to a choice of
   LOAD_SAVE_1 or LOAD_SAVE_2.  See the Imakefile for details.

 o F8 now generates an NMI.  Thanks to Ian Collier.

 o Made /dev/audio sound support work on Linux.  Sounds pretty crap,
   but recognisable.  Also works on the NEC EWS 4800/330, very well.

 o Added PC Speaker style audio support for Linux.  Sounds much better
   than /dev/audio support - recommended.  Must run suid root, though.
   Thanks again to Russell Marks.

 o Added resource-configurable keyboard emulation for a kempston joystick.

 o Made XZX more environmentally friendly; tells the window manager
   everything it needs to know, and tries to appear under the mouse
   pointer (though your window manager has the final say).

 o The default PSEUDO_IO ports have been moved to 48896 (stdin),
   48897 (stdout), and 48898 (stderr).  That's BF00, BF01 and BF02 hex.
   I did this to avoid a clash with the Shadow ROM and Microdrive routines.

 o Improved the Linux joystick calibration mechanism somewhat.

 o Yet more minor bugfixes.


Version 0.5pl1 (Thu Apr 28 1994)
--------------

 o Fixed a problem where files could not be read from the XZX library
   directory.


Version 0.5pl2 (Wed May 11 1994)
--------------

 o Another fix to monochrome server support.  Apparently images come up
   mirrored on some monochrome X servers - it's all down to byte and bit
   order incompatibilities.  Hopefully it all works now.  Thanks to
   Dougie McLaggan for this one.

 o Optimised the screen refresh algorithm a bit - XZX now only sends the
   portion of the screen which has changed since the last update.  Still
   not perfect, but non-MITSHM refresh is now a little bit smoother.
   MITSHM transfer will not be much affected.

 o Fixed .z80 snapshot support.  I can't remember who sent me this fix, but
   whoever you are, send me some mail, and I'll include your name next time
   round :-)

 o auxfuncs.c is now #include'd, since I can take advantage of gcc's
   inlining.  This won't have any effect for compilers which don't provide
   inlining, but should run a tad faster for compilers which do.

 o Fixed a problem where 'make depend' didn't work.

 o Screen refresh frequencies are now run-time configurable through two
   new options, rrShm and rrNoshm.  Check out the manual page for more
   details.

 o The libDir resource can now be a colon-separated pathname.  Its new
   default is '.:<LIBDIR>', (usually '.:/usr/local/lib/xzx') so that
   default behaviour is unchanged.

 o A new feature, LEVEL_LOADER, has been added, to make multi-load games a
   bit more usable.  This does require modified snapshots, however, which will
   be available sometime soon.  Observance of the usual copyright laws is at
   the user's discretion.  Thanks to Russell Marks.

 o Another new feature - SLOWDOWN.  This allows you to reduce XZX's speed
   when running on very fast machines e.g. DEC Alpha, Sparc 10... 
   Also now possible to adjust XZX's speed while it's running.  See the
   manual page for more details.


Version 0.5pl3 (Wed May 11 1994)
--------------

 o Fixed a problem where rrShm and rrNoshm were swapped.


Version 0.5pl4 (Thu May 12 1994)
--------------
 
 o Fixed a problem with the definition of NUMKEYMAPPINGS being wrong
   when SLOWDOWN is not defined.


(lots of internal versions followed)


Version 1.0
-----------
 
 o Added 128K and +3 emulation.  Possible to select between 48K, 128K
   and +3 emulations at startup time and on the fly.  Includes (incomplete)
   floppy disk emulation on the +3 and working Interface 1 in 128K mode.
   Does not includes sound chip emulation (yet).  Thanks to Thomas Kjaer
   for much of the work on this.

 o XZX now reads and writes new format .Z80 snapshots.  This includes
   128K snaps.

 o XZX now uses a segmented memory model, mainly to allow 128K support. 
   This also speeds up the IF1 emulation somewhat.

 o Instruction emulation now implemented as a switch statement - avoids
   function call overheads, somewhat more efficient.

 o Significant code rewrite and tidy-up.  Still a bit of a mess though...

 o Added a popup dialog box which is used whenever XZX requires text from
   the user (e.g snapshot names...).  No more messing about on the xterm
   command line.

 o Fixed a couple of bugs with the snapshot reading/writing code - almost
   all of the snapshots I've tried now work.  Thanks to Tim Bevan.

 o Standardised on the LOAD_SAVE_1 mechanism, which is now just called
   LOAD_SAVE again.  LOAD_SAVE now implemented using trap pseudo-ops, 
   which is a little faster.

 o The default PSEUDO_IO ports have been moved to 191 (stdin),
   447 (stdout), and 703 (stderr).  That's 00BF, 01BF and 02BF hex.
   This is more correct since the low byte selects the operation
   and the high byte modifies the operation's behaviour.

 o The XZX window no longer appears under the mouse pointer, since I
   and others found it annoying.  Added a -geometry option to specify
   XZX's position.  If not specified, it's up to the window manager.

 o If XZX fails to get the 16 colours it needs on a PseudoColor display,
   it now uses a private colormap by default, rather than going mono.

 o Fixed emulation of undocumented behaviour of the BIT instruction,
   which means that the hippo now behaves himself in Sabre Wulf :-)
   Thanks to Tim Bevan.

 o Improved IF1 RS232 emulation.  RS232 input is nonblocking, so 
   INKEY$#n works better.

 o It was Ian Collier who fixed .z80 snapshot support in 0.5.2.  Thanks!

 o Other minor changes too numerous to mention.


Version 1.0.1
-------------
 
 o Several bugfixes.

 o A couple of minor optimisations to the emulation code.

 o Added a trap to the ROM to catch the BEEP routine and ring the 
   X server bell.

 o Provided a makefile.std for those without imake.


Version 1.0.2 (Mon 12 Sep 1994)
-------------------------------

  o Just a couple of minor bugfixes/optimisations.


**************************************************************************

      Following versions by Erik Kunze (Erik.Kunze@fantasy.muc.de)

**************************************************************************

Version 2.0.0beta (Sat Jun 15 1996)
-----------------

  o Several bugfixes.

  o Input and output operations now handled in io.c.

  o Emulate more undocumented ED-prefixed instructions.

  o Added undocumented instructions to the disassembler.

  o Bugfixes in LDIR/LDDR/CPIR/CPDR/OTIR/OTDR so Zynaps will run.

  o Multiface 128 support (very primitve at the moment).

  o AY sound emulation under LINUX

  o Added support for reading Z80 V3.x snapshots.

  o Heavy optimizations in X11 display routines.

  o Pixmap routines now working with all scaling factors.

  o Added T-state counting (for speed calculaton).

  o Other minor changes too numerous to mention.

  o Source is now managed with RCS.


Version 2.0.1 (Sun Aug 25 1996)
-------------

  o AY emulation improved

  o Automatic recognition of Spectrum type when loading snapshot


Version 2.0.2 (Sun Sep 15 1996)
-------------

  o Removed counter style interrupt handling, T-states are mandatory from now
    on.

  o Added a kludge for people who run out of memory when compiling z80.c.
    Look at the README file for a description!

  o Added patches from Lars Koeller <Lars_Koeller@odie.physik2.Uni-Rostock.DE>
    - FreeBSD joystick support

  o Added patches from Anders Hallstrm <andersh@elixir.e.kth.se>
    - Fixed R-register emulation (makes Daley128 working)
    - Fixed 'Unexpected X11 event 33'
    - Added switch '-ms' to control interrupts
    - Show warning in case the emulator wasn't compiled with IF1 support
      and snapshot uses IF1 (snapshot.c).

      NOTE: This may result in strange errors. You ought to compile in
            IF1 support or re-snap the snapshot without IF1.

    - Check for interrupt mode (IM) on SNA snapshots. Some snapshots contain
      strange values.
    
  o Added patches from Razvan Surdulescu <surdules@fas.harvard.edu>
    - Magnification between Spectrum and X11 pixel is now selectable on startup
      of the emulator (-scale).
    - Support for 8/16/32bpp X server
    - Changed WR_BYTE to only write a byte in video memory if different from
      what's already there (speed improvement with JetSetWilly).

  o Added patches from M Pikula <pikula@dec3.dcs.elf.stuba.sk>
    - Placed 'signal(SIG_XCPU, SIGIGN)' in main() for Ultrix machines. The cpp
      macro might be wrong.
    - Added a kludge to avoid problems with '#define DEC' in z80.c on DEC
      machines.

  o Changed command line options and X11 resource names to be similar to the
    names used by version 3.X (Motif) of the emulator. Be sure to install the
    new application defaults file.

    NOTE: Version 3.X has not been released yet!

  o Fixed a bug in loadsave.c which caused a segmentation fault

  o Fixed a bug with Z80's interrupt handling

  o Fixed bugs in fdc.c

  o Fixed INning from Multiface 128 ports. Bit 7 represents Bit 3 of the byte
    last written to port 7FFDh.

  o All AY registers are reset on Z80 reset. This might be wrong.

  o Added issue 2 emulation on 48K Spectrums

  o Other minor changes too numerous to mention.

  o Some cosmetic changes


Version 2.0.3 (Thu Oct 3 1996)
-------------

  o Changed the mapping of the function keys F1-F12. See manpage for more
    details.

  o Changed source to include Spectrum +3 emulation only when XZX_PLUS3 is
    defined. Little speed improvement without +3 emulation.

  o Changed command line options and resource names again. Sorry...

  o Rewritten io.[ch] to decode hardware on specific address lines and not on
    complete addresses. This makes a bunch of games working with XZX. Rewritten
    the 128/+3 banking function for more speed. Prepared support for ZX printer,
    Centronics and FDC port on +3.

  o If you read from a port that activates both the keyboard and a joystick
    port (e.g. Kempston), the joystick takes priority.

    To Damien: Please exclude XZX from the list of emulators which do not
               have this feature corrected !!!

  o New source tree introduced and updated Imakefile. Imakefile finds out most
    of the defines (endianess, strcasecmp, uname). Please control the result of
    imake. The produced Makefile might be wrong. If you find that the defines
    are wrong, please mail me a desription of your system.

  o When loading SNA snaphot, the screen wasn't updated.

  o Added a function to dump the entire Spectrum screen to a file in .SCR
    format.

  o Added support for INing from nonexisting (idle) port. The CPU would read a
    mixture of FF's and ATTR.

  o Added a check for endianess to main(). Just to be sure, imake won't joke us.

  o Rewritten color handling in screen-writing functions to improve the speed
    of the emulator. This makes most of the games running with more then 100%
    speed on my Linux box (Pentium 100, 48MB RAM, 8bpp) even with a scale of 3.

  o Inspirated by xz80 I added a new screen writing algorithm to avoid consuming
    CPU time by those 'rainbowing' programs. The old one can be selected on
    compile time by defining OLD_VIDEO. Try Zynaps with and without OLD_VIDEO
    defined. Thanks to Ian Collier for the inspiration.

  o Renamed xspec.[ch] to screen.[ch]. Sorry...

  o Fixed problems with '-ansi' in makefiles (Razvan Surdulescu).

  o Cleanup in audio.c. I have still problems with signal handling under Linux
    (see TODO).

  o According to Z80 specs, interrupts are not enabled until AFTER the
    instruction following the EI. Thanks to A.J.Skillman <ajs@hep.ucl.ac.uk>.

  o Print out snapshot format and hardware type on snapshot loading.

  o Introduced a new debugging feature. By defining XDEBUG XZX prints out all
    XZX specific X resources.

  o Support for both versions of IFI ROMs from Sinclair. Thanks again to Ian
    Collier.

  o Fixed a bug with the X event mask on the main window (Razvan Surdulescu).

  o Fixed a bug with magnification by 3.

  o Fixed a bug in calcWinPosition().

  o Updated the documentation files. Well, some '#ifdef's are intentional
    undocumented.

  o Back againg: emul.[ch] :-) Shifted Z80 emulation to a subdirectory. This
    will become a generic (standalone) emulation kernel.

  o Shifted audio emulation to a subdirectory. From now on each audio emulation
    type is held in a separate file. Prepared for Sun AY emulation and NAS
    support.

  o Fixed some typos


Version 2.0.4 (Thu Oct 3 1996)
-------------

  o Fixes the bugs with audio emulation.


Version 2.1.0 (Wed Nov 13 1996)
-------------

  o DAA optimized

  o When reading from Port 31 (Kempston) Bit 5-7 are allways 0 (from the FAQ).
    Is that really true???

  o On-screen-menus (Razvan Surdulescu)

  o Reset the Z80 before loading a snapshot.

  o Fixed a bug in readZ80Format() when loading a Z80 V1.0 format (Razvan
    Surdulescu).

  o Fixed a bug where the CARRY flag wasn't preserved on CP[ID](R) operations.

  o Fixed all known bugs in the Z80 emulation. I hope there's no one left.
    All my 128K snaps run fine and Arkanoid (idle port!) too.

  o Renamed the variable HAS_UNAME to NEED_UNAME (the name is misleading
    since it sez 'Uncomment this if your machine needs the functions get_uname
    etc). 

  o Fixed bug in SelectModel() where the Z80 never gets reseted.

  o Added check for 128K SNA snapshots to readSnaFormat(). XZX does not and
    will not support 128K SNA snapshots. Please use a snapshot converter
    utility to load those snapshots.

  o Ignore SamRam and M.G.T. when loading Z80 V3.X snapshots rather then
    aborting the loading process (Razvan Surdulescu).

  o Changed makefile.std.

  o Added TAP support (loading/saving). Loading from and saving to UNIX files
    (the old implementation) is no longer supported. Defining LOAD_SAVE is now
    absolete, because the TAP support is mandatory.

  o Made the border emulation switchable. This is necessary for programms
    which try to do fancy border drawing. That makes the program EXTREMELY slow
    since it updates/flushes the display a lot (Razvan Surdulescu).

  o Turn off IF1 and MF128 emulation in SelectModel() when entering +3 mode.

  o Check for ROM type before setting the BEEP (XBELL_AUDIO) trap.

  o Print out an additional information in version() if XZX was compiled with
    debugging enabled (Anders Hallstrm).

  o Multiface 128 works now in 48K and 128K mode. Thanks to Gerton Lunter for
    the help.

  o XZX can display a picture of the way the keyboard is laid out on the real
    Speccy (ZX Spectrum 48). Useful if you can't remember that one key
    combination for getting "CHR$" :-) Thanks to Gerton Lunter for giving
    me the permission to use layout.scr from Z80, his Spectrum emulator.

  o Shading on monochrome X servers works again (Anders Hallstrm).

  o The control keys (XK_CTRL_L/XK_CTRL_R) switch now to EXTENDED MODE.

  o Fixed a bug in the Level-Loader (.LLT).

  o Added support for Super-Level-Trap (.SLT) files. The level loader is now
    mandatory (Razvan Surdulescu).

  o Fixed a bug in ADD_HL macro with access above array boundary (Razvan
    Surdulescu).

  o Fixed a bug in Imakefile with endianess on Alpha machines (Anders
    Hallstrm).

  o Fixed a problem with AY daemon when starting with '-sound off' on machines
    running Linux.

  o Fixed a lot of memory leaks and access errors. Thanks to Pure Software
    Inc. for making Purify. Purify still claims an memory leak in XPutImage(),
    but I think it's a bug in the X11 lib here on my Sparc-2 running SunOS
    4.1.2.


Version 2.1.1 (Tue Dec 3 1996)
-------------

  o Changed lincense conditions (see the COPYRIGHT file). THE CODE MAY NOT BE
    MODIFIED OR REUSED WITHOUT PERMISSION!

  o Some values in the Z80 v3.0+ snapshot header were not correctly
    interpreted. Added more debug prints in the snaphot code.

  o LINTified source code.

  o Changed XDEBUG into D_X11 debug level.

  o Fixed a bug in SBC_HL macro where the P/V flag got wrong values. Cauldron
    depends on it.

  o Moved all configuration variables from Imakefile to xzx.config (Des
    Herriot).

  o Register DE didn't get loaded from SNA snapshots.

  o Save keyboard issue settings to Z80 snapshot.

  o The Z80 operations LD H,n and DAA were broken in v2.1.0.

  o Changed the possible lowest time interval (ms/frame) that is selectable
    in the Generics Menu from 10 to 1. Note that PC based machines allow
    only steps of 10ms.

  o You must confirm overwriting an existing file when saving the Spectrum
    screen.

  o Support for Z80 v3.05+ format snapshots.

  o TAP browser


Version 2.1.2
-------------

  o Fixed bug with Z80 interrupt handling (N.E.X.O.R., Defcon).

  o Removed delayed EI handling, because this breaks some games. Tank 128k
    is one of them.

  o New option '-rr' overwrites both 'rrShm' and 'rrNoShm' values (Anders
    Hallstrm).

  o Made the key for escaping the OSD's selectable. See xzx.config (Anders
    Hallstrm).

  o New style OSD's (128/+3 look-alike) with pointer wraparound on first<->last
    item.

  o PrintLetter() increments cursor position.

  o Fixed syntax errors under Linux in joystick.c

  o Store border color even when border emulation is turned off. Important if
    you turn the border emulation on again.

  o The distributed source code is now striped from comments.

  o If the emulator fails to load a level data block (.DAT), it complements
    the carry flag.

  o Fixed speaker emulation under SunOS and Solaris (Des Herriot).

  o Fixed bug with zero-length tape blocks in .TAP files (Alan Moore).

  o Fixed recognition of Z80 v3.05 format snapshots.

  o XZX writes Z80 v3.05 format snapshots now.

  o Turn Interface I emulation off when loading SNA snapshots.

  o ZX printer is selected with bit A2 and not A1.

  o The FileSelector accepts directories in the input field, too (Anders
    Hallstrm, George Lebl).

  o Changed all static character arrays in the Conf structure into dynamic
    allocated strings. Reduces memory used by XZX.

  o Better keyboard emulation of Spectrum keys. See xzx.man for more
    information how it works (Anders Hallstrm).

  o Fixed extended RAM paging on the +3 (Thomas Ahn Kolbeck).

  o Fixed memory leaks and several bugs in the microdrive emulation. Added
    sanity check to SetupCartridgeFile() to avoid insertation of one cartridge
    file into two drives simultaneous.

  o Added missed functions to the 'Interface I/+3 Options' menu. Removed menu
    item for cartridge write protection, because this is controlled by the
    UNIX file permissions.

  o Made the +3 disk handling more user friendly. XZX pops up a file requester
    if the +3 DOS tries to access a disk in a drive and there is no disk in that
    drive.

  o Some strange tape files contain many zero length blocks. Suppress displaying
    them in the tape browser.	

  o Don't unlink the destination snapshot file in case of an error! In the past
    it could happen that an allready existing file was deleted.

  o Ignore SIG_XCPU not only on machines running ULTRIX but on all systems
    where it's defined.

  o Moved classifyDescripor()/setBlocking() to util.c for later use with the
    printer emulation.

  o XZX now works slightly different for X terminals so it doesn't lose key
    events anymore. Don't forget to adjust xzx.config for this extra
    functionality (Allan Skillman).

  o AY emulation for SPARC machines (Des Herriot).

  o Fixed Imakefile for ddtrans and mkcart (Nils Philippsen).

  o Fixed bug in FileSelector() which was introduced by the changes made
    earlier. FileSelector now accepts filenames of nonexistent files if it's
    called for save operations.

  o Fast mode implemented. XZX can now either run at true Spectrum speed or
    as fast as possible.
