Subject: MSCP (ra.c) partitioning  changes   (#78)
Index:	pdpuba/ra.c, pdpdist/disktab 2.11BSD

Description:

	The number of partition tables in ra.c was getting out of hand 
	with the rapidly growing number of MSCP discs available.  For
	example the 11/93 now comes with the RZ23L and RZ24L.  At 64
	bytes per partition table it would require around 4kb of kernel
	D space to hold the partition tables for the existing MSCP drive
	types - and more are being added all the time.

Repeat-By:
	Observation and personal experience.

Fix:
	Yes, the "real" solution would be to have disk labels (and a
	standalone disk labeling program).  Until that day the solution 
	is to have 5 "generic" partition types and smarten up ra.c to
	pay more attention to the volume size returned when a drive is
	brought on line.

	Small drives (those not having enough room for both a 7mb
	'a' partition and a 4mb 'b' partition) can be used as datadiscs
	(RD51, RX??) or as standalone boot media, but not as something
	the kernel can be booted from.

	The RA82 table was removed.  If you have an RA82 (unlikely, but
	possible) it may be necessary to leave the RA82 partition table
	present and add an entry in the compability table (described further
	on).

	The five general partition types are:

                type            partitions (sector range in sectors, size)
                ----            ----------
                 1              a: 0 - 15883     (15884)
                                b: 15884 - 24243 (8360)
                                c: whole drive
                                d: unused
                                e: unused
                                f: unused
                                g: 24244 - end   (depends on drive)
                                h: unused

                This would be used for small discs like the RC25, RD52, etc.
                The RD51 is an oddball - it's too small to have root + swap,
		therefore the RD51 is a type 3 drive.

                 2              a: 0-15883       (15884)
                                b: 15884 - 32603 (16720)
                                c: whole disc
                                d: 32604 - 259739 (227136 = 112mb)
                                e: 259740 - end   (depends on drive)
                                f: unused
                                g: 32604 - end    (depends on drive)
                                h: unused

                This would be used for drives in the 150mb range such as the
                RD54, RZ24, etc...

                  3             a: whole disc
                                b: unused
                                c: whole disc
                                d,e,f,g,h: unused

                Used for floppies (or the RD51) where only the whole disc 
		is referenced.

                  4             a: 0 - 15883    (15884)
                                b: 15884 - 32603 (16720)
                                c: whole disc
                                d: 32604 - 259739  (227136)
                                e: 259740 - 669339 (409600 = 200mb)
                                f: 669340 - end    (depends on drive)
                                g: 32604 - end
                                h: unused

                Used for larger drives such as the RZ25...

                  5             a: 0 - 15883 (15884)
                                b: 15884 - 32603 (16720)
                                c: whole disc
                                d: 32604 - 259739 (227136)
                                e: 259740 - 669339 (409600)
                                f: 669340 - 851803 (182464 = ~88mb)
                                g: 32604 - 851803 (819200 = 400mb)
                                h: 851804 - end  (rest of disc above ~400mb)

                Used for all the "big" stuff like the RZ56 and so on.

	There is a "compability" table present in the ra.c driver now.  If
	you wish to override the selection of one of the 5 generic partition
	tables then simply make an entry in this table and add a partition
	table to the list.  The compatibilty table is checked first, before 
	assigning a generic partition type.

	At present the drives listed in the compability table are the RA60,
	RA80, RD52 and RD53.  It is arguable that the RD52 and RD53 should
	have been removed and forced to use the generic tables, the RD52
	is only 30mb and if used at all would be for root, swap and perhaps
	/tmp - a larger disc would be needed for /usr.

	The RD54 partition sizes are the same as before, but the partition
	which continues from the end of swap until the end of volume is
	_not_ 'c' now, it is 'g'.  ALL that need be done for the RD54
	is to edit /etc/fstab to mount 'ra?g' instead of 'ra?c'.

	All of the generic partitions have the standard layout of 'a' being
	the root filesystem, 'b' being swap and 'c' being the whole disc.

	The second patch included in this file applies to /sys/pdpdist/disktab.
	All known (except for the RF drives) MSCP drives as of this date
	are listed.  The /sys/pdpdist/disktab should be the one which was
	shipped with the system (changes being made to /etc/disktab).  If
	you have local modifications to /etc/disktab, you will need to
	merge /sys/pdpdist/disktab into /etc/disktab.

	There are both uncommented and commented out entries for the RD52, 
	RD53, RA60, RA80 and RA81 in the new disktab file.  IF you decide to 
	remove a drive from the compability table (and use the new/improved 
	partition tables) then remember to reverse the comment status of
	the disktab entry for that drive as well.

	Also the "-rqdx2" and "-rqdx3" was removed from the RD5? drive names.
	It never really made any difference (and the RD54 could only be used
	on the RQDX3 anyway) and was a nuisance to remember (4BSD doesn't
	specify the controller type).

===================================cut here===============================
*** /sys/pdpuba/ra.c.old	Wed Dec 18 01:02:09 1991
--- /sys/pdpuba/ra.c	Sun Jul 12 16:28:41 1992
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ra.c	2.1 (2.11BSD Berkeley) 9/22/91
   */
  
   /***********************************************************************
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)ra.c	2.2 (2.11BSD GTE) 7/11/92
   */
  
   /***********************************************************************
***************
*** 14,19 ****
--- 14,36 ----
  
  /* 
   * ra.c - MSCP Driver
+  * Date:	Jul  1992
+  * Major rework of the partition tables.  Some old (RA60,80,81,RD53) tables 
+  * were retained (the rd54 'c' partition is now 'g' but the sizes stay 
+  * the same) for compatibility.  RC25, RD51, RA82 entries were removed (unlikely
+  * that the RA82 was used since the disktab entry was wrong).  A _brand new_
+  * scheme utilizing 5 "generic" partition tables was created based on the
+  * size of the disc.  This was needed due to the rapid proliferation of
+  * MSCP drive types, it was simply not feasible to have a 64 byte partition
+  * table for each of the (currently 28 to 30) types of MSCP discs.
+  *
+  * More attention is paid to bits in the media id beyond the 7 bit 
+  * numeric id.  These bits can be used to distinquish between a RZ24 and a
+  * RZ24L for example.
+  *
+  * Some of the diagnostic output was trimmed in an attempt to offset the
+  * growth of an already large drive.
+  *
   * Date:	Dec  18 1991
   * The controller number (bits 6 and 7 of the minor device) were not
   * being masked off after using dkunit().  This caused a crash when 
***************
*** 45,57 ****
  
  /*
   * MSCP disk device driver
-  *
-  * Should work with the following (at least!):
-  *	RUX1  (RX50, RX33)
-  * 	RQDX? (RD51, RD52, RD53, RD54)
-  *	UDA50 (RA60, RA80, RA81, RA82)
-  *	KLESI (RC25)
-  *
   * Tim Tucker, Gould Electronics, Sep 1985
   * Note:  This driver is based on the UDA50 4.3 BSD source.
   */
--- 62,67 ----
***************
*** 78,110 ****
  struct	rasizes	{
  	daddr_t nblocks;
  	daddr_t blkoff;
! }  ra25_sizes[8] = {
! 	15884,	0,		/* A=blk 0 thru 15883 */
! 	10032,	15884,		/* B=blk 15884 thru 25915 */
! 	-1,	25916,		/* C=blk 49324 thru 50901 */
! 	0,	0,		/* D=unused */
! 	0,	0,		/* E=unused */
! 	0,	0,		/* F=unused */
! 	0,	0,		/* G=unused */
! 	-1,	0,		/* H=blk 0 thru end */
! }, rd52_sizes[8] = { 		/* Setup for RX50, RD51, RD52 and RD53 disks */
  	9700,	0,		/* A=blk 0 thru 9699 (root for 52 & 53) */
  	17300,	9700,		/* B=blk 9700 thru 26999 (52 & 53 only) */
  	3100,	27000,		/* C=blk 27000 thru 30099 (swap 52 & 53) */
  	-1,	30100,		/* D=blk 30100 thru end (52 & 53 only) */
- 	7460,	0,		/* E=blk 0 thru 7459 (root 51) */
- 	2240,	7460,		/* F=blk 7460 thru 9699 (swap 51) */
- 	-1,	9700,		/* G=blk 9700 thru end (51, 52 & 53) */
- 	-1,	0,		/* H=blk 0 thru end (51, 52, 53 & RX50) */
- }, rd54_sizes[8] = {		/* Setup for RD54 disc */
- 	15884,	0,		/* A=blk 0 thru 15883 (root) */
- 	16720,	15884,		/* B=blk 15884 thru 32603 (swap) */
- 	-1,	32604,		/* C=blk 32604 thru end */
- 	0,	0,		/* D=unused */
  	0,	0,		/* E=unused */
  	0,	0,		/* F=unused */
! 	0,	0,		/* G=unused */
! 	-1,	0,		/* H=blk 0 thru end */
  }, ra60_sizes[8] = {
  	15884,	0,		/* A=blk 0 thru 15883 */
  	33440,	15884,		/* B=blk 15884 thru 49323 */
--- 88,102 ----
  struct	rasizes	{
  	daddr_t nblocks;
  	daddr_t blkoff;
! } rd52_sizes[8] = { 		/* Setup for RD52 and RD53 disks */
  	9700,	0,		/* A=blk 0 thru 9699 (root for 52 & 53) */
  	17300,	9700,		/* B=blk 9700 thru 26999 (52 & 53 only) */
  	3100,	27000,		/* C=blk 27000 thru 30099 (swap 52 & 53) */
  	-1,	30100,		/* D=blk 30100 thru end (52 & 53 only) */
  	0,	0,		/* E=unused */
  	0,	0,		/* F=unused */
! 	-1,	9700,		/* G=blk 9700 thru end (52 & 53) */
! 	-1,	0,		/* H=blk 0 thru end (52, 53) */
  }, ra60_sizes[8] = {
  	15884,	0,		/* A=blk 0 thru 15883 */
  	33440,	15884,		/* B=blk 15884 thru 49323 */
***************
*** 132,148 ****
  	-1,	565690,		/* F=blk 565690 thru end */
  	-1,	242606,		/* G=blk 242606 thru end */
  	-1,	0,		/* H=blk 0 thru end */
! }, ra82_sizes[8] ={
  	15884,	0,		/* A=blk 0 thru 15883 */
  	16720,	15884,		/* B=blk 15884 thru 32603 */
! 	303710,	32604,		/* C=blk 32604 thru 336313 */
! 	303710,	336314,		/* D=blk 336314 thru 640023 */
! 	303710,	640024,		/* E=blk 640024 thru 943733 */
! 	303710,	943734,		/* F=blk 943734 thru 1247443 */
  	0,	0,		/* G=unused */
! 	-1,	0,		/* H=blk 0 thru end */
  };
  
  #define	NRSPL2	3		/* log2 number of response packets */
  #define	NCMDL2	3		/* log2 number of command packets */
  #define	NRSP	(1<<NRSPL2)
--- 124,201 ----
  	-1,	565690,		/* F=blk 565690 thru end */
  	-1,	242606,		/* G=blk 242606 thru end */
  	-1,	0,		/* H=blk 0 thru end */
! }, ra_gen1[8] ={
  	15884,	0,		/* A=blk 0 thru 15883 */
+ 	8360,	15884,		/* B=blk 15884 thru 24243 */
+ 	-1,	0,		/* C=blk 0 thru end */
+ 	0,	0,		/* D=unused */
+ 	0,	0,		/* E=unused */
+ 	0,	0,		/* F=unused */
+ 	-1,	24244,		/* G=blk 24244 thru end */
+ 	0,	0,		/* H=unused */
+ }, ra_gen2[8] ={
+ 	15884,	0,		/* A=blk 0 thru 15883 */
  	16720,	15884,		/* B=blk 15884 thru 32603 */
! 	-1,	0,		/* C=blk 0 thru end */
! 	227136,	32604,		/* D=blk 32604 thru 259739 */
! 	-1,	259740,		/* E=blk 259740 thru end */
! 	0,	0,		/* F=unused */
! 	-1,	32604,		/* G=32604 thru end */
! 	0,	0,		/* H=unused */
! }, ra_gen3[8] ={
! 	-1,	0,		/* A=blk 0 thru end */
! 	0,	0,		/* B=unused */
! 	-1,	0,		/* C=blk 0 thru end */
! 	0,	0,		/* D=unused */
! 	0,	0,		/* E=unused */
! 	0,	0,		/* F=unused */
  	0,	0,		/* G=unused */
! 	0,	0,		/* H=unused */
! }, ra_gen4[8] ={
! 	15884,	0,		/* A=blk 0 thru 15883 */
! 	16720,	15884,		/* B=blk 15884 thru 32603 */
! 	-1,	0,		/* C=blk 0 thru end */
! 	227136,	32604,		/* D=blk 32604 thru 259739 */
! 	409600,	259740,		/* E=blk 259740 thru 669339 */
! 	-1,	669340,		/* F=blk 669340 thru end */
! 	-1,	32604,		/* G=blk 32604 thru end */
! 	0,	0,		/* H=unused */
! }, ra_gen5[8] ={
! 	15884,	0,		/* A=blk 0 thru 15883 */
! 	16720,	15884,		/* B=blk 15884 thru 32603 */
! 	-1,	0,		/* C=blk 0 thru end */
! 	227136,	32604,		/* D=blk 32604 thru 259739 */
! 	409600,	259740,		/* E=blk 259740 thru 669339 */
! 	182464,	669340,		/* F=blk 669340 thru 851803 */
! 	819200,	32604,		/* G=blk 32604 thru 851803 */
! 	-1,	851804,		/* H=blk 851804 thru end */
  };
  
+ #define M15(a,b,c) ((((((a - '@') & 0x1f) << 10) | \
+                       ((b - '@') & 0x1f) <<  5) | \
+                       ((c - '@') & 0x1f) <<  0))
+ 
+ /*
+  * Entries are only placed in this table to over-ride the drive size
+  * based selection of partition tables in radisksetup().  For example:
+  * the RA81 is listed here to keep the "old" partition table rather than
+  * assigning 'ra_gen5' (because the RA81 is > 851804 sectors.
+ */
+ 
+ 	struct MEDIA
+ 		{
+ 		short	id7;
+ 		short	name15;
+ 		struct	rasizes *parts;
+ 		} Mscptbl[] = {
+ 	{ 81, M15('R','A','@'), ra81_sizes },
+ 	{ 60, M15('R','A','@'), ra60_sizes },
+ 	{ 80, M15('R','A','@'), ra80_sizes },
+ 	{ 53, M15('R','A','@'), rd52_sizes },
+ 	{ 52, M15('R','A','@'), rd52_sizes },
+ 	{ 0, 0, 0 }
+ 	};
+ 
  #define	NRSPL2	3		/* log2 number of response packets */
  #define	NCMDL2	3		/* log2 number of command packets */
  #define	NRSP	(1<<NRSPL2)
***************
*** 238,248 ****
  #define	b_qsize	b_resid		/* queue size per drive, in rqdtab */
  
  /*
!  * Setup root MSCP device (use standard address 0172150).
   */
! raroot()
  {
! 	raattach((radeviceT *)0172150, 0);
  }
  
  /*
--- 291,311 ----
  #define	b_qsize	b_resid		/* queue size per drive, in rqdtab */
  
  /*
!  * Setup root MSCP device (use bootcsr passed from ROMs).  In the event
!  * the system was not booted from a MSCP drive but swapdev is a MSCP drive
!  * we fake the old behaviour of attaching the first (172150) controller.  If
!  * the system was booted from a MSCP drive then this routine has already been
!  * called with the CSR of the booting controller and the attach routine will
!  * ignore further calls to attach controller 0.
!  *
!  * This whole thing is a hack and should go away somehow.
   */
! raroot(csr)
! 	register radeviceT *csr;
  {
! 	if (!csr)		/* XXX */
! 		csr = (radeviceT *) 0172150;	/* XXX */
! 	raattach(csr, 0);
  }
  
  /*
***************
*** 344,350 ****
  			disk->ra_unit = unit;
  			disk->ra_dsize = -1L;
  		} else {
! 			printf("ra%d: out of disk data structures!\n", unit);
  			splx(s);
  			return(ENXIO);
  		}
--- 407,413 ----
  			disk->ra_unit = unit;
  			disk->ra_dsize = -1L;
  		} else {
! 			printf("ra%d: no disk structures\n", unit);
  			splx(s);
  			return(ENXIO);
  		}
***************
*** 541,547 ****
  	++sc->sc_ctab.b_active;
  	if (sc->RAADDR->rasa & RA_ERR || sc->sc_state != S_RUN) {
  		harderr(bp, "ra");
! 		log(LOG_INFO, "rasa %o, state %d\n", sc->RAADDR->rasa,
  			sc->sc_state);
  		/* Should requeue outstanding requests somehow */
  		rainit(sc);
--- 604,610 ----
  	++sc->sc_ctab.b_active;
  	if (sc->RAADDR->rasa & RA_ERR || sc->sc_state != S_RUN) {
  		harderr(bp, "ra");
! 		log(LOG_INFO, "rasa %o state %d\n", sc->RAADDR->rasa,
  			sc->sc_state);
  		/* Should requeue outstanding requests somehow */
  		rainit(sc);
***************
*** 569,575 ****
  		mp->m_bytecnt, mp->m_buf_h, mp->m_buf_l));
  	((Trl *)mp->m_dscptr)->hsh |= RA_OWN|RA_INT;
  	if (sc->RAADDR->rasa & RA_ERR)
! 		printf("ra: Error %d\n", sc->RAADDR->rasa);
  	i = sc->RAADDR->raip;		/* initiate polling */
  
  #ifdef UCB_METER
--- 632,638 ----
  		mp->m_bytecnt, mp->m_buf_h, mp->m_buf_l));
  	((Trl *)mp->m_dscptr)->hsh |= RA_OWN|RA_INT;
  	if (sc->RAADDR->rasa & RA_ERR)
! 		printf("ra: Err %d\n", sc->RAADDR->rasa);
  	i = sc->RAADDR->raip;		/* initiate polling */
  
  #ifdef UCB_METER
***************
*** 691,698 ****
  		break;
  
  	default:
! 		printf("ra: interrupt in unknown state %d ignored\n",
! 			sc->sc_state);
  		return;
  	}
  
--- 754,760 ----
  		break;
  
  	default:
! 		printf("raintr: state %d ignored\n", sc->sc_state);
  		return;
  	}
  
