1*35046Skarels /* 2*35046Skarels * Copyright (c) 1988 Regents of the University of California. 3*35046Skarels * All rights reserved. 4*35046Skarels * 5*35046Skarels * This code is derived from software contributed to Berkeley by 6*35046Skarels * Chris Torek. 7*35046Skarels * 8*35046Skarels * Redistribution and use in source and binary forms are permitted 9*35046Skarels * provided that the above copyright notice and this paragraph are 10*35046Skarels * duplicated in all such forms and that any documentation, 11*35046Skarels * advertising materials, and other materials related to such 12*35046Skarels * distribution and use acknowledge that the software was developed 13*35046Skarels * by the University of California, Berkeley. The name of the 14*35046Skarels * University may not be used to endorse or promote products derived 15*35046Skarels * from this software without specific prior written permission. 16*35046Skarels * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17*35046Skarels * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18*35046Skarels * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19*35046Skarels * 20*35046Skarels * @(#)rx50reg.h 7.1 (Berkeley) 07/09/88 21*35046Skarels */ 22*35046Skarels 23*35046Skarels /* 24*35046Skarels * RX50 registers. 25*35046Skarels */ 26*35046Skarels 27*35046Skarels /* 28*35046Skarels * The names below do not quite match the DEC documentation simply because 29*35046Skarels * the names in the documentation are so bad. 30*35046Skarels */ 31*35046Skarels struct rx50device { 32*35046Skarels u_short rxid; /* identification */ 33*35046Skarels u_short reserved; 34*35046Skarels u_short rxcmd; /* command function reg */ 35*35046Skarels u_short rxtrk; /* track */ 36*35046Skarels u_short rxsec; /* sector */ 37*35046Skarels u_short rxcsc; /* current sector */ 38*35046Skarels u_short rxict; /* incorrect track (???) */ 39*35046Skarels u_short rxext; /* extend command register */ 40*35046Skarels u_short rxedb; /* empty data buffer (read) */ 41*35046Skarels u_short rxrda; /* reset data address */ 42*35046Skarels u_short rxgo; /* read to start current cmd */ 43*35046Skarels u_short rxfdb; /* fill data buffer (write) */ 44*35046Skarels }; 45*35046Skarels 46*35046Skarels #define RX50SEC 10 /* sectors per track */ 47*35046Skarels #define RX50MAXSEC 800 /* 10 sectors times 80 tracks */ 48*35046Skarels 49*35046Skarels /* 50*35046Skarels * Do the sector skew given the sector and track 51*35046Skarels * number (it depends on both!). 52*35046Skarels */ 53*35046Skarels /* (((((s) / 5) + 2 * ((s) + (t))) % 10) + 1) */ 54*35046Skarels #define RX50SKEW(s, t) (((s) / 5) + "\1\3\5\7\11\1\3\5\7"[((s) + (t)) % 5]) 55*35046Skarels 56*35046Skarels /* 57*35046Skarels * Values in the command function register. 58*35046Skarels */ 59*35046Skarels #define RXCMD_ERROR 0x80 /* error bit (composite?) */ 60*35046Skarels #define RXCMD_READ 0x40 /* read command */ 61*35046Skarels #define RXCMD_WRITE 0x70 /* write command */ 62*35046Skarels #define RXCMD_RESET 0x20 /* reset command */ 63*35046Skarels #define RXCMD_DONE 0x08 /* operation done (status) */ 64*35046Skarels #define RXCMD_DRIVE0 0x00 /* select drive 0 (csa1) */ 65*35046Skarels #define RXCMD_DRIVE1 0x02 /* select drive 1 (csa2) */ 66