home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / kaypro / turborom.doc < prev    next >
Text File  |  1994-07-13  |  48KB  |  1,084 lines

  1.                                TURBO ROM
  2.  
  3.                           Theory of Operation
  4.  
  5. The TURBO ROM for Kaypro computers interfaces the CP/M operating system
  6. to the actual hardware such as video display and disk drives.  It allows
  7. the addition of expansion hardware such as high capacity floppy disks,
  8. multiple hard disks and Advent Products RAM disks.  It automatically
  9. senses the presence of this hardware and provides the appropriate
  10. drivers to allow the operating system to fully use these new devices.
  11.  
  12. The following notes may be useful to those wishing to understand the
  13. operation of the ROM.
  14.  
  15. COLD BOOT
  16.  
  17. When power is applied, or the reset button is pressed, the following
  18. sequence of events is followed.
  19.  
  20. 1.  A delay of 100 ms to allow for some of the peripheral chips to
  21.     achieve equilibrium.  (MOSTEK parts are much slower than Zilog.)
  22.  
  23. 2.  The peripheral devices are programmed with default values such
  24.     as baud rate etc.
  25.  
  26. 3.  The video driver is initialized and the screen cleared.
  27.  
  28. 4.  The sign-on message is printed.
  29.  
  30. 5.  The presence of the WD1002 hard disk controller is detected, by
  31.     seeing if it comes not busy within 3 seconds.  If so, drive one is
  32.     tested for ready.  We wait up to 20 seconds for it to come up to
  33.     speed.  (Note Drive One is connected to J2 of controller.)
  34.  
  35.     When ready we issue a restore command and wait up to 25 seconds
  36.     for the completion.  (If any of these tests fail then we have no
  37.     hard disk.)
  38.  
  39. 7.  An attempt is then made to read a 1024 byte sector (8) from the
  40.     first cylinder of the disk.  If this is successful then we check to
  41.     see if the sector is a valid parameter sector.  On 83 machines the
  42.     main part of the hard disk initialization code is contained on the
  43.     second half of the sector.  The first 512 bytes of this parameter
  44.     sector contain the characteristics of the drives and the bad track
  45.     mappings.
  46.  
  47.     * 84 Machines Only
  48.     If this read fails we attempt to read a 512 byte sector (16) from
  49.     the same cylinder. If this is successful we check for valid
  50.     parameter sector.
  51.  
  52.     If we have a successful 512 byte sector read but an invalid sector
  53.     then we assume 512 byte sectors of standard Kaypro layout.
  54.  
  55. 8.  * 83 Machines Only
  56.     The code read from the parameter sector is used to check for the
  57.     presence  of a second Hard disk.  Parameter tables for these drives
  58.     are set up in memory along with bad track maps.
  59.  
  60. 9.  The lowest (in terms of select logic 0,1,2,3) floppy drive is
  61.     examined for the presence of a spinning diskette.  If detected the
  62.     logical drive ordering is as follows:
  63.  
  64.                 A -> V  = Floppy Drives
  65.                 X -> Y  = Hard Drives           (if present)
  66.                 Z       = Ram Disk              (if present)
  67.  
  68.     If no floppy detected the logical drive ordering is:
  69.  
  70.                 A -> V  = Hard Drives           (if present)
  71.                 X -> Y  = Floppy Drives
  72.                 Z       = Ram Disk              (if present)
  73.  
  74. 10. An attempt is then made to read the first sector of logical
  75.     drive "A".  This parameter sector conforms with the standard Kaypro
  76.     layout, having the load address, execution address and the number of
  77.     sectors to be loaded.  If we are running on a Kaypro  10 with a 512
  78.     byte/sector hard disk a check is done to see if the system to be
  79.     loaded will over-write the Host Buffer area (see memory layout for
  80.     explanation), and if this occurs (generally only with a 63K system)
  81.     the Host buffer is shortened to 512 bytes and floppy disk formats
  82.     with > 512 bytes/sector are flagged as illegal.
  83.  
  84. 11. The system is then read into memory and control is transferred to
  85.     this system at the specified address.  If the supplied TURBO-BIOS is
  86.     used (highly recommended) then further initialization is performed.
  87.     The nature of this initialization can be modified by the supplied
  88.     configuration program TURBOCFG.
  89.  
  90. WARM BOOT
  91.  
  92. On a Warm Boot an attempt is made to read from the logical "A" drive a
  93. fresh copy of the Command Processor and Basic Disk Operating System
  94. (BDOS).  The configuration program TURBOCFG can be used to change the
  95. default drive for this operation.  We recommend using this advanced
  96. option only if you really know what you are doing.  An example may be to
  97. warm boot from the RAM disk without making it drive A.  However, it must
  98. be SYSGENed before the first warm boot takes place.
  99.  
  100. DISK SELECT (and Deselect)
  101.  
  102. Floppy drives have removable media while Hard Disks and Ram Disks have
  103. fixed media.  Drives with removable media are treated differently at
  104. select time.  If this is the first select since a disk reset then we
  105. re-determine the format of the diskette in the drive.  (This operation
  106. can be inhibited under special circumstances).  If the format cannot be
  107. determined a BDOS Select error will occur, unlike most BIOS's which
  108. would generate a bad sector error.  Naturally a select error will also
  109. occur if an attempt is made to access a non-existent drive.
  110.  
  111. A period of time after the last disk operation, a deselect process
  112. occurs.  This first makes sure the contents of the De-Blocking buffer are
  113. written back to the disk if required.  Then the floppy motor is turned
  114. off and if needed both floppy drives are deselected (lights turned off).
  115. If Hard disks are present then each drive seeks the innermost formatted
  116. cylinder and then non-existent drive zero is selected.  This final step
  117. deselects the actual hard drives.
  118.  
  119.                   DEFINITION OF TABLES USED BY THE ROM
  120.  
  121. DATA PARAMETER HEADERS (Commonly called DPH's)
  122.  
  123. The DPH for each logical drive is extended by 2 bytes compared to the
  124. standard DRI definition (see CP/M manual if you are not familiar with
  125. this).  These 2 bytes precede the normal 16 bytes.
  126.  
  127. The first byte contains information on the logical/physical mapping of
  128. the drives.
  129.  
  130. ------------------------------------------------------------
  131. Byte0   -       logical/physical drive mapping
  132.  
  133. physical:
  134.         bit 7           -- reserved for future use by Plu*Perfect Systems
  135.         bit 6,5,4
  136.                         000  = Advent Products RAM disk (up to 2 MBytes)
  137.                         001  = reserved for future use
  138.                         010  = Physical Hard Drive 0    (up to 56 MBytes)
  139.                         011  = Physical Hard Drive 1    ( "   "   "     )
  140.  
  141.                         100  = Physical floppy 1        (48 or 96 TPI)
  142.                         101  = Physical floppy 2
  143.                         110  = Physical floppy 3
  144.                         111  = Physical floppy 4
  145.  
  146. logical:
  147.         bit 3-0         logical drive A-P
  148.                         0000    =       A
  149.                         0001    =       B
  150.                         0010    =       C
  151.                           .             .
  152.                           .             .
  153.                           .             .
  154.                         1111    =       P
  155.  
  156. ______________________________________
  157. In the second byte, some physical characteristics of the Drive are coded.
  158.  
  159. Byte1   -       drive characteristics byte defined as follows:-
  160.  
  161. FLOPPY DRIVE
  162.  
  163.         bit 7   -       0  = if drive is 48 tpi
  164.                         1  =   "   "     96 tpi
  165.  
  166.         bit 6   -       0  = redetermine media on fresh select(normal)
  167.                         1  = don't redetermine media on fresh select
  168.                                 (used when externally set disk format)
  169.  
  170.         bit 5   -       unused
  171.  
  172. HARD DRIVE
  173.  
  174.         Advent Format -
  175.         bit 7,6,5       number of heads (minus one)
  176.  
  177.         Kaypro 512 byte/sector format-
  178.         bit 7           0 = platter A (heads 0,1)
  179.                         1 = platter B (heads 2,3)
  180.  
  181.         bit 6,5         unused
  182.  
  183. RAM DRIVE
  184.  
  185.         bit 7,6,5       unused
  186.  
  187. All drive types
  188.  
  189.         bit 4   0  = Use ROM DPB tables
  190.                 1  = Use RAM DPB tables
  191.  
  192.         bits 3,2,1,0    Use DPB 0-15 from rom or ram table
  193.  
  194. Bytes
  195. 2 - 18  -       Standard DRI data parameter header.
  196.  
  197. DATA PARAMETER BLOCK (DPB's)
  198.  
  199. The DPB's used by the ROM are 3 bytes longer than the standard
  200. definition given by DRI (see CP/M manual if you are not familiar with
  201. this).  These 3 extra bytes precede the normal 15 bytes.
  202.  
  203. There is a word which points to a sector translation table address.  This
  204. may be zero, a ROM address which is not accessible to external programs
  205. without bank switching, or an externally loaded table in high RAM.
  206.  
  207. There is then a Byte which characterizes the type of format associated
  208. with this DPB. The bits in this byte are interpreted as follows:
  209.  
  210. 1.  For Floppy Drives: (Media)
  211.  
  212.         bit 7   -       0  = disk is in 48 tpi format
  213.                         1  = disk is in 96 tpi format
  214.  
  215.         bit 6   -       0  = standard data sense
  216.                         1  = inverted data bus (only available on 84 ROM)
  217.                                 (used only on machines that used chips
  218.                                 like 1771/91 without inverters)
  219.  
  220.         bit 5   -       1  = single density
  221.                         0  = double density
  222.  
  223.         bit 4,3,2   -   Use algorithm 0-7 to compute physical
  224.                         cylinder, track, sector and side.
  225.                         Note algorithm 7 is reserved for external
  226.                         code, which the user may load.  See later for
  227.                         definition and how to load this code.
  228.  
  229.                 Predefined Algorithms
  230.                 -----------------------------------------------
  231.                 000     - for 512 byte Kaypro hard disk format
  232.                                                 (see below)
  233.                 -----------------------------------------------
  234.                 001     - for 512/1024 byte Advent hard disk formats
  235.                                                 (see below)
  236.                 -----------------------------------------------
  237.                 010     - single sided floppy
  238.                         phy.cylinder    =track
  239.                         phy.track       =track
  240.                         phy.sector      =sector
  241.                         phy.head(side)  =0
  242.                 -----------------------------------------------
  243.                 011     - double sided Kaypro/Advent floppy
  244.                         bias            =10
  245.                         phy.cylinder    =int(track/2)
  246.                         phy.track       =phy.cylinder
  247.                         phy.head(side)  =mod(track,2)
  248.                         phy.sector      =sector + side*bias
  249.                 -----------------------------------------------
  250.                 100     - Micro Cornucopia/Advent 96 tpi,
  251.                         Same as Kaypro except
  252.                         bias            =20
  253.                 -----------------------------------------------
  254.                 101     - double sided (single long track)
  255.                         Note that zero based sector numbering assumed,
  256.                         fits Legacy formats
  257.  
  258.                         phy.cylinder    =track
  259.                         phy.track       =track
  260.                         phy.sector      =sector
  261.                         phy.head(side)  =0 if sector < phy_sect/side
  262.                                         =1 if sector >=  phy_sect/side
  263.                 -----------------------------------------------
  264.                 110     - double sided (odd tracks on back but no sector skew)
  265.                         Same as Kaypro except
  266.                         bias            =0
  267.                 -----------------------------------------------
  268.                 111     - External routine, parameters
  269.                           in registers on call and return.
  270.  
  271.                         ENTRY                           EXIT
  272.         HL      none                            physical cylinder to seek
  273.         DE      HSTTRK                          physical track for floppy ctrl
  274.         B       HSTDRV (dph byte 1)             physical head (side)
  275.         C       HSTSEC                          physical sector
  276.  
  277.                 ------------------------------------------------
  278.  
  279.         bit 1,0 -       00 = 128 physical sector length
  280.                         01 = 256
  281.                         10 = 512
  282.                         11 = 1024
  283.  
  284. -------------------------------------
  285. 2.  For Hard Disk Drives:
  286.  
  287.         bit 7,6,5               unused
  288.  
  289.                         (These bytes compatible with floppy use)
  290.         bit 4,3,2       000     -Kaypro 10 original format
  291.                            512 byte  sectors (algorithm for track sector)
  292.                                 phy.cylinder    = (track + offset)/2
  293.                                 offset = 0              if track < 4
  294.                                 offset = track - 4      if 3 < track < 8
  295.                                 offset = 4              if track > 7
  296.  
  297.                                 phy.track       = n/a
  298.                                 phy.sector      = sector
  299.                                 phy.head        = mod(track+offset,2)
  300.                                                          + drvbyt(7)*2
  301.                                 drvbyt(7) is bit 7 of byte 1 of DPH
  302.  
  303.                         (note we abandon trying to maintain
  304.                         duplicate directory on back of platter,
  305.                         if problems, then reformat with our new
  306.                         format)
  307.  
  308.                         001     -Advent Hard disk format
  309.                             512/1024 byte sectors
  310.                                 phy.cylinder    = trackx/#heads
  311.                                 phy.track       = n/a
  312.                                 phy.sector      = sector
  313.                                 phy.head        = mod(trackx,#heads)
  314.  
  315.                         (Note trackx = badfnc(track).  This corrects
  316.                         desired track for bad tracks.  The bad track
  317.                         function is performed by the following algorithm.
  318.  
  319.                         I:=0
  320.                         TRACKX:=TRACK
  321.                         DO WHILE(BADTRK(I) >= TRACK)
  322.                                 TRACKX:=TRACKX +1
  323.                                 I:=I + 1
  324.                         END
  325.  
  326.                         Where badtrk(i) is a list of bad physical
  327.                         tracks which is terminated with FFFFH entry.
  328.                         We support a maximum of 126 bad tracks per physical
  329.                         drive.)
  330.  
  331.         bit 1,0 -       00 = not supported
  332.                         01 = not supported
  333.                         10 = 512 byte sectors (only available on 84 ROMs)
  334.                         11 = 1024 byte sectors
  335.  
  336. ------------------------------------------------
  337. 3.  Advent Ram Disk Drive:
  338.  
  339.         bit 7,6,5,4,3,2 unused
  340.  
  341.         bit 1,0 -       00 = 128 byte sectors
  342.                         01 = not supported
  343.                         10 =    "    "
  344.                         11 =    "    "
  345.  
  346. -------------------------------------------------
  347.  
  348. In ROM we have a maximum of 16 DPB's
  349. DPB#
  350.  
  351. 0       Standard Kaypro SS (512 byte sectors)                           floppy
  352. 1       Standard Kaypro DS (512 byte sectors)                           floppy
  353. 2       Advent SSDD 448 tpi(1024 byte sectors) ( handles Osborne SSDD)  floppy
  354. 3       Advent DSDD 48tpi (1024 byte sectors)                           floppy
  355. 4       Advent DSDD 96tpi (1024 byte sectors)                           floppy
  356. 5       Micro C DSDD 96tpi (512 byte sectors)                           floppy
  357. 6*      Xerox 820 SSSD  (128 byte sectors)                              floppy
  358. 7*      Osborne SSSD (256 byte sectors)                                 floppy
  359. 8*      Epsom QX-10 (U.S. format - not European)                        floppy
  360. 9*      Kaypro 10 (original hard disk format)                           hard
  361. 10*
  362. 11*
  363. 12*
  364. 13*             reserved for future expansion
  365. 14*
  366. 15*
  367.  
  368. * only available on 84 ROMS
  369.  
  370. In high memory we store the DPB's that have to be dynamically changed or
  371. added.  The first DPB is a reserved entry for use by external programs
  372. who wish to set up a foreign floppy format for the ROM to work with.
  373.  
  374. The second is always the RAM disk if it exists.  Following this are the
  375. various Hard disks (Advent Format only) which are actually read in from
  376. the parameter sector of the hard disk.  These DPB's are stored in
  377. descending memory order (unlike DPH's above).
  378.  
  379.                           HIGH MEMORY ARRANGEMENT
  380.  
  381. The ROM uses the very top of the Kaypro RAM for its working storage.  The
  382. amount of memory used depends on the physical configuration, but in all
  383. cases, memory is dynamically allocated at cold boot time so that the
  384. amount of memory available to user programs is maximized.  The very top
  385. of memory is of fixed layout (which varies slightly between 83 and 84
  386. ROMs) and this is useable by programs which need to find out about the
  387. current environment.
  388.  
  389. topmem          equ     0FFFFH
  390.  
  391. ;ROMID is 8 byte string of following layout
  392. ;               db      checksum        ;zero sum of top 8 bytes in memory
  393. ;               jmp     romentry        ;general ROM entry point
  394. ;               db      version         ; BCD ver.rev, (hi bit set '84)
  395. ;               db      'PPS'
  396.  
  397. ;fixed pointers and storage which are guaranteed to be preserved in
  398. ;future releases of the ROM
  399.  
  400. dphptr: dw      numdrv          ;pointer to start of DPH table
  401. dpbptr: dw      numdpb          ;pointer to start of RAM DPB's
  402. hstptr: dw      hstbuf          ;pointer to Host buffer
  403.                                 ;This is the lowest area used by ROM
  404. intptr: dw      intvec          ;pointer to start of interrupt vector
  405. extptr: dw      tsalgr          ;pointer to external trk/sector code
  406. hrdptr: dw      badtr0          ;pointer to hard/floppy disk parameters
  407.  
  408. ;fixed storage that varies between 83 and 84 machines
  409.         83                                      84
  410.      --------                                 ---------
  411. safptr: dw      safcod                          dw      x       ;reserved
  412. cursor: dw      x                       cursor: dw      x       ;video cursor
  413.                                         clkent: dw      clkdrv  ;routine to
  414.                                                                 ;clock
  415.                                         curmin: db      minutes ;current time
  416.                                                 db      hours
  417.  
  418.         Interrupt vector for all devices.
  419.         83                              84
  420.      --------                        --------
  421.                                         pioBvc  ;modem dialer
  422.                                         pioAvc  ;RTC interface
  423.  
  424.                                         sioCv3  ;serial printer
  425.                                         sioCv2
  426.                                         sioCv1
  427.                                         sioCv0
  428.  
  429.         pioDvc  ;unused                 sioDv3  ;Modem or Unused serial
  430.         pioCvc  ;printer                sioDv2
  431.         pioBvc  ;unused                 sioDv1
  432.         pioAvc  ;system port            sioDv0  ;
  433.  
  434.         sioAv3                          sioAv3  ;serial data char rec.(error)
  435.         sioAv2                          sioAv2  ;serial data char rec.
  436.         sioAv1                          sioAv1  ;serial data ext. status
  437.         sioAv0                          sioAv0  ;serial data Tx buffer
  438.  
  439.         sioBv3                          sioBv3  ;keyboard char rec. (error)
  440.         sioBv2                          sioBv2  ;keyboard char rec.
  441.         sioBv1                          sioBv1  ;keyboard ext. status
  442.         sioBv0                          sioBv0  ;keyboard Tx buffer
  443.  
  444. intvec:                                         ;start of vectors aligned on
  445.                                                 ;16 byte boundary
  446.  
  447.         Stack space for interrupt handlers and ROM
  448.  
  449.         Code, DIRBUF and other variables
  450.  
  451.         Area for externally defined floppy drive
  452.         information
  453.  
  454. xtran:  ds      36              ;36 bytes of physical translation table
  455.  
  456.         ds      55              ;SPACE for code referred by labels
  457.                                 ; invmap and mapit
  458.  
  459.         db      fmt                             ;current format number
  460.         jmpr    invmap                          ;inverse trk/sector/side
  461. tsalgr: jmpr    mapit                           ;cylinder/sector/head
  462.  
  463. Miscellaneous disk/video/and other variables
  464. which may change with future ROMS implementation.
  465.  
  466.                 -----------
  467. However the following structure will remain intact though
  468. it will doubtless move.
  469.  
  470. disblk: db      ..      ;84 machine video blanking disable (00/FF)
  471.                                                         (not currently used)
  472.  
  473. smflag: db      ..      ;84 machine restricted to 512 byte sectors
  474.  
  475. stldly: db      z       ;current floppy head settling delay (ms)
  476. hldly:  db      y       ;current floppy head load delay(ms)
  477. fstprt: db      x       ;current floppy step rate (ms)
  478.  
  479. ftime4: db      x,y,z   ;array of floppy time constants for each drive
  480. ftime3: db      x,y,z
  481. ftime2: db      x,y,z
  482. ftime1: db      x,y,z
  483.  
  484. muxflg: db      ..      ;flag for presence of Advent decoder board
  485. fstat:  db      ..      ;current floppy arrangement
  486.                         ;7 - Drive 4 96 tpi
  487.                         ;6 - Drive 4 exists
  488.                         ;5 - Drive 3 96 tpi
  489.                         ;4 - Drive 3 exists
  490.                         ;3 - Drive 2 96 tpi
  491.                         ;2 - Drive 2 exists
  492.                         ;1 - Drive 1 96 tpi
  493.                         ;0 - Drive 1 exists (always true)
  494.  
  495. wdflag: db      ..      ;7 - if parameter sector successfully read
  496.                         ;0 - WD 1002 controller detected
  497.  
  498. sltmsk: db      ..      ;floppy select mask
  499.                         ; 00000011B     ;normal 2 lines
  500.                         ; 00000001B     ;Kaypro 10 hard disk connected
  501.  
  502. precp1: db      ..      ;Hard Drive 2 precomp cylinder(coded)
  503. step1:  db      ..      ; "     "   " step rate (coded)
  504. mxcyl1: dw      ...     ; "     "   " maximum formatted cylinder
  505. badtr1: dw      list1   ; "     "   " pointer to start of bad track table
  506.  
  507. precp0: db      ..      ;as above for drive 1
  508. step0:  db      ..
  509. mxcyl0: dw      ...
  510. badtr0: dw      list0   ;POINTED TO BY HRDPTR AT TOP OF MEMORY
  511.  
  512. polflg: db      ..      ;set to 00 if type-ahead keyboard (else FF)
  513. belchr: db      ..      ;bell character for keyboard, may have click bit
  514.                         ---------------
  515.  
  516.                 **************************************
  517.                 *  Run time determined storage areas *
  518.                 **************************************
  519.  
  520. Actual list of n*18 drive descriptor bytes where n is logical number of
  521. drives.  These are arranged as described above.
  522.  
  523. numdrv:         db      n               ;logical number of drives
  524.                                         ;pointed to by dphptr
  525.  
  526.         Followed by DPH for each drive as described above.
  527.         NOTE that DPH's ascend in memory above the NUMDRV byte.
  528.  
  529.  
  530. In RAM DPB tables described above -- note they descend in memory
  531. though the number of DPBs  byte is still at bottom of list
  532.  
  533. each DPB of following layout
  534.  
  535.         dw      xtran ptr
  536.         db      media byte
  537.         ds      15                      ;normal DRI definition
  538.  
  539. Actual list of RAM dpb's in following order (descending in memory)
  540.  
  541. 0 -     always externally definable floppy
  542. 1 -     RAMDISK (computed at cold boot)
  543.  
  544. 2-15    up to 14 more formats read in from hard disk
  545.         parameter sector
  546.  
  547.         (future ROM releases may limit number of logical hard disks to 13)
  548.  
  549. numdpb:         db                      ;number of RAM dpbs in this
  550.                                         ;configuration, the first
  551.                                         ;is always the externally
  552.                                         ;definable floppy
  553.  
  554. ;Hard Disk bad track lists  (if any)
  555.  
  556. list1:  dw      ...
  557.         dw      ...
  558.         dw      FFFFH
  559.  
  560. list0:  dw      ...
  561.         dw      ...
  562.         dw      FFFFH
  563.  
  564. hstbuf: ds      1024                    ;deblocking buffer
  565.                                         ;init code changes to 512
  566.                                         ;bytes if system loaded too high
  567.                                         ;on Kaypro 10 with 512
  568.                                         ;byte sectors
  569.  
  570. lowest area used in high Ram by ROM
  571.  
  572.                     ADVENT PRODUCTS ELECTRONIC RAM DISK
  573.  
  574. The RAM disk is located at ports 88H thru 8BH.
  575.  
  576. 88H     -       data bi-directional
  577. 89H     -       sector (6 lo bits only)
  578. 8AH     -       track register (7 lo bits per board, hi bit board select)
  579. 8BH     -       status register (bit 0,1  00,01,10,11 are 256,512,768,1024K
  580.                         respectively.  Bit 2 is 0 if board is present and
  581.                         otherwise is pulled up.
  582.  
  583. Status register returns
  584. xxxxx000        = 256k
  585. xxxxx001        = 512k
  586. xxxxx010        = 768k
  587. xxxxx011        =1024k
  588. xxxxx1xx        = ram disk not present
  589.  
  590. Then we write 8AH with 80H and repeat read of 8BH for second board.
  591.  
  592. RAMDISK has following DPH
  593.  
  594. XLT ptr         0000            ;no sector translation
  595. SCRATCH         0000
  596.                 0000
  597.                 0000
  598.                 DIRBUF          ;pointer to directory buffer
  599.                 CURDPB          ;always points to DPB current
  600.                 0000            ;no directory checksum
  601.                 ALVRAM          ;pointer to size dependent area
  602.  
  603. RAMDISK has following DPB
  604. XTRN:   dw      0000            ;no sector translation
  605. MEDIA:  dw      00              ;128 byte sectors
  606. SPT:    dw      64
  607. BSH:    db      x               ;x = 3 for 256K
  608.                                 ;  = 4 for 512K
  609.                                 ;  = 5 for 768,1024K
  610.                                 ;  = 6 for > 1024K
  611.  
  612. BLM:    db      2**x - 1
  613. EXM:    db      2**(x-3) - 1
  614. DSM:    dw      2**(6-x).(n+1).2**5 - 1) - 1
  615. DRM:    dw      2**(3+x) - 1
  616. AL0:    db      0C0H
  617. AL1:    db      000H
  618. CKS:    dw      0000
  619. OFF:    dw      0001
  620.  
  621. Sector 63 of track 0 is initialized with a copy of the first
  622. 128 byte of the ROM.  On subsequent resets this is compared and
  623. if a match is detected the directory of the RAM disk is not erased.
  624.  
  625.                        FLOPPY DISK FORMATS
  626.  
  627. The Turbo ROM will recognize and can use directly the following floppy
  628. disk formats:-
  629.  
  630.         83                                      84
  631.      ---------                                ---------
  632. Kaypro SSDD                             Kaypro SSDD
  633. Kaypro DSDD                             Kaypro DSDD
  634. Advent SSDD                             Advent SSDD
  635. Advent DSDD 48                          Advent DSDD 48
  636. Advent DSDD 96                          Advent DSDD 96
  637. Micro Cornucopia 96                     Micro Cornucopia 96
  638.  
  639.                                         Epson QX-10 DSDD 48 (U.S.)
  640.                                         Osborne SSSD
  641.                                         Xerox 820-1 SSSD
  642.  
  643. In addition any other CP/M 5.25" soft sector format may be set up using
  644. the TURBOSET program which is available separately as part of the
  645. Plu*Perfect Systems' MULTI-COPY package.
  646.  
  647. The Advent formats mentioned above have the following description.
  648.  
  649. 1) SSDD
  650.  
  651.         Physical Sector Length          1024 bytes
  652.         Physical Sector Order           1,4,2,5,3
  653.  
  654.         Logical Sectors/Track           40
  655.         Number of Cylinders             40
  656.  
  657.         Reserved Tracks                 3
  658.         CP/M allocation size            1K
  659.         Directory Entries               64
  660.         Reserved Directory Groups       2
  661.         Total size                      185K
  662.  
  663.         *note that this format is identical to the Osborne SSDD
  664.         except for the physical sector order
  665.  
  666. 2) DSDD 48
  667.  
  668.         Physical Sector Length          1024 bytes
  669.         Physical Sector Order           1,4,2,5,3       -side 0
  670.                                         11,14,12,15,13  -side 1
  671.  
  672.         Logical Sectors/Track           40
  673.         Logical Tracks                  80
  674.         Number of Cylinders             40
  675.         Reserved Tracks                 2
  676.         CP/M allocation size            2K
  677.         Directory Entries               256
  678.         Reserved Directory Groups       4
  679.         Total size                      390 K
  680.  
  681. 3) DSDD 96
  682.  
  683.         Physical Sector Length          1024 bytes
  684.         Physical Sector Order           1,4,2,5,3       -side 0
  685.                                         21,24,22,25,23  -side 1
  686.  
  687.         Logical Sectors/Track           40
  688.         Number of Cylinders             80
  689.         Number of Logical Tracks        160
  690.  
  691.         Reserved Tracks                 2
  692.         CP/M allocation size            2K
  693.         Directory Entries               256
  694.         Reserved Directory Groups       4
  695.         Total size                      790 K
  696.  
  697.                          TURBO ROM VIDEO FEATURES
  698.  
  699. The Turbo ROM provides a number of new video features compared with the
  700. standard Kaypro.  These differ between the 83 and 84 versions.
  701.  
  702. Video Blanking:
  703.  
  704. Both ROM's provide a screen saving video blanking after about ten
  705. minutes of waiting for keyboard input.  However, on 83 machines this
  706. feature requires a modification to the video circuit.  This is optional
  707. and the blanking will not occur unless the change has been made. Because
  708. the ROM has no way of knowing whether the change has been made, the
  709. unblanking keystroke will not be ignored as it is with the 84 ROM.
  710.  
  711. The 83 video change is made simply by purchasing a replacement character
  712. generator ROM and putting it into the circuit.  Alternatively, people
  713. with electronic circuit experience, can make a small modification to the
  714. main circuit board to achieve the same effect.  Details are available on
  715. request.
  716.  
  717. Screen Dump:
  718.  
  719. While not a direct feature of the Turbo ROM, the TURBO BIOS supplied
  720. with the ROM has character (not graphic) screen dump to printer
  721. capability.  The ROM actually provides the support for this feature but
  722. it must be externally activated, for more details see the source code to
  723. the BIOS and the following description of the ROM Entry Points.  The
  724. Screen Dump must be explicitly enabled by using TURBOCFG.
  725.  
  726. Changes to Video Control Codes and Escape Sequences:
  727.  
  728. Some changes to the behavior of the video compared to the standard
  729. Kaypro ROM's have been made.  These are generally for consistency or to
  730. correct bugs in the original implementation.
  731.  
  732. a) Control Characters that are not used by the video are now "swallowed"
  733. rather than generating Greek characters or Fine Line graphics.
  734.  
  735. b) On 83 machines the underline cursor no longer destroys true underline
  736. characters on the screen when moved through their positions.
  737.  
  738. c) On 84 machines the ESC G/ESC A sequences are implemented identically
  739. to the 83 machines.  That is the 32 characters (lower case) from the
  740. grave accent (60 Hex) through the DELete (7F Hex) will produce the the
  741. corresponding graphic character in position 0-31 (decimal) in the
  742. character ROM if the video sequence ESC G has been received.  When the
  743. sequence ESC A is received the lower case characters produce themselves.
  744. On the 83 character ROM's this 32 characters are normally greek and
  745. mathematical symbols.  On the 84 character ROM's these characters are
  746. normally the Fine Line graphic set.  On Foreign Language Kaypro's these
  747. characters are selected european characters.
  748.  
  749. d) On 84 machines the sequences ESC B 7/ESC C 7 have a slightly
  750. different effect.  The standard video defaulted to a 24 line scrolling
  751. window with the 25th line also scrolling.  The Turbo ROM is either a 25
  752. line scrolling display or a 24 line scrolling display with the 25th line
  753. locked.  The difference is minor unless you wish to reconfigure some of
  754. your application programs to make use of the 25 line screen.  Note that
  755. the ROM scrolling is much faster if a 25 line scrolling region is
  756. enabled.  Also, scrolling is much faster if no video attributes have
  757. been used since the last clear screen.
  758.  
  759. New Features:
  760.  
  761. a) Hard Tabulations.  The standard video ignored the tabulation
  762. character, "^I".  Both 83 and 84 ROM's expand this to 8 column fixed
  763. tabs.  This is mostly of use to user's of Plu*Perfect Systems NOTEPAD
  764. module of the Backgrounder, as most programs expand tabs in software.
  765.  
  766. b) Insert and Delete Character.  Two new control codes are now
  767. interpreted to insert and delete characters. "^A" will cause the next
  768. character received to be inserted at the current cursor position.  "^B"
  769. will delete the character currently at the cursor position.  Both of
  770. these controls are limited to the current line, i.e. inserting
  771. characters will move the characters to the right of the cursor but will
  772. not cause any that are displaced past the end of the line to wrap.
  773. These new features are again of interest to users of Plu*Perfect
  774. Systems' NOTEPAD module of the Backgrounder.
  775.  
  776. c) On 84 machines there is now a method of dynamically modifying the
  777. type of cursor used.  ESC U n will cause a new cursor whose
  778. characteristics are defined by the ascii character "n".  The cursor is
  779. bit encoded into this character and the bit positions have the following
  780. meaning.
  781.  
  782.         bits 6,5                - blinking
  783.                         00 - no blinking
  784.                         01 - no cursor
  785.                         10 - fast blinking
  786.                         11 - slow blinking
  787.  
  788.         bits 4,3,2,1,0          - cursor height
  789.  
  790.                         00000 - full block cursor (16 scan lines)
  791.                         00001 -
  792.                         00010 -
  793.  
  794.                         .....
  795.  
  796.                         01110 - thicker underline     (2 scan lines)
  797.                         01111 - thin underline cursor (1 scan line)
  798.  
  799. d) Disable on screen clock display.  On 84 machines which have either a
  800. built in Kaypro clock or and Advent Products clock, the on screen
  801. display of the time may be temporarily disabled with
  802.  
  803.         ESC C 8  and re-enabled with ESC B 8
  804.  
  805. Note that the clock display is automatically disabled if a 25 line
  806. scrolling screen is selected.
  807.  
  808. e) Switch character generators. On 84 machines which are correctly
  809. wired, an alternate character set may be chosen with the following
  810.  
  811.         ESC B 9 and the original re-selected with ESC C 9
  812.  
  813. This additional character set would normally reside in the other half of
  814. a 27644 character ROM.  True 84 machines are actually wired to accept
  815. this chip but unfortunately Kaypro did not test the circuit and a minor
  816. modification is required.  On older Kaypro 10's a small circuit
  817. modification is required, please contact Advent Products if you wish to
  818. make use of this feature of the TURBO ROM.
  819.  
  820.                       ENTRY POINTS INTO THE TURBOROM
  821.  
  822. The TURBO ROM in general preserves the standard entry points that have
  823. been used with only small differences by all CP/M Kaypros since the
  824. KAYCOMP. There are naturally some extensions which provide additional
  825. features.  One major addition is the creation of a standard entry
  826. mechanism that can be used regardless of whether an 83 or 84 machine is
  827. being used.
  828.  
  829. If a utility wishes to call the ROM it should load the page zero address
  830. it wishes to call into the L register and then call 0FFFCH in high
  831. memory.  All the bank and stack switching tasks will be automatically
  832. taken care of.  However, direct calls to the ROM should be avoided in
  833. normal application programs as they severely limit portability of the
  834. program.
  835.  
  836. Entry Points:
  837. 0000    Machine Restart,  cold boot
  838. 0003*   Disk Reset
  839. 0006    Initialized video driver
  840. 0009*   Initialize unit record hardware
  841. 000C*   Deactivate Host buffer if not written (HOME)
  842. 000F    Select disk for next access
  843. 0012    Set Track for next disk access
  844. 0015    Set Sector for next disk access
  845. 0018    Set DMA address for next disk access
  846. 001B    Read Sector
  847. 001E    Write Sector
  848. 0021*   Sector Translation (dummy, delayed to SETSEC)
  849. 0024    Turn on the Floppy drive motor
  850. 0027*   Turn off floppy motors, Deselect hard drives, flush Host buffer
  851. 002A    Keyboard input status
  852. 002D    Keyboard input
  853. 0030    Keyboard serial output, use with caution
  854. 0033    Serial Data port input status (TTY)
  855. 0036    Serial Data port input (TTY)
  856. 0039    Serial Data port output (TTY)
  857. 003C    Centronics printer output status (LPT)
  858. 003F    Centronics printer output (LPT)
  859. 0042    Serial Data port output status (TTY)
  860. 0045    Video output (CRT)
  861. 0048*   Ten millisecond delay
  862. 004B#   Serial Printer input status (UL1)       [83=TTY]
  863. 004E#   Serial Printer input (UL1)              [83=TTY]
  864. 0051#   Serial Printer output (UL1)             [83=TTY]
  865. 0054#   Serial Printer output status (UL1)      [83=TTY]
  866. 0057#   Reload system
  867. 005A#   Get next screen dump character
  868. 005D#   Set cursor type
  869. 0060#   One millisecond delay
  870. 0063#   Initialize DPH -----DO NOT USE
  871.                 83 Roms                                 84 Roms
  872. 0067#   Hard Disk Seek -----DO NOT USE          0067#   Kaypro Clock
  873. 006A#   Hard Disk Setup-----DO NOT USE          006A#   Advent Clock
  874.                                                 006D#   Kenmore CLock
  875.  
  876. Rom Entry Point Specifications:
  877. (* Changes from Original Kaypro)
  878. (# New entry points)
  879.  
  880. 0003    Disk Reset --
  881.                                 ENTRY - none,           EXIT - none
  882.                         Simply resets the Host Buffer Active flag and the
  883.                         Unallocated Sector Counter.  This follows exactly the
  884.                         definition in the latest versions of DRI documentation
  885.                         (warm boot). The Kaypro ROM's used this entry point
  886.                         for other internal purposes.
  887.  
  888. 0009    Initialize Hardware --
  889.                                 ENTRY -- DE points to list of port,data pairs
  890.                                          A  number of entries in list (len/2)
  891.                                         (see TURBO-BS.PRN for example of use)
  892.                                 EXIT  -- none
  893.  
  894.                         This entry allows the physical devices to be set up
  895.                         with any byte pattern.  The original Kaypro entry
  896.                         point always used its default values.
  897.  
  898. 000C    Home --
  899.                                 ENTRY -- none,          EXIT -- none
  900.  
  901.                         This entry point follows the DRI definition, of
  902.                         reseting the Host Buffer Active flag if the buffer
  903.                         does not have a pending write.  It also calls the
  904.                         set track entry with an argument of zero.  The
  905.                         Kaypro ROM's in many cases also performed a
  906.                         physical seek to track zero.  This is unnecessary.
  907.  
  908. 000F    Select Disk --          ENTRY -- C - desired logical drive 0-15
  909.                                          E - bit 0=0 if this is first select
  910.                                                         else bit 0=1
  911.  
  912.                                 EXIT  -- HL = points to DPH for this drive
  913.                                                 if select was successful
  914.                                             = 0000 if either drive does not
  915.                                                 exist or the floppy format was
  916.                                                 not determinable
  917.  
  918.                         The main differences from almost all of the Kaypro
  919.                         ROM's is the correct use of the lo order bit of the
  920.                         E register as specified by Digital Research.  This
  921.                         means that any program that correctly uses the BDOS
  922.                         facilities to log in a new drive will have the
  923.                         media correctly determined after a disk change.  On
  924.                         the Kaypro ROM's the only time a change could be
  925.                         made between say single and double sided disks was
  926.                         after a warm boot.  Popular programs like SWEEP
  927.                         could not be used with a mixture of disk formats.
  928.                         (Note that Plu*Perfect Systems' CP/M enhancements
  929.                         included a BDOS patch to correct this, when the
  930.                         TURBOBIOS is installed this patch is overwritten and
  931.                         original contents replaced)
  932.  
  933. 0015    Set Sector --
  934.                                 ENTRY -- BC = logical sector for next request
  935.  
  936.                                 EXIT  -- none
  937.  
  938.                         This routine combines the functions of the old
  939.                         Sector Translation routine.  It must be called
  940.                         after the select disk function has been called, so
  941.                         that the correct sector translation table can be
  942.                         used. This is identical to the BDOS use of the
  943.                         original two separate entry points.
  944.  
  945. 0021    Sector Translation --
  946.                                 ENTRY -- BC = logical sector for next request
  947.                                          DE = pointer to translation table
  948.  
  949.                                 EXIT  -- HL = logical sector
  950.  
  951.                         This routine is a totally dummy routine and for
  952.                         efficiency all of its functions are now performed
  953.                         in the Set Sector Routine.
  954.  
  955. 0027    Motor Off --
  956.                                 ENTRY -- none,          EXIT -- none
  957.  
  958.                         Before performing its major deselect function this
  959.                         entry check the Host Buffer for a pending write and
  960.                         if there is one the buffer will be written to disk.
  961.                         This ensures that whenever the select lights are
  962.                         off that disk accurately reflects the contents of
  963.                         the Host Buffer. It is thus good practice to remove
  964.                         floppy diskettes from the drives only when the select
  965.                         light(s) are off.
  966.  
  967.                         This entry will then turn off the floppy drive spindle
  968.                         motor, and, if the Advent Personality Decoder board
  969.                         is not present will deselect the floppies so that
  970.                         the select light goes off.  If Hard Disks are
  971.                         present then each drive seeks its innermost
  972.                         cylinder and then non existent drive 0 is selected
  973.                         which will turn off the select lights on the drives.
  974.  
  975. 0048    Ten Millisecond Delay --
  976.                                 ENTRY --   A = multiplier for delay
  977.  
  978.                                 EXIT  -- none
  979.  
  980.                         This entry point provides the correct delay
  981.                         regardless of processor clock speed.  All Kaypro
  982.                         ROM's assume a 4 MHz clock.  In addition, if the
  983.                         keyboard type-ahead is enabled then the keyboard is
  984.                         continually polled during the delay and any
  985.                         keypresses are serviced and placed in the buffer.
  986.                         The accuracy of this timer is within 4%, note that
  987.                         it reflects the effective CPU speed at cold boot
  988.                         and if the speed is changed (as is possible with some
  989.                         speed up modifications) the timing will no longer
  990.                         be accurate.
  991.  
  992. (# New Entry Points available in TURBO ROM)
  993.  
  994. 004B    Serial Printer input status --
  995.                                 ENTRY -- none
  996.                                 EXIT  --  A = 00 and Z if no character ready
  997.                                             = FF and NZ if character ready
  998.  
  999.                         This entry allows use of the extra serial printer port
  1000.                         on 84 machines.  On 83 ROMs this entry is double
  1001.                         mapped to the serial data port.
  1002.  
  1003. 004E    Serial Printer port input --
  1004.                                 ENTRY -- none
  1005.                                 EXIT  -- A = character received
  1006.  
  1007. 0051    Serial Printer port output --
  1008.                                 ENTRY -- C = character to be sent
  1009.                                 EXIT  -- none
  1010.  
  1011. 0054    Serial Printer output status --
  1012.                                 ENTRY -- none
  1013.                                 EXIT  -- A = 00 and Z if not ready
  1014.                                            = FF and NZ if ready for next
  1015.  
  1016. 0054    Reload System  --
  1017.                                 ENTRY -- DE = Address to load system tracks
  1018.                                          B  = number of sectors to load
  1019.                                          C  = starting sector to load
  1020.                                          A  = logical drive to load from
  1021.  
  1022.                                 EXIT -- none,  any errors force cold boot
  1023.  
  1024.                         This entry point will reload all or part of the
  1025.                         operating system from the system tracks of the
  1026.                         specified drive.  The usual conditions of 40
  1027.                         sectors/track will cause floppy type load and > 55
  1028.                         sectors/track will cause RAMDISK or Hard disk reload.
  1029.  
  1030. 005A    Next Screen Dump Character --
  1031.                                 ENTRY -- C = FF if first screen character
  1032.  
  1033.                                 EXIT  -- A = character (masked with 7FH)
  1034.                                          L = column (00 means new line)
  1035.                                          Z flag set if end of screen
  1036.  
  1037.                         This entry allows external programs to read the
  1038.                         screen whether this is an 84 or 83 machine.  The
  1039.                         flashing attribute on the 83 machines is removed and
  1040.                         on 84 machines all pixel graphics are replaced with
  1041.                         blanks.  It is the responsibility of the calling
  1042.                         program to insert new line characters if needed.
  1043.  
  1044. 005D    Set Cursor Type ---
  1045.                                 ENTRY --  A= cursor definition
  1046.  
  1047.                                 EXIT  -- none
  1048.  
  1049.                         This entry is machine dependent.  On 83 machines the
  1050.                         definition is simply the character itself (with or
  1051.                         without the hi bit set for flashing).  On 84
  1052.                         machines the definition character has the same
  1053.                         meaning as the "n" used in the ESC U n cursor
  1054.                         setting sequence.
  1055.  
  1056. 0060    One Millisecond Delay  --
  1057.                                 ENTRY --  A=delay multiplier
  1058.                                 EXIT  --  none
  1059.  
  1060.                         See description of Ten Millisecond above.
  1061.  
  1062. 0063-6A on 83 machines are not to be used.  These are used internally by
  1063. the ROM initialization code and will have unpredictable results if called
  1064. by external routines.
  1065.  
  1066.         --  84 machines only ---
  1067. All the entry points below have the same parameter interface
  1068.                                 ENTRY --  none
  1069.                                 EXIT  --  H = BCD hours
  1070.                                           L = BCD minutes
  1071.  
  1072. 0067    Kaypro Clock --
  1073.                         Returns current time from built-in Kaypro clock
  1074.  
  1075. 006A    Advent Products Clock --
  1076.                         Returns current time from Advent clock
  1077.  
  1078. 006D    Kenmore Z- TIME Clock --
  1079.                         Returns current time from Kenmore clock
  1080.  
  1081. NOTE: The clock must exist as no internal checking is done, and
  1082. unpredictable results are possible if wrong clock is read.
  1083.  
  1084.