/boot,/mdec,[T]MSCP (Part 4 of 22)

Steven M. Schultz sms at wlv.imsd.contel.com
Sat May 18 16:12:42 AEST 1991


Subject: Part 4 of 22 /boot,/mdec,[T]MSCP updates
Index:	/sys/<many>, /usr/src/etc/<several> 2.11BSD

Description:
Repeat-By:
Fix:
	See part 0 (the README) for the Description, the Reason and
	the instructions on how update your system.

This is part 4 of 22

ALL of the bootblocks in /sys/mdec were modified to use the unit and
controller CSR passed in R0 and R1 by the boot roms.  Also, all of
the bootblocks had the "nop; br ." sequence added at the beginning, this
is required by some of the DEC boot roms.

The bootstraps also incorporate the major device number in them now and
pass this information thru to 'boot' and the other standalone utilities.

*** /usr/src/sys/mdec.old/bruboot.s	Tue Jun  5 10:21:38 1990
--- /usr/src/sys/mdec/bruboot.s	Wed Apr 24 10:08:03 1991
***************
*** 1,9 ****
  / BR bootstrap. supports the 32 sec/trk, 19 trk/cyl EATON 1537/1711 
! /	Controller and 1538D drive. 
! /	NOTE: there isn't enough room at present to autoadapt
! / 	      to the 22 sectored & 5 cylinder 1538A,B,C drive types. The
! /	      appropriate "div" instructions have to be modified to support
! /	      these drive types.
  /
  / disk boot program to load and transfer
  / to a unix entry.
--- 1,7 ----
+ MAJOR = 11.			/ major # from bdevsw[]
+ 
  / BR bootstrap. supports the 32 sec/trk, 19 trk/cyl EATON 1537/1711 
! /	Controller and 1538A/B/C/D drive. 
  /
  / disk boot program to load and transfer
  / to a unix entry.
***************
*** 12,19 ****
  / assembled size must be <= 512; if > 494, the 16-byte a.out header
  / must be removed
  
- 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
--- 10,15 ----
***************
*** 45,51 ****
--- 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:
+ 	movb	r0,unit+1	/ save the unit in high byte (for brcs)
+ 	mov	r1,csr		/  and csr from the ROMs (not base addr!)
  	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
--- 58,65 ----
  
  / On error, restart from here.
  restart:
  	clr	r0
+ / clear core to make things clean
  2:
  	clr	(r0)+
  	cmp	r0,sp
***************
*** 66,72 ****
  	blo	2b
  
  / initialize controller
! 	clr	*$brcs			/ clr addr extension bits, sel drive 0
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 66,86 ----
  	blo	2b
  
  / initialize controller
! 	mov	csr,r1
! 	mov	unit,brcs(r1)		/ clr addr extension bits, select unit
! 	mov	$32.,r0			/ default # of sec/track
! 	bit	$2400,brae(r1)		/ is this a 22 sec/track drive
! 	beq	9f
! 	mov	$22.,r0
! 9:
! 	mov	$19.,r5			/ default # of tracks/cyl
! 	bit	$1400,brae(r1)		/ is this a 5 tr/cy drive?
! 	beq	9f			/ no - br
! 	mov	$5,r5
! 9:
! 	mov	r0,sectors
! 	mul	r0,r5			/ sectors/cyl
! 	mov	r5,seccyl
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
***************
*** 154,163 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
! 	br	restart
  
  / read a mapped block
  / offset in file is in bno.
--- 168,179 ----
  / 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
! 	jmp	restart
  
  / read a mapped block
  / offset in file is in bno.
***************
*** 199,208 ****
  read	= 4
  go	= 1
  
! brcs	= 176714
! brda	= 176724
! brca	= 176722
! brba	= 176720
  / br disk driver.
  / low order address in dno,
  / high order in r0.
--- 215,228 ----
  read	= 4
  go	= 1
  
! brds	= -4
! brer	= -2
! brcs	= 0		/ offset from base csr passed by ROMs
! brwc	= 2
! brba	= 4
! brca	= 6
! brda	= 10
! brae	= 12
  / br disk driver.
  / low order address in dno,
  / high order in r0.
