mirror of https://github.com/wwarthen/RomWBW.git
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.
671 lines
24 KiB
671 lines
24 KiB
.bp 1
|
|
.op
|
|
.cs 5
|
|
.mt 5
|
|
.mb 6
|
|
.pl 66
|
|
.ll 65
|
|
.po 10
|
|
.hm 2
|
|
.fm 2
|
|
.he
|
|
.ft 5-%
|
|
.pc 1
|
|
.ce
|
|
.sh
|
|
Section 5
|
|
.qs
|
|
.sp
|
|
.ce
|
|
.sh
|
|
CP/M 2 System Interface
|
|
.qs
|
|
.tc 5 CP/M 2 System Interface
|
|
.sp 2
|
|
.he CP/M Operating System Manual 5.1 Introduction
|
|
.tc 5.1 Introduction
|
|
5.1 Introduction
|
|
.fi
|
|
.pp 5
|
|
This chapter describes CP/M (release 2) system organization including the
|
|
structure of memory and system entry points. This section provides
|
|
the information you need to write programs that operate under CP/M and
|
|
that use the peripheral and disk I/O facilities of the system.
|
|
.pp
|
|
CP/M is logically divided into four parts, called the Basic Input/Output
|
|
System (BIOS), the Basic Disk Operating System (BDOS), the Console Command
|
|
Processor (CCP), and the Transient Program Area (TPA). The BIOS is a
|
|
hardware-dependent module that defines the exact low level interface with a
|
|
particular computer system that is necessary for peripheral device I/O.
|
|
Although a standard BIOS is supplied by Digital Research, explicit
|
|
instructions are provided for field reconfiguration of the BIOS to match
|
|
nearly any hardware environment, see Section 6.
|
|
.pp
|
|
The BIOS and BDOS are
|
|
logically combined into a single module with a common entry point and
|
|
referred to as the FDOS. The CCP is a distinct program that uses the FDOS to
|
|
provide a human-oriented interface with the information that is cataloged on
|
|
the back-up storage device. The TPA is an area of memory,
|
|
not used by the FDOS and CCP, where various nonresident operating
|
|
system commands and user programs are executed. The lower portion of memory
|
|
is reserved for system information and is detailed in later sections. Memory
|
|
organization of the CP/M system is shown in Figure 5-1.
|
|
.sp 3
|
|
.nf
|
|
High
|
|
Memory FDOS (BDOS+BIOS)
|
|
FBASE:
|
|
|
|
CCP
|
|
CBASE:
|
|
|
|
TPA
|
|
TBASE:
|
|
|
|
System Parameters
|
|
BOOT:
|
|
.sp 2
|
|
.ce
|
|
.sh
|
|
Figure 5-1. CP/M Memory Organization
|
|
.qs
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The exact memory addresses corresponding to BOOT, TBASE, CBASE, and FBASE
|
|
vary from version to version and are described fully in Section 6. All
|
|
standard CP/M versions assume BOOT=0000H, which is the base of
|
|
random access memory. The machine code found at location BOOT performs a
|
|
system warm start, which loads and initializes the programs and variables
|
|
necessary to return control to the CCP. Thus, transient programs need only
|
|
jump to location BOOT to return control to CP/M at the command level.
|
|
Further, the standard versions assume TBASE=BOOT+0100H, which is normally
|
|
location 0100H. The principal entry point to the FDOS is at location
|
|
BOOT+0005H (normally 0005H) where a jump to FBASE is found. The address
|
|
field at BOOT+0006H (normally 0006H) contains the value of FBASE and can be
|
|
used to determine the size of available memory, assuming that the CCP is
|
|
being overlaid by a transient program.
|
|
.pp
|
|
Transient programs are loaded into the TPA and executed as follows. The
|
|
operator communicates with the CCP by typing command lines following each
|
|
prompt. Each command line takes one of the following forms:
|
|
.sp
|
|
.nf
|
|
.in 8
|
|
command
|
|
command file1
|
|
command file1 file2
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
where command is either a built-in function, such as DIR or TYPE, or the name
|
|
of a transient command or program. If the command is a built-in function of
|
|
CP/M, it is executed immediately. Otherwise, the CCP searches the currently
|
|
addressed disk for a file by the name
|
|
.sp
|
|
.ti 8
|
|
command.COM
|
|
.pp
|
|
If the file is found, it is assumed to be a memory image of a program that
|
|
executes in the TPA and thus implicity originates at TBASE in memory. The
|
|
CCP loads the COM file from the disk into memory starting at TBASE and can
|
|
extend up to CBASE.
|
|
.pp
|
|
If the command is followed by one or two file specifications, the CCP prepares
|
|
one or two File Control Block (FCB) names in the system
|
|
parameter area. These optional FCBs are in the form necessary to
|
|
access files through the FDOS and are described in Section 5.2.
|
|
.pp
|
|
The transient program receives control from the CCP and begins
|
|
execution, using the I/O facilities of the FDOS. The transient
|
|
program is called from the CCP. Thus, it can simply return to the CCP upon
|
|
completion of its processing, or can jump to BOOT to pass control back to
|
|
CP/M. In the first case, the transient program must not use memory above
|
|
CBASE, while in the latter case, memory up through FBASE-1 can be used.
|
|
.pp
|
|
The transient program can use the CP/M I/O facilities to communicate with the
|
|
operator's console and peripheral devices, including the disk subsystem. The
|
|
I/O system is accessed by passing a function number and an information address
|
|
to CP/M through the FDOS entry point at BOOT+0005H. In the case of a disk
|
|
read, for example, the transient program sends the number corresponding to a
|
|
disk read, along with the address of an FCB to the CP/M FDOS. The FDOS, in
|
|
turn, performs the operation and returns with either a disk read completion
|
|
indication or an error number indicating that the disk read was unsuccessful.
|
|
.sp 2
|
|
.tc 5.2 Operating System Call Conventions
|
|
.he CP/M Operating System Manual 5.2 Call Conventions
|
|
.sh
|
|
5.2 Operating System Call Conventions
|
|
.qs
|
|
.pp
|
|
This section provides detailed information for performing direct operating
|
|
system calls from user programs. Many of the functions listed below, however,
|
|
are accessed more simply through the I/O macro library provided with the
|
|
MAC macro assembler and listed in the Digital Research manual
|
|
entitled, \c
|
|
.ul
|
|
Programmer's Utilities Guide for the CP/M Family of Operating Systems.
|
|
.qu
|
|
.pp
|
|
CP/M facilities that are available for access by transient programs fall into
|
|
two general categories: simple device I/O and disk file I/O. The simple
|
|
device operations are
|
|
.sp
|
|
.nf
|
|
.in 5
|
|
.ti -2
|
|
o read a console character
|
|
.ti -2
|
|
o write a console character
|
|
.ti -2
|
|
o read a sequential character
|
|
.ti -2
|
|
o write a sequential character
|
|
.ti -2
|
|
o get or set I/O status
|
|
.ti -2
|
|
o print console buffer
|
|
.ti -2
|
|
o interrogate console ready
|
|
.sp
|
|
The following FDOS operations perform disk I/O:
|
|
.sp
|
|
.ti -2
|
|
o disk system reset
|
|
.ti -2
|
|
o drive selection
|
|
.ti -2
|
|
o file creation
|
|
.ti -2
|
|
o file close
|
|
.ti -2
|
|
o directory search
|
|
.ti -2
|
|
o file delete
|
|
.ti -2
|
|
o file rename
|
|
.ti -2
|
|
o random or sequential read
|
|
.ti -2
|
|
o random or sequential write
|
|
.ti -2
|
|
o interrogate available disks
|
|
.ti -2
|
|
o interrogate selected disk
|
|
.ti -2
|
|
o set DMA address
|
|
.ti -2
|
|
o set/reset file indicators.
|
|
.fi
|
|
.in 0
|
|
.pp
|
|
As mentioned above, access to the FDOS functions is accomplished by passing
|
|
a function number and information address through the primary point at
|
|
location BOOT+0005H. In general, the function number is passed in register C
|
|
with the information address in the double byte pair DE. Single byte values
|
|
are returned in register A, with double byte values returned in HL, a zero
|
|
value is returned when the function number is out of range. For reasons of
|
|
compatibility, register A = L and register B = H upon return in all cases.
|
|
Note that the register passing conventions of CP/M agree with
|
|
those of the Intel PL/M systems programming language. CP/M functions and
|
|
their numbers are listed below.
|
|
.bp
|
|
.nf
|
|
.in 5
|
|
O System Reset 19 Delete File
|
|
1 Console Input 20 Read Sequential
|
|
2 Console Output 21 Write Sequential
|
|
3 Reader Input 22 Make File
|
|
4 Punch Output 23 Rename File
|
|
5 List Output 24 Return Login Vector
|
|
6 Direct Console I/O 25 Return Current Disk
|
|
7 Get I/O Byte 26 Set DMA Address
|
|
8 Set I/O Byte 27 Get Addr(Alloc)
|
|
9 Print String 28 Write Protect Disk
|
|
10 Read Console Buffer 29 Get R/0 Vector
|
|
11 Get Console Status 30 Set File Attributes
|
|
12 Return Version Number 31 Get Addr(Disk Parms)
|
|
13 Reset Disk System 32 Set/Get User Code
|
|
14 Select Disk 33 Read Random
|
|
15 Open File 34 Write Random
|
|
16 Close File 35 Compute File Size
|
|
17 Search for First 36 Set Random Record
|
|
18 Search for Next 37 Reset Drive
|
|
40 Write Random with Zero Fill
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
.pp
|
|
Functions 28 and 32 should be avoided in application programs to
|
|
maintain upward compatibility with CP/M.
|
|
.pp
|
|
Upon entry to a transient program, the CCP leaves the stack
|
|
pointer set to an eight-level stack area with the CCP return
|
|
address pushed onto the stack, leaving seven levels before
|
|
overflow occurs. Although this stack is usually not used by a
|
|
transient program (most transients return to the CCP
|
|
through a jump to location 0000H) it is large enough to
|
|
make CP/M system calls because the FDOS switches to a local stack
|
|
at system entry. For example, the assembly-language program segment below
|
|
reads characters continuously until an asterisk is
|
|
encountered, at which time control returns to the CCP, assuming a
|
|
standard CP/M system with BOOT = 0000H.
|
|
.sp 2
|
|
.nf
|
|
.in 8
|
|
BDOS EQU 0005H ;STANDARD CP/M ENTRY
|
|
CONIN EQU 1 ;CONSOLE INPUT FUNCTION
|
|
;
|
|
ORG 0100H ;BASE OF TPA
|
|
NEXTC: MVI C,CONIN ;READ NEXT CHARACTER
|
|
CALL BDOS ;RETURN CHARACTER IN <A>
|
|
CPI '*' ;END OF PROCESSING?
|
|
JNZ NEXTC ;LOOP IF NOT
|
|
RET ;RETURN TO CCP
|
|
END
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
.pp
|
|
CP/M implements a named file structure on each disk, providing a
|
|
logical organization that allows any particular file to contain
|
|
any number of records from completely empty to the full capacity
|
|
of the drive. Each drive is logically distinct with a disk
|
|
directory and file data area. The disk filenames are in three
|
|
parts: the drive select code, the filename (consisting of one to
|
|
eight nonblank characters), and the filetype (consisting of zero
|
|
to three nonblank characters). The filetype names the generic
|
|
category of a particular file, while the filename distinguishes
|
|
individual files in each category. The filetypes listed in Table 5-1
|
|
name a few generic categories that have been established,
|
|
although they are somewhat arbitrary.
|
|
.sp 2
|
|
.sh
|
|
Table 5-1. CP/M Filetypes
|
|
.qs
|
|
.sp
|
|
.nf
|
|
Filetype Meaning
|
|
.sp
|
|
.in 30
|
|
.ti -11
|
|
ASM Assembler Source
|
|
.ti -11
|
|
PRN Printer Listing
|
|
.ti -11
|
|
HEX Hex Machine Code
|
|
.ti -11
|
|
BAS Basic Source File
|
|
.ti -11
|
|
INT Intermediate Code
|
|
.ti -11
|
|
COM Command File
|
|
.ti -11
|
|
PLI PL/I Source File
|
|
.ti -11
|
|
REL Relocatable Module
|
|
.ti -11
|
|
TEX TEX Formatter Source
|
|
.ti -11
|
|
BAK ED Source Backup
|
|
.ti -11
|
|
SYM SID Symbol File
|
|
.ti -11
|
|
$$$ Temporary File
|
|
.fi
|
|
.in 0
|
|
.sp
|
|
.pp
|
|
Source files are treated as a sequence of ASCII characters, where
|
|
each line of the source file is followed by a carriage return, and
|
|
line-feed sequence (0DH followed by 0AH). Thus, one 128-byte CP/M
|
|
record can contain several lines of source text. The end of an
|
|
ASCII file is denoted by a CTRL-Z character (1AH) or a real
|
|
end-of-file returned by the CP/M read operation. CTRL-Z characters embedded
|
|
within machine code files (for example, COM files) are ignored and
|
|
the end-of-file condition returned by CP/M is used to terminate
|
|
read operations.
|
|
.pp
|
|
Files in CP/M can be thought of as a sequence of up to 65536
|
|
records of 128 bytes each, numbered from 0 through 65535, thus
|
|
allowing a maximum of 8 megabytes per file. Note, however,
|
|
that although the records may be considered logically
|
|
contiguous, they may not be physically contiguous in the disk
|
|
data area. Internally, all files are divided into 16K byte
|
|
segments called logical extents, so that counters are easily
|
|
maintained as 8-bit values. The division into extents is
|
|
discussed in the paragraphs that follow: however, they are not
|
|
particularly significant for the programmer, because each extent is
|
|
automatically accessed in both sequential and random access
|
|
modes.
|
|
.pp
|
|
In the file operations starting with Function 15, DE
|
|
usually addresses a FCB. Transient programs
|
|
often use the default FCB area reserved by CP/M at
|
|
location BOOT+005CH (normally 005CH) for simple file operations.
|
|
The basic unit of file information is a 128-byte record used for
|
|
all file operations. Thus, a default location for disk I/O is
|
|
provided by CP/M at location BOOT+0080H (normally 0080H) which
|
|
is the initial default DMA address. See Function 26.
|
|
.pp
|
|
All directory operations take place in a reserved area that does not
|
|
affect write buffers as was the case in release 1, with the
|
|
exception of Search First and Search Next, where compatibility is
|
|
required.
|
|
.pp
|
|
The FCB data area consists of a sequence of 33 bytes for
|
|
sequential access and a series of 36 bytes in the case when the
|
|
file is accessed randomly. The default FCB, normally located at
|
|
005CH, can be used for random access files, because the three bytes
|
|
starting at BOOT+007DH are available for this purpose. Figure 5-2 shows
|
|
the FCB format with the following fields.
|
|
.sp 3
|
|
.nf
|
|
dr f1 f2 / / f8 t1 t2 t3 ex s1 s2 rc d0 / / dn cr r0 r1 r2
|
|
00 01 02 ... 08 09 10 11 12 13 14 15 16 ... 31 32 33 34 35
|
|
.fi
|
|
.sp 2
|
|
.sh
|
|
Figure 5-2. File Control Block Format
|
|
.sp 3
|
|
The following table lists and describes each of the fields in the File Control
|
|
Block figure.
|
|
.sp 2
|
|
.sh
|
|
Table 5-2. File Control Block Fields
|
|
.nf
|
|
.sp
|
|
Field Definition
|
|
.sp
|
|
dr drive code (0-16)
|
|
0 = use default drive for file
|
|
1 = auto disk select drive A,
|
|
2 = auto disk select drive B,
|
|
.
|
|
.
|
|
.
|
|
16= auto disk select drive P.
|
|
.sp
|
|
f1...f8 contain the filename in ASCII
|
|
upper-case, with high bit = 0
|
|
.sp
|
|
t1, t2, t3 contain the filetype in ASCII
|
|
upper-case, with high bit = 0
|
|
t1', t2', and t3' denote the
|
|
bit of these positions,
|
|
t1' = 1 =>Read-Only file,
|
|
t2' = 1 =>SYS file, no DIR list
|
|
.sp
|
|
ex contains the current extent
|
|
number, normally set to 00 by
|
|
the user, but in range 0-31
|
|
during file I/O
|
|
.bp
|
|
.sh
|
|
Table 5-2. (continued)
|
|
.qs
|
|
.sp
|
|
Field Definition
|
|
.sp
|
|
s1 reserved for internal system use
|
|
.sp
|
|
s2 reserved for internal system use,
|
|
set to zero on call to OPEN, MAKE,
|
|
SEARCH
|
|
.sp
|
|
rc record count for extent ex;
|
|
takes on values from 0-127
|
|
.sp
|
|
d0...dn filled in by CP/M; reserved for
|
|
system use
|
|
.sp
|
|
cr current record to read or write in
|
|
a sequential file operation;
|
|
normally set to zero by user
|
|
.sp
|
|
r0, r1, r2 optional random record number in
|
|
the range 0-65535, with overflow
|
|
to r2, r0, r1 constitute a 16-bit
|
|
value with low byte r0, and high
|
|
byte r1
|
|
.fi
|
|
.sp
|
|
.pp
|
|
Each file being accessed through CP/M must have a corresponding
|
|
FCB, which provides the name and allocation information for all
|
|
subsequent file operations. When accessing files, it is the
|
|
programmer's responsibility to fill the lower 16 bytes of the FCB
|
|
and initialize the cr field. Normally, bytes 1 through 11 are
|
|
set to the ASCII character values for the filename and filetype,
|
|
while all other fields are zero.
|
|
.pp
|
|
FCBs are stored in a directory area of the disk, and are brought
|
|
into central memory before the programmer proceeds with file
|
|
operations (see the OPEN and MAKE functions). The memory copy of
|
|
the FCB is updated as file operations take place and later
|
|
recorded permanently on disk at the termination of the file
|
|
operation, (see the CLOSE command).
|
|
.pp
|
|
The CCP constructs the first 16 bytes of two optional FCBs for a
|
|
transient by scanning the remainder of the line following the
|
|
transient name, denoted by file1 and file2 in the prototype
|
|
command line described above, with unspecified fields set to
|
|
ASCII blanks. The first FCB is constructed at location
|
|
BOOT+005CH and can be used as is for subsequent file operations.
|
|
The second FCB occupies the d0...dn portion of the first FCB and
|
|
must be moved to another area of memory before use. If, for
|
|
example, the following command line is typed:
|
|
.sp
|
|
.ti 8
|
|
PROGNAME B:X.ZOT Y.ZAP
|
|
.bp
|
|
the file PROGNAME.COM is loaded into the TPA, and the default FCB
|
|
at BOOT+005CH is initialized to drive code 2, filename X, and
|
|
filetype ZOT. The second drive code takes the default value 0,
|
|
which is placed at BOOT-006CH, with the filename Y placed into
|
|
location BOOT+006DH and filetype ZAP located 8 bytes later at
|
|
BOOT+0075H. All remaining fields through cr are set to zero.
|
|
Note again that it is the programmer's
|
|
responsibility to move this second filename and filetype to another
|
|
area, usually a separate file control block, before opening the
|
|
file that begins at BOOT+005CH, because the open operation
|
|
overwrites the second name and type.
|
|
.pp
|
|
If no filenames are specified in the original command, the
|
|
fields beginning at BOOT+005DH and BOOT+006DH contain blanks. In
|
|
all cases, the CCP translates lower-case alphabetics to upper-case
|
|
to be consistent with the CP/M file naming conventions.
|
|
.pp
|
|
As an added convenience, the default buffer area at location
|
|
BOOT+0080H is initialized to the command line tail typed by the
|
|
operator following the program name. The first position contains
|
|
the number of characters, with the characters themselves
|
|
following the character count. Given the above command line, the
|
|
area beginning at BOOT+0080H is initialized as follows:
|
|
.sp 2
|
|
.nf
|
|
.in 5
|
|
BOOT+0080H:
|
|
.sp
|
|
+00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +A +B +C +D +E
|
|
E '' 'B' ':' 'X' '.' 'Z' 'O' 'T' '' 'Y' '.' 'Z' 'A' 'P'
|
|
.fi
|
|
.in 0
|
|
.sp 2
|
|
where the characters are translated to upper-case ASCII with
|
|
uninitialized memory following the last valid character. Again,
|
|
it is the responsibility of the programmer to extract the
|
|
information from this buffer before any file operations are
|
|
performed, unless the default DMA address is explicitly changed.
|
|
.pp
|
|
Individual functions are described in detail in the pages that
|
|
follow.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 0: SYSTEM RESET
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 00H
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The System Reset function returns control to the CP/M operating
|
|
system at the CCP level. The CCP reinitializes the disk
|
|
subsystem by selecting and logging-in disk drive A. This
|
|
function has exactly the same effect as a jump to location BOOT.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 1: CONSOLE INPUT
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 01H
|
|
.sp
|
|
Returned Value:
|
|
Register A: ASCII Character
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Console Input function reads the next console character to
|
|
register A. Graphic characters, along with carriage return, line-feed,
|
|
and back space (CTRL-H) are echoed to the console. Tab
|
|
characters, CTRL-I, move the cursor to the next tab stop. A check
|
|
is made for start/stop scroll, CTRL-S, and start/stop printer echo,
|
|
CTRL-P. The FDOS does not return to the calling program until a
|
|
character has been typed, thus suspending execution if a
|
|
character is not ready.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 2: CONSOLE OUTPUT
|
|
.sp
|
|
Entry Parameters
|
|
Register C: 02H
|
|
Register E: ASCII Character
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The ASCII character from register E is sent to the console
|
|
device. As in Function 1, tabs are expanded and checks are made
|
|
for start/stop scroll and printer echo.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 3: READER INPUT
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 03H
|
|
.sp
|
|
Returned Value:
|
|
Register A: ASCII Character
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Reader Input function reads the next character from the
|
|
logical reader into register A. See the IOBYTE definition in
|
|
Chapter 6. Control does not return until the character has been
|
|
read.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 4: PUNCH OUTPUT
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 04H
|
|
register E: ASCII Character
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Punch Output function sends the character from register E to
|
|
the logical punch device.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 5: LIST OUTPUT
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 05H
|
|
Register E: ASCII Character
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The List Output function sends the ASCII character in register E
|
|
to the logical listing device.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 6: DIRECT CONSOLE I/O
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 06H
|
|
Register E: 0FFH (input) or
|
|
char (output)
|
|
.sp
|
|
Returned Value:
|
|
Register A: char or status
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
Direct Console I/O is supported under CP/M for those specialized
|
|
applications where basic console input and output are required.
|
|
Use of this function should, in general, be avoided since it
|
|
bypasses all of the CP/M normal control character functions (for example,
|
|
CTRL-S and CTRL-P). Programs that perform direct I/O
|
|
through the BIOS under previous releases of CP/M, however, should
|
|
be changed to use direct I/O under BDOS so that they can be fully
|
|
supported under future releases of MP/M \ and CP/M.
|
|
.pp
|
|
Upon entry to Function 6, register E either contains hexadecimal
|
|
FF, denoting a console input request, or an ASCII character. If
|
|
the input value is FF, Function 6 returns A = 00 if no character
|
|
is ready, otherwise A contains the next console input character.
|
|
.pp
|
|
If the input value in E is not FF, Function 6 assumes that E
|
|
contains a valid ASCII character that is sent to the console.
|
|
.pp
|
|
Function 6 must not be used in conjunction with other console I/O
|
|
functions.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 7: GET I/O BYTE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 07H
|
|
.sp
|
|
Returned Value:
|
|
Register A: I/O Byte Value
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Get I/O Byte function returns the current value of IOBYTE in
|
|
register A. See Chapter 6 for IOBYTE definition.
|
|
.bp
|
|
.sp 4
|
|
.nf
|
|
FUNCTION 8: SET I/O BYTE
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 08H
|
|
Register E: I/O Byte Value
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The SET I/O Byte function changes the IOBYTE value to that given
|
|
in register E.
|
|
.sp 6
|
|
.nf
|
|
FUNCTION 9: PRINT STRING
|
|
.sp
|
|
Entry Parameters:
|
|
Register C: 09H
|
|
Registers DE: String Address
|
|
.fi
|
|
.sp 2
|
|
.pp
|
|
The Print String function sends the character string stored in
|
|
memory at the location given by DE to the console device, until a
|
|
$ is encountered in the string. Tabs are expanded as in Function
|
|
2, and checks are made for start/stop scroll and printer echo.
|
|
.nx fiveb.tex
|
|
|
|
|
|
|
|
|