HADFS Program History ===================== Version Release Date Remarks 0.03 03/03/1990 Very early non-documented version. 0.11 05/07/1990 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 01/09/1990 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/09/1990 *SETDATE 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/1990 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 06/11/1990 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 04/01/1991 *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 displays 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 07/01/1991 *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 08/01/1991 *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 09/01/1991 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 01/02/1991 After a *MOUNT, LIB is set to :0.Library if it exists. 0.20 15/02/1991 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/02/1991 HADFS works on MOS 3.50, but can only read disks. Hidden commands *STATUS and *CONFIGURE added. 0.22 03/03/1991 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/03/1991 Solved problem of selection on B+. 0.24 30/03/1991 '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-2012, 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 01/05/1991 Corrected version of 0.25. Loading to page &F possible. Minor tidying-up done. 0.27 10/05/1991 *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/05/1991 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/06/1991 OSARGS extended to return version number, and last drive used. Also reading workspace info. 0.30 07/07/1991 Lots of random access stuff rewritten. 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/07/1991 OSFILE access to '$' returns more information. Removed bug that *CATted a file. General tidying up. 0.32 02/11/1991 *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/1991 *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.5" drives. Fixed OSGBPB 1/3 with supplied PTR. 0.34 01/01/1992 Moved parts of workspace around to make workable with Watford DFS.... open routines....

0.35 01/02/1992 \ - I accidently lost this part of this file. 0.36 08/03/1992 / In general, *FORM debugged, various things tidied up.