***************
*** 212,233 ****
  .if	CLSIZE-1
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
! 	div	$32.*19.,r0		/ was 20.*10.
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$brca
  	clr	r0
! 	div	$32.,r0			/ was 10.
  	swab	r0
  	bis	r1,r0
! 	mov	r0,*$brda
! 	mov	$brba,r1
! 	mov	$buf,(r1)
! 	mov	$WC,-(r1)
! 	mov	$read+go,-(r1)
  1:
! 	tstb	(r1)
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
--- 232,252 ----
  .if	CLSIZE-1
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
! 	div	seccyl,r0
! 	mov	csr,r3
! 	mov	r0,brca(r3)
  	clr	r0
! 	div	sectors,r0
  	swab	r0
  	bis	r1,r0
! 	mov	r0,brda(r3)
! 	mov	$buf,brba(r3)
! 	mov	$WC,brwc(r3)
! 	mov	unit,r0
! 	bis	$read+go,r0
! 	mov	r0,(r3)		/ brcs
  1:
! 	tstb	(r3)		/ brcs
  	bge	1b
  	mov	(sp)+,r1
  	rts	pc
***************
*** 234,239 ****
--- 253,262 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4		/ strlen(bootnm)
+ unit: 0
+ csr: 0
+ seccyl: 0
+ sectors: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/dvhpuboot.s	Wed May 23 13:00:05 1990
--- /usr/src/sys/mdec/dvhpuboot.s	Wed Apr 24 10:08:07 1991
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 10.			/ major # from bdevsw[]
+ 
  / Bootstrap for Diva Comp. IV controller (33 sectors)
  /
  / 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
