date and time created 83/08/01 12:10:12 by sam
[unix-history] / usr / src / sys / vax / mdec / hpboot.c
CommitLineData
92e67171 1/* hpboot.c 6.1 83/07/29 */
71b1fc7a
SL
2
3/*
4 * RP??/RM?? 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 BOOTSIZE,15 /* size of boot in sectors */
9 .set RELOC,0x70000
10/* MBA registers */
11 .set M_cr,4 /* MBA control reg */
12 .set M_var,12 /* MBA virt addr reg */
13 .set M_bc,16 /* MBA byte count reg */
14 .set M_map,0x800 /* start of MBA map reg's */
15 .set MBAinit,1 /* MBA init bit in MBA control reg */
16/* Drive information */
17 .set RP,0x400 /* start of drive registers */
18 .set RP_cr,RP+0 /* control status register */
19 .set RP_sr,RP+4 /* drive status reg */
20 .set RP_stk,RP+0x14 /* desired track/sector reg */
21 .set RP_dt,RP+0x18 /* drive type reg */
22 .set RP_off,RP+0x24 /* RP offset reg */
23 .set RP_cyl,RP+0x28 /* desired cyl reg */
24 .set RPBPSECT,512 /* bytes per sector */
25/* RP?? function codes, status bits */
26 .set RP_GO,1 /* go */
27 .set RP_RED,070 /* read */
28 .set RP_DC,010 /* drive clear */
29 .set RP_RIP,020 /* read in preset */
30 .set RP_FMT,0x1000 /* format 22 */
31 .set RP_MOL,0x1000 /* medium on line */
32 .set RP_DRY,0200 /* drive ready */
33 .set RP_ERR,040000 /* composite error */
34 .set RP_pDRY,7 /* bit position of RP_DRY */
35 .set RP_pERR,14 /* bit position of RP_ERR */
36
37init:
38 .word 0 /* entry mask for DEC monitor */
39 nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
40 nop;nop;
41start:
42 movl r5,r11
43 movl $RELOC,sp
44 moval init,r6
45 movc3 $end,(r6),(sp)
46 jmp *$RELOC+start1
47/* running relocated */
48start1:
49/* get cpu type */
50 .set SID,0x3e
51 mfpr $SID,r0
52 extzv $24,$8,r0,r0
53 ashl $2,r0,r1
54/* get mba location and init it */
55 moval physMBA,r2
56 addl3 r1,r2,r3
57 movl (r3),r9
58 movl $MBAinit,M_cr(r9)
59/* read-in-preset the drive and set format */
60 movl $RP_RIP+RP_GO,RP_cr(r9)
61 movl $RP_FMT,RP_off(r9)
62
63 .set PROGSIZE,(BOOTSIZE*RPBPSECT)
64start2:
65 movl $0,RP_cyl(r9)
66 movl $1,RP_stk(r9)
67 movl $-PROGSIZE,M_bc(r9)
68/* set up MASSBUS map for DMA */
69 clrl r0
701:
71 bisl3 $0x80000000,r0,M_map(r9)[r0]
72 aobleq $BOOTSIZE,r0,1b
73 clrl M_var(r9)
74 movl $RP_RED+RP_GO,RP_cr(r9)
75rprdy:
76 movl RP_sr(r9),r0
77 bbc $RP_pDRY,r0,rprdy
78 bbs $RP_pERR,r0,rperr
9b9c54f6
SL
79 clrl r3
80/* Eagle's are too fast for the controller. Slow the thing down. */
81buzz: acbl $2000,$1,r3,buzz
71b1fc7a
SL
82 bicpsw $2
83 jbr clear
84rperr:
85 halt
86/* clear core and execute program */
87clear:
88 movl $PROGSIZE,r3
89clrcor:
90 clrq (r3)
91 acbl $RELOC,$8,r3,clrcor
92/* run loaded program */
93 clrl r10 /* major("/dev/hp0a") */
94 calls $0,*$0
95 brw start2
96
97 .align 2
98physMBA:
99 .long 0
100 .long 0x20010000
101 .long 0xf28000
102
103end: