home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
kaypro
/
advent2.ark
/
ROM.DOC
< prev
next >
Wrap
Text File
|
1986-09-20
|
38KB
|
1,154 lines
TURBO ROM
Theory of Operation
The TURBO ROM for Kaypro computers interfaces the CP/M operating
system to the actual hardware such as video display and disk drives.
It allows the addition of expansion hardware such as high capacity floppy
disks, multiple hard disks and Advent Products RAM disks. It automatically
senses the presence of this hardware and provides the appropriate drivers
to allow the operating system to fully use these new devices.
The following notes may be useful to those wishing to understand the
operation of the ROM.
COLD BOOT
When power is applied, or the reset button is pressed, the following sequence
of events is followed.
1/ A delay of 100 ms to allow for some of the peripheral chips to
achieve equilibrium. (MOSTEK parts are much slower than Zilog)
2/ The peripheral devices are programmed with default values such
as baud rate etc.
3/ The video driver is initialized and the screen cleared.
4/ The sign-on message is printed.
5/ The presence of the WD1002 hard disk controller is detected, by
seeing if it comes not busy within 3 seconds. If so, drive one is
tested for ready. We wait up to 20 seconds for it to come up to
speed. (Note Drive One is connected to J2 of controller)
When ready we issue a restore command and wait up to 25 seconds for
the completion. (If any of these tests fail then we have no hard
disk)
7/ An attempt is then made to read a 1024 byte sector (8) from the
first cylinder of the disk. If this is successful then we check to
see if the sector is a valid parameter sector. On 83 machines the
main part of the hard disk initialization code is contained on the
second half of the sector. The first 512 bytes of this parameter
sector contain the characteristics of the drives and the bad track
mappings.
*84 Machines Only
If this read fails we attempt to read a 512 byte sector (16) from
the same cylinder. If this is successful we check for valid
parameter sector.
If we have a succesful 512 byte sector read but an invalid sector then
we assume 512 byte sectors of standard Kaypro layout.
8/ *83 Machines Only
The code read from the parameter sector is used to check for the
presence of a second Hard disk. Parameter tabels for these drives
are set up in memory along with bad track maps.
9/ The lowest (in terms of select logic 0,1,2,3) floppy drive is
examined for the presence of a spinning diskette. If detected the
logical drive ordering is as follows:
A -> V = Floppy Drives
X -> Y = Hard Drives (if present)
Z = Ram Disk (if present)
If no floppy detected the logical drive ordering is:
A -> V = Hard Drives (if present)
X -> Y = Floppy Drives
Z = Ram Disk (if present)
10/ An attempt is then made to read the first sector of
logical drive "A". This parameter sector conforms with the
standard Kaypro layout, having the load address, execution address
and the number of sectors to be loaded. If we are running on a
Kaypro 10 with a 512 byte/sector hard disk a check is done to see
if the system to be loaded will over-write the Host Buffer area
(see memory layout for explanation), and if this occurs (generally
only with a 63K system) the Host buffer is shortened to 512 bytes and
floppy disk formats with > 512 bytes/sector are flagged as illegal.
11/ The system is then read into memory and control is tranferred
to this system at the specified address. If the supplied
TURBO-BIOS is used (highly recommended) then further initialization is
performed. The nature of this initialization can be modified by
the supplied configuration program TURBOCFG.
WARM BOOT
On a Warm Boot an attempt is made to read from the logical "A" drive a
fresh copy of the Command Processor and Basic Disk Operating System (BDOS).
The configuration program TURBOCFG can be used to change the default drive
for this operation. We recommend using this advanced option only if you
really know what you are doing. An example may be to warm boot from the
RAM disk without making it drive A. However, it must be SYSGENed before the
first warm boot takes place.
DISK SELECT (and Deselect)
Floppy drives have removable media while Hard Disks and Ram Disks have fixed
media. Drives with removable media are treated differently at select time.
If this is the first select since a disk reset then we re-determine the
format of the diskette in the drive. (This operation can be inhibited
under special circumstances). If the format cannot be determined a BDOS
Select error will occur, unlike most BIOS's which would generate a bad
sector error. Naturally a select error will also occur if an attempt is
made to access a non-existent drive.
A period of time after the last disk operation, a deselect process occurs.
This first makes sure the contents of the De-Blocking buffer are written
back to the disk if required. Then the floppy motor is turned off and if
needed both floppy drives are deselected (lights turned off). If Hard
disks are present then each drive seeks the innermost formatted cylinder
and then non-existent drive zero is selected. This final step deselects
the actual hard drives.
DEFINITION OF TABLES USED BY THE ROM
DATA PARAMETER HEADERS (Commonly alled DPH's)
The DPH for each logical drive is extended by 2 bytes compared to the
standard DRI definition (see CP/M manual if you are not familiar with
this). These 2 bytes preceed the normal 16 bytes.
The first byte contains information on the logical/physical mapping of the
drives.
------------------------------------------------------------
Byte0 - logical/physical drive mapping
physical:
bit 7 -- reserved for future use by Plu*Perfect Systems
bit 6,5,4
000 = Advent Products RAM disk (up to 2 MBytes)
001 = reserved for future use
010 = Physical Hard Drive 0 (up to 56 MBytes)
011 = Physical Hard Drive 1 ( " " " )
100 = Physical floppy 1 (48 or 96 TPI)
101 = Physical floppy 2
110 = Physical floppy 3
111 = Physical floppy 4
logical:
bit 3-0 logical drive A-P
0000 = A
0001 = B
0010 = C
. .
. .
. .
1111 = P
______________________________________
In the second byte, some physical charactistics of the Drive are
coded.
Byte1 - drive characteristics byte defined as follows:-
****************FLOPPY DRIVE
bit 7 - 0 = if drive is 48 tpi
1 = " " 96 tpi
bit 6 - 0 = redetermine media on fresh select(normal)
1 = don't redetermine media on fresh select
(used when externally set disk format)
bit 5 - unused
*****************HARD DRIVE
Advent Format -
bit 7,6,5 number of heads (minus one)
Kaypro 512 byte/sector format-
bit 7 0 = platter A (heads 0,1)
1 = platter B (heads 2,3)
bit 6,5 unused
*****************RAM DRIVE
bit 7,6,5 unused
***********
All drive types
bit 4 0 = Use ROM DPB tables
1 = Use RAM DPB tables
bits 3,2,1,0 Use DPB 0-15 from rom or ram table
Bytes
2 - 18 - Standard DRI data parameter header.
DATA PARAMETER BLOCK (DPB's)
The DPB's used by the ROM are 3 bytes longer than the standard definition
given by DRI (see CP/M manual if you are not familiar with this). These 3
extra bytes precede the normal 15 bytes.
There is a word which points to a sector translation table address. This
may be zero, a ROM address which is not accessable to external programs
without bank switching, or an externally loaded table in high RAM.
There is then a Byte which characterizes the type of format associated with
this DPB. The bits in this byte are interpreted as follows:
1/ For Floppy Drives: (Media)
bit 7 - 0 = disk is in 48 tpi format
1 = disk is in 96 tpi format
bit 6 - 0 = standard data sense
1 = inverted data bus (only available on 84 ROM)
(used only on machines that used chips
like 1771/91 without inverters)
bit 5 - 1 = single density
0 = double density
bit 4,3,2 - Use algorithm 0-7 to compute physical
cylinder, track, sector and side.
Note algorithm 7 is reserved for external
code, which the user may load. See later for
definition and how to load this code.
Predefined Algorithms
-----------------------------------------------
000 - for 512 byte Kaypro hard disk format
(see below)
-----------------------------------------------
001 - for 512/1024 byte Advent hard disk formats
(see below)
-----------------------------------------------
010 - single sided floppy
phy.cylinder =track
phy.track =track
phy.sector =sector
phy.head(side) =0
-----------------------------------------------
011 - double sided Kaypro/Advent floppy
bias =10
phy.cylinder =int(track/2)
phy.track =phy.cylinder
phy.head(side) =mod(track,2)
phy.sector =sector + side*bias
-----------------------------------------------
100 - Micro Cornucopia/Advent 96 tpi,
Same as Kaypro except
bias =20
-----------------------------------------------
101 - double sided (single long track)
Note that zero based sector numbering assumed,
fits Legacy formats
phy.cylinder =track
phy.track =track
phy.sector =sector
phy.head(side) =0 if sector < phy_sect/side
=1 if sector >= phy_sect/side
-----------------------------------------------
110 - double sided (odd tracks on back but no sector skew)
Same as Kaypro except
bias =0
-----------------------------------------------
111 - External routine, parameters
in registers on call and return.
ENTRY EXIT
HL none physical cylinder to seek
DE HSTTRK physical track for floppy ctrl
B HSTDRV (dph byte 1) physical head (side)
C HSTSEC physical sector
------------------------------------------------
bit 1,0 - 00 = 128 physical sector length
01 = 256
10 = 512
11 = 1024
-------------------------------------
2/ For Hard Disk Drives:
bit 7,6,5 unused
(These bytes compatible with floppy use)
bit 4,3,2 000 -Kaypro 10 original format
512 byte sectors (algorithm for track sector)
phy.cylinder = (track + offset)/2
offset = 0 if track < 4
offset = track - 4 if 3 < track < 8
offset = 4 if track > 7
phy.track = n/a
phy.sector = sector
phy.head = mod(track+offset,2)
+ drvbyt(7)*2
drvbyt(7) is bit 7 of byte 1 of DPH
(note we abandon trying to maintain
duplicate directory on back of platter,
if problems, then reformat with our new
format)
001 -Advent Hard disk format
512/1024 byte sectors
phy.cylinder = trackx/#heads
phy.track = n/a
phy.sector = sector
phy.head = mod(trackx,#heads)
(Note trackx = badfnc(track). This corrects
desired track for bad tracks. The bad track
function is performed by the following algorithm.
I:=0
TRACKX:=TRACK
DO WHILE(BADTRK(I) >= TRACK)
TRACKX:=TRACKX +1
I:=I + 1
END
Where badtrk(i) is a list of bad physical
tracks which is terminated with FFFFH entry.
We support a maximum of 126 bad tracks per physical
drive.)
bit 1,0 - 00 = not supported
01 = not supported
10 = 512 byte sectors (only available on 84 ROMs)
11 = 1024 byte sectors
------------------------------------------------
3/ Advent Ram Disk Drive:
bit 7,6,5,4,3,2 unused
bit 1,0 - 00 = 128 byte sectors
01 = not supported
10 = " "
11 = " "
-------------------------------------------------
In ROM we have a maximum of 16 DPB's
DPB#
0 Standard Kaypro SS (512 byte sectors) floppy
1 Standard Kaypro DS (512 byte sectors) floppy
2 Advent SSDD 448 tpi(1024 byte sectors) ( handles Osborne SSDD) floppy
3 Advent DSDD 48tpi (1024 byte sectors) floppy
4 Advent DSDD 96tpi (1024 byte sectors) floppy
5 Micro C DSDD 96tpi (512 byte sectors) floppy
6* Xerox 820 SSSD (128 byte sectors) floppy
7* Osborne SSSD (256 byte sectors) floppy
8* Epsom QX-10 (U.S. format - not European) floppy
9* Kaypro 10 (original hard disk format) hard
10*
11*
12*
13* reserved for future expanison
14*
15*
* only available on 84 ROMS
In high memory we store the DPB's who have to be dynamically changed/added.
The first DPB is a reserved entry for use by external programs who wish
to set up a foreign floppy format for the ROM to work with.
The second is always the RAM disk if it exists. Following this are the
various Hard disks (Advent Format only) which are actually read in from the
parameter sector of the hard disk. These DPB's are stored in descending
memory order (unlike DPH's above).
HIGH MEMORY ARRANGEMENT
The ROM uses the very top of the Kaypro RAM for its working storage. The
amount of memory used depends on the physical configuration, but in all
cases, memory is dynamically allocated at cold boot time so that the amount
of memory available to user programs is maximized. The very top of memory
is of fixed layout (which varies slightly between 83 and 84 ROMs) and this
is useable by programs which need to find out about the current environment.
topmem equ 0FFFFH
;*************************
;ROMID is 8 byte string of following layout
; db checksum ;zero sum of top 8 bytes in memory
; jmp romentry ;general ROM entry point
; db version ; BCD ver.rev, (hi bit set '84)
; db 'PPS'
;*************************
;fixed pointers and storage which are guarranteed to be preserved in
;future releases of the ROM
dphptr: dw numdrv ;pointer to start of DPH table
dpbptr: dw numdpb ;pointer to start of RAM DPB's
hstptr: dw hstbuf ;pointer to Host buffer
;This is the lowest area used by ROM
intptr: dw intvec ;pointer to start of interrupt vector
extptr: dw tsalgr ;pointer to external trk/sctor code
hrdptr: dw badtr0 ;pointer to hard/floppy disk parameters
;fixed storage that varies between 83 and 84 machines
83 84
-------- ---------
safptr: dw safcod dw x ;reserved
cursor: dw x cursor: dw x ;video cursor
clkent: dw clkdrv ;routine to
;clock
curmin: db minutes ;current time
db hours
;***********************
Interrupt vector for all devices.
83 84
-------- --------
pioBvc ;modem dialer
pioAvc ;RTC interface
sioCv3 ;serial printer
sioCv2
sioCv1
sioCv0
pioDvc ;unused sioDv3 ;Modem or Unused serial
pioCvc ;printer sioDv2
pioBvc ;unused sioDv1
pioAvc ;system port sioDv0 ;
sioAv3 sioAv3 ;serial data char rec.(error)
sioAv2 sioAv2 ;serial data char rec.
sioAv1 sioAv1 ;serial data ext. status
sioAv0 sioAv0 ;serial data Tx buffer
sioBv3 sioBv3 ;keyboard char rec. (error)
sioBv2 sioBv2 ;keyboard char rec.
sioBv1 sioBv1 ;keyboard ext. status
sioBv0 sioBv0 ;keyboard Tx buffer
intvec: ;start of vectors aligned on
;16 byte boundary
;*********************
Stack space for interrupt handlers and ROM
;********************
Code, DIRBUF and other variables
;********************
Area for externally defined floppy drive
information
xtran: ds 36 ;36 bytes of physical translation table
ds 55 ;SPACE for code referred by labels
; invmap and mapit
db fmt ;current format number
jmpr invmap ;inverse trk/sector/side
tsalgr: jmpr mapit ;cylinder/sector/head
;********************
Miscellaneous disk/video/and other variables
which may change with future ROMS implementation.
-----------
However the following structure will remain intact though
it will doubtless move.
disblk: db .. ;84 machine video blanking disable (00/FF)
(not currently used)
smflag: db .. ;84 machine retricted to 512 byte sectors
stldly: db z ;current floppy head settling delay (ms)
hldly: db y ;current floppy head load delay(ms)
fstprt: db x ;current floppy step rate (ms)
ftime4: db x,y,z ;array of floppy time constants for each drive
ftime3: db x,y,z
ftime2: db x,y,z
ftime1: db x,y,z
muxflg: db .. ;flag for presence of Advent decoder board
fstat: db .. ;current floppy arrangement
;7 - Drive 4 96 tpi
;6 - Drive 4 exists
;5 - Drive 3 96 tpi
;4 - Drive 3 exists
;3 - Drive 2 96 tpi
;2 - Drive 2 exists
;1 - Drive 1 96 tpi
;0 - Drive 1 exists (always true)
wdflag: db .. ;7 - if parameter sector successfully read
;0 - WD 1002 controller detected
sltmsk: db .. ;floppy select mask
; 00000011B ;normal 2 lines
; 00000001B ;Kaypro 10 hard disk connected
precp1: db .. ;Hard Drive 2 precomp cylinder(coded)
step1: db .. ; " " " step rate (coded)
mxcyl1: dw ... ; " " " maximum formatted cylinder
badtr1: dw list1 ; " " " pointer to start of bad track table
precp0: db .. ;as above for drive 1
step0: db ..
mxcyl0: dw ...
badtr0: dw list0 ;POINTED TO BY HRDPTR AT TOP OF MEMORY
polflg: db .. ;set to 00 if type-ahead keyboard (else FF)
belchr: db .. ;bell character for keyboard, may have click bit
---------------
********************************
**************************************
* Run time determined storage areas *
**************************************
Actual list of n*18 drive descriptor bytes where n is logical number of
drives. These are arranged as described above.
numdrv: db n ;logical number of drives
;pointed to by dphptr
Followed by DPH for each drive as described above.
NOTE that DPH's ascend in memory above the NUMDRV byte.
************************************************************
In RAM DPB tables decribed above -- note they descend in memory
though the number of DPBs byte is still at bottom of list
each DPB of following layout
dw xtran ptr
db media byte
ds 15 ;normal DRI definition
Actual list of RAM dpb's in following order (descending in memory)
0 - always externally definable floppy
1 - RAMDISK (computed at cold boot)
2-15 up to 14 more formats read in from hard disk
parameter sector
(future ROM releases may limit number of logical hard disks to 13)
numdpb: db ;number of RAM dpbs in this
;configuration, the first
;is always the externally
;definable floppy
;***********************
;Hard Disk bad track lists (if any)
list1: dw ...
dw ...
dw FFFFH
list0: dw ...
dw ...
dw FFFFH
************************
hstbuf: ds 1024 ;deblocking buffer
;init code changes to 512
;bytes if system loaded too high
;on Kaypro 10 with 512
;byte sectors
************************
lowest area used in high Ram by ROM
ADVENT PRODUCTS ELECTRONIC RAM DISK
The RAM disk is located at ports 88H thru 8BH.
88H - data bi-directional
89H - sector (6 lo bits only)
8AH - track register (7 lo bits per board, hi bit board select)
8BH - status register (bit 0,1 00,01,10,11 are 256,512,768,1024K
respectively. Bit 2 is 0 if board is present and
otherwise is pulled up.
Status register returns
xxxxx000 = 256k
xxxxx001 = 512k
xxxxx010 = 768k
xxxxx011 =1024k
xxxxx1xx = ram disk not present
Then we write 8AH with 80H and repeat read of 8BH for second board.
RAMDISK has following DPH
XLT ptr 0000 ;no sector translation
SCRATCH 0000
0000
0000
DIRBUF ;pointer to directory buffer
CURDPB ;always points to DPB current
0000 ;no directory checksum
ALVRAM ;pointer to size dependent area
RAMDISK has following DPB
XTRN: dw 0000 ;no sector translation
MEDIA: dw 00 ;128 byte sectors
SPT: dw 64
BSH: db x ;x = 3 for 256K
; = 4 for 512K
; = 5 for 768,1024K
; = 6 for > 1024K
BLM: db 2**x - 1
EXM: db 2**(x-3) - 1
DSM: dw 2**(6-x).(n+1).2**5 - 1) - 1
DRM: dw 2**(3+x) - 1
AL0: db 0C0H
AL1: db 000H
CKS: dw 0000
OFF: dw 0001
Sector 63 of track 0 is initialized with a copy of the first
128 byte of the ROM. On subsequent resets this is compared and
if a match is detected the directory of the RAM disk is not erased.
*************************************************
FLOPPY DISK FORMATS
The Turbo ROM will recognize and can use directly the following floppy disk
formats:-
83 84
--------- ---------
Kaypro SSDD Kaypro SSDD
Kaypro DSDD Kaypro DSDD
Advent SSDD Advent SSDD
Advent DSDD 48 Advent DSDD 48
Advent DSDD 96 Advent DSDD 96
Micro Cornucopia 96 Micro Cornucopia 96
Epson QX-10 DSDD 48 (U.S.)
Osborne SSSD
Xerox 820-1 SSSD
In addition any other CP/M 5.25" soft sector format may be set up using the
TURBOSET program which is available separately as part of the Plu*Perfect
Systems' MULTI-COPY package.
The Advent formats mentioned above have the following description.
1) SSDD
Physical Sector Length 1024 bytes
Physical Sector Order 1,4,2,5,3
Logical Sectors/Track 40
Number of Cylinders 40
Reserved Tracks 3
CP/M allocation size 1K
Directory Entries 64
Reserved Directory Groups 2
Total size 185K
*note that this format is identical to the Osborne SSDD
except for the physical sector order
2) DSDD 48
Physical Sector Length 1024 bytes
Physical Sector Order 1,4,2,5,3 -side 0
11,14,12,15,13 -side 1
Logical Sectors/Track 40
Logical Tracks 80
Number of Cylinders 40
Reserved Tracks 2
CP/M allocation size 2K
Directory Entries 256
Reserved Directory Groups 4
Total size 390 K
3) DSDD 96
Physical Sector Length 1024 bytes
Physical Sector Order 1,4,2,5,3 -side 0
21,24,22,25,23 -side 1
Logical Sectors/Track 40
Number of Cylinders 80
Number of Logical Tracks 160
Reserved Tracks 2
CP/M allocation size 2K
Directory Entries 256
Reserved Directory Groups 4
Total size 790 K
TURBO ROM VIDEO FEATURES
The Turbo ROM provides a number of new video features compared with the
standard Kaypro. These differ between the 83 and 84 versions.
Video Blanking:
Both ROM's provide a screen saving video blanking after about ten minutes
of waiting for keyboard input. However, on 83 machines this feature
requires a modification to the video circuit. This is optional and the
blanking will not occur unless the change has been made. Because the ROM
has no way of knowing whether the change has been made, the unblanking
keystroke will not be ignored as it is with the 84 ROM.
The 83 video change is made simply by purchasing a replacement character
generator ROM and putting it into the circuit. Alternatively, people with
electronic circuit experience, can make a small modification to the main
circuit board to achieve the same effect. Details are available on request.
Screen Dump:
While not a direct feature of the Turbo ROM, the TURBO BIOS supplied with
the ROM has character (not graphic) screen dump to printer capability. The
ROM actually provides the support for this feature but it must be
externally activated, for more details see the source code to the BIOS and
the following description of the ROM Entry Points. The Screen Dump must be
explicitly enabled by using TURBOCFG.
Changes to Video Control Codes and Escape Sequences:
Some changes to the behaviour of the video compared to the standard Kaypro
ROM's have been made. These are generally for consistency or to correct
bugs in the original implementation.
a) Control Characters that are not used by the video are now "swallowed"
rather than generating Greek characters or Fine Line graphics.
b) On 83 machines the underline cursor no longer destroys true underline
characters on the screen when moved through their positions.
c) On 84 machines the ESC G/ESC A sequences are implemented identically to
the 83 machines. That is the 32 characters (lower case) from the grave
accent (60 Hex) through the DELete (7F Hex) will produce the the
corresponding graphic character in position 0-31 (decimal) in the character
ROM if the video sequence ESC G has been recieved. When the sequence ESC A
is recieved the lower case characters produce themselves. On the 83
character ROM's thes 32 characters are normally greek and mathematical
symbols. On the 84 character ROM's these characters are normally the Fine
Line graphic set. On Foreign Language Kaypro's these characters are
selected european characters.
d) On 84 machines the sequences ESC B 7/ESC C 7 have a slightly different
effect. The standard video defaulted to a 24 line scrolling window with
the 25th line also scrolling. The Turbo ROM is either a 25 line scrolling
display or a 24 line scrolling display with the 25th line locked. The
difference is minor unless you wish to reconfigure some of your application
programs to make use of the 25 line screen. Note that the ROM scrolling is
much faster if a 25 line scrolling region is enabled. Also, scrolling is
much faster if no video attributes have been used since the last clear screen.
New Features:
a) Hard Tabulations. The standard video ignored the tabulation character,
"^I". Both 83 and 84 ROM's expand this to 8 column fixed tabs. This is
mostly of use to user's of Plu*Perfect Systems NOTEPAD module of the
Backgrounder, as most programs expand tabs in software.
b) Insert and Delete Character. Two new control codes are now interpreted
to insert and delete characters. "^A" will cause the next character
recieved to be inserted at the current cursor position. "^B" will delete the
character currently at the cursor position. Both of these controls are
limited to the current line, i.e. inserting characters will move the
characters to the right of the cursor but will not cause any that are
displaced past the end of the line to wrap. These new features are again
of interest to users of Plu*Perfect Systems' NOTEPAD module of the
Backgrounder.
c) On 84 machines there is now a method of dynamically modifying the type
of cursor used. ESC U n will cause a new cursor whose characteristics are
defined by the ascii character "n". The cursor is bit encoded into this
character and the bit positions have the following meaning.
bits 6,5 - blinking
00 - no blinking
01 - no cursor
10 - fast blinking
11 - slow blinking
bits 4,3,2,1,0 - cursor height
00000 - full block cursor (16 scan lines)
00001 -
00010 -
.....
01110 - thicker underline (2 scan lines)
01111 - thin underline cursor (1 scan line)
d) Disable on screen clock display. On 84 machines which have either a
built in Kaypro clock or and Advent Products clock, the on screen display
of the time may be temporarily disabled with
ESC C 8 and re-enabled with ESC B 8
Note that the clock display is automatically disabled if a 25 line
scrolling screen is selected.
e) Switch character generators. On 84 machines which are correctly wired,
an altenate character set may be chosen with the following
ESC B 9 and the original re-selected with ESC C 9
This additional character set would normally reside in the other half of a
27644 character ROM. True 84 machines are actually wired to accept this
chip but unfortunately Kaypro did not test the circuit and a minor
modification is required. On older Kaypro 10's a small circuit
modification is required, please contact Advent Products if you wish to
make use of this feature of the TURBO ROM.
ENTRY POINTS INTO THE TURBOROM
The TURBO ROM in general preserves the standard entry points that have been
used with only small differences by all CP/M Kaypros since the KAYCOMP.
There are naturally some extensions which provide additional features. One
major addition is the creation of a standard entry mechanism that can be
used regardles of whether an 83 or 84 machine is being used.
If a utility wishes to call the ROM it should load the page zero address it
wishes to call into the L register and then call 0FFFCH in high memory.
All the bank and stack switching tasks will be automatically taken care of.
However, direct calls to the ROM should be avoided in normal application
programs as they severely limit portability of the program.
Entry Points:
0000 Machine Restart, cold boot
0003* Disk Reset
0006 Initialized video driver
0009* Initialize unit record hardware
000C* Deactivate Host buffer if not written (HOME)
000F Select disk for next access
0012 Set Track for next disk access
0015 Set Sector for next disk access
0018 Set DMA address for next disk access
001B Read Sector
001E Write Sector
0021* Sector Translation (dummy, delayed to SETSEC)
0024 Turn on the Floppy drive motor
0027* Turn off floppy motors, Deselect hard drives, flush Host buffer
002A Keyboard input status
002D Keyboard input
0030 Keyboard serial output, use with caution
0033 Serial Data port input status (TTY)
0036 Serial Data port input (TTY)
0039 Serial Data port output (TTY)
003C Centronics printer output status (LPT)
003F Centronics printer output (LPT)
0042 Serial Data port output status (TTY)
0045 Video output (CRT)
0048* Ten millesecond delay
004B# Serial Printer input status (UL1) [83=TTY]
004E# Serial Printer input (UL1) [83=TTY]
0051# Serial Printer output (UL1) [83=TTY]
0054# Serial Printer output status (UL1) [83=TTY]
0057# Reload system
005A# Get next screen dump character
005D# Set cursor type
0060# One millesecond delay
0063# Initialize DPH -----DO NOT USE
83 Roms 84 Roms
0067# Hard Disk Seek -----DO NOT USE 0067# Kaypro Clock
006A# Hard Disk Setup-----DO NOT USE 006A# Advent Clock
006D# Kenmore CLock
Rom Entry Point Specifications:
(* Changes from Original Kaypro)
(# New entry points)
0003 Disk Reset --
ENTRY - none, EXIT - none
Simply resets the Host Buffer Active flag and the
Unallocated Sector Counter. This follows exactly the
definition in the latest versions of DRI documentation
(warm boot). The Kaypro ROM's used this entry point
for other internal purposes.
0009 Initialize Hardware --
ENTRY -- DE points to list of port,data pairs
A number of entries in list (len/2)
(see TURBO-BS.PRN for example of use)
EXIT -- none
This entry allows the physical devices to be set up
with any byte pattern. The original Kaypro entry
point always used its default values.
000C Home --
ENTRY -- none, EXIT -- none
This entry point follows the DRI definition, of
reseting the Host Buffer Active flag if the buffer
does not have a pending write. It also calls the
set track entry with an argument of zero. The
Kaypro ROM's in many cases also performed a
physical seek to track zero. This is unnecessary.
000F Select Disk -- ENTRY -- C - desired logical drive 0-15
E - bit 0=0 if this is first select
else bit 0=1
EXIT -- HL = points to DPH for this drive
if select was successful
= 0000 if either drive does not
exist or the floppy format was
not determinable
The main differences from almost all of the Kaypro
ROM's is the correct use of the lo order bit of the
E register as specified by Digital Research. This
means that any program that correctly uses the BDOS
facilities to log in a new drive will have the
media correctly determined after a disk change. On
the Kaypro ROM's the only time a change could be
made between say single and double sided disks was
after a warm boot. Popular programs like SWEEP
could not be used with a mixture of disk formats.
(Note that Plu*Perfect Systems' CP/M enhancements
included a BDOS patch to correct this, when the
TURBOBIOS is installed this patch is overwritten and
original contents replaced)
0015 Set Sector --
ENTRY -- BC = logical sector for next request
EXIT -- none
This routine combines the functions of the old
Sector Translation routine. It must be called
after the select disk function has been called, so
that the correct sector translation table can be
used. This is identical to the BDOS use of the
original two separate entry points.
0021 Sector Translation --
ENTRY -- BC = logical sector for next request
DE = pointer to translation table
EXIT -- HL = logical sector
This routine is a totally dummy routine and for
efficiency all of its functions are now performed
in the Set Sector Routine.
0027 Motor Off --
ENTRY -- none, EXIT -- none
Before performing its major deselect function this
entry check the Host Buffer for a pending write and
if there is one the buffer will be written to disk.
This ensures that whenever the select lights are
off that disk accurately reflects the contents of
the Host Buffer. It is thus good practice to remove
floppy diskettes from the drives only when the select
light(s) are off.
This entry will then turn off the floppy drive spindle
motor, and, if the Advent Personality Decoder board
is not present will deselect the floppies so that
the select light goes off. If Hard Disks are
present then each drive seeks its innermost
cylinder and then non existant drive 0 is selected
which will turn off the select lights on the drives.
0048 Ten Millesecond Delay --
ENTRY -- A = multiplier for delay
EXIT -- none
This entry point provides the correct delay
regardless of processor clock speed. All Kaypro
ROM's assume a 4 MHz clock. In addition, if the
keyboard type-ahead is enabled then the keyboard is
continually polled during the delay and any
keypresses are serviced and placed in the buffer.
The accuracy of this timer is within 4%, note that
it reflects the effective CPU speed at cold boot
and if the speed is changed (as is possible with some
speed up modifications) the timing will no longer
be accurate.
(# New Entry Points available in TURBO ROM)
004B Serial Printer input status --
ENTRY -- none
EXIT -- A = 00 and Z if no character ready
= FF and NZ if character ready
This entry allows use of the extra serial printer port
on 84 machines. On 83 ROMs this entry is double
mapped to the serial data port.
004E Serial Printer port input --
ENTRY -- none
EXIT -- A = character recieved
0051 Serial Printer port output --
ENTRY -- C = character to be sent
EXIT -- none
0054 Serial Printer output status --
ENTRY -- none
EXIT -- A = 00 and Z if not ready
= FF and NZ if ready for next
0054 Reload System --
ENTRY -- DE = Address to load system tracks
B = number of sectors to load
C = starting sector to load
A = logical drive to load from
EXIT -- none, any errors force cold boot
This entry point will reload all or part of the
operating system from the system tracks of the
specified drive. The usual conditions of 40
sectors/track will cause floppy type load and > 55
sectors/track will cause RAMDISK or Hard disk reload.
005A Next Screen Dump Character --
ENTRY -- C = FF if first screen character
EXIT -- A = character (masked with 7FH)
L = column (00 means new line)
Z flag set if end of screen
This entry allows external programs to read the
screen whether this is an 84 or 83 machine. The
flashing attirbute on the 83 machines is removed and
on 84 machines all pixel graphics are replaced with
blanks. It is the responsibilty of the calling
program to insert new line characters if needed.
005D Set Cursor Type ---
ENTRY -- A= cursor definition
EXIT -- none
This entry is machine dependent. On 83 mahines the
definition is simply the character itself (with or
without the hi bit set for flashing). On 84
machines the definition character has the same
meaning as the "n" used in the ESC U n cursor
setting sequence.
0060 One Millesecond Delay --
ENTRY -- A=delay multiplier
EXIT -- none
See description of Ten Millesecond above.
0063-6A on 83 machines are not to be used. These are used internally by
the ROM initialization code and will have unpredictable results if called
by external routines.
-- 84 machines only ---
All the entry points below have the same parameter interface
ENTRY -- none
EXIT -- H = BCD hours
L = BCD minutes
0067 Kaypro Clock --
Returns current time from built-in Kaypro clock
006A Advent Products Clock --
Returns current time from Advent clock
006D Kenmore Z- TIME Clock --
Returns current time from Kenmore clock
NOTE: Clock must exist as no internal checking is done, and unpredictable
results are possible if wrong clock is read.
r itself (with or
without the hi bit set for flashing). On 84
machines the definition character has the same
meani