0.37 15/03/1992 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 06/04/1992 *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/04/1992 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/04/1992 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/04/1992 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 01/05/1992 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 01/06/1992 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/07/1992 *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 02/08/1992 *INSTALL routine rewritten 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/09/1992 *TIME and *CLOSE commands added. *STATUS displays current time if set. *SETDATE with no parameters disables HADFS RTC clock function. *MOUNT can take a drive parameter, selecting that drive. *CAT routines tidied up - no longer checks disk twice. Started writing RISC OS HADFS Reader application. 0.46 15/11/1992 EXT not set to zero when overflows at &7FFFF. User number displayed as three digits. *FORM formats better and skews sectors. Completed RISC OS HADFS Reader application. 0.47 06/12/1992 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/1993 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/1993 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/1993 *INSTALL correctly puts year>1997 and *INFO $ reports it, all 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 07/01/1994 *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/01/1994 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 02/08/1994 File running completely re-written; much tidied up. HADFS as a libfs now implemented. *INSTALL ? help text restored. OSGBPB correctly reads zero bytes if at EOF; extending past EXT correctly decrements by 256; *SRSAVE in MOS/DFS works. OSGBPB 5 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/01/1995 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/05/1995 *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/08/1996 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 09/09/1996 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 loses 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 09/01/1997 Unbalanced stack bug in *RUN and *FORM fixed. 0.4Fb 04/06/1997 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 01/09/1997 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 01/02/1998 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. OSGBPB 9/10/11 correctly returns count=0 if no filename returned; OSGBPB 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 01/06/1998 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 non-letter works again, allowing, for example, *DIR^. 5.21 01/07/1998 Reading RTC corrects year overflow in date. OSGBPB 9/10/11 routines temporarily removed to save space. Drive 1 status checked directly in OSBYTE 255 instead of double-copying it. 5.22 01/08/1998 Patched to prevent memory corruption when reading RTC from NetFS on Compact. MOS350 flag cleared. 24/02/1999 Fixed bug in GetEnv in ProgLib that didn't skip enough spaces on Arc. 5.23 31/03/1999 Ensures absent keyboard checked for even if HADFS is disabled. 5.24 01/05/1999 Source code reformatted as text. RTC patch preserves more workspace so OPENOUT(nf) doesn't lose handle. 5.25 5.26 / / *INSTALL uses same boot code for data and system disks, *INSTALL and *FORM routines rewritten with full source comments. All code can cope with 4G disk sizes. OSGBPB9/10/11 will fit in again. 5.27 / / Floppy access code considerably tidied and speeded up. Access to external drives cleaner. *OPT7 used to select external drivers. *OPT40 and *OPT80 allowed, but do nothing. 5.28 5.29 / / Integrated GoMMC driver for drive M. 5.30 16/09/2004 Integrated IDE driver for drives 4 to 7, commas used in *FREE output, checks disk flags for default drives. IDE driver doesn't work across Tube. Relinquishes workspace if another filing system takes over as DFS 2.xx doesn't pass service call &0A on. 5.31 03/09/2005 Transitional version, only works on Masters. Workspace rearranged to create space for 24-bit random access. All core routines pass and return 24-bit sector addresses. Channel information still holds 16-bit information. 5.32 06/09/2005 24-bit channel information laid out. 5.33 08/09/2005 Workspace rearranged to accommodate DFS. *CAT blank lines on BBC fixed. *OPT2/3 is offset to myfs/auxfs. GrabAbs does ClearDIR, SetDate tidied. IDE drivers work with Tube and uses 24-bit access (4G drives), OSGBPB 5/6/7 does CheckNames on CSD drive. HEdit displays 24-bit sectors. !Boot program updated. IDE result codes need translating to 8271 codes, *FORM removed to save space. 5.40 12/09/2005 IDE error codes translated, accessing MMC doesn't blank out VFLG. *BACKUP can use fs: prefix. *CAT doesn't emit extra blank line if a directory holds 4n+2 entries. HUtils has option to set drive boot options. 5.41 15/10/2005 Workspace moved to &E00 to avoid being corrupted by DFS on BBC B+. 5.42 12/05/2007 Tidied up source code. Optimised soft RTC time manipulation code. 5.50 15/05/2007 Full 'Acorn Era' 7-bit year range storable, extending date range from 1981-2012 to 1981-2108, though dates after 2099 not displayed correctly. 5.51 17/05/2007 OSARGS context read/write uses standard handles. 5.52 05/07/2007 Started implementing BigDisk and BigDir internal code. Auxilary accounts implemented, OSFILE &FD reads BigDir creation date. Filenames starting '%' allowed. 5.53 07/07/2007 BigDir layout finalised as 24 x 32-byte entries. 5.60 31/12/2011 All filing system access updated to use 24-bit disk access, increasing maximum disk size from 16M to 4G. *RENAME not yet updated to rename BigDir entries. FSM not updated correctly on delete, deleting extended directories fails. 5.61 12/01/2012 *RENAME implemented for BigDirs. FSM updated correctly on delete, deleting extended directories works. *INSTALL <num>M accepted. Extending open file past 512K works. 5.62 17/02/2012 Modification time and creation dates on BigDisks. *TreeCopy updated to copy all date metadata. Fixed one-byte typo in *RENAME in BigDirs. 5.63 10/03/2012 Moved channel buffers into high workspace on Master. Compacted and tidied workspace. 5.64 17/03/2012 Rewrote code to access video memory. 5.65 18/03/2012 Rewrote code to scan directories. 5.66 20/03/2012 Removed optional source code for NotHazel, OldVRAM, IDE16, WS=&1000. ReadInfo, CDIR, Rename, Install all use offset DIR. 5.67 22/03/2012 Directory buffer relocates. 5.68 23/03/2012 Consistant 4-byte sector addresses in directories, CMOS byte holds DRVINT. 5.69 24/03/2012 Tidied up disk access, 8x4G IDE drives accessible, *OPT 4,8+n, bugfix reading PRIV in GBPB. 5.70 24/03/2012 DoIOwn checks aux account, *Account sets aux account, System !Boot selects Electron SRAM, but filing system doesn't work properly on Electron. 5.71 04/04/2012 *HADFS checks for Master 3.50 DFS presence, DrvFloppy enables Master 3.50 DFS when calling OSWORD &7F. Optimised some disk access code, tweeked IDE error translation, System !Boot works on Electron. 5.72 08/04/2012 H-Break clears keypress, removed Ctrl-Caps-H-Break. Shadow screen election works on BBC again. Optimised DiskMain, CheckAddr, ShadowOn/Off. 6.00 01/04/2012 Release as Version 6.