home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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
-
-
-
-
- Robert Heller
- Robert Heller
- Robert Heller
-
-
- Fri May 16, 1986
- Fri May 16, 1986
- Fri May 16, 1986
-
-
-
-
- (c) Copyright 1986 by Robert Heller
- (c) Copyright 1986 by Robert Heller
- (c) Copyright 1986 by Robert Heller
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter 1: Introduction
-
-
-
- I wrote this patch to provide a means to move files
-
-
- between my Stride 440 and various other CP/M-68K machines
-
-
- in the area. In an adjacent office to where I work at the
-
-
- University of Massachuttes, there is a DEC Rainbow
-
-
- connected to one of the University's VAXes via a serial
-
-
- line. It is posible to reliably and quickly transfer files
-
-
- between the Rainbow and the VAX using Kermit at 9600 BAUD.
-
-
- On one of our VAXes we have a pair of 8" floppy drives. We
-
-
- have a program that will read and write single-sided,
-
-
- single-density 8" CP/M format floppies. The other CP/M-68K
-
-
- systems in the area have 8" drives and can read and write
-
-
- this format. Since the DEC Rainbow uses 96TPI drives and
-
-
- run CP/M-80/86, it seemed like it should be easy to move
-
-
- files between my Stride and the Rainbow. After doing some
-
-
- "nibble" analysis of a disk formatted and written to by the
-
-
- Rainbow, I discovered that the Rainbow uses sector
-
-
- skewing. It was then merely a matter of modifing Stride's
-
-
- CPMBIOS.S file to provide a sector translate table, when
-
-
- using Rainbow disks.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chapter 2: The Patches
-
-
-
- I wanted to make the fix transparent and unobtrusive.
-
-
- I also didn't want to have multiple version of CPM.SYS
-
-
- eating up disk space. Since the RX50 drives on the Rainbow
-
-
- are single-sided and the Rainbow uses a 10-sector format, I
-
-
- set the patch to conditionally (at startup time) include
-
-
- the sector translate table, based on the low-level
-
-
- configuration of the drive. That way I could setup one or
-
-
- the other floppy drive as a Rainbow format drive with UTIL
-
-
- (or MU.UTIL) by simply setting up the drive as a 10
-
-
- sectored single sided drive with a skew for format of 2.
-
-
-
- 2.1 The Executable Part Of The Patch
-
-
-
- This patch goes in the _init routine at the q22
- _init q22
- _init q22
-
-
- label.
-
-
-
- ***
-
-
- * RPH: do DEC Rainbow hack
-
-
- *
-
-
- * first check for floppy disk (only mess with floppies!)
-
-
- *
-
-
- q22:
-
-
- cmp.b #4,devnum * left floppy?
-
-
- beq RPH1 * br if so
-
-
- cmp.b #5,devnum * right floppy?
-
-
- bne RPH99 * br if not
-
-
- *
-
-
- * now check sectors/track and # tracks
-
-
- *
-
-
- RPH1:
-
-
- cmp.w #40,spt(a5) * 40 sectors/track?
-
-
- bne RPH99 * br if not
-
-
- cmp.w #80,dsktrk+intdef * 80 tracks?
-
-
- bne RPH99 * br if not
-
-
- *
-
-
- * now get disk conf info to check skew factor
-
-
- *
-
-
- movem.l d0/a0,-(A7) * save registers (just in case)
-
-
- lea rphfcnf,a0 * get floppy conf. argblock
-
-
- move.w dskchan(A6),rphfcnf+14 * stash logical channel # in
-
-
- * req. packet.
-
-
- moveq #readch,D0 * read chan conf
-
-
- trap #biosl * hit it
-
-
- *
-
-
- * check skew factor
-
-
- *
-
-
- cmp.b #2,rphfcon+4 * skew = 2?
-
-
- bne RPH88 * br if not
-
-
- * skew == 2, blast in translate table for DEC Rainbow CP/M-86/80 disks
-
-
- lea DECxlat,a0 * compute address
-
-
- move.l a0,xlt(A4) * setup xlt table
-
-
- * done. clean up, etc.
-
-
- RPH88:
-
-
- movem.l (A7)+,d0/a0 * restore registers
-
-
-
- *
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- * The following code determines the size of the disk allocation
-
-
- * vector, in bytes. This is based on the number of blocks on the disk.
-
-
- * One bit per block in the allocation vector is allocated.
-
-
- *
-
-
- * The '16+1' factor added below is to make sure that if the last word
-
-
- * of the allocation vector is only partially used, it is actually
-
-
- * allocated.
-
-
- *
-
-
- RPH99:
-
-
-
-
- 2.2 The Non-Executable Part Of The Patch
-
-
-
- The non-executable part of the patch consists of the
-
-
- translate table and the configuration request packet and
-
-
- buffer.
-
-
-
- This goes into the .data segment:
- .data
- .data
-
-
-
- rphfcnf:
-
-
- .dc.w 128 ; config chan
-
-
- .dc.w 0 ; error word
-
-
- .dc.l 32 ; size in bytes
-
-
- .dc.l rphfcon ; conf block
-
-
- .dc.w 0 ; logical block number
-
-
- .dc.w 0 ; control word (filled in later)
-
-
- .even
-
-
- DECxlat:
-
-
- .dc.b 0, 1, 2, 3 * first phy sector
-
-
- .dc.b 8, 9,10,11 * third phy sector
-
-
- .dc.b 16,17,18,19 * fifth phy sector
-
-
- .dc.b 24,25,26,27 * seventh phy sector
-
-
- .dc.b 32,33,34,35 * ninth phy sector
-
-
- .dc.b 4, 5, 6, 7 * second phy sector
-
-
- .dc.b 12,13,14,15 * fourth phy sector
-
-
- .dc.b 20,21,22,23 * sixth phy sector
-
-
- .dc.b 28,29,30,31 * eigth phy sector
-
-
- .dc.b 36,37,38,39 * tenth phy sector
-
-
-
-
- And this goes into the .bss segment:
- .bss
- .bss
-
-
-
- * space for disk conf. info
-
-
- rphfcon:
-
-
- .ds.b 32
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- .bss
-
-
-
- * space for disk conf. in