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

.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