List of changes made to Camel80 v1.2 by Garry Lancaster, Feb 1999-July 2001
===========================================================================

1. Reorganisation of source files to the following:

   CAMEL.S	Low-level primitives 
   CAMELINI.S	Reset/initialisation code (implementation-dependent)
   CAMELLOW.S	Low-level primitives (implementation-dependent)
   CAMELDEP.S	CPU Dependencies
   CAMELHI.S	High-level words
   CAMELENV.S	Environment variables (implementation-dependent)

   In the old source, CAMEL80.S corresponds to CAMEL.S, CAMELINI.S and
   CAMELLOW.S; CAMEL80D.S is CAMELDEP.S (unchanged); CAMEL80H.S is CAMELHI.S.


2. Minor reorganisation of the memory map, in order to accomodate
   parameter stack outside the contigious area of RAM occupied by FORTH.
   TIB was moved to the location previously occupied by the parameter stack,
   and location of the stack left to the implementor's discretion. 
   The private extension word S0 was moved from CAMELHI.S to CAMELLOW.S.


3. ENDDICT equate in CAMEL.S changed for Z88 version.


4. Words added to CAMEL.S from the CORE-EXT wordset:
   ;X  2>R	x y --		R:     -- x y
   ;X  2R>	    -- x y	R: x y --
   ;X  2R@	    -- x y	R: x y -- x y
   ;X  DU<	ud1 ud2 -- f	(from DOUBLE-EXT wordset)

   Additionally, a macro ENVHEAD added to provide built-in environment
   variables.


5. Words added to CAMELHI.S from ANS optional & extension wordsets:
   ;X  TRUE	    -- true
   ;X  FALSE	    -- false
   ;X  CASE    compilation: -- csys     runtime: --
   ;X  OF      compilation: -- ofsys	runtime: x1 x2 -- | x1
   ;X  ENDOF   compilation: csys1 ofsys -- csys2	runtime: --
   ;X  ENDCASE compilation: csys --	runtime: x --
   ;X  REFILL	    -- f
   ;X  ERASE	caddr u --
   ;X  BLANK	caddr u --

6. Working implementation of ENVIRONMENT? added to CAMELHI.S with:
   ;Z  E0	    -- addr
   ;Z  ENVVAR       n*x n "name" --
   ;C  ENVIRONMENT?	caddr u -- false | n*x true
   Built-in environment variables (some of which are implementation-dependent)
   are held in the CAMELENV.S source file.


7. Full implementation of the EXCEPTION and EXCEPTION-EXT wordsets added
   to CAMELHI.S with:
   ;Z  HANDLER		-- addr
   ;Z  ABORT"A		-- addr
   ;Z  ABORT"N		-- addr
   ;X  CATCH	 i*x xt -- j*x 0 | i*x n
   ;X  THROW     k*x n  -- k*x | i*x n
   ;X  ABORT        i*x --			R: j*x --
   ;Z  ?ABORT    i*x f caddr u -- | i*x 	R: j*x -- | j*x 
   QUIT modified to use REFILL & CATCH, and COLD modified to do S0 SP! QUIT
   instead of ABORT.    


8. UINIT and #INIT moved to CAMELLOW.S and changed to initialise the extra
   user variables introduced. COLD modified to ERASE all user variables
   before initialising, so "non-initialised" ones are initialised to zero. 
   User variables rationalised, so ones not requiring non-zero initialisation
   are moved to the end of the user area.


9. COLD modified in CAMELHI.S to call the implementation-dependent word
   CONSINIT, which initialises the user console. This should be defined in
   CAMELLOW.S.


10. CAMELINI.S, CAMELLOW.S and CAMELENV.S written for the Cambridge Z88.
    Words included in CAMELLOW.S currently are:
    ;Z  CONSINIT	--
  * ;Z  S0		-- addr
  * ;C  EMIT	      c --
  * ;C  KEY		-- c
  * ;X  BYE	    i*x --
    ;Z  STR>NUL 	caddr u -- caddr'
    ;X  EMIT?		-- f
    ;X  PAGE		--
    ;X  AT-XY	    x y --
    ;Z  EKEYT	      t -- false | u true
    ;X  EKEY		-- u
    ;X  EKEY?		-- f
    ;X  EKEY>CHAR     u -- u false | c true
    ;Z  PENDING-CHAR    -- addr
  * ;X  KEY?		-- f
    ;X  MS	      u --
    ;Z  INTT&D		-- addr
    ;Z  INT>T&D	   addr -- s m h d m y
    ;X  TIME&DATE       -- s m h d m y
    ;Z  OZACCEPT	caddr n -- n'
    ;Z  *CLI	        caddr n --
    ;Z  *NAME		caddr n --
    Those words marked with an asterisk are required for all implementations.
    This set of words for the Z88 includes a full implementation of the
    FACILITY and FACILITY-EXT wordsets.


