HADFS Program History
=====================
Version  Release Date   Remarks
 0.03	     3/3/90	Very early non-documented version.
 0.11	     5/7/90	Version string added to HADFS title strings. Parameters added to *INSTALL, and modified
		to do the previous work of *FORMAT, which has been removed.  Multiple drive facilities
		added.  Status messages on Master added.
 0.12	     1/9/90	Loads and saves to screen memory at &FFFExxxx now supported.  Osfile 5 allowed on root.
		Load and save modified so that &FFxxxxxx refers to i/o processor instead of &FFFFxxxx.
		Bug removed from *RUN in second processor.  Can do *INFO on special directories, eg
 		*INFO @.
 0.13	    20/9/90	*HSETDATE command added, and Osword 14 call to provide a TIME$ string. Files date-
		stamped by reading date with Osword 14.  Directories don't have the date set correctly.
 0.14	   30/10/90	HADFS can be selected with the *HADFS # command which ignores checking for the
		presence of DFS Rom. This is so it can work with DFS 0.90 which doesn't support service
		call &12.  *BACKUP and *ENABLE added to the command list, though no code written yet.
		Slight problem when DFS not present on a Master.  Error message 'DFS Osword &7F not
		present' given, but shadow screen switched to for access, but not for display.  In general, there
		are some bugs in code which accesses shadow screen memory which need rewriting.  In
		normal use, they don't appear, but they need clearing up.
 0.14a	    6/11/90	Removed bug from selection with service call &12. Used to give a 'DFS Rom not present'
		error if no DFS rom present.  Now it doesn't.  Only *HADFS gives the error if there's no
		Rom.  Access strings are shown in the order 'LWR' instead of 'WRL'. Bug in Osgbpb 8
		corrected that counted empty entries in the directories instead of ignoring them.  Bug with
		free space set to &xx00 removed.  ‘Length too long' error has same number as 'Disk full'. 
		Various Osfile actions on '$' modified.  Load, save, delete and create all generate 'Can't
		modify root' error, all others return control block information. Boot option moved from byte
		&11 in directory sector to byte &12, and disk ID at &10 extended to &10-&11.
 0.15      4/1/91	*INSTALL routine rewritten to set the disk ID on new disks, and the 'X' parameter removed. 
		HADFS selection with *HADFS and service call 3 modified to check DFS presence with
		*fx143,18,4 and then select HADFS with service call 18 so as to correctly work on the
		Master.  OPENUP and OPENOUT no longer return errors; OPENUP does an OPENIN, and
		OPENOUT returns a zero file handle, indicating no file opened.  *FREE displays free space
		and *MAP display free space map.  'EOF' message changed to 'End of file'.  Problem with
		selecting NFS solved.  Stopped shadow screen from accidently switching in on disk errors. 
		Deleting zero-length files no longer adds a zero-length entry to the FSM.
 0.16	    7/1/91	*INSTALL routine puts disk size on disk so *FREE can work correctly.  All file entries now
		return registers in defined states (ie preserved).  OsArgs 4,0 and 5,0 and 5,Y written.  *INFO
		$ changed slightly to show disk size and ID.  OsGbpb 6 and 7 return the drive number.
		*ENABLE works and checked for in *INSTALL and *BACKUP.
 0.17	    8/1/91	*INSTALL routine finished, and has a <size> parameter for different sized disks.  Drive
		access via Osword 90 correctly sets up control block.  *INFO $ doesn't attempt to print
		HADFS version if not installed.
 0.18	    9/1/91	Osgbpb 1-4 written, but quite slow as they just perform multiple calls to BPut and Bget.
		Osfile 8 (CDIR) creates a locked directory.
 0.19	    1/2/91	After a *MOUNT, LIB is set to :0.Library if it exists.
 0.20	    15/2/91	The DFS !Boot file loads in the rom image correctly with the Aries-B32 and the Watford
		Rom/Ram board. Shadow screen memory is supported on the Aries-B32 and Watford 32k
		Ram board as well as the Master. The problem with running an exec file in the library has
		been solved.  Error message 147 'I cannot run this code' added.
 0.21	     24/2/91	HADFS works on MOS 3.50, but can only read disks. Hidden commands *STATUS and
		*CONFIGURE added.
 0.22	      3/3/91	Drive 1 may be external, as set by keyboard link 2 or by cmos ram byte.  Drive 0 may be
		external if claimed by Osword 90.
 0.23	     10/3/91	Solved problem of selection on B+.
 0.24	     30/3/91	'30' and '31' correctly printed out in dates, and *CDIR sets the creation date correctly.  *OPT
		6 sets if drive 1 internal or external and saved in cmos ram byte.  'Acorn Era' extended by
		doubling dates from 1981-1996 to 1981-2028, though dates after 1999 not displayed
		correctly.  Appears to work fully on the B+.
 0.25		Made a mistake somewhere, so abandoned and went back to 0.24
 0.24a	      1/5/91	Corrected version of 0.25.  Loading to page &F possible. Minor tidying-up done.
 0.27	     10/5/91	*INSTALL will create data-only disks. *INFO $ reflects this. INSTALL size 40/2 corrected
		so side two is correct size (&190 instead of &320).
 0.28	     14/5/91	Osword 90 calls &80 and &81 added to read/write sectors without having to know if it's an
		internal or external drive.  Doesn't check for screen selection at &FFFExxxx and
		&FFFDxxxx yet.
 0.29	     20/6/91	OsArgs extended to return version number, and last drive used.  Also reading workspace info.
 0.30	     7/7/91	Lots of random access stuff re-written.  Close works for all channels, though no update for
		output buffers yet.  BGET/BPUT check fully the channel (Not open for read/update, etc.).
		Openin gets file info (D/W/R).  The *OPT5 setting obeyed correctly, Close#0 correct. 
		OsArgs 5 reads allocated space.  Starting to write output routines.  OsFile &FD returns full
		sector start (sector start + drive number).  'Disk Error' messages correctly show side two,
		'Sector error' correctly shows which sector.  Accessing tracks 160+ now possible.  (They map
		onto trk 80 side 0, trk 80 side 1, etc.)  Major modification: if a disk error occurs on a floppy,
		which is not a write error, a retry occurs.  This cleans up almost every disk error message.
		 Error &18 (sector not found) does a seek to track 0, then retries.
 0.31	    20/7/91	Osfile access to '$' returns more information. Removed bug that *CATted a file.  General
		tidying up.
 0.32	    2/11/91	*FORM command written.  Data disk !Boot file reprompts for a system disk.  System disk
		!Boot file runs *ReBoot if no sideways ram found.  Allows another program to be called
		instead.
 0.33	    20/12/91	*FORM command correctly formats DFS disks.  Loading while file open flags the input
		buffer.  System !Boot files retries reading in rom image if loading fails.  This helps with
		3.5inch drives.  Fixed OsGbPb 1/3 with supplied PTR.
 0.34	     1/1/91	Moved parts of workspace around to make workable with Watford DFS....  open routines....

 0.35	     1/2/92 \ - I accidently lost this part of this file. 
 0.36	     8/3/92 /   In general, *FORM debugged, various things tidied up.

 0.37	    15/3/92	Osword 90 now uses the general purpose multiple sector disk access routine used by load and
		save. This means it correctly steps over track boundaries, and so can access more than 10
		sectors at once.  It also does better re-tries on errors. Tidied up and re-written load routine.
		Now a bit faster, and I will be able to use it to speed up Osgbpb reads.  Stopped corrupting
		location &10FF (chn25 alloc high byte) when reading disk name.
 0.37a	     6/4/92	*RENAME now written and works.  Can rename files and directories.  CAUTION: Circular
		rename not yet checked for!!  This means you can hide whole chunks of disk by doing
		something like *RENAME FRED FRED.JIM.
 0.38	    10/4/92	Circular rename checking fully implemented in *RENAME.  Also, can do *RENAME FRED
		Fred changing the case of an entry.  All OsArgs entries re-written, and OsBput written so that
		output files will work.  Haven't completed the close routine for output files yet, so
		OPENOUT and OPENUP are disabled.
 0.39	    20/4/92	OPENOUT and OPENUP written!  Delete won't delete open files, and directory checking is
		tidier.  *Run of FFB-filetyped files bootstraps Basic.
 0.40	    26/4/92	All random access routines work properly.  Extend to following free space works.  Drive
		numbers extended to 0-9, A-V.  Pathname searching tidied up, and checking for changed
		disks, especially when saving, etc.  Osfile 5 on "JIM.FRED" where JIM doesn't exists returns
		A=0 instead of Not found.  Basic bootstrap only allowed with null name.  Disk access	
		routines tidied up considerably, preserving registers so the calling routines don't have to
		preserve them.  'Drive not ready' error never returned - it just retries.  'Drive not present' error
		changed.  *OPT5 temporarily disabled.
 0.41	    1/5/92	Fixed two bugs that appeared in v0.40 - Master 	forgot to reselect on Break, and loading last
		sector to second processor was ignored.
 0.42	    1/6/92	Tidying up - routine that finds a free slot for a filename. OPENIN used to fail if file was at 
		EOF. *RENAME checks full path of new filename. Can write to disks with Master  MOS
		3.50.
 0.43	   12/7/92	*OPT5 now works again.  Tidied up *OPT routines, and removed bug from CMOS routine
		that inverted *OPT6 setting.  Temporary selection of HADFS now works, HADFS works
		fully in the Master temporary filing system handler.
 0.44	   2/8/92	*INSTALL routine re-written and tidied up.  Accepts more varieties of size parameter,
		including size in K and number of tracks.  No longer need to do *INSTALL twice to install
		new Rom image, and removed 16-character disk-name problem.  General hex/dec number
		reading routine replaces separate hex and decimal routines. *INFO $ displays size in K if
		between 128k and 959k.  Split disk displayed as number of tracks, eg as 40/2.  *FORM uses
		new routines.
 0.45	   27/9/92	*TIME and *CLOSE commands added.  *STATUS displays current time if set.  HSETDATE
		with no parameters disables HADFS cmos clock function.  *MOUNT can take a drive
		parameter, selecting that drive.  *CAT routines tidied up - no longer checks disk twice. 
		Started writing Archimedes HADFS Reader application.
 0.46     15/11/92	EXT not set to zero when overflows at &7FFFF.  User number displayed as three digits. 
		*FORM formats better and skews sectors.  Completed Archimedes HADFS Reader
		application.
 0.47	   6/12/92	Time routine (Osword 14) returns time.  This can be set using
		TIME=((hours*60)+minutes)*60*100.  Osword 14/2 supported (convert BCD time to text
		string).  Compact displays 'No date' if no date.  *FX90,6,2 and *FX90,6,3 select HADFS with
		 *fx143,18,16.
 0.47a	  12/11/93	Tidied up Serv7 and system !Boot files; !Boot on Compact doesn't clear memory.  Osbyte
		90,6,64 to 90,6,127 ignored, to be claimed by other roms.
 0.48	  25/11/93	Tidied up disk errors.  All errors report sector as d:ssss, instead of d:tt/s.  TIME remembered
		over Ctrl-Break.  Usernumber extended to 12 bits.  CSDNUM/LIBNUM replaced by
		OWNER, PRIV extended to PRIV and OPTNUM.  FindLib routine checks for external
		libraries.  *I AM routine tidied up.  *INSTALL <cr> sometimes replaces disk title. 
		*FORMnn sometimes sets incorrect disk size.  OSGBPB correctly returns CS on EOF. 
		TreeCopy correctly allows disk swapping in same drive.  *COPY command supplied on disk. 
		*SETUSER only sets 8 bits.
 0.48a	  20/12/93	*INSTALL correctly puts year>1997 and *INFO $ reports it, dates after 1999 correctly 
		handled, HADFS is fully Y2K compliant! *FORMnn disk size not corrupted by date.
		*RUN and */ with no name gives Bad filename.  Occasional problem with joining last two
		entries in FSM.  VisCompact checks for sector allocation clashes.  TreeCopy rewritten to be
		fully error trapped and to read as much as possible before writing.
 0.49	   7/1/94	*MOUNT, *I AM and context checking rewritten.  If *MOUNT with no drive given, context
		checking checks Osbyte 90,6,64..65 for default drive.  The word 'Version' removed from
		version string.
 0.4A	  17/1/94	OSGBPB completely rewritten to speed up using direct sector access.  OSGBPB 8 will return
		more than one entry.  OSGBPB 9, 10 and 11 return directory information.  Cannot
		currently do OPENIN("$") yet, though.  *INFO $ displays a split disk as 40*2, *INSTALL 
		accepts *2 as well as /2. /2 and old =<nn> removed from *INSTALL ? help text; =<nn> not 
		recognised, &<nn> should be used.  *INSTALL ? help text temporarily removed to save a bit 
		of space.
 0.4B    2/8/94	File running completely re-written; much tidied up. HADFS as a libfs now implemented. 
		*INSTALL ? help text restored.  Gbpb correctly reads zero bytes if at EOF; extending past
		EXT correctly decrements by 256; *SRSAVE in MOS/DFS works.  Gbpb5 works.  Version 
		byte in rom header now holds 10*version number (ie 4).  Default language code removed; 
		rom now service-only.  Language entry points to service 3 boot routine.  *FORM remembers 
		drive number (important!).
 0.4C	 12/1/95	Unused boot options 4 to 7 removed.  *TITLE command added, alias for *INSTALL.  Disk 
		name on *CAT correct.  Oddity: *FORM leaves *ENABLE set on.  *INSTALL no longer 
		accepts /2, must be *2.
 0.4D	 25/5/95	*HADFS # option and error message removed.  Osgbpb 9,0 returns command line 
		parameters.  <drv> added to *TITLE help text.  HADFS selection checks for OS 3.50 again.
 0.4E	 10/8/96	Sector addresses tidied up.  Sector Error is now Sector Not Found.  *SETUSER renamed to 
		*ACCOUNT.  *ACCOUNT sets full 12-bit account number, and will accept and ignore
		auxilary account as (nnn).  Ctrl-Caps-H-Break turns off HADFS.
 0.4F	  9/9/96	Osfile massively tidied up.  Access to root directory corrected, so OPENIN("$") fully
		implemented.  Extended directories reduced when removing entries.  Screen selection 
		routines tidied up.  Control block can be in screen memory while accessing shadow memory.  
		Cataloguing extended directories no longer displays a blank line between chunks.  Directories 
		auto-extend.  *Rename no longer looses temporary information when dealing with moving 
		entries in extended directories.  Osfile &FD returns user number.  *SHUT reselects old FS if 
		called while HADFS not current.  *\name implemented, matches to FS commands via FSCV3 
		only, without passing it to disk files.  Slight problem with *MAP and *FREE occurs if FSM 
		terminator not followed by another terminator.
 0.4Fa	 9/1/97	Unbalanced stack bug in *Run and *FORM fixed.
 0.4Fb	 4/6/97	Calls to &FFE4 corrected to be OSNEWL at &FFE7, *Info $ displays system disk version 
		correctly.  *Copy in Rom on Master series by using *MOVE, BBC runs from disk. Loading
		last sector to second processor corrected. Full date in version string (try using */ROMS V to 
		see). Drive x not present error incorrectly returned as Not an HADFS disk. Commands don't 
		need to be terminated with a space if followed by a non-letter, previously all characters from 
		'A' onwards were treated as letters. This allows, for example, *DIR^.
 0.50	 1/9/97	FSM loading correctly clears channel 26 buffer flag so BGETs correctly restore from disk. 
		Drive x not present correctly given instead of Not an HADFS disk. Extending an output
		file updates correct directory entry by looking for non-zero length, and length correctly set to 
		alloc size. 'X' error no longer caused by trying to access sectors>=&A00. If no clock on 
		Compact, reads date as 00/00/00. Close checks for disk changed, if error happens on close, 
		channel abandoned. Drive not present returned instead of DFS Osword &7F not available. 
		*FREE output altered slightly.
 0.51	 1/2/98	Displays 'E' attribute correctly, EXT#c=n stack 	imbalance corrected. Reading RTC on Master
		corrected and stored correctly on B and Compact. Extending directories no longer wrongly 
		sets FIRST in first chunk; reducing directories now works correctly. Disk CRC error 
		messages changed slightly. GbPb 9/10/11 correctly returns count=0 if no filename returned; 
		GbPb 10/11 can scan current directory if XY+0=0. Still problems with: *RENAMEing on 
		disk separate to CSD; Using BPUT to extend zero-length file; saving after reading date from 
		fileserver; *Copy -net-file -hadfs-file sets 'E' incorrectly.
 5.20   1/6/98	Version numbers displayed as binary version / 10 (ie, 5.20) instead of / 100 (ie 0.52). Drive1 
		flag stored in startup byte instead of being copied internally. Command word termination 
		with a a non-letter works again, allowing, for example, *DIR^.
 5.21   1/7/98	Reading RTC corrects year overflow in date. GBPB 9/10/11 routines temporarily removed to 
		save space. Drive 1 status checked directly in Osbyte255 instead of double-copying it.
 5.22   1/8/98	Patched to prevent memory corruption when reading RTC from NetFS on Compact. MOS350 
		flag cleared.