Another feature that was highly prized was the ability to set up Ram Discs which was especially useful with the One Meg extension that could be formattted into a complete 800k virtual disc.
MasterDOS provides hook (command) codes which enable the machinecode programmer to use the DOS’s facilities without having to return to or call SAM BASIC.
If an error occurs, MasterDOS puts an error number into the A register; otherwise the A register will be zero.
The Hook Codes currently available are:
- INIT 128 (80H)
- Look for an AUTO file on the current disk. Noaction (or error) occurs if there is no AUTO file, otherwise it isloaded (and executed if it is an auto-running Basic or CODEfile). This Hook can only be used in sections B and C of the memorymap.
- HGTHD 129 (81H)
- Get file header. This routine should be calledwith IX pointing to the UIFA, which should hold the file type required(at IX+0) and the file name (at IX+1 to IX+10). The routine looks forthe file in the current directory on the current drive and eitherreturns with an error code, or transfers the data from the filedirectory entry to IX+80 dec, in UIFA form. The calling code and theUIFA can be in sections B, C or D of the memory map. (Note: this hookworks correctly in SAMDOS, provided IX=4BOOH.)
- HLOAD 130 (82H)
- Load data from the file you have just got theheader of using HGTHD above. HL must point to the destination address,paged in between 8000H and BFFFH, i.e. in section C of the memorymap. The C register should hold the number of 16K pages in the file,and DE should hold the length MOD 16K. These values can be read fromthe header loaded by HGTHD. See also Hook 143.
- HVERY 131 (83H)
- Like HLOAD, but verify the data on the diskagainst the data in memory. Error code 93 dec if verify failed.
- HSAVE 132 (84H)
- Save the file whose UIFA is pointed to byIX. All relevant data in the UIFA must be complete - for a CODE file,type, name, start, length and execute address. If in doubt, try a SAVEfrom BASIC and then look at 4500H-4B47H to find the requiredvalues.
- HSKSF 133 (85H)
- Seek Safe. On some machines, pressing the Resetbutton can corrupt the disk sector under the drive head. This is oftenon the track containing the last sector of the last fileloaded. MasterDOS tries to minimise the problem by parking the drivehead on the last track in the directory, after a LOAD or a SAVE. Thistrack will be unused unless the directory is fairly full. Using theHSKSF hook will move the head of the current drive to the last trackin the directory, unless this would be track 4 (which contains thefirst sector of DOS) in which case track 3 is used instead.
- HAUTO 136 (88H)
- Like Hook 128, but an error code of 101 dec isreturned if there is no AUTO file.
- HSKTD 137 (89H)
- Seek Track D. Move the drive head of thecurrent drive to the track specified in the D register.
- HFMTK 138 (8AH)
- Format Track. Format the track under the drivehead, using the D register to supply the track number and the Eregister as the number of the first sector (1-10). Later sectors willbe numbered 1 higher till 10 is reached and numbering goes back to1. [Does not exist?]
- HVAR 139 (8BH)
- Supply the address of a DVAR by putting it onthe floating point calculator stack. On entry, the FPCS should holdthe desired DVAR number. Note: it is probably easier to page in DOS(the DOS page is held at 5BC2H) and read the disk variablesdirectly. DVAR 0 is at an offset of 0220H within the page - this willnot change.
- HEOF 140 (8CH)
- Supply the End-Of-File status (1 or 0) of aspecified stream. The stream number should be on the FPCS. It will bereplaced by the EOF status.
- HPTR 141 (8DHl)
- Supply the PTR value for a specifiedstream. The stream number on the FPCS is replaced by the PTRvalue.
- HPATH 142 (8EH)
- Supply the current PATH$ on the FPCS Use CALL0124H (JSTKFETCH) to get page (A) offset (DE) and length (BC) of thestring.
- HLUPG 143 (8FH)
- As Hook 130, but on entry the A register shouldhold the page number of the destination address. This need not bepaged in.
- HVEPG 144 (90H)
- As Hook 131, but on entry the A register holdsthe page to verify against.
- HSDIR 145 (9lH)
- Select Directory. Similar to DIR=”name” inBasic. On entry, the registers hold details of the location and lengthof the desired subdirectory name. DE is the offset, A is the page ofthe name start, and BC is the name length.
- HOFSM 146 (92H)
- Open a File Sector Map for an OPENTYPE file. IXmust point to the UIFA. The routine will create the map and clear thedisk buffer.
- HOFLE 147 (93H)
- Open a file on the disk. IX must point to theUIFA. The routine will create a sector address map, and save a 9-byteheader to the disk buffer.
- HSBYT 148 (94H)
- Save the byte in the A register to the diskfile (If the buffer is full it will be written to the disk and thebyte will go into the start of the next buffer.)
- HWSAD 149 (95H)
- Write Single Sector. On entry, the A registeris the drive number (1-7) which is used to access the table at DVAR111 to get the actual drive to use. D holds the destination track, andE the sector. HL points to the source in memory, which must be insections B, C or D of the memory map. 512 bytes will be written todisk.
- HKSB 150 (96H)
- Save a block of data to the disk file. The Aregister holds the length to save in pages, and DE holds the lengthMOD 16K. HL points to the start of the data to save, paged intosection C of the memory map.
- HDBOP 151 (97H)
- Save BC bytes to the disk file. DE points tothe start of the data to save, paged into section C of the memorymap. Used by DOS to write strings to OPENTYPE files.
- HCFSM 152 (98H)
- Close a file. This routine writes the lastbuffer to a disk file and creates a directory entry for it. IX shouldpoint to the UIFA.
- HORDER 153 (99H)
- Sort list into ASCII order. HL should point tothe start of the list in sections B, C or D of the memory map. The BCregister should hold the length of each item in the list, and the DEregister the number of items. The A register specifies the number ofcharacters to sort on. No paging is performed so the entire list mustbe paged in by the user before this hook is called.
- HGFLE 158 (9EH)
- Get a file from the disk. The IX register mustpoint to the UIFA. The return is made with the first sector of thefile loaded into the disk buffer and RPT pointing to the firstbyte.
- HRSAD 160 (A0H)
- Read Single Sector. On entry, the A register isthe drive number (1-7) which is used to access the table at DVAR 111to get the actual drive to use. D holds the source track, and E thesector. HL points to the destination in memory, which must be insections B, C or D of the memory map. 512 bytes will be read from thedisk.
- HLDBK 161 (A1H)
- Load a block of data from the current diskfile. HL points to the destination of the data in memory, paged intosection C of the memory map. The A register is the length to load, inpages, and DE holds the length MOD 16K.
- HMRSAD 162 (A2H)
- Read Multiple Sectors. Equivalent to READ ATin Basic. The A register is the drive to use (1-7, using DVAR 111table), D holds the track, E the sector, C the page and HL the offset(8000H-BFFFH) of the destination. IX holds the number of sectors toload.
- HMWSAD 163 (A3H)
- Write Multiple Sectors. Equivalent to WRITE ATin Basic. As above, but C and HL hold the source address, rather thanthe destination.
- HREST 164 (A4H)
- Restore. Move drive head to track 0. The diskneed not be formatted.
- HP2IR 165 (A5H)
- Print directory. If the A register holds 2,print a simple directory. If it holds 4, print a detaileddirectory. Neither option does a CLS first. The current stream is usedto output.
- HERAZ 166 (A6H)
- ERASE a file from disk. The file name should beat IX+1 to IX+10.
- HCHRD 168 (A8H)
- Read character from the disk file whose UIFA ispointed to by IX. The character and flags are passed out in thealternate BC register: EXX, PUSH BC, EXX, POP AF gives the characterin A, and the carry flag set if the read was OK, else we hit end offile.
PDF Manual Scan at www.samcoupe-pro-dos.co.uk
Urm, I got SamDOS free with my Sam, why do I need another one?
Because it’s just packed full of useful new features, that are of use to even a total beginner. I’ll tell you the 3 most useful features it has.
- The most useful thing is that you can now have subdirectories, which makes file management far more easier. Each Subdirectory uses a free directory slot, but that’s it. They are incredibly useful, since they allow you to ie store all your word processing files in one directory, and all your pictures in another. Subdirectories can contain furthur subdirectories, and so on, allowinf nice tree like structures of files.
- Another useful thing, is that it allows you to set aside areas of memory to use as a RAMDisk. This Basically acts as another (faster) disk drive, that you can carry out normal operations on. If you have a load of files to copy, copying them all to a RAMDisk, and then to the target disk, is a lot easier than 20 or 30 disk swaps. The RAMDisk is limited by the amount of free memory you have, and can be as large as a normal disk (800k), very useful if you have a 1meg expansion!
- The 3rd “useful for anyone” feature, is that you can now reserve extra tracks on the disk for directory information. Basically this means that you can have more than 80 files on a disk, upto a maximum of 778, useful if you have a lot of small files, and subdirectories, since you could sometimes have about 1/2 your disk space free. Every additional 20 slots uses up 5k of disk space, a small price to pay.
So is that it then?
Not at all, there are plently more features available to those who would use them. For a start, MasterDOS keeps track of the time (if you have the SamBUS with the clock in it), and allows you to date stamp files. You can have a confirm option when using wildcards (ie ERASE “*.txt”). There are some useful new Keywords, to find the current subdirectory name, to count the amount of free memory pages, to give information about the disk, and files. MasterDOS also finally has opentype files, allowing you to open a stream to a file (ie you can use PRINT, INPUT, and the like on disk files).