
|
Sliding into bdos [5/6] M.J.Karas, 00-00-00
DETERMINING IF THERE IS PENDING KEYBOARD INPUT: Function 11.
Some computer programs are designed to spend large amounts
of time processing inside of the computer or manipulating data
within disk files without stopping to ask the user if he/she
desires to stop the processing sequence. Also it is many times
desirable to have a "terminate" capability for application
programs without waiting for the operator to answer a character
input request. If the normal console input function is used the
user computer is not resumed until a character is already input.
The console input status check function may be used to poll the
user keyboard to determine if a character input is pending. If no
input is ready then the user program is immediately resumed with
an indication of if there was a pending input. If a character is
pending a 0FFH is returned in the (A) register. Otherwise a 000H
value is returned. The following example illustrates the use of
console status to terminate a normally endless loop that prints
the same string over and over.
;CONSOLE STATUS USAGE EXAMPLE
;
CONSTAT EQU 00BH ; FUNC # 11
CONSTR EQU 009H ; PRINT STRING FUNCTION
BDOS EQU 0005H ; SYSTEM ENTRY
CR EQU 0DH ; ASCII CARRIAGE RETURN
LF EQU 0AH ; ASCII LINE FEED
ORG 0100H ; START
LOOP:
LD DE,MESSAGE ; POINT AT STRING TO SEND
LD C,CONSTR ; FUNCTION
CALL BDOS ; GO SEND STRING
LD C,CONSTAT ; GET ABORT STATUS
CALL BDOS
OR A ; CHECK STATUS
JP Z,LOOP ; NO KEY SO CONTINUE LOOP
RET ; IMMEDIATE CCP RETURN IF ABORT
;
MESSAGE:
DEFB CR,LF,'Depress any Key to STOP','$'
;
END
AUXILLIARY PERIPHERAL CHARACTER INPUT AND OUTPUT FUNCTIONS
The generalized CP/M BDOS provides the capability for three
character by character logical I/O devices to be atteched to the
computer system. This requirement stems from the fact that most
computers are designed to interface to the real world in more
ways than just a console device. The three devices are classified
as:
a) A lister type device that is generally expected to be a
printer of some sort. This classification is an output only
device.
b) An input device supporting character input from a source
other than the console. The device is specifcally an input type
unit. CP/M jargon refers to this device as the "READER" for no
particular reason.
c) A generalized character output only device used as a
specific data destination other than the console or standard list
device. Some computer systems use this device, often times
referred to as the "PUNCH" device as a second printer output.
The three following examples illustrate the programming
techniques used to talk to each of these three devices.
;LIST DEVICE OUTPUT EXAMPLE
;
LIST EQU 005H ; FUNC # 5
BDOS EQU 0005H ; SYSTEM ENTRY
ORG 0100H ; START
LD A,(LSTCHAR) ; GET CHARACTER TO OUTPUT
LD E,A
LD C,LIST ; FUNCTION
CALL BDOS ; GO SEND CHARACTER
RET ; IMMEDIATE CCP RETURN
;
LSTCHAR:
DEFB 'L' ; PLACE TO GET OUTPUT CHAR
;
END
;READER DEVICE INPUT EXAMPLE
;
READER EQU 003H ; FUNC # 3
BDOS EQU 0005H ; SYSTEM ENTRY
ORG 0100H ; START
LD C,READER ; FUNCTION
CALL BDOS ; GO GET CHARACTER
LD (RDRCHR),A ; SAVE FOR WHATEVER REASON
RET ; IMMEDIATE CCP RETURN
;
RDRCHR:
DEFS 1 ; PLACE TO STORE INPUT CHAR
;
END
;PUNCH DEVICE OUTPUT EXAMPLE
;
PUNCH EQU 004H ; FUNC # 4
BDOS EQU 0005H ; SYSTEM ENTRY
ORG 0100H ; START
LD A,(PNCHCHR) ; GET CHARACTER TO OUTPUT
LD E,A
LD C,PUNCH ; FUNCTION
CALL BDOS ; GO SEND CHARACTER
RET ; IMMEDIATE CCP RETURN
;
PNCHCHR:
DEFB 'P' ; PLACE TO GET OUTPUT CHAR
;
END
SYSTEM CONTROL BDOS FUNCTIONS
This family of system calls supported by the CP/M BDOS are
designed to allow the programmer a degree of flexibility in
manipulating the operation of general CP/M environment. Each
function here will generally be discussed individually due to the
unique nature of each operation.
SYSTEM RESET: Function 0.
The system reset function is designed to allow restart of
the CP/M system command processor after a user application
completes execution or is aborted. The system reset function is
equivalent to a JMP to address 0000H or a CTL-C which forces a
system WARM Reboot. The reboot operation de-activates all active
drives except drive A: which is re-logged. Operation is extremely
simple as:
RESET EQU 000H ;SYSTEM RESET FUNC
BDOS EQU 0005H ;SYSTEM ENTRY POINT
ORG 0100H
LD C,RESET
JP BDOS ;CALL ALSO PERMISSABLE
;EXCEPT THAT FUNCTION
;DOES NOT RETURN TO USER
;PROGRAM
GET AND SET IOBYTE: Functions 7 & 8.
The generalized CP/M operating system environment
communicates via I/O to "logical" type devices. This means that
the console, lister, "reader", and "punch" are just treated as a
generic device classsifications. The CP/M system allows for and
supports, to a degree, the capability for the hardware to contain
multiple physical devices (peripherals and/or real I/O devices)
within each of the generic logical device classifications. The
means to support the assignment of multiple physical devices to a
given classification is done through the IOBYTE, normally stored
at address 00003H of the base page of the CP/M memory. The BIOS
hardware I/O software may thusly be written to easily know which
one of two printers to talk to when the BDOS requires output to
one of two printers. A "default standard" IOBYTE format has been
adopted based upon an 8-bit microprocessor system convention
developed by Intel Corp as follows:
(lister) (punch) (reader) (console)
Logical Devices => LST: PUN: RDR: CON:
IOBYTE bits => 7 6 5 4 3 2 1 0
---------------------------------------------------------
Bit pattern
dec binary
0 00 TTY: TTY: TTY: TTY:
1 01 CRT: PTP: PTR: CRT:
2 10 LPT: UP1: UR1: BAT:
3 11 UL1: UP2: UR2: UC1:
The designators in the table specify the "standard types of
physical devices and are defined as follows:
TTY: A teletype console with keyboard, hard copy display and
possibly an integral tape reader/punch
CRT: An interactive cathode ray type terminal with keyboard
input and display screen
BAT: A batch processor workstation with a card reader type
input device and a hard copy display/output device
UC1: A user defined alternate "console" unit
LPT: Line printer
UL1: A user defined list device
PTR: Paper Tape Reader
UR1: User defined "reader" character input device
UR2: User defined "reader" character input device
PTP: Paper Tape Punch
UP1: User defined "punch" character output device
UP2: User defined "punch" character output device
The BDOS support for the I/O device assignment is a standard
mechanism to access the IOBYTE's current value and switch it to
some other value. Suppose a CP/M computer had two printers
connected as LST: and UL1:. If the applications program needs to
switch printing output to another printer, the process could be
handeled as follows:
;GET AND SET IOBYTE EXAMPLE
;
SETIOB EQU 008H ; SET IOBYTE FUNCTION
GETIOB EQU 007H ; GET IOBYTE FUNCTION
BDOS EQU 00005H ; SYSTEM ENTRY POINT
LSTMASK EQU 11$00$00$00B ; IOBYTE MASK FOR LIST
; ..DEVICE
LPT EQU 10$00$00$00B ; BIT VALUE FOR LPT #1
UL1 EQU 11$00$00$00B ; BIT VALUE FOR LPT #2
ORG 0100H ; PROGRAM START
LD C,GETIOB ; GO GET CURRENT IOBYTE VAL
CALL BDOS
AND (NOT LSTMASK) AND 0FFH ; KEEP ALL OTHER BITS
OR UL1 AND LSTMASK ; SET IOBYTE FOR PRINTER #2
LD E,A
LD C,SETIOB ; FUNCTION TO RESET THE IOBYTE
CALL BDOS
RET ; IMMEDIATE CCP RETURN
;
END
GET CP/M VERSION NUMBER: Function 12.
Sometimes it is necessary for an applications program to
"know" what version of CP/M the program is running under. Version
2.0 and above support a feature to tell the application program
what the version number is. One reason is to permit version
dependant functions such as random record file I/O to be used if
it is supported by the version of CP/M being used. The system
call to get the version number returns a two byte value split
into two parts as follows:
if (H)=0 then this is a CP/M System
(H)=1 then this is an MP/M System
(L)=version number in hex
if (L)=00 then older than CP/M 2.0
(L)=20 then version CP/M 2.0
(L)=21 then version CP/M 2.1
(L)=22 then version CP/M 2.2
A program to read the CP/M version number is as follows:
;VERSION NUMBER EXAMPLE
;
GETVERS EQU 00CH ; FUNCTION 12
BDOS EQU 00005H ; SYSTEM ENTRY POINT
ORG 0100H ; PROGRAM START
LD C,GETVERS ; FETCH VERSION NUMBER
CALL BDOS
LD A,L ; SAVE CP/M VERSION NUMBER
LD (CURVERS),A
RET ; BACK TO CCP
;
CURVERS:
DEFS 1 ; STORE THE VERSION NUM HERE
END
RESETTING THE CP/M DISK SYSTEM: Function 13.
The CP/M operating system contains features to control
access to files upon the disk drives. A directory checksum
scheme, beyond the scope of this presentation, permits the
operating system to determine when a disk has been changed in a
drive thus preventing the a wrong disk from being written upon.
This is neat except that in many cases an appliciations program
may require disk changes as functions are changed or new files
are required. This system control function permits the
application to force read/write status to be set for all drives,
drive A: to be logged, and reset of the default disk record
buffer address to its default value of 080H within the CP/M base
page. The following program sequence shows how to reset the disk
system.
;RESET DISK SYSTEM EXAMPLE
;
RESET EQU 0DH ; FUNCTION 13
BDOS EQU 0005H ; SYSTEM ENTRY POINT
ORG 0100H ; PROGRAM START
LD C,RESET ; SET UP FUNCTION
CALL BDOS ; GO RESET THE DRIVES
RET ; BACK TO THE CCP
;
END
GET AND SET OF CURRENT USER CODE: Function 32.
CP/M Version 2.2 permits the file system on a given drive to
be partitioned into up to 15 individual directory areas so that
usage areas can be setup. For instance, the system operator could
put all assembly language development programs in one user area
while having disk utility programs in another. The BDOS allows
the application programmer to determine the currently logged user
number and to modify it if necessary. The following example sets
the current user number up by one. If the highest user number is
currently logged then the user 0 area is selected.
;GET/SET USER EXAMPLE
;
GSUSR EQU 020H ; FUNCTION 20
GET EQU 0FFH ; GET FLAG
BDOS EQU 0005H ; SYSTEM ENTRY POINT
ORG 0100H ; START UP POINT
LD E,SET ; MAKE THIS A FETCH NUM RQST
LD C,GSUSR
CALL BDOS ; GET THE CURRENT USER #
INC A ; BUMP RETURNED USER UP 1
AND 00FH ; MASK TO MOD(15)
LD E,A ; MOVE FOR SET TO NEW USER
LD C,GSUSR
CALL BDOS
RET ; CCP GETS US BACK
;
END
SYSTEM FUNCTIONS THAT CONTROL THE DISKS
The data storage files for applications programs are stored
upon the disk drives attached to the CP/M computer. The BDOS
supports a number of functions that allow the state and selection
status of the drives to be controlled.
SELECT DISK: Function 14.
The simplest control function is to select the current disk
with which to refer to as the logged or default disk. The
function is equivalent to the console CCP command:
A>B:<cr>
B>
Which changed the currently logged disk to drive B:. A BDOS
program to affect the same thing is given in the example program
of the next section below. Drive numbers correspond to the
console displayed drive designators as follows:
A: = Drive # 0
B: = Drive # 1
***
P: = Drive # 15
Once a drive has been selected it has its directory "activated"
and is maintained in a logged in status until the next warm boot,
cold boot, or disk reset BDOS function.
|