|
|
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: /* "@(#)hpboot.s 7.1 (Berkeley) 6/5/86" */
8:
9:
10: #define PARTITION /* Partition is in bits 12 to 15 of R5
11:
12: /*
13: * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from
14: * boot sectors of file system and sets it up to run.
15: * Reads from the controller and drive passed in from the boot
16: * rom.
17: * R1: address of the boot device's adapter
18: * R2: controller number of the boot device
19: * R3: unit number of the boot device
20: * R5: software boot control flags
21: * R6: address of driver subroutine from ROM
22: * SP: base address of usable memory + 0x200
23: */
24: .set BOOTSIZE,15 /* size of boot in sectors */
25: .set RELOC,0x70000
26: /* MBA registers */
27: .set M_cr,4 /* MBA control reg */
28: .set M_sr,8 /* MBA status reg */
29: .set M_var,12 /* MBA virt addr reg */
30: .set M_bc,16 /* MBA byte count reg */
31: .set M_map,0x800 /* start of MBA map reg's */
32: .set MBAinit,1 /* MBA init bit in MBA control reg */
33: .set MBABUSY,0x80000000 /* MBA SR: data transfer busy */
34: .set pMBABUSY,31 /* bit position of MBABUSY */
35: /* Drive information */
36: .set RP,0x400 /* start of drive registers */
37: .set RPDR,0x80 /* offset per drive unit */
38: .set RP_cr,0 /* control status register */
39: .set RP_sr,4 /* drive status reg */
40: .set RP_stk,0x14 /* desired track/sector reg */
41: .set RP_dt,0x18 /* drive type reg */
42: .set RP_off,0x24 /* RP offset reg */
43: .set RP_cyl,0x28 /* desired cyl reg */
44: .set RPBPSECT,512 /* bytes per sector */
45: /* RP?? function codes, status bits */
46: .set RP_GO,1 /* go */
47: .set RP_RED,070 /* read */
48: .set RP_DC,010 /* drive clear */
49: .set RP_RIP,020 /* read in preset */
50: .set RP_FMT,0x1000 /* format 22 */
51: .set RP_MOL,0x1000 /* medium on line */
52: .set RP_DRY,0200 /* drive ready */
53: .set RP_ERR,040000 /* composite error */
54: .set RP_pDRY,7 /* bit position of RP_DRY */
55: .set RP_pERR,14 /* bit position of RP_ERR */
56:
57: init:
58: .word 0 /* entry mask for DEC monitor */
59: nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
60: nop;nop;
61: start:
62: clrl r10 /* major("/dev/hp0a") */
63: extzv $13,$2,r1,r4 /* get MBA number from R1 */
64: insv r4,$24,$8,r10 /* set MBA number */
65: insv r3,$16,$8,r10 /* drive number */
66: #ifdef PARTITION
67: extzv $12,$4,r5,r4 /* get partition from r5 */
68: bicw2 $0xf000,r5 /* remove from r5 */
69: insv r4,$8,$4,r10 /* set partition */
70: #endif
71: movl r5,r11
72: movl r1,r9 /* save adaptor address */
73: movl r3,r8 /* and unit number */
74: movl $RELOC,sp
75: moval init,r6
76: movc3 $end,(r6),(sp)
77: jmp *$RELOC+start1
78: /* running relocated */
79: start1:
80: movl $MBAinit,M_cr(r9)
81: /* read-in-preset the drive and set format */
82: mull2 $RPDR,r8
83: movab RP(r9)[r8],r8
84: movl $RP_RIP+RP_GO,RP_cr(r8)
85: movl $RP_FMT,RP_off(r8)
86:
87: .set PROGSIZE,(BOOTSIZE*RPBPSECT)
88: start2:
89: movl $0,RP_cyl(r8)
90: movl $1,RP_stk(r8)
91: movl $-PROGSIZE,M_bc(r9)
92: /* set up MASSBUS map for DMA */
93: clrl r0
94: 1:
95: bisl3 $0x80000000,r0,M_map(r9)[r0]
96: aobleq $BOOTSIZE,r0,1b
97: clrl M_var(r9)
98: movl $RP_RED+RP_GO,RP_cr(r8)
99: rprdy:
100: movl RP_sr(r8),r0
101: bbc $RP_pDRY,r0,rprdy
102: bbs $RP_pERR,r0,rperr
103: rprdy2:
104: bbs $pMBABUSY,M_sr(r9),rprdy2
105:
106: /* Eagles are too fast for the controller. Slow the thing down. */
107: /* (May not be needed with wait for mba above.) */
108: clrl r3
109: buzz: acbl $2000,$1,r3,buzz
110: bicpsw $2
111: jbr clear
112: rperr:
113: halt
114: /* clear core and execute program */
115: clear:
116: movl $PROGSIZE,r3
117: clrcor:
118: clrq (r3)
119: acbl $RELOC,$8,r3,clrcor
120: /* run loaded program */
121: calls $0,*$0
122: brw start2
123:
124: end:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.