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