|
|
1.1 root 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: /* "%W% (Berkeley) %G%" */
8:
9: #define PARTITION /* Partition is in bits 12 to 15 of R5
10:
11: /*
12: * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from
13: * boot sector of file system and sets it up to run.
14: * Reads from the controller and drive passed in from the boot
15: * rom.
16: * R1: address of the boot devices's adapter
17: * R2: controller number of the boot device
18: * R3: unit number of the boot device
19: * R5: software boot control flags
20: * R6: address of driver subroutine from ROM
21: * SP: base address of usable memory + 0x200
22: */
23: .set BOOTLAST,15 /* last boot sector */
24: .set RPBPSECT,512 /* bytes per sector */
25: .set RELOC,0x70000
26:
27: init:
28: .word 0 /* entry mask for DEC monitor */
29: nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
30: nop;nop;
31: start:
32: clrl r10 /* major("/dev/hp0a") */
33: extzv $13,$2,r1,r4 /* get MBA number from R1 */
34: insv r4,$24,$8,r10 /* set MBA number */
35: insv r3,$16,$8,r10 /* drive number */
36: #ifdef PARTITION
37: extzv $12,$4,r5,r4 /* get partition from r5 */
38: bicw2 $0xf000,r5 /* remove from r5 */
39: insv r4,$8,$4,r10 /* set partition */
40: #endif
41: movl r5,r11 /* Save software boot control flags */
42: movl $RELOC,sp
43: /* Save register during move */
44: movl r1,r7 /* MBA adapter address */
45: movl r2,r8 /* controller number */
46: movl r3,r9 /* unit number */
47: moval init,r4
48: movc3 $end,(r4),(sp)
49: /* Restore registers */
50: movl r7,r1 /* MBA adapter address */
51: movl r8,r2 /* controller number */
52: movl r9,r3 /* unit number */
53: jmp *$RELOC+start2
54: /* now running relocated */
55: /* bring in the boot program */
56: start2: /* running relocated */
57: pushr $0xffff /* BEGIN FIREWALL */
58: movl $1,r4 /* first boot sector */
59: clrl r5 /* transfer address */
60: clrl -(sp) /* transfer address */
61: 1:
62: movl r4,r8 /* requested sector # */
63: jsb (r6) /* call ROM-based driver */
64: blbs r0,2f
65: halt /* read error */
66: 2:
67: addl2 $RPBPSECT,r5 /* bump address */
68: movl r5,(sp)
69: aobleq $BOOTLAST,r4,1b
70:
71: .set PROGSIZE,(BOOTLAST*RPBPSECT)
72: done:
73: tstl (sp)+ /* pop address */
74: popr $0xffff /* END FIREWALL */
75:
76: /* clear core and execute program */
77: movl $PROGSIZE,r4
78: clrcor:
79: clrq (r4)
80: acbl $RELOC,$8,r4,clrcor
81: /* run loaded program */
82: calls $0,*$0
83: brw start2
84:
85: end:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.