home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
kaypro
/
turborom.doc
< prev
next >
Wrap
Text File
|
1994-07-13
|
48KB
|
1,084 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 successful 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 tables 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 transferred 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 called 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 precede 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 characteristics 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 accessible 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 expansion
14*
15*
* only available on 84 ROMS
In high memory we store the DPB's that have to be dynamically changed or
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 guaranteed 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/sector 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 restricted 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 described 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 behavior 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 received. When the
sequence ESC A is received the lower case characters produce themselves.
On the 83 character ROM's this 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 received 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 alternate 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 regardless 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 millisecond 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 millisecond 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 existent drive 0 is selected
which will turn off the select lights on the drives.
0048 Ten Millisecond 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 received
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 attribute on the 83 machines is removed and
on 84 machines all pixel graphics are replaced with
blanks. It is the responsibility 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 machines 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 Millisecond Delay --
ENTRY -- A=delay multiplier
EXIT -- none
See description of Ten Millisecond 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: The clock must exist as no internal checking is done, and
unpredictable results are possible if wrong clock is read.