*** /old/src/sys/mdec/hpuboot.s	Wed May 23 13:00:20 1990
--- /usr/src/sys/mdec/hpuboot.s	Tue Mar 10 15:10:29 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 10.			/ major # from bdevsw[]
+ 
  / RP04/05/06 bootstrap.
  /
  / disk boot program to load and transfer
***************
*** 7,15 ****
  / assembled size must be <= 512; if > 494, the 16-byte a.out header
  / must be removed
  
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
- 
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
--- 9,14 ----
***************
*** 41,47 ****
--- 40,51 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 53,61 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 57,64 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 62,81 ****
  	blo	2b
  
  / initialize hp
! 	mov	$drive,*$hpcs2
! 	mov	$preset+go,*$hpcs1
! 	mov	$fmt22,*$hpof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 65,84 ----
  	blo	2b
  
  / initialize hp
! 	mov	csr,r1
! 	mov	unit,hpcs2(r1)
! 	mov	$preset+go,hpcs1(r1)
! 	mov	$fmt22,hpof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 152,159 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 155,164 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 199,205 ****
  go	= 1
  fmt22	= 10000
  
! hpcs1	= 176700
  hpda	= hpcs1+6
  hpcs2	= hpcs1+10
  hpds	= hpcs1+12
--- 204,210 ----
  go	= 1
  fmt22	= 10000
  
! hpcs1	= 0
  hpda	= hpcs1+6
  hpcs2	= hpcs1+10
  hpds	= hpcs1+12
***************
*** 216,236 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$22.*19.,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$hpca
  	clr	r0
  	div	$22.,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$hpda,r1
