|
|
1.1 root 1: /*
2: * Copyright (c) 1980,1986 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: /* "@(#)raboot.c 7.2 (Berkeley) 8/28/86" */
8: #include <sys/disklabel.h>
9:
10: .set MAJOR,9 /* major("/dev/ra0a") */
11:
12: /*
13: * 1st level boot program: loads next 7.5Kbytes from
14: * boot sector of file system and sets it up to run.
15: * Except for MAJOR definition above, should work
16: * with any disk using 750 boot rom.
17: */
18: .set RELOC,0x50000
19: .set BOOTLAST,15 /* last boot sector */
20: .set RABPSECT,512 /* bytes per sector */
21:
22: init:
23: .word 0 /* entry mask for dec monitor */
24: nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
25: nop;nop;
26: start:
27: movl $MAJOR,r10 /* major("/dev/xx0a") */
28: extzv $18,$1,r1,r4 /* get UBA number from R1 */
29: xorb2 $0x01,r4 /* complement bit */
30: insv r4,$24,$8,r10 /* set UBA number */
31: insv r3,$16,$8,r10 /* drive number */
32: extzv $12,$4,r5,r4 /* get partition from r5 */
33: bicw2 $0xf000,r5 /* remove from r5 */
34: insv r4,$8,$8,r10 /* set partition */
35: movl r5,r11 /* boot flags */
36: movl r1,r9 /* UNIBUS I/O page address */
37: movl r2,r8 /* boot device CSR */
38: movl r3,r7 /* unit number */
39: brw start0
40:
41: /*
42: * Leave space for pack label.
43: */
44: pad:
45: .space LABELOFFSET - (pad - init)
46: packlabel:
47: .space d_end_
48:
49: start0:
50: movl $RELOC,sp
51: moval init,r4
52: movc3 $end,(r4),(sp)
53: movl r9,r1 /* UNIBUS I/O page address */
54: movl r8,r2 /* boot device CSR */
55: movl r7,r3 /* unit number */
56: jmp *$RELOC+start2
57: /* now running relocated */
58: /* bring in the boot program */
59: start2: /* running relocated */
60: pushr $0xffff /* BEGIN FIREWALL */
61: movl $1,r4 /* first boot sector */
62: clrl r5 /* transfer address */
63: clrl -(sp) /* transfer address */
64: 1:
65: movl r4,r8 /* requested sector # */
66: jsb (r6) /* call ROM-based driver */
67: blbs r0,2f
68: halt /* read error */
69: 2:
70: addl2 $RABPSECT,r5 /* bump address */
71: movl r5,(sp)
72: aobleq $BOOTLAST,r4,1b
73:
74: .set PROGSIZE,(BOOTLAST*RABPSECT)
75: done:
76: tstl (sp)+ /* pop address */
77: popr $0xffff /* END FIREWALL */
78: movl $PROGSIZE,r4
79: clrcor:
80: clrq (r4)
81: acbl $RELOC,$8,r4,clrcor
82: /* start loaded program */
83: calls $0,*$0
84: brw start2
85: end:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.