***************
*** 62,70 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$hpcs2
! 	mov	$preset+go,*$hpcs1
! 	mov	$fmt22,*$hpof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 66,75 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	unit,hpcs2(r1)
! 	mov	$preset+go,hpcs1(r1)
! 	mov	$fmt22,hpof(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
***************
*** 152,159 ****
  / 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
  
***************
*** 199,205 ****
  go	= 1
  fmt22	= 10000
  
! hpcs1	= 176700
  hpda	= hpcs1+6
  hpcs2	= hpcs1+10
  hpds	= hpcs1+12
--- 206,212 ----
  go	= 1
  fmt22	= 10000
  
! hpcs1	= 0		/ offset from base csr
  hpda	= hpcs1+6
  hpcs2	= hpcs1+10
  hpds	= hpcs1+12
***************
*** 216,236 ****
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$33.*19.,r0
! .if	cyl
! 	add	$cyl,r0
! .endif
! 	mov	r0,*$hpca
  	clr	r0
  	div	$33.,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
--- 223,242 ----
  	ashc	$CLSHFT,r0		/ multiply by CLSIZE
  .endif
  	div	$33.*19.,r0
! 	mov	csr,r3
! 	mov	r0,hpca(r3)
  	clr	r0
  	div	$33.,r0
  	swab	r0
  	bis	r1,r0
! 	add	$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 ****
--- 243,250 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/hkuboot.s	Wed May 23 13:00:13 1990
--- /usr/src/sys/mdec/hkuboot.s	Wed Apr 24 10:08:11 1991
***************
*** 1,3 ****
--- 1,5 ----
+ MAJOR = 4			/ major # from bdevsw[]
+ 
  / RK06/RK07 bootstrap
  /
  / disk boot program to load and transfer
***************
*** 40,46 ****
--- 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
***************
*** 52,60 ****
  
  / 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
***************
*** 61,70 ****
  	blo	2b
  
  / initialize hk
! 	mov	$clear,*$hkcs2
! 	mov	$ack,*$hkcs1
  0:
! 	tstb	*$hkcs1
  	bpl	0b		/ wait for acknowledge to complete
  
  	mov	$bootnm, r1
--- 67,79 ----
  	blo	2b
  
  / initialize hk
! 	mov	csr,r1
! 	mov	unit,r0
! 	bis	$clear,r0
! 	mov	r0,hkcs2(r1)
! 	mov	$ack,hkcs1(r1)
  0:
! 	tstb	hkcs1(r1)
  	bpl	0b		/ wait for acknowledge to complete
  
  	mov	$bootnm, r1
***************
*** 153,160 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 162,171 ----
  / 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
  
***************
*** 195,204 ****
  1:
  	rts	pc
  
! hkcs1 = 177440	/ control & status 1
! hkda  = 177446	/ desired track/sector address
! hkcs2 = 177450	/ control & status 2
! hkca  = 177460	/ desired cylinder
  
  .if	RK07
  / RK07 constants
--- 206,215 ----
  1:
  	rts	pc
  
! hkcs1 = 0	/ control & status 1
! hkda  = 6	/ desired track/sector address
! hkcs2 = 10	/ control & status 2
! hkca  = 20	/ desired cylinder
  
  .if	RK07
  / RK07 constants
***************
*** 229,240 ****
  	clr	r0
  	div	$3.,r0		/ r0 = cylinder r1 = track
  	bisb	r1,1(sp)
! 	mov	r0,*$hkca	/ cylinder wanted
! 	mov	$hkda,r1
! 	mov	(sp)+,(r1)	/ track & sector wanted
! 	mov	$buf,-(r1)	/ bus address
! 	mov	$WC,-(r1)	/ word count
! 	mov	$iocom,-(r1)
  1:
  	tstb	(r1)
  	bge	1b		/ wait for iocom to complete
--- 240,253 ----
  	clr	r0
  	div	$3.,r0		/ r0 = cylinder r1 = track
  	bisb	r1,1(sp)
! 	mov	csr,r3
! 	mov	r0,hkca(r3)	/ cylinder wanted
! 	mov	unit,hkcs2(r3)
! 	add	$hkda,r3
! 	mov	(sp)+,(r3)	/ track & sector wanted
! 	mov	$buf,-(r3)	/ bus address
! 	mov	$WC,-(r3)	/ word count
! 	mov	$iocom,-(r3)
  1:
  	tstb	(r1)
  	bge	1b		/ wait for iocom to complete
***************
*** 243,248 ****
--- 256,263 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/hpuboot.s	Wed May 23 13:00:20 1990
--- /usr/src/sys/mdec/hpuboot.s	Wed Apr 24 10:08:15 1991
***************
*** 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,70 ****
  	blo	2b
  
  / initialize hp
! 	mov	$drive,*$hpcs2
! 	mov	$preset+go,*$hpcs1
! 	mov	$fmt22,*$hpof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 65,74 ----
  	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
***************
*** 152,159 ****
  / 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
  
***************
*** 199,205 ****
  go	= 1
  fmt22	= 10000
  
! hpcs1	= 176700
  hpda	= hpcs1+6
  hpcs2	= hpcs1+10
  hpds	= hpcs1+12
--- 205,211 ----
  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
--- 222,241 ----
  	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 ****
--- 242,249 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/rauboot.s	Wed May 23 13:00:28 1990
--- /usr/src/sys/mdec/rauboot.s	Wed Apr 24 10:08:18 1991
***************
*** 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
  
***************
*** 214,221 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	jmp	restart
  
--- 206,215 ----
  / 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)
--- 279,289 ----
  /
  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 ****
--- 302,309 ----
  
  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!)
--- 311,314 ----
  buf = inod+INOSIZ
  bno = buf+BSIZE
  dno = bno+2
! ra = dno + 2			/ ra mscp communications area (BIG!)
*** /usr/src/sys/mdec.old/rkuboot.s	Wed May 23 13:00:47 1990
--- /usr/src/sys/mdec/rkuboot.s	Wed Apr 24 10:08:22 1991
***************
*** 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,65 ****
  	blo	2b
  
  / initialize rk
! 	mov	$reset+go,*$rkcs	/ reset controller
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 65,72 ----
  	blo	2b
  
  / initialize rk
! 	mov	csr,r1
! 	mov	$reset+go,rkcs(r1)	/ reset controller
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
***************
*** 147,154 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 154,163 ----
  / 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.
--- 202,211 ----
  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
