Add copyright
[unix-history] / usr / src / sys / vax / mdec / hkboot.c
CommitLineData
b1078c35
KM
1/*
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
7#ifndef lint
8_sccsid:.asciz "@(#)hkboot.c 6.2 (Berkeley) %G%"
9#endif not lint
10
405a2f58
SL
11
12/*
13 * RK07 1st level boot program: loads next 7.5Kbytes from
14 * boot sector of file system and sets it up to run.
15 * Always reads from drive 0.
16 */
17 .set RELOC,0x50000
18 .set BOOTSIZE,15 /* size of boot in sectors */
19 .set SID,62 /* system ID register */
20/* UBA registers */
21 .set UBA_CNFGR,0 /* UBA configuration register */
22 .set UBA_CR,4 /* UBA control register offset */
23 .set UBA_MAP,0x800 /* UBA offset to map reg's */
24 .set UBAinit,1 /* UBA init bit in UBA control reg */
25 .set pUBIC,16 /* Unibus init complete */
26/* RK611 registers and bits */
27 .set HK,0177440-0160000 /* address of RK611 */
28 .set HK_cs1,HK+0 /* control and status */
29 .set HK_wc,HK+2 /* word count */
30 .set HK_ba,HK+4 /* bus address */
31 .set HK_da,HK+6 /* disk address */
32 .set HK_dc,HK+020 /* desired cylinder */
33 .set HKBPSECT,512 /* bytes per sector */
34 .set HK_GO,1 /* go bit */
35 .set HK_PACK,2 /* pack acknowledge */
36 .set HK_RCOM,020 /* read command */
37 .set HK_SEL7,02000 /* select RK07 disk */
38 .set HK_pRDY,7 /* position of ready bit */
39 .set HK_pERR,15 /* position of error bit */
40
41init:
42/* r9 UBA address */
43/* r10 umem addr */
44 .word 0 /* entry mask for dec monitor */
45 nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
46 nop;nop;
47/* get cpu type and find the first uba */
48 mfpr $SID,r0
49 extzv $24,$8,r0,r0 /* get cpu type */
50 ashl $2,r0,r1
51 movab physUBA,r2 /* get physUBA[cpu] */
52 addl2 r1,r2
53 movl (r2),r9
54 movab physUMEM,r2 /* get physUMEM[cpu] */
55 addl2 r1,r2
56 movl (r2),r10
57/* if 780, init uba */
58 cmpl r0,$1
59 bneq 2f
60 movl $UBAinit,UBA_CR(r9)
611:
62 bbc $pUBIC,UBA_CNFGR(r9),1b
632:
64/* init rk611, set vv in drive 0; if any errors, give up */
65 movw $HK_SEL7+HK_GO,HK_cs1(r10)
661:
67 movw HK_cs1(r10),r0
68 bbc $HK_pRDY,r0,1b
69 bbs $HK_pERR,r0,9f
70 movw $HK_SEL7+HK_PACK+HK_GO,HK_cs1(r10)
711:
72 movw HK_cs1(r10),r0
73 bbc $HK_pRDY,r0,1b
74 bbc $HK_pERR,r0,start
759:
76 halt
77/* relocate to high core */
78start:
79 movl r5,r11 /* boot flags */
80 movl $RELOC,sp
81 moval init,r6
82 movc3 $end,(r6),(sp)
83 jmp *$RELOC+start2
84/* now running relocated */
85/* bring in the boot program */
86 .set PROGSIZE,(BOOTSIZE*HKBPSECT)
87start2:
88 movw $0,HK_dc(r10)
89 movw $1,HK_da(r10)
90 movw $-PROGSIZE/2,HK_wc(r10)
91 clrl r0
921:
93 bisl3 $0x80000000,r0,UBA_MAP(r9)
94 addl2 $4,r9
95 aobleq $BOOTSIZE,r0,1b
96 clrw HK_ba(r10)
97 movw $HK_SEL7+HK_RCOM+HK_GO,HK_cs1(r10)
98hkrdy:
99 movw HK_cs1(r10),r0
100 bbc $HK_pRDY,r0,hkrdy
101 bbs $HK_pERR,r0,hkerr
102 brw done
103hkerr:
104 halt /* ungraceful */
105done:
106 movl $PROGSIZE,r3
107clrcor:
108 clrq (r3)
109 acbl $RELOC,$8,r3,clrcor
110/* start loaded program */
111 movl $3,r10 /* major("/dev/hk0a") */
112 calls $0,*$0
113 brw start2
114physUBA:
115 .long 0
116 .long 0x20006000 /* 11/780 */
117 .long 0xf30000 /* 11/750 */
118 .long 0xf26000 /* 11/730 */
119physUMEM:
120 .long 0
121 .long 0x2013e000 /* 11/780 */
122 .long 0xffe000 /* 11/750 */
123 .long 0xffe000 /* 11/730 */
124end: