IV. 4.1.2.2 Preparing the Disk for Bootstrapping
IV.4.2.2 The SBIOS Routines
These are the names of the fifteen essential SBIOS routines, along with a brief description of each routine. SBIOS routines are called through a jump table (see Section IV.4.2.2.5); the center column shows each routine's number in the table (the
"jump vector").
Routine Name Vector Number Descrietion
SYS INI T 0 initialize machine
SYSHALT 1 ex it LCSD PASCAL
CXNINIT 2 console initialize
C(]\JSTAT 3 console status
CXNREPD 4 console input
CCl\MR.I T 5 console output
SETDI SK 6 set disk number
SETTRAK 7 set track number
SETSECT 8 set sector number
SETBLER 9 set buffer address
DSKREPD 10 read sector from disk
DSK\t\RIT 11 wr i te sector to disk
DSKINIT 12 reset disk
DSKSTRT 13 activate disk
DSKSTOP 14 de-activate disk
98
IV.4.2.2.1 The Individual SBIOS Routines
SBIOS routines are called by the primary bootstrap and by the BIOS; rarely, if ever, by the user's programs. They are sometimes passed parameters on the stack, and sometimes return results in registers or main memory. The conventions of parameter passing vary (necessarily) from processor to processor: see Chapter V for details.
Many of the SBIOS routines return a status word: this status word is used as the System's IORESUL T. It is important that status words be returned correctly. If they are incorrect, the System may crash or even fail to bootstrap. An IORESUL T of 0 signifies a correct operation. An 10RESUL T of 9 should always be returned when an I/O device is not online. (Remember that floppy disks are frequently removed and replaced, so the disk-handling routines should be careful to check that a disk is in the desired dri ve.)
The SBIOS must maintain four variables that describe the state of disk 1/0.
These are called CURDISK, CURTRAK, CURSECT, and CURBUFR. The first three describe the current disk drive (numbered 0 •• 5 for SBIOS purposes) and the current track and sector on that disk. CURBUFR is a pointer to a read/write buffer in main memory.
Following is a description of each of the SBIOS routines, in order:
SVSINIT
SYSINIT is the first routine called when a System is bootstrapped. It should initialize the hardware in any ways necessary. This may include setting up interrupt vectors, enabling RAM memories, and turning off any 1/0 devices that won't be used.
A pointer to the Interpreter's jump table is passed to SYSINIT. This pointer is not used by the bootstrap; it is provided for use with some routines in the Extended SBIOS: see Section IV.4.4.2.
SVSHALT
SYSHAL T is called when the p-System terminates (through a H(alt). It should shut down all devices in an orderly manner. If the user so desires, SYSHAL T may also start another operating system on the host machine.
Installation Guide Full Adaptable System
CONINIT
CONINIT initializes the console port. It returns the status of the console connection.
Initializing the console means preparing the console hardware to send and receive characters. If the terminal's baud rate and parity bits can be set by software, CONINIT should configure it to operate as quickly as possible, ignoring parity bi ts. Any interrupt vectors associated with the console should be set in SYSINIT, not CONINIT.
If CONINIT encounters no problems in initializing the console, it should return a
o
(zero). If it detects that the terminal is offline, it should return a 9.CONSTAT
CONST AT returns two parameters that describe the status of the console.
The first parameter is the state of the console connection. This is identical to the parameter returned by CONINIT: if the console is online, the parameter should return 0; if the console is offline (disconnected), the parameter should return 9.
The second parameter describes the state of the console input channel. If a character has been typed on the keyboard, the parameter should return FF hex;
otherwise it should return O. (Note: CONST AT does not read the pending character, but merely reports its presence.)
-100
CONREAD
CONREAD reads a single character from the keyboard. It returns that character, and the status of the console connection.
If the console i-s online and a character is pending, -CONREAD reads that cnaracter. If the console is online but no -character is pending, CONREAD waits, by polling the console, until a character appears, and then reads that characte-r.--If the read was successful, the status parameter should return a O. If the console was offline, the parameter should return a 9. If a character was read but there appears to be a transmission problem, CONREAD should return the character, and the status parameter should be set to 1.
The character read should be returned exactly as read from the keyboard port, with no modifications.
CONWRIT
CONWRIT writes a single character to the console. It reports the status of the console connection.
If the console is online, the character is sent, and CONWRIT returns O.
console is offline, CONWRIT returns 9 •. If there is a transmission CONWRIT returns 1: the System will assume that the character was lost.
If the problem,
CONWRIT should not alter the output character in any way, unless it must do so in order for the console to display the character properly. (For example, don't strip pa-rity -bits, unless the terminal wHI not function properly when they are set).
Installation Guide . Full Adaptable System
SETDISK
SETDlSK sets CURDlSK.
CURDlSK (as well asCURTRAK, CURSECT, and CURBUFR, which· are mentioned below), is 8. global value in the BIOS. The SBlOS must keep a copy of these values, for use by th~. SBIOS disk-handling routines (DSKREAD, DSKWRIT, DSKINIT, DSKSTR T, and DSKSTOP).
Disk nUnlbers may be in the range 0 •• 5.
. ,
r .,
SETDISK merely changes a value; it does not alter the hardware state, nor does it return a status.
SETTRAK
SETTRAK sets CURTRAK.
CURTRAK is used by DSKREAD and DSKWRIT.
Track numbers range from 0 to one less than the highest numbered track on the disk.
Like SETDISK, SETTRAK merely changes a value; it does not alter the hardware state, nor does it return a status.
SETSECT
SETSECT sets CURSECT.
CURSECT is used by DSKREAD and DSKWRIT.
Sector numbers range from 1 to the highest numbered sector on a track.
SETSECT does not alter the hardware state or return a status.
102