--- 218,233 ----
  	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 ****
--- 234,241 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/rluboot.s	Wed May 23 13:00:55 1990
--- /usr/src/sys/mdec/rluboot.s	Wed Apr 24 10:08:33 1991
***************
*** 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
***************
*** 160,167 ****
  / restart if return
  2:
  	mov	ENDCORE-BOOTOPTS, r4
! 	mov	ENDCORE-BOOTDEV, r3
  	mov	ENDCORE-CHECKWORD, r2
  	jsr	pc,*$0
  	br	restart
  
--- 159,168 ----
  / 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
--- 219,230 ----
  /		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
--- 237,243 ----
  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
--- 244,255 ----
  .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
--- 261,296 ----
  	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
*** /usr/src/sys/mdec.old/rm03uboot.s	Wed May 23 13:01:02 1990
--- /usr/src/sys/mdec/rm03uboot.s	Wed Apr 24 10:08:36 1991
***************
*** 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,71 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 67,76 ----
  	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
***************
*** 153,160 ****
  / 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
! 	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
--- 214,220 ----
  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
--- 231,250 ----
  	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 ****
--- 251,258 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/rm05uboot.s	Wed May 23 13:01:08 1990
--- /usr/src/sys/mdec/rm05uboot.s	Wed Apr 24 10:08:46 1991
***************
*** 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,72 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 67,76 ----
  	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
***************
*** 154,161 ****
  / 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
! 	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
--- 214,220 ----
  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
--- 231,250 ----
  	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 ****
--- 251,258 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/si51uboot.s	Wed May 23 13:01:20 1990
--- /usr/src/sys/mdec/si51uboot.s	Wed Apr 24 10:08:49 1991
***************
*** 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,72 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 66,75 ----
  	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
***************
*** 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
  
***************
*** 203,209 ****
  NSECT	= 48.
  NTRAK	= 20.		/ SI 6100 with Fujitsu 2351A
  
! rmcs1	= address
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 208,214 ----
  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
--- 225,244 ----
  	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 ****
--- 245,252 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/si94uboot.s	Wed May 23 13:01:27 1990
--- /usr/src/sys/mdec/si94uboot.s	Wed Apr 24 10:08:53 1991
***************
*** 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,72 ****
  	blo	2b
  
  / initialize disk
! 	mov	$drive,*$rmcs2
! 	mov	$preset+go,*$rmcs1
! 	mov	$fmt22,*$rmof
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 66,75 ----
  	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
***************
*** 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
  
***************
*** 203,209 ****
  NSECT	= 32.
  NTRAK	= 10.		/ SI 9400 with Fujitsu 160
  
! rmcs1	= address
  rmda	= rmcs1+6
  rmcs2	= rmcs1+10
  rmds	= rmcs1+12
--- 208,214 ----
  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
--- 225,244 ----
  	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 ****
--- 245,252 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack
*** /usr/src/sys/mdec.old/si95uboot.s	Wed May 23 13:01:34 1990
--- /usr/src/sys/mdec/si95uboot.s	Wed Apr 24 10:09:02 1991
***************
*** 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,70 ****
  	blo	2b
  
  / initialize disk
! 	mov	$reset,*$sicnr
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
--- 67,74 ----
  	blo	2b
  
  / initialize disk
! 	mov	csr,r1
! 	mov	$reset,sicnr(r1)
  
  	mov	$bootnm, r1
  	mov	$2,r0			/ ROOTINO
***************
*** 152,159 ****
  / 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
  
***************
*** 200,206 ****
  NSECT	= 32.
  NTRAK	= 19.		/ 9766
  
! sicnr	= 176700
  siwcr	= sicnr+2
  sipcr	= sicnr+4
  sihsr	= sicnr+6
--- 206,212 ----
  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
--- 224,262 ----
  	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 ****
--- 263,270 ----
  
  bootnm:	<boot\0\0>
  bootlen = 4			/ strlen(bootnm)
+ unit: 0
+ csr: 0
  end:
  
  inod = ..-512.-BSIZE		/ room for inod, buf, stack



More information about the Comp.bugs.2bsd mailing list