11. REFILL in CAMELHI.S to use the non-ANS compliant OZACCEPT instead of
    ACCEPT (valid for Z88 version only).


12. Words added to Z88 version of CAMELLOW.S from the optional FILE wordset:
    ;X  BIN			fam1 -- fam2
    ;X  CLOSE-FILE		fileid -- ior
    ;Z  (OPEN-FILE)		caddr u fam -- fileid ior
    ;X  CREATE-FILE		caddr u fam -- fileid ior
    ;X  DELETE-FILE		caddr u -- ior
    ;X  FILE-POSITION		fileid -- ud ior
    ;X  FILE-SIZE		fileid -- ud ior
    ;X  OPEN-FILE		caddr u fam -- fileid ior
    ;X  R/O			-- fam
    ;X  R/W			-- fam
    ;X  READ-FILE		caddr u1 fileid -- u2 ior
    ;X  READ-LINE		caddr u1 fileid -- u2 flag ior
    ;X  REPOSITION-FILE		ud fileid -- ior
    ;Z  EXTEND-FILE		ud fileid -- ior
    ;X  RESIZE-FILE		ud fileid -- ior
    ;X  W/O			-- fam
    ;X  WRITE-FILE		caddr u fileid -- ior
    ;X  WRITE-LINE		caddr u fileid -- ior
    ;X  FILE-STATUS		caddr u -- x ior
    ;X  FLUSH-FILE		fileid -- ior
    ;X  RENAME-FILE		caddr1 u1 caddr2 u2 -- ior


13. Enhanced interpreter to work with nested sources, particularly where
    files available. Exceptions are THROWn back through levels of nested
    sources, restoring previous source at each point. Exception -256 is
    reserved to indicate failure to restore an input source.
    To do this:
	(a) CAMELLOW.S split into CAMELLOW.S  (imp-dep primitives)
		       and EITHER CAMELIFL.S  (interpreter with file support)
			       OR CAMELINF.S  (basic interpreter)
	(b) Appropriate versions of words added to CAMELIFL.S/CAMELINF.S
	    (words marked * only in CAMELIFL.S):
		;X  SAVE-INPUT		-- xn...x1 n
		;X  RESTORE-INPUT	xn...x1 n --
		;X  REFILL		-- f		(moved from CAMELHI.S)
	      * ;Z  INPUTFBUF		-- addr
	      * ;Z  INPUTFLEN		-- addr
	      * ;Z  INPUTFPOS		-- addr
	      * ;Z  INTERPRETM		i*x -- j*x
	      * ;X  INCLUDE-FILE	i*x fileid -- j*x
	      * ;X  INCLUDED		i*x caddr u -- j*x
	(c) Private words added to CAMEL.S:
		;Z  N>R		xn...x1 n --	R: -- xn...x1
		;Z  NR>		n -- xn...x1	R: xn...x1 --
	(d) Words added to CAMELHI.S:
		;X  SOURCE-ID		-- u
		;Z  NEST-INPUT		xt caddr u id --
	(e) In CAMELHI.S, QUIT, INTERPRET and EVALUATE are modified. In
	    particular, INTERPRET now takes source from SOURCE, not the stack.