***************
*** 700,706 ****
  	 * If this happens we are in BIG trouble!
  	 */
  	if (sc->RAADDR->rasa & RA_ERR) {
! 		printf("ra: fatal error (%o)\n", sc->RAADDR->rasa);
  		sc->sc_state = S_IDLE;
  		sc->sc_ctab.b_active = 0;
  		wakeup((caddr_t)&sc->sc_ctab);
--- 762,768 ----
  	 * If this happens we are in BIG trouble!
  	 */
  	if (sc->RAADDR->rasa & RA_ERR) {
! 		printf("ra: fatal err %o\n", sc->RAADDR->rasa);
  		sc->sc_state = S_IDLE;
  		sc->sc_ctab.b_active = 0;
  		wakeup((caddr_t)&sc->sc_ctab);
***************
*** 875,881 ****
  	switch (mp->m_opcode) {
  	case M_O_ONLIN|M_O_END:
  		if ((disk = sc->sc_drives[mp->m_unit]) == NULL) {
! 			printf("ra: couldn't ONLINE disk!\n");
  			break;
  		}
  		dp = &disk->ra_dtab;
--- 937,943 ----
  	switch (mp->m_opcode) {
  	case M_O_ONLIN|M_O_END:
  		if ((disk = sc->sc_drives[mp->m_unit]) == NULL) {
! 			printf("ra: couldn't ONLINE disk\n");
  			break;
  		}
  		dp = &disk->ra_dtab;
***************
*** 922,931 ****
  	case M_O_READ | M_O_END:
  	case M_O_WRITE | M_O_END:
  		/* normal termination of read/write request */
! 		if ((disk = sc->sc_drives[mp->m_unit]) == NULL) {
! 			printf("ra: r/w no disk table entry\n");
  			break;
- 		}
  		bp = (struct buf *)mp->m_cmdref;
  
  		/*
--- 984,991 ----
  	case M_O_READ | M_O_END:
  	case M_O_WRITE | M_O_END:
  		/* normal termination of read/write request */
! 		if ((disk = sc->sc_drives[mp->m_unit]) == NULL)
  			break;
  		bp = (struct buf *)mp->m_cmdref;
  
  		/*
***************
*** 976,982 ****
  		break;
  
  	default:
! 		log(LOG_INFO,"ra: unknown opcode=0%o\n", mp->m_opcode);
  		ra_error((caddr_t)mp);
  	}
  }
--- 1036,1042 ----
  		break;
  
  	default:
! 		log(LOG_INFO,"ra: opcode %o\n", mp->m_opcode);
  		ra_error((caddr_t)mp);
  	}
  }
***************
*** 988,1038 ****
  	register	ra_infoT	*disk;
  	register	struct	mscp	*mp;
  {
  	/* Get unit total block count */
  	disk->ra_dsize = mp->m_uslow + ((long)mp->m_ushigh << 16);
- 	PRINTD(("ra%d: online, total size=%D, id=%d, rctsize=%d\n",
- 	      mp->m_unit, disk->ra_dsize, hiint(mp->m_mediaid) & 0xff,
- 	      mp->m_rctsize));
  
  	/* 
! 	 * Get disk type and from that partition structure.  Adjust
! 	 * disk size to reflect revector and maint area.
  	 */
! 	switch (hiint(mp->m_mediaid) & 0xff) {
! 		case 25:/* RC25 removable */
! 			disk->ra_size = ra25_sizes;
! 			break;
! 		case 33:/* RX33 Floppy disk */
! 		case 50:/* RX50 Floppy disk */
! 			disk->ra_size = rd52_sizes;
! 			break;
! 		case 51:
! 		case 52:/* RD Hard disks */
! 		case 53:
! 			disk->ra_size = rd52_sizes;
! 			break;
! 		case 54:
! 			disk->ra_size = rd54_sizes;
! 			break;
! 		case 60:
! 			disk->ra_size = ra60_sizes;
! 			break;
! 		case 80:
! 			disk->ra_size = ra80_sizes;
! 			break;
! 		case 81:
! 			disk->ra_size = ra81_sizes;
! 			break;
! 		case 82:
! 			disk->ra_size = ra82_sizes;
! 			break;
! 		default:
! 			printf("ra: disk type %d unknown\n",
! 				 hiint(mp->m_mediaid) & 0xff);
! 	}
  }
  
  /*
   * Process an error log message
   *
   * For now, just log the error on the console.  Only minimal decoding is done,
--- 1048,1129 ----
  	register	ra_infoT	*disk;
  	register	struct	mscp	*mp;
  {
+ 	register struct MEDIA *tp;
+ 	int	nameid, numid, i;
+ 	daddr_t	blks;
+ 
+ 	nameid = (((loint(mp->m_mediaid) & 0x3f) << 9) | 
+ 		   ((hiint(mp->m_mediaid) >> 7) & 0x1ff));
+ 	numid = hiint(mp->m_mediaid) & 0x7f;
+ 
  	/* Get unit total block count */
  	disk->ra_dsize = mp->m_uslow + ((long)mp->m_ushigh << 16);
  
+ 	/* spill the beans about what we have brought online */
+ 	log(LOG_NOTICE, "ra%d: %c%c%d%c size=%D id: %X\n", mp->m_unit,
+ 		mx(nameid,2), mx(nameid,1), numid, mx(nameid,0), 
+ 		disk->ra_dsize, mp->m_mediaid);
+ 
  	/* 
! 	 * Look for override in the table, if found use the partition
! 	 * table specified.  Else use a size based rule for assigning on
! 	 * of the 5 general purpose tables.
  	 */
! 
! 	for	(blks = disk->ra_dsize, tp = Mscptbl; tp->id7; tp++)
! 		{
! 		if	(tp->id7 == numid && tp->name15 == nameid)
! 			{
! 			disk->ra_size = tp->parts;
! 			log(LOG_NOTICE, "ra%d: old table\n", mp->m_unit);
! 			return;
! 			}
! 		}
! 	if	(blks < 24244L)
! 		{
! 		i = 3;			/* < ~12mb = type 3 */
! 		disk->ra_size = ra_gen3;
! 		}
! 	else if	(blks < 259740L)
! 		{
! 		i = 1;			/* < ~112mb = type 1 */
! 		disk->ra_size = ra_gen1;
! 		}
! 	else if	(blks < 669340L)	/* < ~330mb = type 2 */
! 		{
! 		i = 2;
! 		disk->ra_size = ra_gen2;
! 		}
! 	else if	(blks < 851804L)	/* < ~420mb = type 4 */
! 		{
! 		i = 4;
! 		disk->ra_size = ra_gen4;
! 		}
! 	else
! 		{
! 		i = 5;			/* > ~420mb = type 5 */
! 		disk->ra_size = ra_gen5;
! 		}
! 	log(LOG_NOTICE, "ra%d: type %d partitions\n", mp->m_unit, i);
  }
  
  /*
+  * this is a routine rather than a macro to save space - shifting, etc 
+  * generates a lot of code.
+ */
+ 
+ mx(l, i)
+ 	int l, i;
+ 	{
+ 	register int c;
+ 
+ 	c = (l >> (5 * i)) & 0x1f;
+ 	if	(c == 0)
+ 		c = ' ' - '@';
+ 	return(c + '@');
+ 	}
+ 
+ /*
   * Process an error log message
   *
   * For now, just log the error on the console.  Only minimal decoding is done,
***************
*** 1048,1071 ****
  
  	switch (mp->me_format) {
  	case M_F_CNTERR:
! 		printf("controller");
  		break;
  	case M_F_BUSADDR:
! 		printf("host memory access addr 0%o", mp->me_busaddr);
  		break;
  	case M_F_DISKTRN:
! 		printf("disk transfer, unit %d grp 0x%x hdr 0x%x",
  			mp->me_unit, mp->me_group, mp->me_hdr);
  		break;
  	case M_F_SDI:
! 		printf("SDI, unit %d hdr 0x%x", mp->me_unit, mp->me_hdr);
  		break;
  	case M_F_SMLDSK:
! 		printf("small disk, unit %d cyl %d",
! 			 mp->me_unit, mp->me_sdecyl);
  		break;
  	default:
! 		printf("unknown, unit %d format 0%o",mp->me_unit,mp->me_format);
  	}
  
  	printf(", event 0%o\n", mp->me_event);
--- 1139,1161 ----
  
  	switch (mp->me_format) {
  	case M_F_CNTERR:
! 		printf("ctlr");
  		break;
  	case M_F_BUSADDR:
! 		printf("M_F_BUSADDR %o", mp->me_busaddr);
  		break;
  	case M_F_DISKTRN:
! 		printf("disk xfer, unit %d grp x%x hdr x%x",
  			mp->me_unit, mp->me_group, mp->me_hdr);
  		break;
  	case M_F_SDI:
! 		printf("SDI unit %d hdr x%x", mp->me_unit, mp->me_hdr);
  		break;
  	case M_F_SMLDSK:
! 		printf("small disk unit %d cyl %d", mp->me_unit, mp->me_sdecyl);
  		break;
  	default:
! 		printf("?, unit %d format %o",mp->me_unit,mp->me_format);
  	}
  
  	printf(", event 0%o\n", mp->me_event);
*** /sys/pdpdist/disktab.old	Wed Dec  5 19:25:33 1990
--- /sys/pdpdist/disktab	Sun Jul 12 00:04:08 1992
***************
*** 31,50 ****
  # Drives on xp
  #
  
- # RM02/03:
- #
- # File system free list parameters (m/n):
- # RM02:
- # CPU	23	24	34	40	44	45	53	55
- # DISK
- # RM02	11/80	10/80	8/80	8/80	6/80	7/80	6/80	7/80
- # RM03	16/80	15/80	12/80	12/80	8/80	11/80	8/80	11/80
- #
- # CPU	60	70	73	83	84
- # DISK
- # RM02	7/80	5/80	6/80	6/80	5/80
- # RM03	11/80	7/80	9/80	9/80	7/80
- #
  rm02|RM02|rm03|RM03|DEC RM02/03:\
  	:ty=removable:ns#32:nt#5:nc#823:sf:\
  	:b0=/mdec/rm03uboot:\
--- 31,36 ----
***************
*** 57,72 ****
  	:ph#131522:bh#1024:fh#1024:
  
  # RM05:
- #
- # File system free list parameters (m/n):
- # CPU	23	24	34	40	44	45	53	55
- # DISK
- # RM05	16/304	15/304	12/304	12/304	8/304	11/304	8/304	11/304
- #
- # CPU	60	70	73	83	84
- # DISK
- # RM05	11/304	7/304	8/304	8/304	7/304
- #
  rm05|RM05|cdc9766|CDC9766|9766|DEC RM05, CDC 9766:\
  	:ty=removable:ns#32:nt#19:nc#823:sf:\
  	:b0=/mdec/rm05uboot:\
--- 43,48 ----
***************
*** 78,83 ****
--- 54,60 ----
  	:pf#152000:bf#1024:ff#1024:\
  	:pg#165826:bg#1024:fg#1024:\
  	:ph#500226:bh#1024:fh#1024:
+ 
  9775|CDC 9775:\
  	:ty=winchester:ns#32:nt#40:nc#842:sf:\
  	:pa#10240:ba#1024:fa#1024:\
***************
*** 90,107 ****
  	:ph#1072640:bh#1024:fh#1024:
  
  # EATON BR1537 or 1711 controller.  The CSR set looks like an RP03,
! # that's about all.  m/n are probably wrong for anything except
! # 44, 70 and 84.
  #
- # File system free list parameters (m/n):
- # CPU	23	24	34	40	44	45	53	55
- # DISK
- # BR	16/304	15/304	12/304	12/304	7/304	11/304	8/304	11/304
- #
- # CPU	60	70	73	83	84
- # DISK
- # BR	11/304	5/304	7/304	7/304	6/304
- #
  br1538d|BR1538D|EATON 1538D, 1711:\
  	:ty=removable:ns#32:nt#19:nc#815:so:\
  	:b0=/mdec/bruboot:\
--- 67,74 ----
  	:ph#1072640:bh#1024:fh#1024:
  
  # EATON BR1537 or 1711 controller.  The CSR set looks like an RP03,
! # that's about all.
  #
  br1538d|BR1538D|EATON 1538D, 1711:\
  	:ty=removable:ns#32:nt#19:nc#815:so:\
  	:b0=/mdec/bruboot:\
***************
*** 111,127 ****
  	:pd#232256:bd#4096:fd#1024:\
  	:ph#495520:bh#1024:fh#1024:
  
- # RP04/05/06:
- #
- # File system free list parameters (m/n):
- # CPU		23	24	34	40	44	45	53	55
- # DISK
- # RP04/05/06	11/209	10/209	8/209	8/209	6/209	7/209	6/209	7/209
- #
- # CPU		60	70	73	83	84
- # DISK
- # RP04/05/06	7/209	5/209	6/209	6/209	5/209
- #
  rp04|RP04|rp05|RP05|DEC RP04/05:\
  	:ty=removable:ns#22:nt#19:nc#411:sf:\
  	:b0=/mdec/hpuboot:\
--- 78,83 ----
***************
*** 129,134 ****
--- 85,91 ----
  	:pb#8778:bb#1024:fb#1024:\
  	:pc#153258:bc#1024:fc#1024:\
  	:pg#171650:bg#1024:fg#1024:
+ 
  rp06|RP06|DEC RP06:\
  	:ty=removable:ns#22:nt#19:nc#815:sf:\
  	:b0=/mdec/hpuboot:\
***************
*** 139,155 ****
  	:pe#322130:be#1024:fe#1024:\
  	:pg#171798:bg#1024:fg#1024:\
  	:ph#340522:bh#1024:fh#1024:
! 160|fuji|fuji160|Fujitsu 160:\
  	:ty=winchester:ns#32:nt#10:nc#823:sf:\
  	:b0=/mdec/si94uboot:\
  	:pa#9600:ba#1024:fa#1024:\
  	:pb#9600:bb#1024:fb#1024:\
  	:pc#244002:bc#1024:fc#1024:\
! 	:pd#125440:bd#1024:fd#1024:\
! 	:pe#118562:be#1024:fe#1024:\
! 	:pf#59520:bf#1024:ff#1024:\
! 	:pg#59042:bg#1024:fg#1024:\
  	:ph#263202:bh#1024:fh#1024:
  diva|DIVA|9300|Diva Comp V, Ampex 9300 (in direct mode):\
  	:ty=winchester:ns#33:nt#19:nc#815:sf:\
  	:b0=/mdec/dvhpuboot:\
--- 96,114 ----
  	:pe#322130:be#1024:fe#1024:\
  	:pg#171798:bg#1024:fg#1024:\
  	:ph#340522:bh#1024:fh#1024:
! 
! rm2x|160|fuji|fuji160|Fujitsu 160:\
  	:ty=winchester:ns#32:nt#10:nc#823:sf:\
  	:b0=/mdec/si94uboot:\
  	:pa#9600:ba#1024:fa#1024:\
  	:pb#9600:bb#1024:fb#1024:\
  	:pc#244002:bc#1024:fc#1024:\
! 	:pd#164800:bd#1024:fd#1024:\
! 	:pe#79360:be#1024:fe#1024:\
! 	:pf#39680:bf#1024:ff#1024:\
! 	:pg#39680:bg#1024:fg#1024:\
  	:ph#263202:bh#1024:fh#1024:
+ 
  diva|DIVA|9300|Diva Comp V, Ampex 9300 (in direct mode):\
  	:ty=winchester:ns#33:nt#19:nc#815:sf:\
  	:b0=/mdec/dvhpuboot:\
***************
*** 161,166 ****
--- 120,126 ----
  	:pf#156750:bf#1024:ff#1024:\
  	:pg#165996:bg#1024:fg#1024:\
  	:ph#510846:bh#1024:fh#1024:
+ 
  330|capricorn|Capricorn|Ampex Capricorn:\
  	:ty=winchester:ns#32:nt#16:nc#1024:sf:\
  	:pa#16384:ba#1024:fa#1024:\
***************
*** 171,176 ****
--- 131,137 ----
  	:pf#107008:bf#1024:ff#1024:\
  	:pg#179712:bg#1024:fg#1024:\
  	:ph#521728:bh#1024:fh#1024:
+ 
  si_eagle|SI_Eagle|2351|2351A|Fujitsu Eagle 2351A (48 sectors):\
  	:ty=winchester:ns#48:nt#20:nc#842:rm#3961:sf:\
  	:b0=/mdec/si51uboot:\
***************
*** 179,184 ****
--- 140,146 ----
  	:pc#474240:bc#1024:fc#1024:\
  	:pd#214080:bd#1024:fd#1024:\
  	:ph#803520:bh#1024:fh#1024:
+ 
  si9766|si9766|CDC 9766 on SI 9500 controller:\
  	:ty=removable:ns#32:nt#19:nc#823:sf:\
  	:b0=/mdec/si95uboot:\
***************
*** 191,210 ****
  	:pg#162786:bg#1024:fg#1024:\
  	:ph#497344:bh#1024:fh#1024:
  
- #
- # Disks for rk
- #
- # RK06/07:
- #
- # File system free list parameters (m/n):
- # CPU		23	24	34	40	44	45	53	55
- # DISK
- # RK06/07	8/33	7/33	6/33	6/33	4/33	5/33	4/33	5/33
- #
- # CPU		60	70	73	83	84
- # DISK
- # RK06/07	5/33	3/33	4/33	4/33	3/33
- #
  rk06|RK06|DEC RK06:\
  	:ty=removable:ns#22:nt#3:nc#411:sf:\
  	:b0=/mdec/hkuboot:\
--- 153,158 ----
***************
*** 223,265 ****
  	:pe#8316:be#1024:fe#1024:\
  	:pg#26978:bg#1024:fg#1024:\
  	:ph#53642:bh#1024:fh#1024:
! #
! # Disks for rl
! #
! # RL01/02:
! #
! # File system free list parameters (m/n):
! # CPU		23	24	34	40	44	45	53	55
! # DISK
! # RL01/2	7/10	6/10	6/10	6/10	4/10	5/10	4/10	5/10
! #
! # CPU		60	70	73	83	84
! # DISK
! # RL01/2	5/10	3/10	4/10	4/10	3/10
! #
  rl01|RL01|DEC RL01:\
  	:ty=removable:se#256:ns#40:nt#2:nc#256:\
  	:b0=/mdec/rluboot:\
  	:ph#20480:bh#1024:fh#1024:
  rl02|RL02|DEC RL02:\
  	:ty=removable:se#256:ns#40:nt#2:nc#512:\
  	:b0=/mdec/rluboot:\
  	:ph#40960:bh#1024:fh#1024:
  
- #
- # Disks for rk
- #
- # RK05:
- #
- # File system free list parameters (m/n):
- # CPU	23	24	34	40	44	45	53	55
- # DISK
- # RK05	4/12	4/12	3/12	3/12	2/12	3/12	2/12	3/12
- #
- # CPU	60	70	73	83	84
- # DISK
- # RK05	3/12	2/12	2/12	2/12	2/12
- #
  rk05|RK05|DEC RK05:\
  	:ty=removable:ns#12:nt#2:nc#203:bt=rkuboot:\
  	:b0=/mdec/rkuboot:\
--- 171,187 ----
  	:pe#8316:be#1024:fe#1024:\
  	:pg#26978:bg#1024:fg#1024:\
  	:ph#53642:bh#1024:fh#1024:
! 
  rl01|RL01|DEC RL01:\
  	:ty=removable:se#256:ns#40:nt#2:nc#256:\
  	:b0=/mdec/rluboot:\
  	:ph#20480:bh#1024:fh#1024:
+ 
  rl02|RL02|DEC RL02:\
  	:ty=removable:se#256:ns#40:nt#2:nc#512:\
  	:b0=/mdec/rluboot:\
  	:ph#40960:bh#1024:fh#1024:
  
  rk05|RK05|DEC RK05:\
  	:ty=removable:ns#12:nt#2:nc#203:bt=rkuboot:\
  	:b0=/mdec/rkuboot:\
***************
*** 268,286 ****
  #
  # Disks on a UDA50
  #
! 
! # RA60:
  #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RA60	21/84	21/84	17/84	17/84	12/84	15/84	12/84	15/84
  #
! # CPU	60	70	73	83	84
! # DISK
! # RA60	15/84	10/84	12/84	12/84	10/84
! #
! ra60|RA60|DEC RA60 Removable:\
  	:ty=removable:ns#42:nt#4:nc#2382:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
--- 190,211 ----
  #
  # Disks on a UDA50
  #
! # 7/11/92 - A new and more uniform partitioning scheme is present in the
! # MSCP driver.  For compatibility reasons the RA60, RA80, RA81, RD52 and
! # RD53 old style partitions were kept.  RC25 and RD51 drives use the new
! # method.  In the "complete" (as of this date at least) list added below
! # the RA60,80,81,82,RD52,53 entries are commented out.  If the new partition
! # setup is desired the ra.c driver has a table with entries for the old style
! # partition layout, simply delete the line with the drive type and edit this
! # file to delete the old entry and uncomment the new one, then reinstall this
! # file in /etc.  NOTE:  the RD54 partition sizes are the _same_ - all that is
! # needed is to use the 'g' partition rather than the 'c' partition.
  #
! # All NEW partition tables use 'c' as the whole drive now, more in keeping
! # with the 4BSD style.
  #
! 
! ra60|RA60|DEC RA60 Removable|OLD STYLE PARTITIONS:\
  	:ty=removable:ns#42:nt#4:nc#2382:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
***************
*** 291,308 ****
  	:pg#156570:bg#1024:fg#1024:\
  	:ph#399176:bh#1024:fh#1024:
  
! # RA80:
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RA80	16/217	16/217	13/217	13/217	9/217	11/217	9/217	11/217
! #
! # CPU	60	70	73	83	84
! # DISK
! # RA80	11/217	7/217	9/217	9/217	7/217
! #
! ra80|RA80|DEC RA80 Winchester:\
  	:ty=winchester:ns#31:nt#14:nc#559:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
--- 216,222 ----
  	:pg#156570:bg#1024:fg#1024:\
  	:ph#399176:bh#1024:fh#1024:
  
! ra80|RA80|DEC RA80 Winchester|OLD STYLE PARTITIONS:\
  	:ty=winchester:ns#31:nt#14:nc#559:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
***************
*** 310,327 ****
  	:pc#186888:bc#1024:fc#1024:\
  	:ph#236212:bh#1024:fh#1024:
  
! # RA81:
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RA81	26/357	26/357	21/357	21/357	14/357	18/357	14/357	17/357
! #
! # CPU	60	70	73	83	84
! # DISK
! # RA81	18/357	12/357	14/357	14/357	12/357
! #
! ra81|RA81|DEC RA81 Winchester:\
  	:ty=winchester:ns#51:nt#14:nc#1248:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
--- 224,230 ----
  	:pc#186888:bc#1024:fc#1024:\
  	:ph#236212:bh#1024:fh#1024:
  
! ra81|RA81|DEC RA81 Winchester|OLD STYLE PARTITIONS:\
  	:ty=winchester:ns#51:nt#14:nc#1248:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
***************
*** 332,426 ****
  	:pf#324382:bf#1024:ff#1024:\
  	:pg#647466:bg#1024:fg#1024:\
  	:ph#890072:bh#1024:fh#1024:
! ra82|RA82|DEC RA82 Winchester:\
! 	:ty=winchester:ns#58:nt#15:nc#1435:so:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#16720:bb#1024:fb#1024:\
! 	:pc#303710:bc#1024:fc#1024:\
! 	:pd#303710:bd#1024:fd#1024:\
! 	:pe#303710:be#1024:fe#1024:\
! 	:pf#303710:bf#1024:ff#1024:\
! 	:ph#1247450:bh#1024:fh#1024:
! #
! # Disks on KLESI
! #
! # RC25:
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RC25	15/31	15/31	13/31	13/31	9/31	11/31	9/31	11/31
! #
! # CPU	60	70	73	83	84
! # DISK
! # RC25	11/31	7/31	9/31	9/31	7/31
! #
! rc25|RC25:\
! 	:ty=winchester:ns#42:nt#4:nc#302:so:bt=rauboot:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
! 	:pb#10032:bb#1024:fb#1024:\
! 	:pc#24884:bc#1024:fc#1024:\
! 	:ph#50800:bh#1024:fh#1024:
! #
! #  Disks on RQDX Q-bus controllers
! #
! # RX50:
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RX50	1/5	1/5	1/5	1/5	1/5	1/5	1/5	1/5
! #
! # CPU	60	70	73	83	84
! # DISK
! # RX50	1/5	1/5	1/5	1/5	1/5
! #
! rx50|RX50|DEC RX50 floppy disk unit:\
! 	:ty=removable:ns#10:nt#1:nc#80:\
! 	:b0=/mdec/rauboot:\
! 	:ph#1638:bh#1024:fh#1024:
  
! #
! # RD51:
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RD51	1/36	1/36	1/36	1/36	1/36	1/36	1/36	1/36
! #
! # CPU	60	70	73	83	84
! # DISK
! # RD51	1/36	1/36	1/36	1/36	1/36
! #
! rd51|RD51|DEC RD51:\
! 	:ty=winchester:ns#18:nt#4:nc#300:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#9700:ba#1024:fa#1024:\
! 	:pe#7460:be#1024:fe#1024:\
! 	:pf#2240:bf#1024:ff#1024:\
! 	:pg#11868:bg#1024:fg#1024:\
! 	:ph#21568:bh#1024:fh#1024:
! #
! # RD52 and RD53:
! #
! # Note that interleaving factors are determined by controller (RQDX2 or
! # RQDX3) rather than disk type.  The names in the entries below are
! # combined with the controller so that newfs(8) can use the right
! # partition sizes and also look up the correct m/n numbers internally.
! #
! # File system free list parameters (m/n):
! # CPU		23	24	34	40	44	45	53	55
! # DISK
! # RQDX2*	2/36	2/36	2/36	2/36	2/36	2/36	2/36	2/36
! # RQDX3*	7/36	7/36	7/36	7/36	7/36	7/36	7/36	7/36
! #
! # CPU		60	70	73	83	84
! # DISK
! # RQDX2*	2/36	2/36	2/36	2/36	2/36
! # RQDX3*	7/36	7/36	7/36	7/36	7/36
! #
! rd52-rqdx2|RD52-RQDX2|rd52-rqdx3|RD52-RQDX3|DEC RD52:\
  	:ty=winchester:ns#18:nt#7:nc#480:so:\
  	:b0=/mdec/rauboot:\
  	:pa#9700:ba#1024:fa#1024:\
--- 235,254 ----
  	:pf#324382:bf#1024:ff#1024:\
  	:pg#647466:bg#1024:fg#1024:\
  	:ph#890072:bh#1024:fh#1024:
! 
! ra81x|RA81X|Extended DEC RA81 Winchester|OLD STYLE PARTITIONS:\
! 	:ty=winchester:ns#51:nt#14:nc#1815:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
! 	:pb#33440:bb#1024:fb#1024:\
! 	:pc#193282:bc#1024:fc#1024:\
! 	:pd#15884:bd#1024:fd#1024:\
! 	:pe#307200:be#1024:fe#1024:\
! 	:pf#728952:bf#1024:ff#1024:\
! 	:pg#1052036:bg#1024:fg#1024:\
! 	:ph#1294642:bh#1024:fh#1024:
  
! rd52|RD52|DEC RD52|OLD STYLE PARTITIONS:\
  	:ty=winchester:ns#18:nt#7:nc#480:so:\
  	:b0=/mdec/rauboot:\
  	:pa#9700:ba#1024:fa#1024:\
***************
*** 431,437 ****
  	:pf#2240:bf#1024:ff#1024:\
  	:pg#50748:bg#1024:fg#1024:\
  	:ph#60448:bh#1024:fh#1024:
! rd53-rqdx2|RD53-RQDX2|rd53-rqdx3|RD53-RQDX3|DEC RD53:\
  	:ty=winchester:ns#18:nt#8:nc#963:so:\
  	:b0=/mdec/rauboot:\
  	:pa#9700:ba#1024:fa#1024:\
--- 259,266 ----
  	:pf#2240:bf#1024:ff#1024:\
  	:pg#50748:bg#1024:fg#1024:\
  	:ph#60448:bh#1024:fh#1024:
! 
! rd53|RD53||DEC RD53|OLD STYLE PARTITIONS:\
  	:ty=winchester:ns#18:nt#8:nc#963:so:\
  	:b0=/mdec/rauboot:\
  	:pa#9700:ba#1024:fa#1024:\
***************
*** 442,466 ****
  	:pf#2240:bf#1024:ff#1024:\
  	:pg#128940:bg#1024:fg#1024:\
  	:ph#138640:bh#1024:fh#1024:
! rd54-rqdx3|RD54-RQDX3|DEC RD54:\
! 	:ty=winchester:ns#17:nt#15:nc#1226:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
  	:pb#16720:bb#1024:fb#1024:\
! 	:pc#278564:bc#1024:fc#1024:\
! 	:ph#311168:bh#1024:fh#1024:
! #
! # RX02 floppy disk drives
! #
! # File system free list parameters (m/n):
! # CPU	23	24	34	40	44	45	53	55
! # DISK
! # RX02	1/7	1/7	1/7	1/7	1/7	1/7	1/7	1/7
! #
! # CPU	60	70	73	83	84
! # DISK
! # RX02	1/7	1/7	1/7	1/7	1/7
! #
  rx02|RX02|DEC RX02:\
  	:ty=removable:se#128/256:ns#26:nt#1:nc#77:\
  	:pa#250:ba#1024:fa#1024:\
--- 271,588 ----
  	:pf#2240:bf#1024:ff#1024:\
  	:pg#128940:bg#1024:fg#1024:\
  	:ph#138640:bh#1024:fh#1024:
! 
! rc25|RC25|rcf25|RCF25|DEC RC25 and RC25F:\
! 	:ty=removable:ns#42:nt#4:nc#2382:so:\
  	:b0=/mdec/rauboot:\
  	:pa#15884:ba#1024:fa#1024:\
+ 	:pb#8360:bb#1024:fb#1024:\
+ 	:pc#50902:bc#1024:fc#1024:\
+ 	:pg#26658:bg#1024:fg#1024:
+ 
+ rd31|RD31|DEC RD31:\
+ 	:ty=winchester:ns#17:nt#4:nc#615:so:\
+ 	:b0=/mdec/rauboot:\
+ 	:pa#15884:ba#1024:fa#1024:\
+ 	:pb#8360:bb#1024:fb#1024:\
+ 	:pc#41560:bc#1024:fc#1024:\
+ 	:pg#17316:bg#1024:fg#1024:
+ 
+ rd32|RD32|DEC RD32:\
+ 	:ty=winchester:ns#17:nt#6:nc#820:so:\
+ 	:b0=/mdec/rauboot:\
+ 	:pa#15884:ba#1024:fa#1024:\
+ 	:pb#8360:bb#1024:fb#1024:\
+ 	:pc#83236:bc#1024:fc#1024:\
+ 	:pg#58992:bg#1024:fg#1024:
+ 
+ rd33|RD33|DEC RD33:\
+ 	:ty=winchester:ns#17:nt#7:nc#1170:so:\
+ 	:b0=/mdec/rauboot:\
+ 	:pa#15884:ba#1024:fa#1024:\
+ 	:pb#8360:bb#1024:fb#1024:\
+ 	:pc#138565:bc#1024:fc#1024:\
+ 	:pg#114321:bg#1024:fg#1024:
+ 
+ rd51|RD51|DEC RD51:\
+ 	:ty=winchester:ns#18:nt#4:nc#300:so:\
+ 	:b0=/mdec/rauboot:\
+ 	:pa#15884:ba#1024:fa#1024:\
+ 	:pb#5716:bb#1024:fb#1024:\
+ 	:pc#21600:bc#1024:fc#1024:
+ 
+ # rd52|RD52|DEC RD52|NEW STYLE PARTITIONS:\
+ # 	:ty=winchester:ns#18:nt#7:nc#480:so:\
+ # 	:b0=/mdec/rauboot:\
+ # 	:pa#15884:ba#1024:fa#1024:\
+ # 	:pb#8360:bb#1024:fb#1024:\
+ # 	:pc#60480:bc#1024:fc#1024:\
+ # 	:pg#36236:bg#1024:fg#1024:
+ 
+ # rd53|RD53|DEC RD53|NEW STYLE PARTITIONS:\
+ # 	:ty=winchester:ns#17:nt#8:nc#1024:so:\
+ # 	:b0=/mdec/rauboot:\
+ # 	:pa#15884:ba#1024:fa#1024:\
+ # 	:pb#8360:bb#1024:fb#1024:\
+ # 	:pc#138672:bc#1024:fc#1024:\
+ # 	:pg#114428:bg#1024:fg#1024:\
+ 
+ rd54|RD54|DEC RD54:\
+ 	:ty=winchester:ns#17:nt#15:nc#1221:so:\
+ 	:b0=/mdec/rauboot:\
+ 	:pa#15884:ba#1024:fa#1024:\
  	:pb#16720:bb#1024:fb#1024:\
! 	:pc#311200:bc#1024:fc#1024:\
! 	:pg#278596:bg#1024:fg#1024:
! 
! rx23|RX23|DEC RX23:\
! 	:ty=removable:ns#18:nt#2:nc#80:\
! 	:b0=/mdec/rauboot:\
! 	:pa#2880:ba#1024:fa#512:\
! 	:pc#2880:bc#1024:fc#512:
! 
! rx26|RX26|DEC RX26:\
! 	:ty=removable:ns#36:nt#2:nc#80:\
! 	:b0=/mdec/rauboot:\
! 	:pa#5760:ba#1024:fa#512:\
! 	:pc#5760:bc#1024:fc#512:
! 
! rx33|RX33|DEC RX33:\
! 	:ty=removable:ns#15:nt#2:nc#80:\
! 	:b0=/mdec/rauboot:\
! 	:pa#2400:ba#1024:fa#512:\
! 	:pc#2400:bc#1024:fc#512:
! 
! rx50|RX50|DEC RX50:\
! 	:ty=removable:ns#10:nt#1:nc#80:\
! 	:b0=/mdec/rauboot:\
! 	:pa#800:ba#1024:fa#512:\
! 	:pc#800:bc#1024:fc#512:
! 
! # ra60|RA60|DEC RA60|NEW STYLE PARTITIONS:\
! # 	:ty=removable:ns#42:nt#4:nc#2382:so:\
! # 	:b0=/mdec/rauboot:\
! # 	:pa#15884:ba#1024:fa#1024:\
! # 	:pb#16720:bb#1024:fb#1024:\
! # 	:pc#400176:bc#1024:fc#1024:\
! # 	:pd#245048:bd#1024:fd#1024:\
! # 	:pe#122524:be#1024:fe#1024:\
! # 	:pg#367572:bg#1024:fg#1024:\
! 
! ra70|RA70|DEC RA70:\
!         :ty=winchester:ns#33:nt#11:nc#1507:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#547041:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#287301:be#1024:fe#1024:\
!         :pg#514437:bg#1024:fg#1024:
! 
! ra71|RA71|DEC RA71:\
!         :ty=winchester:ns#51:nt#14:nc#1915:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#1367310:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#515506:bh#1024:fh#1024:
! 
! ra72|RA72|DEC RA72:\
!         :ty=winchester:ns#51:nt#20:nc#1915:so:\
!         :pa#15884:ba#1024:fa#1024:\
! 	:b0=/mdec/rauboot:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#1953300:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#1101496:bh#1024:fh#1024:
! 
! ra73|RA73|DEC RA73:\
!         :ty=winchester:ns#70:nt#21:nc#2667:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#3920490:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#3068686:bh#1024:fh#1024:
! 
! # ra80|RA80|DEC RA80|NEW STYLE PARTITIONS:\
! # 	:ty=winchester:ns#31:nt#14:nc#546:so:\
! # 	:b0=/mdec/rauboot:\
! # 	:pa#15884:ba#1024:fa#1024:\
! # 	:pb#16720:bb#1024:fb#1024:\
! # 	:pc#237212:bc#1024:fc#1024:\
! # 	:pg#204608:bg#1024:fg#1024:
! 
! # ra81|RA81|DEC RA81|NEW STYLE PARTITIONS:\
! # 	:ty=winchester:ns#51:nt#14:nc#1248:so:\
! # 	:b0=/mdec/rauboot:\
! # 	:pa#15884:ba#1024:fa#1024:\
! # 	:pb#16720:bb#1024:fb#1024:\
! # 	:pc#891072:bc#1024:fc#1024:\
! # 	:pd#227136:bd#1024:fd#1024:\
! # 	:pe#409600:be#1024:fe#1024:\
! # 	:pf#182464:bf#1024:ff#1024:\
! # 	:pg#819200:bg#1024:fg#1024:\
! # 	:ph#39268:bh#1024:fh#1024:
! 
! ra82|RA82|DEC RA82:\
! 	:ty=winchester:ns#57:nt#15:nc#1423:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#16720:bb#1024:fb#1024:\
! 	:pc#1216665:bc#1024:fc#1024:\
! 	:pd#227136:bd#1024:fd#1024:\
! 	:pe#409600:be#1024:fe#1024:\
! 	:pf#182464:bf#1024:ff#1024:\
! 	:pg#819200:bg#1024:fg#1024:\
! 	:ph#364861:bh#1024:fh#1024:
! 
! ra90|RA90|DEC RA90:\
! 	:ty=winchester:ns#69:nt#13:nc#2649:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#16720:bb#1024:fb#1024:\
! 	:pc#2376153:bc#1024:fc#1024:\
! 	:pd#227136:bd#1024:fd#1024:\
! 	:pe#409600:be#1024:fe#1024:\
! 	:pf#182464:bf#1024:ff#1024:\
! 	:pg#819200:bg#1024:fg#1024:\
! 	:ph#1524349:bh#1024:fh#1024:
! 
! ra92|RA92|DEC RA92:\
! 	:ty=winchester:ns#69:nt#13:nc#3279:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#16720:bb#1024:fb#1024:\
! 	:pc#2940951:bc#1024:fc#1024:\
! 	:pd#227136:bd#1024:fd#1024:\
! 	:pe#409600:be#1024:fe#1024:\
! 	:pf#182464:bf#1024:ff#1024:\
! 	:pg#819200:bg#1024:fg#1024:\
! 	:ph#2089147:bh#1024:fh#1024:
! 
! rz22|RZ22|DEC RZ22:\
! 	:ty=winchester:ns#33:nt#4:nc#776:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#8360:bb#1024:fb#1024:\
! 	:pc#102432:bc#1024:fc#1024:\
! 	:pg#78188:bg#1024:fg#1024:
! 
! rz23|RZ23|DEC RZ23:\
! 	:ty=winchester:ns#33:nt#8:nc#776:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#8360:bb#1024:fb#1024:\
! 	:pc#204864:bc#1024:fc#1024:\
! 	:pg#180620:bg#1024:fg#1024:\
! 
! rz23l|RZ23L|DEC RZ23L:\
! 	:ty=winchester:ns#39:nt#4:nc#1524:so:\
! 	:b0=/mdec/rauboot:\
! 	:pa#15884:ba#1024:fa#1024:\
! 	:pb#8360:bb#1024:fb#1024:\
! 	:pc#237588:bc#1024:fc#1024:\
! 	:pg#213344:bg#1024:fg#1024:\
! 
! rz24|RZ24|DEC RZ24:\
!         :ty=winchester:ns#38:nt#8:nc#1348:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#409792:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#150052:be#1024:fe#1024:\
!         :pg#377188:bg#1024:fg#1024:
! 
! rz24l|RZ24L|DEC RZ24L:\
!         :ty=winchester:ns#65:nt#4:nc#1818:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#479350:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#219610:be#1024:fe#1024:\
!         :pg#446746:bg#1024:fg#1024:
! 
! rz25|RZ25|DEC RZ25:\
!         :ty=winchester:ns#62:nt#9:nc#1476:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#832527:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#130590:bf#1024:ff#1024:\
!         :pg#799923:bg#1024:fg#1024:
! 
! rz26|RZ26|DEC RZ26:\
!         :ty=winchester:ns#57:nt#14:nc#2570:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#2050860:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
! 	:ph#1199056:bh#1024:fh#1024:
! 
! rz55|RZ55|DEC RZ55:\
!         :ty=winchester:ns#36:nt#15:nc#1224:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#649040:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#389300:be#1024:fe#1024:\
!         :pg#616436:bg#1024:fg#1024:
! 
! rz56|RZ56|DEC RZ56:\
!         :ty=winchester:ns#54:nt#15:nc#1632:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#1299174:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#447370:bh#1024:fh#1024:
! 
! rz57|RZ57|DEC RZ57:\
!         :ty=winchester:ns#71:nt#15:nc#1854:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16720:bb#1024:fb#1024:\
!         :pc#1954050:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#1102246:bh#1024:fh#1024:
! 
! rz58|RZ58|DEC RZ58:\
!         :ty=winchester:ns#85:nt#15:nc#2112:so:\
! 	:b0=/mdec/rauboot:\
!         :pa#15884:ba#1024:fa#1024:\
!         :pb#16270:bb#1024:fb#1024:\
!         :pc#2698061:bc#1024:fc#1024:\
!         :pd#227136:bd#1024:fd#1024:\
!         :pe#409600:be#1024:fe#1024:\
!         :pf#182464:bf#1024:ff#1024:\
!         :pg#819200:bg#1024:fg#1024:\
!         :ph#1846257:bh#1024:fh#1024:
  rx02|RX02|DEC RX02:\
  	:ty=removable:se#128/256:ns#26:nt#1:nc#77:\
  	:pa#250:ba#1024:fa#1024:\