! 	mov	r0,(r1)
! 	mov	$buf,-(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 221,240 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$22.*19.,r0
! 	mov	csr,r3
! 	mov	r0,hpca(r3)
  	clr	r0
  	div	$22.,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$hpcs2,r3
! 	mov	unit,(r3)
! 	mov	r0,-(r3)
! 	mov	$buf,-(r3)
! 	mov	$WC,-(r3)
! 	mov	$read+go,-(r3)
  1:
! 	tstb	(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 237,242 ****
--- 241,248 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/rauboot.s	Wed May 23 13:00:28 1990
--- /usr/src/sys/mdec/rauboot.s	Tue Mar 10 15:11:06 1992
***************
*** 1,15 ****
  / RA bootstrap.
  /
  / disk boot program to load and transfer to a unix entry.
  / for use with 1 KB byte blocks, CLSIZE is 2.
  / NDIRIN is the number of direct inode addresses (currently 4)
- / assembled size must be <= 512; if > 494, the 16-byte a.out header
- / must be removed
  /
  / Note: this is a complex boot, but then MSCP is complex!!!!
  /
  / a.out header must be removed from boot block!
- /
  
  MSCPSIZE =	64.	/ One MSCP command packet is 64bytes long (need 2)
  
--- 1,15 ----
+ MAJOR = 5			/ major # from bdevsw[]
+ 
  / RA bootstrap.
  /
  / disk boot program to load and transfer to a unix entry.
  / for use with 1 KB byte blocks, CLSIZE is 2.
  / NDIRIN is the number of direct inode addresses (currently 4)
  /
  / Note: this is a complex boot, but then MSCP is complex!!!!
  /
+ / assembled size must be <= 512
  / a.out header must be removed from boot block!
  
  MSCPSIZE =	64.	/ One MSCP command packet is 64bytes long (need 2)
  
***************
*** 43,62 ****
  RALBNL =	112.	/ Logical block number low
  RALBNH = 	114.	/ Logical block number high
  
- raip	= 172150	/ initialization and polling register
- rasa	= 172152	/ address and status register
- 
- cyl	= 0.		/ cylinder offset of filesys to read from
- 
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
  /		  also, this is the single largest boot around to begin with.
  
- mxvboot	= 1		/ 0->normal, 1->adds check done by MXV11 boot ROMS
- 
- unit	= 0		/ # of unit to load boot from
- /
  / constants:
  /
  CLSIZE	= 2.			/ physical disk blocks per logical block
--- 43,53 ----
***************
*** 85,95 ****
  
  / establish sp, copy
  / program up to end of core.
! .if 	mxvboot
! 	0240			/ These two lines must be present or DEC
  	br	start		/ boot ROMs will refuse to run boot block!
- .endif
  start:
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
--- 76,87 ----
  
  / establish sp, copy
  / program up to end of core.
! 
! 	nop			/ These two lines must be present or DEC
  	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit		/ Save unit number passed by ROMs(and kernel)
+ 	mov	r1,raip		/ save csr passed by ROMs (and kernel)
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 101,107 ****
  
  / On error, restart from here.
  restart:
! 
  / clear core to make things clean
  2:
  	clr	(r0)+
--- 93,99 ----
  
  / On error, restart from here.
  restart:
! 	clr	r0
  / clear core to make things clean
  2:
  	clr	(r0)+
***************
*** 111,117 ****
  / RA initialize controller
  /
  	mov	$RASTEP1,r0
! 	mov	$raip,r1
  	clr	(r1)+			/ go through controller init seq.
  	mov	$icons,r2
  1:
--- 103,109 ----
  / RA initialize controller
  /
  	mov	$RASTEP1,r0
! 	mov	raip,r1
  	clr	(r1)+			/ go through controller init seq.
  	mov	$icons,r2
  1:
***************
*** 124,130 ****
  	mov	$ra+RACMDREF,*$ra+RACMDL
  	mov	$RASTCON,r0
  	jsr	pc,racmd
! 	mov	$unit,*$ra+RAUNIT	/ bring boot unit online
  	mov	$RAONLIN,r0
  	jsr	pc,racmd
  
--- 116,122 ----
  	mov	$ra+RACMDREF,*$ra+RACMDL
  	mov	$RASTCON,r0
  	jsr	pc,racmd
! 	mov	unit,*$ra+RAUNIT	/ bring boot unit online
  	mov	$RAONLIN,r0
  	jsr	pc,racmd
  
***************
*** 131,143 ****
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 123,134 ----
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 214,221 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	jmp	restart
  
--- 205,214 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit, r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	raip,r1
  	jsr	pc,*$0
  	jmp	restart
  
***************
*** 285,297 ****
  /
  racmd:
  	movb	r0,*$ra+RAOPCODE	/ fill in command type
! 	mov	$MSCPSIZE,r0
! 	mov	r0,*$ra+RARSPS		/ give controller struct sizes
! 	mov	r0,*$ra+RACMDS
! 	mov	$RASEMAP,r0
! 	mov	r0,*$ra+RARSPH		/ set mscp semaphores
! 	mov	r0,*$ra+RACMDH
! 	mov	raip,r0			/ tap controllers shoulder
  	mov	$ra+RACMDI,r0
  1:
  	tst	(r0)
--- 278,288 ----
  /
  racmd:
  	movb	r0,*$ra+RAOPCODE	/ fill in command type
! 	mov	$MSCPSIZE,*$ra+RARSPS	/ give controller struct sizes
! 	mov	$MSCPSIZE,*$ra+RACMDS
! 	mov	$RASEMAP,*$ra+RARSPH	/ set mscp semaphores
! 	mov	$RASEMAP,*$ra+RACMDH
! 	mov	*raip,r0		/ tap controllers shoulder
  	mov	$ra+RACMDI,r0
  1:
  	tst	(r0)
***************
*** 310,315 ****
--- 301,308 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0				/ unit number from ROMs
+ raip: 0				/ csr address from ROMs
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
***************
*** 317,320 ****
  buf = inod+INOSIZ
  bno = buf+BSIZE
  dno = bno+2
! ra = dno+2			/ ra mscp communications area (BIG!)
--- 310,313 ----
  buf = inod+INOSIZ
  bno = buf+BSIZE
  dno = bno+2
! ra = dno + 2			/ ra mscp communications area (BIG!)
*** /old/src/sys/mdec/rkuboot.s	Wed May 23 13:00:47 1990
--- /usr/src/sys/mdec/rkuboot.s	Tue Mar 10 15:11:24 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 6			/ major # from bdevsw[]
+ 
  / RK05 bootstrap.
  /
  / disk boot program to load and transfer
***************
*** 38,44 ****
--- 40,51 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 50,58 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 57,64 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 59,76 ****
  	blo	2b
  
  / initialize rk
! 	mov	$reset+go,*$rkcs	/ reset controller
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 65,82 ----
  	blo	2b
  
  / initialize rk
! 	mov	csr,r1
! 	mov	$reset+go,rkcs(r1)	/ reset controller
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 147,154 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 153,162 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 193,202 ****
  reset	= 0
  go	= 1
  
! rkcs	= 177404
! rkda	= 177412
! rkwc	= 177406
! rkba	= 177410
  / rk05 disk driver.
  / low order address in dno,
  / high order in r0.
--- 201,210 ----
  reset	= 0
  go	= 1
  
! rkcs	= 0		/ offset from base csr
! rkwc	= 2
! rkba	= 4
! rkda	= 6
  / rk05 disk driver.
  / low order address in dno,
  / high order in r0.
***************
*** 209,220 ****
  	div	$12.,r0
  	ash	$4,r0
  	bis	r1,r0
! 	mov	r0,*$rkda	/ stuff disc address
! 	mov	$buf,*$rkba	/ where to put it.
! 	mov	$WC,*$rkwc	/ yes sir, yes sir, three bags full
! 	mov	$read+go,*$rkcs	/ press the button
  1:
! 	tstb	*$rkcs
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 217,232 ----
  	div	$12.,r0
  	ash	$4,r0
  	bis	r1,r0
! 	mov	unit,r3
! 	ash	$13.,r3
! 	bis	r3,r0
! 	mov	csr,r3
! 	mov	r0,rkda(r3)	/ stuff disc address
! 	mov	$buf,rkba(r3)	/ where to put it.
! 	mov	$WC,rkwc(r3)	/ yes sir, yes sir, three bags full
! 	mov	$read+go,(r3)	/ rkcs - press the button
  1:
! 	tstb	(r3)		/ rkcs
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 221,226 ****
--- 233,240 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/rluboot.s	Wed May 23 13:00:55 1990
--- /usr/src/sys/mdec/rluboot.s	Tue Mar 10 15:11:43 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 7			/ major # from bdevsw[]
+ 
  / RL01/02 bootstrap.
  /
  / disk boot program to load and transfer
***************
*** 11,18 ****
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
  
- mxvboot= 1		/ 0->normal, 1->adds check done by MXV11 boot ROMS
- 
  / constants:
  CLSIZE	= 2.			/ physical disk blocks per logical block
  CLSHFT	= 1.			/ shift to multiply by CLSIZE
--- 13,18 ----
***************
*** 38,51 ****
  / entry is made by jsr pc,*$0
  / so return can be rts pc
  
! .if	mxvboot
! 	0240			/ These two lines must be present or DEC MXV-11
  	br	start		/ boot ROMs will refuse to run boot block!
- .endif
  
  / establish sp, copy
  / program up to end of core.
  start:
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
--- 38,51 ----
  / entry is made by jsr pc,*$0
  / so return can be rts pc
  
! 	nop			/ These two lines must be present or DEC MXV-11
  	br	start		/ boot ROMs will refuse to run boot block!
  
  / establish sp, copy
  / program up to end of core.
  start:
+ 	movb	r0,unit+1	/ unit # in high byte
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 57,65 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 57,64 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 77,89 ****
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 76,87 ----
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 160,167 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 158,167 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	movb	unit+1,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 218,229 ****
  /		buf: buffer to read data into
  /
  /	Register usage:
! /		r1,r2,r3: used, but saved
! /		r0,r4 used and clobbered
! rlcs	= 174400
! rlba	= 174402
! rlda	= 174404
! rlmp	= 174406
  
  READ	= 14
  SEEK	= 6
--- 218,229 ----
  /		buf: buffer to read data into
  /
  /	Register usage:
! /		r1,r2: used, but saved
! /		r0,r3,r4 used and clobbered
! rlcs	= 0		/ offset from base csr
! rlba	= 2
! rlda	= 4
! rlmp	= 6
  
  READ	= 14
  SEEK	= 6
***************
*** 236,243 ****
  rblk:
  	mov	r1,-(sp)
  	mov	r2,-(sp)
! 	mov	r3,-(sp)
! 	mov	$rlcs,r4	/ point to controller
  	mov	dno,r1
  .if	CLSIZE-1
  	ashc	$CLSHFT,r0	/ multiply by CLSIZE
--- 236,242 ----
  rblk:
  	mov	r1,-(sp)
  	mov	r2,-(sp)
! 	mov	csr,r4
  	mov	dno,r1
  .if	CLSIZE-1
  	ashc	$CLSHFT,r0	/ multiply by CLSIZE
***************
*** 244,253 ****
  .endif
  	div	$RLSECT,r0	/ cylinder number - surface
  	asl	r1		/ sector number
! 	mov	$RDHDR,(r4)	/ find where the heads are now
! 7:	bit	$CRDY,(r4)	/ wait for the STUPID!!! controller
! 	beq	7b
! 	mov	*$rlmp,r2
  	ash	$-7,r2
  	bic	$!777,r2	/ we are at this cylinder now
  	mov	r0,r3
--- 243,254 ----
  .endif
  	div	$RLSECT,r0	/ cylinder number - surface
  	asl	r1		/ sector number
! 	mov	unit,-(sp)
! 	bis	$RDHDR,(sp)
! 	mov	(sp)+,(r4)	/ find where the heads are now
! 7:	tstb	(r4)		/ wait for the STUPID!!! controller (CRDY=200)
! 	bpl	7b
! 	mov	rlmp(r4),r2
  	ash	$-7,r2
  	bic	$!777,r2	/ we are at this cylinder now
  	mov	r0,r3
***************
*** 259,290 ****
  	bis	$SEEKHI,r2	/ up
  	br	2f
  1:	ash	$7,r2
! 	bis	$SEEKLO,r2	/ down
  2:	mov	r0,r3		/ compute desired disk surface
  	bic	$!1,r3
  	ash	$4,r3
  	bis	r3,r2
! 	mov	r2,*$rlda	/ disk address for seek
! 	mov	$SEEK,(r4)	/ do the seek
! 7:	bit	$CRDY,(r4)	/ wait for the STUPID!!! controller
! 	beq	7b
  	ash	$6,r0		/ compute disk address for read
  	bis	r1,r0
! 	add	$6,r4		/ point to rlmp
  	mov	$WC,(r4)	/ word count for read
  	mov	r0,-(r4)	/ disk address for read
  	mov	$buf,-(r4)	/ buffer address for read
! 	mov	$READ,-(r4)	/ do the read
! 7:	bit	$CRDY,(r4)	/ wait for the STUPID!!! controller
! 	beq	7b
! 	mov	(sp)+,r3
  	mov	(sp)+,r2
  	mov	(sp)+,r1
- 9:
  	rts	pc
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
--- 260,295 ----
  	bis	$SEEKHI,r2	/ up
  	br	2f
  1:	ash	$7,r2
! 	inc	r2		/ down (SEEKLO = 1, so just do 'inc')
  2:	mov	r0,r3		/ compute desired disk surface
  	bic	$!1,r3
  	ash	$4,r3
  	bis	r3,r2
! 	mov	r2,rlda(r4)	/ disk address for seek
! 	mov	unit,-(sp)
! 	bis	$SEEK,(sp)
! 	mov	(sp)+,(r4)	/ do the seek
! 7:	tstb	(r4)		/ wait for the STUPID!!! controller
! 	bpl	7b
  	ash	$6,r0		/ compute disk address for read
  	bis	r1,r0
! 	add	$rlmp,r4	/ point to rlmp
  	mov	$WC,(r4)	/ word count for read
  	mov	r0,-(r4)	/ disk address for read
  	mov	$buf,-(r4)	/ buffer address for read
! 	mov	unit,-(sp)
! 	bis	$READ,(sp)
! 	mov	(sp)+,-(r4)	/ do the read
! 7:	tstb	(r4)		/ wait for the STUPID!!! controller
! 	bpl	7b
  	mov	(sp)+,r2
  	mov	(sp)+,r1
  	rts	pc
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/rm03uboot.s	Wed May 23 13:01:02 1990
--- /usr/src/sys/mdec/rm03uboot.s	Tue Mar 10 15:12:01 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 10.			/ major # from bdevsw[]
+ 
  / RM02/03/05 bootstrap
  /
  / disk boot program to load and transfer
***************
*** 8,15 ****
  / must be removed
  
  RM05	= 0		/ 0-> RM02/03, 1-> RM05
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
  
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
--- 10,15 ----
***************
*** 42,48 ****
--- 42,53 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 54,62 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 59,66 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 63,82 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 67,86 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	unit,rmcs2(r1)
! 	mov	$preset+go,rmcs1(r1)
! 	mov	$fmt22,rmof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 153,160 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 157,166 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 207,213 ****
  NTRAK	= 5.		/ RM02/03
  .endif
  
! rmcs1	= 176700
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 213,219 ----
  NTRAK	= 5.		/ RM02/03
  .endif
  
! rmcs1	= 0
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
***************
*** 224,244 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$rmca
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$rmda,r1
! 	mov	r0,(r1)
! 	mov	$buf,-(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 230,249 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! 	mov	csr,r3
! 	mov	r0,rmca(r3)
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	add	$rmcs2,r3
! 	mov	unit,(r3)
! 	mov	r0,-(r3)
! 	mov	$buf,-(r3)
! 	mov	$WC,-(r3)
! 	mov	$read+go,-(r3)
  1:
! 	tstb	(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 245,250 ****
--- 250,257 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/rm05uboot.s	Wed May 23 13:01:08 1990
--- /usr/src/sys/mdec/rm05uboot.s	Tue Mar 10 15:12:18 1992
***************
*** 1,3 ****
--- 1,4 ----
+ MAJOR = 10.			/ major # from bdevsw[]
  
  / RM02/03/05 bootstrap
  /
***************
*** 9,16 ****
  / must be removed
  
  RM05	= 1		/ 0-> RM02/03, 1-> RM05
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
  
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
--- 10,15 ----
***************
*** 43,49 ****
--- 42,53 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 55,63 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 59,66 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 64,83 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 67,86 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	unit,rmcs2(r1)
! 	mov	$preset+go,rmcs1(r1)
! 	mov	$fmt22,rmof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 154,161 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 157,166 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 208,214 ****
  NTRAK	= 5.		/ RM02/03
  .endif
  
! rmcs1	= 176700
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 213,219 ----
  NTRAK	= 5.		/ RM02/03
  .endif
  
! rmcs1	= 0
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
***************
*** 225,245 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$rmca
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$rmda,r1
! 	mov	r0,(r1)
! 	mov	$buf,-(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 230,249 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! 	mov	csr,r3
! 	mov	r0,rmca(r3)
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	add	$rmcs2,r3
! 	mov	unit,(r3)
! 	mov	r0,-(r3)
! 	mov	$buf,-(r3)
! 	mov	$WC,-(r3)
! 	mov	$read+go,-(r3)
  1:
! 	tstb	(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 246,251 ****
--- 250,257 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/si51uboot.s	Wed May 23 13:01:20 1990
--- /usr/src/sys/mdec/si51uboot.s	Tue Mar 10 15:12:38 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 10.			/ major # from bdevsw[]
+ 
  / Fujitsu Eagle (2351A) on SI 6100 Controller bootstrap
  / Actually just a small modification of the RM02/03/05 bootstrap
  /
***************
*** 8,17 ****
  / assembled size must be <= 512; if > 494, the 16-byte a.out header
  / must be removed
  
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
- address = 176700
- 
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
--- 10,15 ----
***************
*** 43,49 ****
--- 41,52 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 55,63 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 58,65 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 64,83 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 66,85 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	unit,rmcs2(r1)
! 	mov	$preset+go,rmcs1(r1)
! 	mov	$fmt22,rmof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 154,161 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 156,165 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 203,209 ****
  NSECT	= 48.
  NTRAK	= 20.		/ SI 6100 with Fujitsu 2351A
  
! rmcs1	= address
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 207,213 ----
  NSECT	= 48.
  NTRAK	= 20.		/ SI 6100 with Fujitsu 2351A
  
! rmcs1	= 0
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
***************
*** 220,240 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$rmca
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$rmda,r1
! 	mov	r0,(r1)
! 	mov	$buf,-(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 224,243 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! 	mov	csr,r3
! 	mov	r0,rmca(r3)
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	add	$rmcs2,r3
! 	mov	unit,(r3)
! 	mov	r0,-(r3)
! 	mov	$buf,-(r3)
! 	mov	$WC,-(r3)
! 	mov	$read+go,-(r3)
  1:
! 	tstb	(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 241,246 ****
--- 244,251 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/si94uboot.s	Wed May 23 13:01:27 1990
--- /usr/src/sys/mdec/si94uboot.s	Tue Mar 10 15:12:56 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 10.			/ major # from bdevsw[]
+ 
  / Fujitsu 160 on SI 9400 or Emulex SC01B Controller bootstrap
  / Actually just a small modification of the RM02/03/05 bootstrap
  /
***************
*** 8,17 ****
  / assembled size must be <= 512; if > 494, the 16-byte a.out header
  / must be removed
  
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
- address = 176700
- 
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
--- 10,15 ----
***************
*** 43,49 ****
--- 41,52 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 55,63 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 58,65 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 64,83 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 66,85 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	unit,rmcs2(r1)
! 	mov	$preset+go,rmcs1(r1)
! 	mov	$fmt22,rmof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 154,161 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 156,165 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 203,209 ****
  NSECT	= 32.
  NTRAK	= 10.		/ SI 9400 with Fujitsu 160
  
! rmcs1	= address
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 207,213 ----
  NSECT	= 32.
  NTRAK	= 10.		/ SI 9400 with Fujitsu 160
  
! rmcs1	= 0
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
***************
*** 220,240 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$rmca
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	mov	$rmda,r1
! 	mov	r0,(r1)
! 	mov	$buf,-(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 224,243 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! 	mov	csr,r3
! 	mov	r0,rmca(r3)
  	clr	r0
  	div	$NSECT,r0
  	swab	r0
  	bis	r1,r0
! 	add	$rmcs2,r3
! 	mov	unit,(r3)
! 	mov	r0,-(r3)
! 	mov	$buf,-(r3)
! 	mov	$WC,-(r3)
! 	mov	$read+go,-(r3)
  1:
! 	tstb	(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 241,246 ****
--- 244,251 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/mdec/si95uboot.s	Wed May 23 13:01:34 1990
--- /usr/src/sys/mdec/si95uboot.s	Tue Mar 10 15:13:12 1992
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 9.			/ major # from bdevsw[]
+ 
  / CDC 9766 disk on SI 9500 Controller bootstrap
  /
  / disk boot program to load and transfer
***************
*** 7,15 ****
  / assembled size must be <= 512; if > 494, the 16-byte a.out header
  / must be removed
  
- drive	= 0		/ unit to boot from
- cyl	= 0.		/ cylinder offset of filesys to read from
- 
  / options: none.  all options of reading an alternate name or echoing to
  /		  the keyboard had to be removed to make room for the 
  /		  code which understands the new directory structure on disc
--- 9,14 ----
***************
*** 43,49 ****
--- 42,53 ----
  
  / establish sp, copy
  / program up to end of core.
+ 
+ 	nop			/ These two lines must be present or DEC
+ 	br	start		/ boot ROMs will refuse to run boot block!
  start:
+ 	mov	r0,unit
+ 	mov	r1,csr
  	mov	$..,sp
  	mov	sp,r1
  	clr	r0
***************
*** 55,63 ****
  
  / On error, restart from here.
  restart:
- 
- / clear core to make things clean
  	clr	r0
  2:
  	clr	(r0)+
  	cmp	r0,sp
--- 59,66 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 64,81 ****
  	blo	2b
  
  / initialize disk
! 	mov	$reset,*$sicnr
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
- 	mov	$bootlen,r5		/ len = strlen(pathnamecomponent)
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,r5			/ if (len == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
--- 67,84 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	$reset,sicnr(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
  	jsr	pc,iget
  	clr	r2			/ offset
  again:
  	jsr	pc,readdir
  	beq	restart			/ error - restart
  	mov	4(r0),r4		/ dp->d_namlen
! 	cmp	r4,$bootlen		/ if (bootlen == dp->d_namlen)
  	bne	again			/    nope, go try next entry
  	mov	r0,r3
  	add	$6,r3			/ r3 = dp->d_name
***************
*** 152,159 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 155,164 ----
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	unit,r3
! 	bis	$MAJOR\<8.,r3
  	mov	ENDCORE-CHECKWORD, r2
+ 	mov	csr,r1
  	jsr	pc,*$0
  	br	restart
  
***************
*** 200,206 ****
  NSECT	= 32.
  NTRAK	= 19.		/ 9766
  
! sicnr	= 176700
  siwcr	= sicnr+2
  sipcr	= sicnr+4
  sihsr	= sicnr+6
--- 205,211 ----
  NSECT	= 32.
  NTRAK	= 19.		/ 9766
  
! sicnr	= 0
  siwcr	= sicnr+2
  sipcr	= sicnr+4
  sihsr	= sicnr+6
***************
*** 218,258 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
  .if	shared
  	mov	r0,-(sp)		/ push onto stack
! 	mov	*$siscr,r0		/ load shared computer register
  	bit	$200,r0			/ see if grant bit set
  	bne	1f			/ if so, is dual ported
! 	mov	*$sierr,r0		/ move error register to r0
  	bic	$037777,r0		/ clear all but top two bits
  	cmp	$140000,r0		/ see if contention error
  	bne	2f			/ if not, not dual ported
  1:
! 	bit	$200,*$siscr		/ test for grant
  	bne	2f			/ if set, go do command
! 	clr	*$sicnr			/ issue logic master clear
! 	mov	$1,*$siscr		/ request grant
  	br	1b			/ loop until grant
  2:
  	mov	(sp)+,r0		/ pop off stack
  .endif
! 	mov	r0,*$sipcr
! 	mov	$drive,r0
  	ash	$10.,r0
! 	add	r0,*$sipcr		/ port and cylinder
  	clr	r0
  	div	$NSECT,r0
  	ash	$5.,r0
  	bis	r0,r1
! 	mov	r1,*$sihsr		/ head and sector
! 	mov	$buf,*$simar		/ buffer address
! 	mov	$WC,*$siwcr		/ word count
! 	mov	$read+go,*$sicnr	/ read it
  1:
! 	tstb	*$sicnr
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 223,261 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$NSECT*NTRAK,r0
! 	mov	csr,r3
  .if	shared
  	mov	r0,-(sp)		/ push onto stack
! 	mov	siscr(r3),r0		/ load shared computer register
  	bit	$200,r0			/ see if grant bit set
  	bne	1f			/ if so, is dual ported
! 	mov	sierr(r3),r0		/ move error register to r0
  	bic	$037777,r0		/ clear all but top two bits
  	cmp	$140000,r0		/ see if contention error
  	bne	2f			/ if not, not dual ported
  1:
! 	bit	$200,siscr(r3)		/ test for grant
  	bne	2f			/ if set, go do command
! 	clr	sicnr(r3)		/ issue logic master clear
! 	mov	$1,siscr(r3)		/ request grant
  	br	1b			/ loop until grant
  2:
  	mov	(sp)+,r0		/ pop off stack
  .endif
! 	mov	r0,sipcr(r3)		/ port and cylinder
! 	mov	unit,r0
  	ash	$10.,r0
! 	add	r0,sipcr(r3)		/ add in unit number
  	clr	r0
  	div	$NSECT,r0
  	ash	$5.,r0
  	bis	r0,r1
! 	mov	r1,sihsr(r3)		/ head and sector
! 	mov	$buf,simar(r3)		/ buffer address
! 	mov	$WC,siwcr(r3)		/ word count
! 	mov	$read+go,sicnr(r3)	/ read it
  1:
! 	tstb	sicnr(r3)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 259,264 ****
--- 262,269 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /old/src/sys/pdp/conf.c	Sun Jul  1 12:33:05 1990
--- /usr/src/sys/pdp/conf.c	Sun Dec 22 17:55:07 1991
***************
*** 3,9 ****
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)conf.c	1.1 (2.10BSD Berkeley) 12/1/86
   */
  
  #include "param.h"
--- 3,9 ----
   * All rights reserved.  The Berkeley software License Agreement
   * specifies the terms and conditions for redistribution.
   *
!  *	@(#)conf.c	2.0 (2.11BSD Berkeley) 9/22/91
   */
  
  #include "param.h"
***************
*** 18,44 ****
  
  int	nulldev();
  int	nodev();
  
  #include "rk.h"
  #if NRK > 0
! int	rkopen(), rkstrategy(), rkread(), rkwrite();
  #define	rkclose		nulldev
  #else
  #define	rkopen		nodev
  #define	rkclose		nodev
  #define	rkstrategy	nodev
- #define	rkread		nodev
- #define	rkwrite		nodev
  #endif
  
  #include "tm.h"
  #if NTM > 0
! int	tmopen(), tmclose(), tmread(), tmwrite(), tmioctl(), tmstrategy();
  #else
  #define	tmopen		nodev
  #define	tmclose		nodev
- #define	tmread		nodev
- #define	tmwrite		nodev
  #define	tmioctl		nodev
  #define	tmstrategy	nodev
  #endif
--- 18,41 ----
  
  int	nulldev();
  int	nodev();
+ int	rawread(), rawwrite();
  
  #include "rk.h"
  #if NRK > 0
! int	rkopen(), rkstrategy();
  #define	rkclose		nulldev
  #else
  #define	rkopen		nodev
  #define	rkclose		nodev
  #define	rkstrategy	nodev
  #endif
  
  #include "tm.h"
  #if NTM > 0
! int	tmopen(), tmclose(), tmioctl(), tmstrategy();
  #else
  #define	tmopen		nodev
  #define	tmclose		nodev
  #define	tmioctl		nodev
  #define	tmstrategy	nodev
  #endif
***************
*** 45,51 ****
  
  #include "hk.h"
  #if NHK > 0
! int	hkopen(), hkstrategy(), hkread(), hkwrite(), hkroot();
  #define	hkclose		nulldev
  #else
  #define	hkopen		nodev
--- 42,48 ----
  
  #include "hk.h"
  #if NHK > 0
! int	hkopen(), hkstrategy(), hkroot();
  #define	hkclose		nulldev
  #else
  #define	hkopen		nodev
***************
*** 52,64 ****
  #define	hkclose		nodev
  #define	hkroot		nulldev
  #define	hkstrategy	nodev
- #define	hkread		nodev
- #define	hkwrite		nodev
  #endif
  
  #include "xp.h"
  #if NXPD > 0
! int	xpopen(), xpstrategy(), xpread(), xpwrite(), xproot();
  #define	xpclose		nulldev
  #else
  #define	xpopen		nodev
--- 49,59 ----
  #define	hkclose		nodev
  #define	hkroot		nulldev
  #define	hkstrategy	nodev
  #endif
  
  #include "xp.h"
  #if NXPD > 0
! int	xpopen(), xpstrategy(), xproot();
  #define	xpclose		nulldev
  #else
  #define	xpopen		nodev
***************
*** 65,77 ****
  #define	xpclose		nodev
  #define	xproot		nulldev
  #define	xpstrategy	nodev
- #define	xpread		nodev
- #define	xpwrite		nodev
  #endif
  
  #include "br.h"
  #if NBR > 0
! int	bropen(), brstrategy(), brread(), brwrite(), brroot();
  #define	brclose		nulldev
  #else
  #define	bropen		nodev
--- 60,70 ----
  #define	xpclose		nodev
  #define	xproot		nulldev
  #define	xpstrategy	nodev
  #endif
  
  #include "br.h"
  #if NBR > 0
! int	bropen(), brstrategy(), brroot();
  #define	brclose		nulldev
  #else
  #define	bropen		nodev
***************
*** 78,95 ****
  #define	brclose		nodev
  #define	brroot		nulldev
  #define	brstrategy	nodev
- #define	brread		nodev
- #define	brwrite		nodev
  #endif
  
  #include "ht.h"
  #if NHT > 0
! int	htopen(), htclose(), htread(), htwrite(), htstrategy(), htioctl();
  #else
  #define	htopen		nodev
  #define	htclose		nodev
- #define	htread		nodev
- #define	htwrite		nodev
  #define	htioctl		nodev
  #define	htstrategy	nodev
  #endif
--- 71,84 ----
  #define	brclose		nodev
  #define	brroot		nulldev
  #define	brstrategy	nodev
  #endif
  
  #include "ht.h"
  #if NHT > 0
! int	htopen(), htclose(), htstrategy(), htioctl();
  #else
  #define	htopen		nodev
  #define	htclose		nodev
  #define	htioctl		nodev
  #define	htstrategy	nodev
  #endif
***************
*** 96,102 ****
  
  #include "rl.h"
  #if NRL > 0
! int	rlopen(), rlstrategy(), rlread(), rlwrite(), rlroot();
  #define	rlclose		nulldev
  #else
  #define	rlroot		nulldev
--- 85,91 ----
  
  #include "rl.h"
  #if NRL > 0
! int	rlopen(), rlstrategy(), rlroot();
  #define	rlclose		nulldev
  #else
  #define	rlroot		nulldev
***************
*** 103,120 ****
  #define	rlopen		nodev
  #define	rlclose		nodev
  #define	rlstrategy	nodev
- #define	rlread		nodev
- #define	rlwrite		nodev
  #endif
  
  #include "ts.h"
  #if NTS > 0
! int	tsopen(), tsclose(), tsread(), tswrite(), tsstrategy(), tsioctl();
  #else
  #define	tsopen		nodev
  #define	tsclose		nodev
- #define	tsread		nodev
- #define	tswrite		nodev
  #define	tsioctl		nodev
  #define	tsstrategy	nodev
  #endif
--- 92,105 ----
  #define	rlopen		nodev
  #define	rlclose		nodev
  #define	rlstrategy	nodev
  #endif
  
  #include "ts.h"
  #if NTS > 0
! int	tsopen(), tsclose(), tsstrategy(), tsioctl();
  #else
  #define	tsopen		nodev
  #define	tsclose		nodev
  #define	tsioctl		nodev
  #define	tsstrategy	nodev
  #endif
***************
*** 121,132 ****
  
  #include "tms.h"
  #if NTMS > 0
! int	tmscpopen(), tmscpclose(), tmscpread(), tmscpwrite(), tmscpstrategy(), tmscpioctl();
  #else
  #define	tmscpopen	nodev
  #define	tmscpclose	nodev
- #define	tmscpread	nodev
- #define	tmscpwrite	nodev
  #define	tmscpioctl	nodev
  #define	tmscpstrategy	nodev
  #endif
--- 106,115 ----
  
  #include "tms.h"
  #if NTMS > 0
! int	tmscpopen(), tmscpclose(), tmscpstrategy(), tmscpioctl();
  #else
  #define	tmscpopen	nodev
  #define	tmscpclose	nodev
  #define	tmscpioctl	nodev
  #define	tmscpstrategy	nodev
  #endif
***************
*** 133,139 ****
  
  #include "si.h"
  #if NSI > 0
! int	siopen(), sistrategy(), siread(), siwrite(), siroot();
  #define	siclose		nulldev
  #else
  #define	siopen		nodev
--- 116,122 ----
  
  #include "si.h"
  #if NSI > 0
! int	siopen(), sistrategy(), siroot();
  #define	siclose		nulldev
  #else
  #define	siopen		nodev
***************
*** 140,152 ****
  #define	siclose		nodev
  #define	siroot		nulldev
  #define	sistrategy	nodev
- #define	siread		nodev
- #define	siwrite		nodev
  #endif
  
  #include "ra.h"
  #if NRAC > 0
! int	rastrategy(), raread(), rawrite(), raroot(), raopen();
  #define	raclose		nulldev
  #else
  #define	raopen		nodev
--- 123,133 ----
  #define	siclose		nodev
  #define	siroot		nulldev
  #define	sistrategy	nodev
  #endif
  
  #include "ra.h"
  #if NRAC > 0
! int	rastrategy(), raroot(), raopen();
  #define	raclose		nulldev
  #else
  #define	raopen		nodev
***************
*** 153,172 ****
  #define	raclose		nodev
  #define	raroot		nulldev
  #define	rastrategy	nodev
- #define	raread		nodev
- #define	rawrite		nodev
  #endif
  
  #include "rx.h"
  #if NRX > 0
! int	rxopen(), rxstrategy(), rxread(), rxwrite(), rxioctl();
  #define	rxclose		nulldev
  #else
  #define	rxopen		nodev
  #define	rxclose		nodev
  #define	rxstrategy	nodev
- #define	rxread		nodev
- #define	rxwrite		nodev
  #define	rxioctl		nodev
  #endif
  
--- 134,149 ----
  #define	raclose		nodev
  #define	raroot		nulldev
  #define	rastrategy	nodev
  #endif
  
  #include "rx.h"
  #if NRX > 0
! int	rxopen(), rxstrategy(), rxioctl();
  #define	rxclose		nulldev
  #else
  #define	rxopen		nodev
  #define	rxclose		nodev
  #define	rxstrategy	nodev
  #define	rxioctl		nodev
  #endif
  
***************
*** 274,286 ****
  
  #include "dr.h"
  #if NDR > 0
! int	dropen(), drclose(), drread(), drwrite(), drioctl();
  #else
  #define	dropen		nodev
  #define	drclose		nodev
- #define	drread		nodev
- #define	drwrite		nodev
  #define	drioctl		nodev
  #endif
  
  #include "dhu.h"
--- 251,262 ----
  
  #include "dr.h"
  #if NDR > 0
! int	dropen(), drclose(), drioctl(), drstrategy();
  #else
  #define	dropen		nodev
  #define	drclose		nodev
  #define	drioctl		nodev
+ #define	drstrategy	nodev
  #endif
  
  #include "dhu.h"
***************
*** 297,302 ****
--- 273,294 ----
  #define	dhu_tty		((struct tty *) NULL)
  #endif
  
+ #include "dhv.h"
+ #if NDHV > 0
+ int	dhvopen(), dhvclose(), dhvread(), dhvwrite(), dhvioctl(), dhvstop();
+ int	dhvselect();
+ extern struct tty	dhv_tty[];
+ #else
+ #define	dhvopen		nodev
+ #define	dhvclose	nodev
+ #define	dhvread		nodev
+ #define	dhvwrite	nodev
+ #define	dhvioctl	nodev
+ #define	dhvstop		nodev
+ #define	dhvselect	nodev
+ #define	dhv_tty		((struct tty *) NULL)
+ #endif
+ 
  #include "dn.h"
  #if NDN > 0
  int	dnopen(), dnclose(), dnwrite();
***************
*** 322,396 ****
  /* cn = 0 */
  	cnopen,		cnclose,	cnread,		cnwrite,
  	cnioctl,	nulldev,	cons,		ttselect,
  /* mem = 1 */
  	nulldev,	nulldev,	mmread,		mmwrite,
  	nodev,		nulldev,	0,		mmselect,
  /* dz = 2 */
  	dzopen,		dzclose,	dzread,		dzwrite,
  	dzioctl,	dzstop,		dz_tty,		ttselect,
  /* dh = 3 */
  	dhopen,		dhclose,	dhread,		dhwrite,
  	dhioctl,	dhstop,		dh11,		ttselect,
  /* dhu = 4 */
  	dhuopen,	dhuclose,	dhuread,	dhuwrite,
  	dhuioctl,	dhustop,	dhu_tty,	ttselect,
  /* lp = 5 */
  	lpopen,		lpclose,	nodev,		lpwrite,
  	nodev,		nulldev,	0,		nodev,
  /* ht = 6 */
! 	htopen,		htclose,	htread,		htwrite,
  	htioctl,	nulldev,	0,		seltrue,
  /* tm = 7 */
! 	tmopen,		tmclose,	tmread,		tmwrite,
  	tmioctl,	nulldev,	0,		seltrue,
  /* ts = 8 */
! 	tsopen,		tsclose,	tsread,		tswrite,
  	tsioctl,	nulldev,	0,		seltrue,
  /* tty = 9 */
  	syopen,		nulldev,	syread,		sywrite,
  	syioctl,	nulldev,	0,		syselect,
  /* ptc = 10 */
  	ptcopen,	ptcclose,	ptcread,	ptcwrite,
  	ptyioctl,	nulldev,	pt_tty,		ptcselect,
  /* pts = 11 */
  	ptsopen,	ptsclose,	ptsread,	ptswrite,
  	ptyioctl,	ptsstop,	pt_tty,		ttselect,
  /* dr = 12 */
! 	dropen,		drclose,	drread,		drwrite,
  	drioctl,	nulldev,	0,		seltrue,
  /* hk = 13 */
! 	hkopen,		hkclose,	hkread,		hkwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* ra = 14 */
! 	raopen,		raclose,	raread,		rawrite,
  	nodev,		nulldev,	0,		seltrue,
  /* rk = 15 */
! 	rkopen,		rkclose,	rkread,		rkwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* rl = 16 */
! 	rlopen,		rlclose,	rlread,		rlwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* rx = 17 */
! 	rxopen,		rxclose,	rxread,		rxwrite,
  	rxioctl,	nulldev,	0,		seltrue,
  /* si = 18 */
! 	siopen,		siclose,	siread,		siwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* xp = 19 */
! 	xpopen,		xpclose,	xpread,		xpwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* br = 20 */
! 	bropen,		brclose,	brread,		brwrite,
  	nodev,		nulldev,	0,		seltrue,
  /* dn = 21 */
  	dnopen,		dnclose,	dnread,		dnwrite,
  	dnioctl,	nulldev,	0,		seltrue,
  /* log = 22 */
  	logopen,	logclose,	logread,	nodev,
  	logioctl,	nulldev,	0,		logselect,
  /* tmscp = 23 (tu81/tk50) */
! 	tmscpopen,	tmscpclose,	tmscpread,	tmscpwrite,
  	tmscpioctl,	nulldev,	0,		seltrue,
  };
  
  int	nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]);
--- 314,416 ----
  /* cn = 0 */
  	cnopen,		cnclose,	cnread,		cnwrite,
  	cnioctl,	nulldev,	cons,		ttselect,
+ 	nulldev,
  /* mem = 1 */
  	nulldev,	nulldev,	mmread,		mmwrite,
  	nodev,		nulldev,	0,		mmselect,
+ 	nulldev,
  /* dz = 2 */
  	dzopen,		dzclose,	dzread,		dzwrite,
  	dzioctl,	dzstop,		dz_tty,		ttselect,
+ 	nulldev,
  /* dh = 3 */
  	dhopen,		dhclose,	dhread,		dhwrite,
  	dhioctl,	dhstop,		dh11,		ttselect,
+ 	nulldev,
  /* dhu = 4 */
  	dhuopen,	dhuclose,	dhuread,	dhuwrite,
  	dhuioctl,	dhustop,	dhu_tty,	ttselect,
+ 	nulldev,
  /* lp = 5 */
  	lpopen,		lpclose,	nodev,		lpwrite,
  	nodev,		nulldev,	0,		nodev,
+ 	nulldev,
  /* ht = 6 */
! 	htopen,		htclose,	rawread,	rawwrite,
  	htioctl,	nulldev,	0,		seltrue,
+ 	htstrategy,
  /* tm = 7 */
! 	tmopen,		tmclose,	rawread,	rawwrite,
  	tmioctl,	nulldev,	0,		seltrue,
+ 	tmstrategy,
  /* ts = 8 */
! 	tsopen,		tsclose,	rawread,	rawwrite,
  	tsioctl,	nulldev,	0,		seltrue,
+ 	tsstrategy,
  /* tty = 9 */
  	syopen,		nulldev,	syread,		sywrite,
  	syioctl,	nulldev,	0,		syselect,
+ 	nulldev,
  /* ptc = 10 */
  	ptcopen,	ptcclose,	ptcread,	ptcwrite,
  	ptyioctl,	nulldev,	pt_tty,		ptcselect,
+ 	nulldev,
  /* pts = 11 */
  	ptsopen,	ptsclose,	ptsread,	ptswrite,
  	ptyioctl,	ptsstop,	pt_tty,		ttselect,
+ 	nulldev,
  /* dr = 12 */
! 	dropen,		drclose,	rawread,	rawwrite,
  	drioctl,	nulldev,	0,		seltrue,
+ 	drstrategy,
  /* hk = 13 */
! 	hkopen,		hkclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	hkstrategy,
  /* ra = 14 */
! 	raopen,		raclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	rastrategy,
  /* rk = 15 */
! 	rkopen,		rkclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	rkstrategy,
  /* rl = 16 */
! 	rlopen,		rlclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	rlstrategy,
  /* rx = 17 */
! 	rxopen,		rxclose,	rawread,	rawwrite,
  	rxioctl,	nulldev,	0,		seltrue,
+ 	rxstrategy,
  /* si = 18 */
! 	siopen,		siclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	sistrategy,
  /* xp = 19 */
! 	xpopen,		xpclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	xpstrategy,
  /* br = 20 */
! 	bropen,		brclose,	rawread,	rawwrite,
  	nodev,		nulldev,	0,		seltrue,
+ 	brstrategy,
  /* dn = 21 */
  	dnopen,		dnclose,	dnread,		dnwrite,
  	dnioctl,	nulldev,	0,		seltrue,
+ 	nulldev,
  /* log = 22 */
  	logopen,	logclose,	logread,	nodev,
  	logioctl,	nulldev,	0,		logselect,
+ 	nulldev,
  /* tmscp = 23 (tu81/tk50) */
! 	tmscpopen,	tmscpclose,	rawread,	rawwrite,
  	tmscpioctl,	nulldev,	0,		seltrue,
+ 	tmscpstrategy,
+ /* dhv = 24 */
+ 	dhvopen,	dhvclose,	dhvread,	dhvwrite,
+ 	dhvioctl,	dhvstop,	dhv_tty,	dhvselect,
+ 	nulldev,
  };
  
  int	nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]);