14. Added block-handling facilities by modifying SAVE-INPUT, RESTORE-INPUT,
    REFILL, EVALUATE, QUIT, NEST-INPUT, and INCLUDE-FILE to provide support
    for new word added to CAMELHI.S:
		;X  BLK			-- addr
    Added the following words to CAMELIFL.S:
		;Z  'BUFFER		-- addr
		;Z  BLOCK-ID		-- addr
		;Z  (UPDATE)		-- addr
		;Z  (BUFFER)		-- addr
		;Z  BLOCK-IOR		-- addr
		;Z  MAP-BLOCKS		caddr u -- ior
		;Z  UNMAP-BLOCKS	-- ior
		;Z  BLOCK-SEEK		u -- caddr u fileid
		;Z  BLOCKS?		--
		;Z  INIT-BLOCKS		u1 u2 --
		;X  UPDATE		--
		;X  EMPTY-BUFFERS	--
		;X  SAVE-BUFFERS	--
		;X  FLUSH		--
		;X  BUFFER		u -- caddr
		;X  BLOCK		u -- caddr
		;X  LOAD		i*x u -- j*x
		;X  THRU		i*x u1 u2 -- j*x
		;X  SCR			-- addr
		;X  LIST		u --
    This is a minimal implementation, with only a single block buffer
    (and this is not ALLOTed until the first use of MAP-BLOCKS).
    Attempts to use block access words before mapping to a file with the
    private word MAP-BLOCKS will cause exception -35. Attempts to access
    unwritten blocks result in an implementation-dependent ambiguous
    condition.


