forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
806 lines
30 KiB
806 lines
30 KiB
.cs 5
|
|
.mt 5
|
|
.mb 6
|
|
.pl 66
|
|
.ll 65
|
|
.po 10
|
|
.hm 2
|
|
.fm 2
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 10: READ CONSOLE BUFFER
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0AH
|
|
Registers DE: Buffer Address
|
|
.sp
|
|
Returned Value:
|
|
Console Characters in Buffer
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Read Buffer functions reads a line of edited console input
|
|
into a buffer addressed by registers DE. Console input is
|
|
terminated when either input buffer overflows or a carriage return
|
|
or line-feed is typed. The Read Buffer takes the form:
|
|
.sp
|
|
.nf
|
|
.in 8
|
|
DE:+0 +1 +2 +3 +4 +5 +6 +7 +8 . . .+n
|
|
.sp
|
|
mx nc c1 c2 c3 c4 c5 c6 c7 ... ??
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
where mx is the maximum number of characters that the buffer will
|
|
hold, 1 to 255, and nc is the number of characters read (set by
|
|
FDOS upon return) followed by the characters read from the
|
|
console. If nc < mx, then uninitialized positions follow the
|
|
last character, denoted by ?? in the above figure. A number of
|
|
control functions, summarized in Table 5-3, are recognized during
|
|
line editing.
|
|
.sp 2
|
|
.sh
|
|
Table 5-3. Edit Control Characters
|
|
.sp
|
|
.nf
|
|
Character Edit Control Function
|
|
.sp
|
|
.fi
|
|
.in 8
|
|
rub/del removes and echoes the last character
|
|
.sp
|
|
CTRL-C reboots when at the beginning of line
|
|
.sp
|
|
CTRL-E causes physical end of line
|
|
.sp
|
|
CTRL-H backspaces one character position
|
|
.sp
|
|
CTRL-J (line feed) terminates input line
|
|
.sp
|
|
CTRL-M (return) terminates input line
|
|
.sp
|
|
CTRL-R retypes the current line after new line
|
|
.sp
|
|
CTRL-U removes current line
|
|
.sp
|
|
CTRL-X same as CTRL-U
|
|
.in 0
|
|
.sp 2
|
|
The user should also note that certain functions that return the
|
|
carriage to the leftmost position (for example, CTRL-X) do so only to the
|
|
column position where the prompt ended. In earlier releases, the
|
|
carriage returned to the extreme left margin. This convention
|
|
makes operator data input and line correction more legible.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 11: GET CONSOLE STATUS
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0BH
|
|
.sp
|
|
Returned Value:
|
|
Register A: Console Status
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Console Status function checks to see if a character has been
|
|
typed at the console. If a character is ready, the value 0FFH is
|
|
returned in register A. Otherwise a 00H value is returned.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 12: RETURN VERSION NUMBER
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0CH
|
|
.sp
|
|
Returned Value:
|
|
Registers HL: Version Number
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Function 12 provides information that allows version independent
|
|
programming. A two-byte value is returned, with H = 00
|
|
designating the CP/M release (H = 01 for MP/M) and L = 00 for
|
|
all releases previous to 2.0. CP/M 2.0 returns a hexadecimal 20
|
|
in register L, with subsequent version 2 releases in the
|
|
hexadecimal range 21,22, through 2F. Using Function 12, for
|
|
example, the user can write application programs that provide
|
|
both sequential and random access functions.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 13: RESET DISK SYSTEM
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0DH
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Reset Disk function is used to programmatically restore the
|
|
file system to a reset state where all disks are set to
|
|
Read-Write. See functions 28 and 29, only disk drive A is
|
|
selected, and the default DMA address is reset to BOOT+0080H.
|
|
This function can be used, for example, by an application program
|
|
that requires a disk change without a system reboot.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 14: SELECT DISK
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0EH
|
|
Register E: Selected Disk
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Select Disk function designates the disk drive named in register
|
|
E as the default disk for subsequent file operations, with E = O
|
|
for drive A, 1 for drive B, and so on through 15, corresponding to drive
|
|
P in a full 16 drive system. The drive is placed in an on-line
|
|
status, which activates its directory until the next cold start,
|
|
warm start, or disk system reset operation. If the disk medium
|
|
is changed while it is on-line, the drive automatically goes to
|
|
a Read-Only status in a standard CP/M environment, see Function
|
|
28. FCBs that specify drive code zero (dr = 00H) automatically
|
|
reference the currently selected default drive. Drive code
|
|
values between 1 and 16 ignore the selected default
|
|
drive and directly reference drives A through P.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 15: OPEN FILE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 0FH
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Open File operation is used to activate a file that currently
|
|
exists in the disk directory for the currently active user
|
|
number. The FDOS scans the referenced disk directory for a match
|
|
in positions 1 through 14 of the FCB referenced by DE (byte s1 is
|
|
automatically zeroed) where an ASCII question mark (3FH) matches
|
|
any directory character in any of these positions. Normally, no
|
|
question marks are included, and bytes ex and s2 of the FCB are
|
|
zero.
|
|
.pp
|
|
If a directory element is matched, the relevant directory
|
|
information is copied into bytes d0 through dn of FCB, thus
|
|
allowing access to the files through subsequent read and write
|
|
operations. The user should note that an existing file must not
|
|
be accessed until a successful open operation is completed. Upon
|
|
return, the open function returns a directory code with the value
|
|
0 through 3 if the open was successful or 0FFH (255 decimal) if
|
|
the file cannot be found. If question marks occur in the FCB,
|
|
the first matching FCB is activated. Note that the current
|
|
record, (cr) must be zeroed by the program if the file is to be
|
|
accessed sequentially from the first record.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 16: CLOSE FILE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 10H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Close File function performs the inverse of the Open File
|
|
function. Given that the FCB addressed by DE has been previously
|
|
activated through an open or make function, the close function
|
|
permanently records the new FCB in the reference disk directory
|
|
see functions 15 and 22. The FCB matching process for the close
|
|
is identical to the open function. The directory code returned
|
|
for a successful close operation is 0, 1, 2, or 3, while a 0FFH
|
|
(255 decimal) is returned if the filename cannot be found in the
|
|
directory. A file need not be closed if only read operations
|
|
have taken place. If write operations have occurred, the close
|
|
operation is necessary to record the new directory information
|
|
permanently.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 17: SEARCH FOR FIRST
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 11H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Search First scans the directory for a match with the file given
|
|
by the FCB addressed by DE. The value 255 (hexadecimal FF) is
|
|
returned if the file is not found; otherwise, 0, 1, 2, or 3 is
|
|
returned indicating the file is present. When the file is found,
|
|
the current DMA address is filled with the record containing the
|
|
directory entry, and the relative starting position is A *32
|
|
(that is, rotate the A register left 5 bits, or ADD A five times).
|
|
Although not normally required for application programs, the
|
|
directory information can be extracted from the buffer at this
|
|
position.
|
|
.pp
|
|
An ASCII question mark (63 decimal, 3F hexadecimal) in any
|
|
position from f1 through ex matches the corresponding field of
|
|
any directory entry on the default or auto-selected disk drive.
|
|
If the dr field contains an ASCII question mark, the auto disk
|
|
select function is disabled and the default disk is searched,
|
|
with the search function returning any matched entry, allocated
|
|
or free, belonging to any user number. This latter function is
|
|
not normally used by application programs, but it allows complete
|
|
flexibility to scan all current directory values. If the dr
|
|
field is not a question mark, the s2 byte is automatically
|
|
zeroed.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 18: SEARCH FOR NEXT
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 12H
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Search Next function is similar to the Search First function, except
|
|
that the directory scan continues from the last matched entry.
|
|
Similar to Function 17, Function 18 returns the decimal value 255
|
|
in A when no more directory items match.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 19: DELETE FILE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 13H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Delete File function removes files that match the FCB
|
|
addressed by DE. The filename and type may contain ambiguous
|
|
references (that is, question marks in various positions), but the
|
|
drive select code cannot be ambiguous, as in the Search and
|
|
Search Next functions.
|
|
.pp
|
|
Function 19 returns a decimal 255 if the referenced file or files
|
|
cannot be found; otherwise, a value in the range 0 to 3 returned.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 20: READ SEQUENTIAL
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 14H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Given that the FCB addressed by DE has been activated through an
|
|
Open or Make function, the Read Sequential function reads the
|
|
next 128-byte record from the file into memory at the current DMA
|
|
address. The record is read from position cr of the extent, and
|
|
the cr field is automatically incremented to the next record
|
|
position. If the cr field overflows, the next logical extent is
|
|
automatically opened and the cr field is reset to zero in
|
|
preparation for the next read operation. The value 00H is
|
|
returned in the A register if the read operation was successful,
|
|
while a nonzero value is returned if no data exist at the next
|
|
record position (for example, end-of-file occurs).
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 21: WRITE SEQUENTAIL
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 15H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Given that the FCB addressed by DE has been activated through an
|
|
Open or Make function, the Write Sequential
|
|
function writes the 128-byte data record at the current DMA
|
|
address to the file named by the FCB. The record is placed at
|
|
position cr of the file, and the cr field is automatically
|
|
incremented to the next record position. If the cr field
|
|
overflows, the next logical extent is automatically opened and
|
|
the cr field is reset to zero in preparation for the next write
|
|
operation. Write operations can take place into an existing
|
|
file, in which case, newly written records overlay those that
|
|
already exist in the file. Register A = 00H upon return from a
|
|
successful write operation, while a nonzero value indicates an
|
|
unsuccessful write caused by a full disk.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 22: MAKE FILE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 16H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Make File operation is similar to the Open File operation
|
|
except that the FCB must name a file that does not exist in the
|
|
currently referenced disk directory (that is, the one named
|
|
explicitly by a nonzero dr code or the default disk if dr is
|
|
zero). The FDOS creates the file and initializes both the
|
|
directory and main memory value to an empty file. The programmer
|
|
must ensure that no duplicate filenames occur, and a preceding
|
|
delete operation is sufficient if there is any possibility of
|
|
duplication. Upon return, register A = 0, 1, 2, or 3 if the
|
|
operation was successful and 0FFH (255 decimal) if no more
|
|
directory space is available. The Make function has the side
|
|
effect of activating the FCB and thus a subsequent open is not
|
|
necessary.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 23: RENAME FILE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 17H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Rename function uses the FCB addressed by DE to change all
|
|
occurrences of the file named in the first 16 bytes to the file
|
|
named in the second 16 bytes. The drive code dr at postion 0 is
|
|
used to select the drive, while the drive code for the new
|
|
filename at position 16 of the FCB is assumed to be zero. Upon
|
|
return, register A is set to a value between 0 and 3 if the
|
|
rename was successful and 0FFH (255 decimal) if the first
|
|
filename could not be found in the directory scan.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 24: RETURN LOG-IN VECTOR
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 18H
|
|
.sp
|
|
Returned Value:
|
|
Registers HL: Log-in Vector
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The log-in vector value returned by CP/M is a 16-bit value in HL, where the
|
|
least significant bit of L corresponds to the first drive A and
|
|
the high-order bit of H corresponds to the sixteenth drive,
|
|
labeled P. A 0 bit indicates that the drive is not on-line,
|
|
while a 1 bit marks a drive that is actively on-line as a result
|
|
of an explicit disk drive selection or an implicit drive select
|
|
caused by a file operation that specified a nonzero dr field.
|
|
The user should note that compatibility is maintained with
|
|
earlier releases, because registers A and L contain the same values
|
|
upon return.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 25: RETURN CURRENT DISK
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 19H
|
|
.sp
|
|
Returned Value:
|
|
Register A: Current Disk
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Function 25 returns the currently selected default disk number in
|
|
register A. The disk numbers range from 0 through 15
|
|
corresponding to drives A through P.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 26: SET DMA ADDRESS
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1AH
|
|
Registers DE: DMA Address
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
DMA is an acronym for Direct Memory Address, which is often used
|
|
in connection with disk controllers that directly access the
|
|
memory of the mainframe computer to transfer data to and from the
|
|
disk subsystem. Although many computer systems use non-DMA
|
|
access (that is, the data is transferred through programmed I/O
|
|
operations), the DMA address has, in CP/M, come to mean the
|
|
address at which the 128-byte data record resides before a disk
|
|
write and after a disk read. Upon cold start, warm start, or
|
|
disk system reset, the DMA address is automatically set to
|
|
BOOT+0080H. The Set DMA function can be used to change
|
|
this default value to address another area of memory where the
|
|
data records reside. Thus, the DMA address becomes the value
|
|
specified by DE until it is changed by a subsequent Set DMA
|
|
function, cold start, warm start, or disk system reset.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 27: GET ADDR (ALLOC)
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1BH
|
|
.sp
|
|
Returned Value:
|
|
Registers HL: ALLOC Address
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
An allocation vector is maintained in main memory for each on-
|
|
line disk drive. Various system programs use the information
|
|
provided by the allocation vector to determine the amount of
|
|
remaining storage (see the STAT program). Function 27 returns
|
|
the base address of the allocation vector for the currently
|
|
selected disk drive. However, the allocation information might be
|
|
invalid if the selected disk has been marked Read-Only. Although
|
|
this function is not normally used by application programs,
|
|
additional details of the allocation vector are found in Chapter
|
|
6.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 28: WRITE PROTECT DISK
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1CH
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Write Protect Disk function provides temporary write
|
|
protection for the currently selected disk. Any attempt to write
|
|
to the disk before the next cold or warm start operation produces
|
|
the message:
|
|
.sp
|
|
.ti 8
|
|
BDOS ERR on d:R/O
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 29: GET READ-ONLY VECTOR
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1DH
|
|
.sp
|
|
Returned Value:
|
|
Registers HL: R/O Vector Value
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Function 29 returns a bit vector in register pair HL, which
|
|
indicates drives that have the temporary Read-Only bit set. As
|
|
in Function 24, the least significant bit corresponds to drive A,
|
|
while the most significant bit corresponds to drive P. The R/O
|
|
bit is set either by an explicit call to Function 28 or by the
|
|
automatic software mechanisms within CP/M that detect changed
|
|
disks.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 30: SET FILE ATTRIBUTES
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1EH
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Directory Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Set File Attributes function allows programmatic manipulation
|
|
of permanent indicators attached to files. In particular, the R/O
|
|
and System attributes (t1' and t2') can be set or reset. The DE
|
|
pair addresses an unambiguous filename with the appropriate
|
|
attributes set or reset. Function 30 searches for a match and
|
|
changes the matched directory entry to contain the selected
|
|
indicators. Indicators f1' through f4' are not currently used,
|
|
but may be useful for applications programs, since they are not
|
|
involved in the matching process during file open and close
|
|
operations. Indicators f5' through f8' and t3' are reserved for
|
|
future system expansion.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 31: GET ADDR (DISK PARMS)
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 1FH
|
|
.sp
|
|
Returned Value:
|
|
Registers HL: DPB Address
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The address of the BIOS resident disk parameter block is returned
|
|
in HL as a result of this function call. This address can be
|
|
used for either of two purposes. First, the disk parameter
|
|
values can be extracted for display and space computation
|
|
purposes, or transient programs can dynamically change the values
|
|
of current disk parameters when the disk environment changes, if
|
|
required. Normally, application programs will not require this
|
|
facility.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 32: SET/GET USER CODE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 20H
|
|
Register E: OFFH (get) or
|
|
User Code (set)
|
|
.sp
|
|
Returned Value:
|
|
Register A: Current Code or
|
|
(no value)
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
An application program can change or interrogate the currently
|
|
active user number by calling Function 32. If register E = 0FFH,
|
|
the value of the current user number is returned in register A,
|
|
where the value is in the range of 0 to 15. If register E is not
|
|
0FFH, the current user number is changed to the value of E,
|
|
modulo 16.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 33: READ RANDOM
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 21H
|
|
.sp
|
|
Returned Value:
|
|
Register A: Return Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Read Random function is similar to the sequential file read
|
|
operation of previous releases, except that the read operation
|
|
takes place at a particular record number, selected by the 24-bit
|
|
value constructed from the 3-byte field following the FCB (byte
|
|
positions r0 at 33, r1 at 34, and r2 at 35). The user should
|
|
note that the sequence of 24 bits is stored with least
|
|
significant byte first (r0), middle byte next (r1), and high byte
|
|
last (r2). CP/M does not reference byte r2, except in computing
|
|
the size of a file (Function 35). Byte r2 must be zero, however,
|
|
since a nonzero value indicates overflow past the end of file.
|
|
.pp
|
|
Thus, the r0, r1 byte pair is treated as a double-byte, or word
|
|
value, that contains the record to read. This value ranges from
|
|
0 to 65535, providing access to any particular record of the 8-
|
|
megabyte file. To process a file using random access, the base
|
|
extent (extent 0) must first be opened. Although the base extent
|
|
might or might not contain any allocated data, this ensures that the
|
|
file is properly recorded in the directory and is visible in DIR
|
|
requests. The selected record number is then stored in the
|
|
random record field (r0, r1), and the BDOS is called to read the
|
|
record.
|
|
.pp
|
|
Upon return from the call, register A either contains an error
|
|
code, as listed below, or the value 00, indicating the operation
|
|
was successful. In the latter case, the current DMA address
|
|
contains the randomly accessed record. Note that
|
|
contrary to the sequential read operation, the record number is
|
|
not advanced. Thus, subsequent random read operations continue
|
|
to read the same record.
|
|
.pp
|
|
Upon each random read operation, the logical extent and current
|
|
record values are automatically set. Thus, the file can be
|
|
sequentially read or written, starting from the current randomly
|
|
accessed position. However, note that, in this
|
|
case, the last randomly read record will be reread as one
|
|
switches from random mode to sequential read and the last record
|
|
will be rewritten as one switches to a sequential write operation.
|
|
The user can simply advance the random record
|
|
position following each random read or write to obtain the effect
|
|
of sequential I/O operation.
|
|
.bp
|
|
.pp
|
|
Error codes returned in register A following a random read are
|
|
listed below.
|
|
.sp 2
|
|
.nf
|
|
.in 8
|
|
01 reading unwritten data
|
|
.sp
|
|
02 (not returned in random mode)
|
|
.sp
|
|
03 cannot close current extent
|
|
.sp
|
|
04 seek to unwritten extent
|
|
.sp
|
|
05 (not returned in read mode)
|
|
.sp
|
|
06 seek past physical end of disk
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
.pp
|
|
Error codes 01 and 04 occur when a random read operation accesses
|
|
a data block that has not been previously written or an extent
|
|
that has not been created, which are equivalent conditions.
|
|
Error code 03 does not normally occur under proper system
|
|
operation. If it does, it can be cleared by simply rereading or
|
|
reopening extent zero as long as the disk is not physically write
|
|
protected. Error code 06 occurs whenever byte r2 is nonzero
|
|
under the current 2.0 release. Normally, nonzero return codes
|
|
can be treated as missing data, with zero return codes indicating
|
|
operation complete.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 34: WRITE RANDOM
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 22H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Return Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Write Random operation is initiated similarly to the Read
|
|
Random call, except that data is written to the disk from the
|
|
current DMA address. Further, if the disk extent or data block
|
|
that is the target of the write has not yet been allocated, the
|
|
allocation is performed before the write operation continues. As
|
|
in the Read Random operation, the random record number is not
|
|
changed as a result of the write. The logical extent number and
|
|
current record positions of the FCB are set to correspond to the
|
|
random record that is being written. Again, sequential read or
|
|
write operations can begin following a random write, with the
|
|
notation that the currently addressed record is either read or
|
|
rewritten again as the sequential operation begins. You can
|
|
also simply advance the random record position following each
|
|
write to get the effect of a sequential write operation.
|
|
Note that reading or writing the last record of an extent in
|
|
random mode does not cause an automatic extent switch as it does
|
|
in sequential mode.
|
|
.pp
|
|
The error codes returned by a random write are identical to the
|
|
random read operation with the addition of error code 05, which
|
|
indicates that a new extent cannot be created as a result of
|
|
directory overflow.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 35: COMPUTE FILE SIZE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 23H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Random Record Field Set
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
When computing the size of a file, the DE register pair addresses
|
|
an FCB in random mode format (bytes r0, r1, and r2 are present).
|
|
The FCB contains an unambiguous filename that is used in the
|
|
directory scan. Upon return, the random record bytes contain the
|
|
virtual file size, which is, in effect, the record address of
|
|
the record following the end of the file. Following a call to
|
|
Function 35, if the high record byte r2 is 01, the file contains
|
|
the maximum record count 65536. Otherwise, bytes r0 and r1
|
|
constitute a 16-bit value as before (r0 is the least significant byte),
|
|
which is the file size.
|
|
.pp
|
|
Data can be appended to the end of an existing file by simply
|
|
calling Function 35 to set the random record position to the end
|
|
of file and then performing a sequence of random writes starting
|
|
at the preset record address.
|
|
.pp
|
|
The virtual size of a file corresponds to the physical size when
|
|
the file is written sequentially. If the file was created in
|
|
random mode and holes exist in the allocation, the file might
|
|
contain fewer records than the size indicates. For example,
|
|
if only the last record of an 8-megabyte file is written in
|
|
random mode (that is, record number 65535), the virtual size is
|
|
65536 records, although only one block of data is actually
|
|
allocated.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 36: SET RANDOM RECORD
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 24H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Random Record Field Set
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Set Random Record function causes the BDOS automatically
|
|
to produce the random record position from a file that has been
|
|
read or written sequentially to a particular point. The function
|
|
can be useful in two ways.
|
|
.pp
|
|
First, it is often necessary initially to read and scan a
|
|
sequential file to extract the positions of various key fields.
|
|
As each key is encountered, Function 36 is called to compute the
|
|
random record position for the data corresponding to this key. If
|
|
the data unit size is 128 bytes, the resulting record position is
|
|
placed into a table with the key for later retrieval. After
|
|
scanning the entire file and tabulating the keys and their record
|
|
numbers, the user can move instantly to a particular keyed record
|
|
by performing a random read, using the corresponding random
|
|
record number that was saved earlier. The scheme is easily
|
|
generalized for variable record lengths, because the program need
|
|
only store the buffer-relative byte position along with the key
|
|
and record number to find the exact starting position of the
|
|
keyed data at a later time.
|
|
.pp
|
|
A second use of Function 36 occurs when switching from a
|
|
sequential read or write over to random read or write. A file is
|
|
sequentially accessed to a particular point in the file, Function
|
|
36 is called, which sets the record number, and subsequent random
|
|
read and write operations continue from the selected point in the
|
|
file.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 37: RESET DRIVE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 25H
|
|
Registers DE: Drive Vector
|
|
.sp
|
|
Returned Value:
|
|
Register A: 00H
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Reset Drive function allows resetting of specified drives.
|
|
The passed parameter is a 16-bit vector of drives to be reset;
|
|
the least significant bit is drive A:.
|
|
.pp
|
|
To maintain compatibility with MP/M, CP/M returns a zero value.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 40: WRITE RANDOM WITH ZERO FILL
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 28H
|
|
Registers DE: FCB Address
|
|
.sp
|
|
Returned Value:
|
|
Register A: Return Code
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Write With Zero Fill operation is similar to Function 34,
|
|
with the exception that a previously unallocated block is filled
|
|
with zeros before the data is written.
|
|
.nx fivec
|
|
|