xref: /csrg-svn/sys/vax/mdec/hkboot.c (revision 29801)
123141Smckusick /*
229319Smckusick  * Copyright (c) 1980, 1986 Regents of the University of California.
323141Smckusick  * All rights reserved.  The Berkeley software License Agreement
423141Smckusick  * specifies the terms and conditions for redistribution.
523141Smckusick  */
611088Ssam 
7*29801Skarels /* @(#)hkboot.c	7.2 (Berkeley) 08/28/86 */
8*29801Skarels #include <sys/disklabel.h>
923141Smckusick 
1026885Skarels 	.set	MAJOR,3		/* major("/dev/hk0a") */
1126885Skarels 
1211088Ssam /*
1311088Ssam  * RK07 1st level boot program: loads next 7.5Kbytes from
1411088Ssam  * boot sector of file system and sets it up to run.
1511088Ssam  */
1611088Ssam 	.set	RELOC,0x50000
1711088Ssam 	.set	BOOTSIZE,15		/* size of boot in sectors */
1811088Ssam /* UBA registers */
1911088Ssam 	.set	UBA_CNFGR,0		/* UBA configuration register */
2011088Ssam 	.set	UBA_CR,4		/* UBA control register offset */
2111088Ssam 	.set	UBA_MAP,0x800		/* UBA offset to map reg's */
2211088Ssam /* RK611 registers and bits */
2326885Skarels 	.set	HK_cs1,0		/* control and status */
2426885Skarels 	.set	HK_wc,2			/* word count */
2526885Skarels 	.set	HK_ba,4			/* bus address */
2626885Skarels 	.set	HK_da,6			/* disk address */
2726885Skarels 	.set	HK_cs2,8		/* control and status */
2826885Skarels 	.set	HK_dc,020		/* desired cylinder */
2911088Ssam 	.set	HKBPSECT,512		/* bytes per sector */
3011088Ssam 	.set	HK_GO,1			/* go bit */
3111088Ssam 	.set	HK_PACK,2		/* pack acknowledge */
3211088Ssam 	.set	HK_RCOM,020		/* read command */
3311088Ssam 	.set	HK_SEL7,02000		/* select RK07 disk */
3411088Ssam 	.set	HK_pRDY,7		/* position of ready bit */
3511088Ssam 	.set	HK_pERR,15		/* position of error bit */
3611088Ssam 
3711088Ssam init:
3811088Ssam /* r9	UBA address */
3926885Skarels /* r8	HK addr */
4011088Ssam 	.word	0  			/* entry mask for dec monitor */
4111088Ssam 	nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
4211088Ssam 	nop;nop;
4326885Skarels 	movl	$MAJOR,r10		/* major("/dev/xx0a") */
4426885Skarels 	extzv	$18,$1,r1,r9		/* get UBA number from R1 */
4526885Skarels 	xorb2	$0x01,r9		/* complement bit */
4626885Skarels 	insv	r9,$24,$8,r10		/* set UBA number */
4726885Skarels 	insv	r3,$16,$8,r10		/* drive number */
4826885Skarels 	extzv	$12,$4,r5,r4		/* get partition from r5 */
4926885Skarels 	bicw2	$0xf000,r5		/* remove from r5 */
5026885Skarels 	insv	r4,$8,$8,r10		/* set partition */
5126885Skarels 	movl	r5,r11			/* boot flags */
52*29801Skarels 	brw	start0
53*29801Skarels 
54*29801Skarels /*
55*29801Skarels  * Leave space for pack label.
56*29801Skarels  */
57*29801Skarels pad:
58*29801Skarels 	.space	LABELOFFSET - (pad - init)
59*29801Skarels packlabel:
60*29801Skarels 	.space	d_end_
61*29801Skarels 
62*29801Skarels start0:
6326885Skarels 	movl	physUBA[r9],r9		/* UNIBUS adaptor address */
6426885Skarels 	movl	r2,r8			/* boot device CSR */
6526885Skarels 	movl	r3,r7			/* unit number */
6626885Skarels 
6726885Skarels /* select unit, init rk611, set vv in drive; if any errors, give up */
6826885Skarels 	movw	r7,HK_cs2(r8)
6926885Skarels 	movw	$HK_SEL7+HK_GO,HK_cs1(r8)
7011088Ssam 1:
7126885Skarels 	movw	HK_cs1(r8),r0
7211088Ssam 	bbc	$HK_pRDY,r0,1b
7311088Ssam 	bbs	$HK_pERR,r0,9f
7426885Skarels 	movw	$HK_SEL7+HK_PACK+HK_GO,HK_cs1(r8)
7511088Ssam 1:
7626885Skarels 	movw	HK_cs1(r8),r0
7711088Ssam 	bbc	$HK_pRDY,r0,1b
7811088Ssam 	bbc	$HK_pERR,r0,start
7911088Ssam 9:
8011088Ssam 	halt
8111088Ssam /* relocate to high core */
8211088Ssam start:
8311088Ssam 	movl	r5,r11			/* boot flags */
8411088Ssam 	movl	$RELOC,sp
8511088Ssam 	moval	init,r6
8611088Ssam 	movc3	$end,(r6),(sp)
8711088Ssam 	jmp	*$RELOC+start2
8811088Ssam /* now running relocated */
8911088Ssam /* bring in the boot program */
9011088Ssam 	.set	PROGSIZE,(BOOTSIZE*HKBPSECT)
9111088Ssam start2:
9226885Skarels 	movw	$0,HK_dc(r8)
9326885Skarels 	movw	$1,HK_da(r8)
9426885Skarels 	movw	$-PROGSIZE/2,HK_wc(r8)
9511088Ssam 	clrl	r0
9611088Ssam 1:
97*29801Skarels /*	bisl3	$0x80000000,r0,UBA_MAP(r9) */
98*29801Skarels /*	addl2	$4,r9 */
99*29801Skarels /*	aobleq	$BOOTSIZE,r0,1b */
10026885Skarels 	clrw	HK_ba(r8)
10126885Skarels 	movw	$HK_SEL7+HK_RCOM+HK_GO,HK_cs1(r8)
10211088Ssam hkrdy:
10326885Skarels 	movw	HK_cs1(r8),r0
10411088Ssam 	bbc	$HK_pRDY,r0,hkrdy
10511088Ssam 	bbs	$HK_pERR,r0,hkerr
10611088Ssam 	brw	done
10711088Ssam hkerr:
10811088Ssam 	halt			/* ungraceful */
10911088Ssam done:
11011088Ssam 	movl	$PROGSIZE,r3
11111088Ssam clrcor:
11211088Ssam 	clrq	(r3)
11311088Ssam 	acbl	$RELOC,$8,r3,clrcor
11411088Ssam /* start loaded program */
11511088Ssam 	calls	$0,*$0
11611088Ssam 	brw	start2
11711088Ssam physUBA:
11826885Skarels 	.long	0xf30000		/* uba0 */
11926885Skarels 	.long	0xf32000		/* uba1 */
12011088Ssam end:
121