15. Added the remaining FILE and BLOCK words from the ANS standard, removing
    from CAMELHI.S where present, and implementing in CAMELIFL.S/CAMELINF.S:
		;CX (			comments to end of parse area/file
		;CX S"			-- caddr u
		;X  \			comments to end of line


16. Added support for separate dataspaces, primarily to allow easy
    development of ROMable applications in the Z88. This means that headers
    and data fields no longer necessarily reside together, so an extra word
    is added in the header after the code field which points to the data
    field (normally directly after). Changes to the following code fragments
    in CAMEL.S: docolon, docon, docreate, dodoes, douser; and the macros
    head and immed. Forth words modified were:
		;Z  DP			-- a-addr
		;C  CREATE		"<spaces>name" --
		;C  CONSTANT		"<spaces>name" --
		;C  VARIABLE		"<spaces>name" -- (moved to CAMELHI.S)
		;C  >BODY		xt -- addr
		;C  :			"<spaces>name" --
		;Z  !COLON		--
    Words added to CAMELHI.S were:
		;Z  DPS			-- a-addr
		;Z  DSENDS		-- a-addr
		;Z  CURNS		-- a-addr
		;Z  CURDS		-- a-addr
		;Z  NAMESPACE		--
		;X  UNUSED		-- u
    Words added to CAMELLOW.S were:
		;Z  RAM			--
		;Z  ROM			--
		;Z  ROM2		--
		;Z  ROM1		--


17. Added the SEARCH and SEARCH-EXT wordsets, by modifying CREATE, WORDS,
    FIND, UINIT and #INIT and adding the following words to CAMELHI.S:
		;Z  CURRENT		-- a-addr
		;Z  NEXTLIST		-- a-addr
		;Z  SORDER		-- a-addr
		;X  FORTH-WORDLIST	-- wid
		;X  GET-CURRENT		-- wid
		;X  SET-CURRENT		wid --
		;X  WORDLIST		-- wid
		;X  DEFINITIONS		--
		;X  GET-ORDER		-- widn...wid1 n
		;X  SET-ORDER		widn...wid1 n --
		;X  ONLY		--
		;X  ALSO		--
		;X  PREVIOUS		--
		;X  ORDER		--
		;Z  VOCABULARY		--
		;Z  FORTH		--
		;X  SEARCH-WORDLIST	caddr u wid -- 0 | xt 1 | xt -1


18. Added a HIDDEN vocabulary to CAMELHI.S containing all the private words
    unlikely to be of use to the user. This was achieved by adding macros
    "hhead" and "himmed" to CAMEL.S, together with a "lasthid" equate.


19. Added vectored words (mostly Z88-specific) for error-trapping etc.
    Re-wrote QUIT and COLD, and added the following words:
	CAMELHI.S:
		;Z  (COLD)		-- a-addr
		;Z  INTERPRETK		--
	CAMEL.S:
		;Z  NOOP		--
	CAMELLOW.S:
		;Z  (RC_QUIT)		-- a-addr
		;Z  (RC_DRAW)		-- a-addr
		;Z  (RC_ESC)		-- a-addr
		;Z  (OZACCEPT)		-- a-addr
		;Z  COLD-CAMEL		--
		;Z  OS_ESC		u -- x
		;Z  ESCAPE		--
		;Z  HOLE		-- a-addr
     None of the vectored words are allowed to alter any stack depths,
     and cannot receive values on the parameter stack, with the exception
     of the (OZACCEPT) vector, which can expect TOS to be the event code (as
     defined with EKEY) that triggered the vector. However, it must leave
     this as TOS.


20. Added further useful words, including the rest of the STRING and STRING
    EXT wordsets:
	CAMEL.S:
		;X  SEARCH		caddr1 u1 caddr2 u2 -- caddr3 u3 flag
		;Z  POLARITY		n -- 0 | 1 | -1
		;X  0<>			n/u -- flag
		;X  0>			n -- flag
	CAMELHI.S:
		;X  COMPARE		caddr1 u1 caddr2 u2 -- n
		;X  SLITERAL		compile: caddr u --  run: -- caddr u
		;X  -TRAILING		c-addr u1 -- c-addr u2
		;X  ?			a-addr --
		;X  VALUE		x "<spaces>name" --
		;X  TO			x "<spaces>name" --
		;Z  !PFA		n --
		;X  :NONAME		-- xt
		;X  MARKER		"<spaces>name" --
	CAMELDEP.S:
		;X  CODE		"<spaces>name" --
		;Z  NEXT		--
    User variables were rearranged in order to make MARKER easier to implement.


21. To correct the behaviour of S" and ( with zero-length strings, they
    were modified (in CAMELINF.S and CAMELIFL.S) to use new word PARSE added
    to CAMELHI.S:
		;X  PARSE		"ccc<char>" -- c-addr n
		;X  .(			"ccc<paren>" --


22. Added the rest of the useful core extension words, leaving only #TIB
    CONVERT EXPECT QUERY SPAN (which are obsolescent) and [COMPILE] (which
    ought to be). Also rewrote NIP and TUCK as code definitions.
	CAMEL.S:
		;X PICK			xu...x0 u -- xu...x0 xu
		;X ROLL			xu...x0 u -- xu-1...x0 xu
		;X ?DO			n1 n2 --
	CAMELHI.S:
		;Z (U.)			u -- c-addr n
		;Z (.)			n -- c-addr n
		;Z (.R)			n1 c-addr n2 --
		;X U.R			u n --
		;X .R			n1 n2 --
		;Z (C")			-- c-addr
		;Z (")			"ccc<quote>" --
		;X C"			"ccc<quote>" --		Run: -- c-addr
    The words . and U. in CAMELHI.S, and S" in CAMELINF.S/CAMELIFL.S were
    also rewritten due to the new factoring words.


23. Modified SCAN and SKIP (CAMEL.S) to match any control characters when
    searching for BLs.


24. Corrected bug in FM/MOD which occurred with division of negative numbers
    when no remainder resulted.


25. Added DEFERred words. Renamed KEY EMIT TYPE and ACCEPT to CKEY CEMIT
    CTYPE and ANSACCEPT respectively, making these the default actions
    for new deferred words of the same name. Changed all existing vectors to
    become deferred words. Added mailboxing and other advanced OZACCEPT
    features to the Z88 version. Replaced ABORT"A and ABORT"N with ABORT"C
    to save a user variable. Rearranged user variables and memory map.
    Moved UNUSED to CAMELLOW.S, removed DSENDS. Words added were:
	CAMELHI.S:
		;C KEY			deferred (old in CAMELLOW.S to CKEY)
		;C EMIT			deferred (old in CAMELLOW.S to CEMIT)
		;C TYPE			deferred (old to CTYPE)
		;C ACCEPT		deferred (old to ANSACCEPT)
		;Z ABORT"C		-- c-addr (replaces ABORT"A/ABORT"N)
		;Z IS			xt "name" --
	CAMEL.S:
		;Z DEFER		"name" --
	CAMELLOW.S:
		;Z OZAFLAGS		-- a-addr
		;Z (NEWMAIL)		deferred: c-addr n --
		;Z (MAILTYPE)		deferred: -- c-addr
		;Z (KEY)		deferred: event --
		;Z AT?			-- x y
		;Z (0")			-- c-addr
		;Z 0"			"ccc<quote>" --
		;Z MAIL:NAME		-- c-addr
		;Z MAIL:DATE		-- c-addr
		;Z CHECKMAIL		c-addr1 -- false | c-addr2 n true
		;Z SENDMAIL		c-addr1|0 c-addr2 n -- 
		;Z SETRAM		addr --

26. Added some more code words:
        CAMELLOW.S:
                ;Z 0TYPE                c-addr --
        CAMEL.S:
                ;Z SPLIT                x -- n1 n2
                ;Z JOIN                 n1 n2 -- x
                ;Z NSPLIT               x n -- x1 x2
                ;Z NJOIN                x1 x2 n -- x
                ;Z >UPPER               c-addr n --
                ;Z >LOWER               c-addr n --
                ;X D+                   d1 d2 -- d3
                ;X D-                   d1 d2 -- d3

27. Added text windowing and some graphic support words for Z88 to CAMELLOW.S.
    Words marked (*) do not use TYPE or EMIT, but internal OZ routines.
		;Z EXPANDED?		-- flag
		;Z EFFECT		char1 char2 --   (HIDDEN word)
	    (*)	;Z OPENWINDOW		x y w h id --
	    (*)	;Z OPENTITLED		x y w h c-addr id --
	    (*) ;Z OPENPOPUP		x y w h c-addr id --
	    (*)	;Z WINDOW		id --
		;Z ESET			char --
		;Z ECLR			char --
		;Z ETOG			char --
		;Z EAPPLY		n --
		;Z EAPPLYX		n --
		;Z GREY			--
		;Z UNGREY		--
		;Z SCRUP		--
		;Z SCRDOWN		--
 		;Z EALIGN		char --
		;Z UDGDEF		x0 x1 x2 x3 x4 x5 x6 x7 "name" --
	    (*)	;Z DEFUDG		addr char --
		;Z UDG			char --
		;Z XCHAR		char --
		;Z XLINE		char --
		;Z (OPENMAP)		id --		(HIDDEN word)
		;Z OPENMAP		id --
		;Z GSET			x y --
		;Z GCLR			x y --
		;Z GINV			x y --
		;Z GSET?		x y -- flag
		;Z GMOVE		x y --
		;Z GPOS?		-- x y
		;Z GLINE		w h --
		;Z GBOX			w h --
		;Z GPAGE		--

28. Added further graphics routines, utilising new integer trig functions:
	CAMELHI.S:
		;Z sines		-- a-addr	(HIDDEN word)
		;Z SIN			n1 -- n2
		;Z COS			n1 -- n2
		;Z SIN*			n1 n2 -- n3
		;Z COS*			n1 n2 -- n3
	CAMELLOW.S:
		;Z GBOUND		flag --
		;Z GLINETO		x y --
		;Z GELLIPSE		x y w h --
		;Z GCIRCLE		x y r --
		;Z GPATTERN		x y c-addr --
		;Z GFILL		x y --
		;Z GSHADE		x y --


29. Added a few more words to CAMELLOW.S, mostly random number generation:
		;Z RANDOMIZE		u --
		;Z RND			u1 -- u2
		;Z OZ-AT		x y --
		;Z PAGEWAIT		--

30. Removed ROM dataspace selector from CAMELLOW.S since this region is
    now completely full!

31. Made DP and ABORT"C normal (not HIDDEN) words. For Z88 version, moved
    all FORTH workspaces into bad application area, since so much safe
    workspace was causing problems with the operating system.

32. To save space, U0, UINIT and #INIT moved to the FORTH vocabulary, then
    all other HIDDEN words beheaded, using new macro "nohead". HIDDEN
    removed from CAMELHI.S. Total space saved=597 bytes.

33. For Z88, moved WORDS to CAMELLOW.S and added pause between screenfulls.
    Modified OZACCEPT to save state, except for OZAFLAGS. Modified
    (OPEN-FILE) to place expanded filename at new 0PAD location.
    Added some words to CAMELLOW.S:
		;Z 0PAD			-- addr
		;Z WINDOW?		-- w h id

34. Rearranged uservars a bit to make way for new extended memory pools
    on Z88 version. Added following words to CAMELLOW.S:
		;Z POOL			-- a-addr
		;Z POOLSIZE		-- a-addr
		;Z MEMPOOL		n "name" --
		;Z INIT-POOL		--
		;Z ALLOCATE		n1 n2 --
		;Z FREE			n1 n2 --
		;Z RELEASE-POOL		--
		;Z C@L			l-addr -- char
		;Z C!L			char l-addr --
		;Z @L			l-addr -- x
		;Z !L			x l-addr --
		;Z CMOVE>L		c-addr l-addr u --
		;Z CMOVEL>		l-addr c-addr u --
    Environment variables were removed to make room for these words, and
    are now provided on Z88 version as a loadable source file.

35. Removed UDGDEF from CAMELLOW.S and redefined DEFUDG.

36. Re-wrote far memory stuff to use the same model that I recently wrote
    for Dominic Morris' z88dk Small C compiler. Removed the words POOL,
    POOLSIZE, INIT-POOL, RELEASE-POOL, CMOVE>L and CMOVEL>.
    Redefined the operation of the following words:
		;Z MEMPOOL		ud "name" --
		;Z ALLOCATE		ud -- dl-addr ior
		;Z FREE			dl-addr -- ior
		;Z C@L			dl-addr -- char
		;Z C!L			char dl-addr --
		;Z @L			dl-addr -- x
		;Z !L			x dl-addr --
    Added the following words (to CAMELLOW.S):
		;Z FREEALL		--
		;Z CMOVEL		dl-addr1 dl-addr2 u --
		;Z >FAR			addr -- dl-addr

37. Added package-handling words to CAMELLOW.S:
		;Z PKGS?		-- flag
		;Z AYT?			pkgid -- ver | 0
		;Z PKGINF		pkgid -- 0-addr Dmem hdls res
		;Z (RC_PNF)		deferred: callid --
		;Z PKGMIA		callid --
		;Z (PKGERR)		deferred: rc --
		;Z PKGERR		rc --
		;Z PKGCALL		ressize nparams minver reason callid "name" --
					does: i*x -- j*x
		;Z PID			-- pid

38. Redefined NEXT and NEXTHL macros as just JPs to the appropriate code,
    saving around 539 bytes.

39. CamelForth now contains its own package (ID $1e) which can be accessed
    by client applications using the call fth_in ($0a1e).
    The fth_in call binds the CamelForth bank to segment 3 and increments the
    number of clients; this is decrement when the Forth application terminates
    (CamelForth is itself a client).

40. Removed use of IY as UP; accesses to user variables are now done using
    absolute addressing.

41. Some optimisations: pointer in parameter field removed for colon defs,
    constants and uservars as these are all expected to be compiled with
    NAMESPACE=DATASPACE, and shortened corresponding code fragments. Inlined
    NEXT for EXIT and code fragments for create/constant/literal etc.
    Optimised CTYPE for Z88 with a word which doesn't go via EMIT.

42. Major revamp of source files for use with Z80Asm due to inadequacies of
    ZMA. New "preprocessor" in ANS Forth used to expand macros prior to
    assembly, as Z80Asm lacks macros.

43. Altered use of "immediacy" byte in headers: bit 7 of this is now the
    immediacy bit, and bit 6-0 contain a "fast code" length value, of code
    that may be copied directly into definitions as inline code. Added
    headerless internal word FAST? to return 0 or length of fast code from nfa.

44. Removed unneeded words (most already headerless):
      ,BRANCH  ,DEST  !DEST  HP  DPS  USER

45. Re-wrote some words, mostly by re-implementing as code primitives:
      IS  HOLD  <#  >DIGIT  #>  COUNT  [  ]  DECIMAL  HEX  CODE  HERE
      ALLOT  NEXT  ,  C,  NAMESPACE  !CF  NFA>CFA  NFA>LFA  DP  CELLS
      CHAR+  >BODY  2DROP  2DUP  2SWAP  GET-CURRENT  SET-CURRENT
      SOURCE-ID  =  <>  /STRING  >L  L>  RAM  ROM2  ROM1  SETRAM  S0
      >FAR  UPDATE

46. Added "fast" inline code support for colon definitions. This required
    rearranging heads (fast/immed byte now just before code field) and 
    changes to the following words:
      IMMED?  IMMEDIATE  NFA>LFA  NFA>CFA  CREATE
    STATE now holds compilation mode as bit 0 and fast mode (supplemental)
    as bit 15. Changed the following words to support this:
      [  ]  QUIT  :NONAME  :  ;  LITERAL  COMPILE,
    Added following words to specifically support fast code:
		;Z F{			--
		;Z }F			--
		;Z FWORDS		n1 n2 --
	nohead	;Z ,LIT			u --
	nohead	;Z (ENDFAST)		--
		;Z FCODE		"name" -- cfa
		;Z FNEXT		cfa --
    Removed FAST? , reimplemented HIDE/REVEAL as code and fixed full-line
    bug in WORDS (reimplemented as special case of FWORDS).
    Fast code supports numeric literals, VARIABLEs, CONSTANTs and VALUEs
    as well as certain code primitives listed with FWORDS. Additionally
    revised the following structures to support use in fast code:
		IF...ELSE...THEN
		BEGIN...AGAIN
		BEGIN...UNTIL
		BEGIN...WHILE...REPEAT
		CASE...OF...ENDOF...ENDCASE
		TO name
		IS name
		[CHAR] char
		['] name

47. Relocated docs from camel.s to camel.txt. Added build tools for Windoze.

48. Added new FOR..STEP structure which uses a single index (kept on return
    stack so accessible with R@) counting down to zero. Available also in
    fast code.
		;Z FOR		C: -- addr	Runtime: u --  R: -- u
		;Z STEP		C: addr --	Runtime: R: u -- u-1

49. Fixed problem with use of ASMPC in assembly listing causing FORTH (the
    vocabulary) to malfunction.

50. Added new ?IF conditional (also available in fast code) which is
    identical to IF but non-destructive.
		;Z ?IF		C: -- addr	Runtime: f -- f

51. Fixed behaviour of INTERPRET; when encountering an unknown word it now
    throws exception -13 rather than handling the case itself. Fixed
    behaviour of TO within standard colon definitions. Fixed usage of new
    STATE variable in S" and INTERPRET.

52. Fixed NR> as new stack contents were liable to be overwritten if
    interrupt occurred between copy and setting of SP! Noticed (eventually!)
    in NEST-INPUT.

53. Slight optimisation to dataspace usage: CURDS and CURNS now hold actual
    address of dictionary pointers rather than offset from DPS. Words
    affected:
      RAM  ROM1  ROM2  UNUSED  UINIT  DP  HERE  ALLOT  ,  C,

54. Renamed F{ and }F to { and }.

55. Altered LIST to do a PAGEWAIT for every screenful.

56. Made following words available in fast code:
      ?NEGATE  2@  2!  2OVER  FILL  U>  0>

57. Altered noop words to be immediate colon definitions that do nothing.
    Words affected:
      ALIGN  ALIGNED  CHARS  NOOP  BIN  ENVVAR  ENVIRONMENT?  -TRAILING
      (0")  (S")  (C")

58. Removed some unnecessary (mostly headerless) words:
      L0  E0  R0  CURRENT  INIT-BLOCKS
    Made some other words headerless:
      ?SIGN  ?NUMBER  NEST-INPUT  INTERPRETK  INTERPRETM  BLOCKS?
      INTERPRET

59. Optimised branching constructions in high-level words:
      FM/MOD  ANSACCEPT  SET-ORDER  ?NUMBER  INTERPRET  QUIT  POSTPONE
      MOVE  TO  SAVE-INPUT  RESTORE-INPUT  REFILL  (  S"  CREATE-FILE
      OPENMAP

60. Altered behaviour of QUIT to switch to FORTH vocabulary on exceptions.

61. Optimised numeric conversion (input) by rewriting >NUMBER and ?NUMBER
    in code (adding special cases for decimal/hex), removing DIGIT? and ?SIGN.

62. Rewrote WORD and PARSE in code, and fast-coded INTERPRET, incorporating
    ?NUMBER which is now no longer a separate word. Removed SKIP and >COUNTED.

63. Rewrote SEARCH-WORDLIST in code, fast-coded FIND and removed IMMED?.

64. Rewrote LITERAL and ,LIT in code, optimised COMPILE, a bit more.

65. Moved file-position saving from REFILL to SAVE-INPUT for performance,
    removing INPUTFPOS.

66. Rewrote REFILL in code.

67. Altered use of DO..LOOP structures internally to FOR..STEP in these
    words:  ENVVAR  ENVIRONMENT?  SET-ORDER  ORDER  RESTORE-INPUT
    Only THRU still uses DO..LOOP.

68. Incorporated !PFA into CREATE.

69. Added headerless word NSDS which defining words use to ensure namespace
    and dataspace are the same (if this is required). Reorganised exceptions.

70. PKGCALL now calls vector in order to execute standard responses for
    rc_quit/rc_draw/rc_esc.

71. Added ANS Forth system compliance documentation (compliance.txt). Made
    all block words consistently THROW ior return values, removing BLOCK-IOR.
    Corrected ANSACCEPT to erase characters on the screen for DEL.

72. Removed the fast mode part of STATE to its own variable, with its value
    being obtainable with the new word FAST?. This fits better with the ANS
    definition of STATE. Also moved all safe workspace usage except 0PAD
    into the main application workspace and user variables.

73. Removed MAP-BLOCKS and UNMAP-BLOCKS, replacing with MAP and UNMAP which
    allow 4 files to be mapped to ranges of blocks simultaneously. Improved
    exception handling for invalid blocks.

74. Renamed COLD-CAMEL to CAMEL.

75. Added variable number of block buffers (1-4) with BLKS required to reserve
    these before MAP. New headerless words FINDBUF and SAVEBUF added, all other
    block words rewritten. New exception -4092 if invalid number of buffers
    attempted to be reserved. Removed (UPDATE) and (BUFFER) user variables,
    adding #BUFS instead.

76. Ensured all words preserve IY and rearranged user variables a bit in
    preparation for multiprogramming. All "per task" variables now accessed
    via IY instead of absolute addressing.

77. Revamped ACCEPT. Reimplemented ANSACCEPT as ACCEPT (no longer deferred),
    with ability to use initial buffer if caddr -n supplied. Available editing
    keys are:  DEL  ENTER  LEFT  RIGHT  <>LEFT  <>RIGHT
    Added (ACC_MAIL) and (ACC_EVT) deferred words, which are executed on
    every loop and every unhandled key event, respectively.
    Removed the following words:
      (OZACCEPT)  OZAFLAGS  (NEWMAIL)  (MAILTYPE)  OZ-AT  OZACCEPT
      ANSACCEPT

78. Freed up a bit of space by sharing message between CAMEL and help screen,
    and removing  MARKER  MAIL:NAME  MAIL:DATE. Also renamed MEMPOOL to POOL
    and EXPANDED? to EXP?

79. More space creation.
    Removed:  PICK ROLL EKEYT TIBSIZE C" (C") CELL NFA>LFA
    Removed to lineedit.fth: SCR LIST
    Beheaded: ?NEGATE ?DNEGATE ?ABORT >DIGIT
    Renamed ABORT"C to ABORT"S; this now points to two cells containing addr
    and count. Altered display of ORDER. Removed more help text. Minor opts.

80. Added multiprogramming words in multi.s:
      #TASKS  LINK  TERM  TASK:  PAUSE  SINGLE  MULTI  AWAKE?  SLEEP  STOP
      WAKE  PURGE  RUN  (RUN)  TASK!
    Also added (PAUSE) which is headless. Number of tasks now initialised in
    COLD. The following words run PAUSE:
      EKEY	every 10ms	(and hence KEY and ACCEPT)
      MS	every 10ms
      GPATTERN	every line	(and hence GSHADE and GFILL)
      GELLIPSE	every "step"	(and hence GCIRCLE)
      REFILL	every block or file read

81. Fixed initialisation of return stack in multi-programmed system. Altered
    EKEY to a deferred word, behaviour changed by SINGLE and MULTI to allow
    normal Z88 timeout and switch-off in SINGLE mode.

82. Beheaded the non-standard words R0 S0 RP@ SP@ RP! SP! to free up space.
    Also removed NR> and N>R, rewriting NEST-INPUT (the only word which used
    them).

83. Fixed RESTORE-INPUT for nested block sources.

84. Added fth_reg and fth_drg package calls ready for package creation
    support (shortened some messages to make space).

85. Optimised ACCEPT into code.

86. Renamed some words to save space:
      NAMESPACE		-->	NS
      PAGEWAIT		-->	PW
      RANDOMIZE		-->	RAND
      CONSINIT		-->	CINIT
      STRTONUL		-->	S>0

87. Altered package so that FTH_DAT returns 16384-#bytes used by client
    packages, and layout version is set to 3.

88. Made PW a deferred word, with default action (PW). Added loadable PW.FTH
    file which revectors this to a multi-programming aware version.

89. Fixed POSTPONE, which had been broken some time back in optimisations.

90. Removed SETRAM. Added INACC?, a byte variable set during ACCEPT.

91. Fixed deletion at end of buffer in ACCEPT.

92. Made STOP do a (PAUSE) rather than PAUSE, so that SINGLE STOP works.
