home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CPM68K / SYSHACKS.LBR / DECIO.DQC / DECIO.DOC
Text File  |  2000-06-30  |  7KB  |  267 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.                    CPMBIOS.S Patch For DEC Rainbow Disk I/O                   CPMBIOS.S Patch For DEC Rainbow Disk I/O                   CPMBIOS.S Patch For DEC Rainbow Disk I/O
  16.  
  17.                                  Robert Heller                                 Robert Heller                                 Robert Heller
  18.                                Fri May 16, 1986                               Fri May 16, 1986                               Fri May 16, 1986
  19.  
  20.                       (c) Copyright 1986 by Robert Heller                      (c) Copyright 1986 by Robert Heller                      (c) Copyright 1986 by Robert Heller
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.                             Chapter 1: Introduction
  72.  
  73.                I  wrote  this  patch  to provide a means to move files
  74.           between my Stride 440 and various  other  CP/M-68K  machines
  75.           in the  area.   In an adjacent office to where I work at the
  76.           University  of  Massachuttes,  there  is   a   DEC   Rainbow
  77.           connected  to  one  of  the  University's VAXes via a serial
  78.           line.  It is posible to reliably and quickly transfer  files
  79.           between  the  Rainbow and the VAX using Kermit at 9600 BAUD.
  80.           On one of our VAXes we have a pair of 8" floppy drives.   We
  81.           have  a  program  that  will  read  and  write single-sided,
  82.           single-density 8" CP/M format floppies.  The other  CP/M-68K
  83.           systems  in  the  area have 8" drives and can read and write
  84.           this format.  Since the DEC Rainbow uses  96TPI  drives  and
  85.           run  CP/M-80/86,  it  seemed  like it should be easy to move
  86.           files between my Stride and the Rainbow.  After  doing  some
  87.           "nibble"  analysis of a disk formatted and written to by the
  88.           Rainbow,  I  discovered  that  the   Rainbow   uses   sector
  89.           skewing.   It  was then merely a matter of modifing Stride's
  90.           CPMBIOS.S file to provide a  sector  translate  table,  when
  91.           using Rainbow disks.
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.                             Chapter 2: The Patches
  138.  
  139.                I  wanted  to make the fix transparent and unobtrusive.
  140.           I also didn't want  to  have  multiple  version  of  CPM.SYS
  141.           eating up  disk space.  Since the RX50 drives on the Rainbow
  142.           are single-sided and the Rainbow uses a 10-sector format,  I
  143.           set  the  patch  to  conditionally (at startup time) include
  144.           the  sector  translate  table,  based   on   the   low-level
  145.           configuration of  the  drive.  That way I could setup one or
  146.           the other floppy drive as a Rainbow format drive  with  UTIL
  147.           (or  MU.UTIL)  by  simply  setting  up  the  drive  as  a 10
  148.           sectored single sided drive with a skew for format of 2.
  149.  
  150.           2.1 The Executable Part Of The Patch
  151.  
  152.                This patch  goes  in  the  _init  routine  at  the  q22                                          _init                    q22                                          _init                    q22
  153.           label.
  154.  
  155. ***
  156. * RPH:  do DEC Rainbow hack
  157. *
  158. * first check for floppy disk (only mess with floppies!)
  159. *
  160. q22:
  161.         cmp.b   #4,devnum       * left floppy?
  162.         beq     RPH1            * br if so
  163.         cmp.b   #5,devnum       * right floppy?
  164.         bne     RPH99           * br if not
  165. *
  166. * now check sectors/track and # tracks
  167. *
  168. RPH1:
  169.         cmp.w   #40,spt(a5)     * 40 sectors/track?
  170.         bne     RPH99           * br if not
  171.         cmp.w   #80,dsktrk+intdef * 80 tracks?
  172.         bne     RPH99           * br if not
  173. *
  174. * now get disk conf info to check skew factor
  175. *
  176.         movem.l d0/a0,-(A7)     * save registers (just in case)
  177.         lea     rphfcnf,a0      * get floppy conf. argblock
  178.         move.w  dskchan(A6),rphfcnf+14 * stash logical channel # in
  179. *                                 req. packet.
  180.         moveq   #readch,D0      * read chan conf
  181.         trap    #biosl          * hit it
  182. *
  183. * check skew factor
  184. *
  185.         cmp.b   #2,rphfcon+4    * skew = 2?
  186.         bne     RPH88           * br if not
  187. * skew == 2, blast in translate table for DEC Rainbow CP/M-86/80 disks
  188.         lea     DECxlat,a0      * compute address
  189.         move.l  a0,xlt(A4)      * setup xlt table
  190. * done. clean up, etc.
  191. RPH88:
  192.         movem.l (A7)+,d0/a0     * restore registers
  193.  
  194. *
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203. *       The following code determines the size of the disk allocation
  204. *       vector, in bytes.  This is based on the number of blocks on the disk.
  205. *       One bit per block in the allocation vector is allocated.
  206. *
  207. *       The '16+1' factor added below is to make sure that if the last word
  208. *       of the allocation vector is only partially used, it is actually
  209. *       allocated.
  210. *
  211. RPH99:
  212.  
  213.  
  214.           2.2 The Non-Executable Part Of The Patch
  215.  
  216.                The  non-executable  part  of the patch consists of the
  217.           translate table and the  configuration  request  packet  and
  218.           buffer.
  219.  
  220.                This goes into the .data segment:                                  .data                                  .data
  221.  
  222. rphfcnf:
  223.         .dc.w   128             ; config chan
  224.         .dc.w   0               ; error word
  225.         .dc.l   32              ; size in bytes
  226.         .dc.l   rphfcon         ; conf block
  227.         .dc.w   0               ; logical block number
  228.         .dc.w   0               ; control word (filled in later)
  229.         .even
  230. DECxlat:
  231.         .dc.b    0, 1, 2, 3     * first phy sector
  232.         .dc.b    8, 9,10,11     * third phy sector
  233.         .dc.b   16,17,18,19     * fifth phy sector
  234.         .dc.b   24,25,26,27     * seventh phy sector
  235.         .dc.b   32,33,34,35     * ninth phy sector
  236.         .dc.b    4, 5, 6, 7     * second phy sector
  237.         .dc.b   12,13,14,15     * fourth phy sector
  238.         .dc.b   20,21,22,23     * sixth phy sector
  239.         .dc.b   28,29,30,31     * eigth phy sector
  240.         .dc.b   36,37,38,39     * tenth phy sector
  241.  
  242.  
  243.                And this goes into the .bss segment:                                      .bss                                      .bss
  244.  
  245. * space for disk conf. info
  246. rphfcon:
  247.         .ds.b   32
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.                 .bss
  266.  
  267. * space for disk conf. in