add tmscpboot
[unix-history] / usr / src / sys / vax / mdec / hpboot.c
CommitLineData
b1078c35 1/*
a6f89995 2 * Copyright (c) 1980,1986 Regents of the University of California.
b1078c35
KM
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
70385c9b
MK
7/* "@(#)hpboot.c 7.2 (Berkeley) %G%" */
8#include <sys/disklabel.h>
b1078c35 9
71b1fc7a
SL
10
11/*
12 * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from
a6f89995
MK
13 * boot sectors 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 device'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
71b1fc7a
SL
22 */
23 .set BOOTSIZE,15 /* size of boot in sectors */
24 .set RELOC,0x70000
25/* MBA registers */
26 .set M_cr,4 /* MBA control reg */
a6f89995 27 .set M_sr,8 /* MBA status reg */
71b1fc7a
SL
28 .set M_var,12 /* MBA virt addr reg */
29 .set M_bc,16 /* MBA byte count reg */
30 .set M_map,0x800 /* start of MBA map reg's */
31 .set MBAinit,1 /* MBA init bit in MBA control reg */
a6f89995
MK
32 .set MBABUSY,0x80000000 /* MBA SR: data transfer busy */
33 .set pMBABUSY,31 /* bit position of MBABUSY */
71b1fc7a
SL
34/* Drive information */
35 .set RP,0x400 /* start of drive registers */
a6f89995
MK
36 .set RPDR,0x80 /* offset per drive unit */
37 .set RP_cr,0 /* control status register */
38 .set RP_sr,4 /* drive status reg */
39 .set RP_stk,0x14 /* desired track/sector reg */
40 .set RP_dt,0x18 /* drive type reg */
41 .set RP_off,0x24 /* RP offset reg */
42 .set RP_cyl,0x28 /* desired cyl reg */
71b1fc7a
SL
43 .set RPBPSECT,512 /* bytes per sector */
44/* RP?? function codes, status bits */
45 .set RP_GO,1 /* go */
46 .set RP_RED,070 /* read */
47 .set RP_DC,010 /* drive clear */
48 .set RP_RIP,020 /* read in preset */
49 .set RP_FMT,0x1000 /* format 22 */
50 .set RP_MOL,0x1000 /* medium on line */
51 .set RP_DRY,0200 /* drive ready */
52 .set RP_ERR,040000 /* composite error */
53 .set RP_pDRY,7 /* bit position of RP_DRY */
54 .set RP_pERR,14 /* bit position of RP_ERR */
55
56init:
57 .word 0 /* entry mask for DEC monitor */
58 nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
59 nop;nop;
60start:
a6f89995
MK
61 clrl r10 /* major("/dev/hp0a") */
62 extzv $13,$2,r1,r4 /* get MBA number from R1 */
63 insv r4,$24,$8,r10 /* set MBA number */
64 insv r3,$16,$8,r10 /* drive number */
a6f89995
MK
65 extzv $12,$4,r5,r4 /* get partition from r5 */
66 bicw2 $0xf000,r5 /* remove from r5 */
67 insv r4,$8,$4,r10 /* set partition */
71b1fc7a 68 movl r5,r11
a6f89995
MK
69 movl r1,r9 /* save adaptor address */
70 movl r3,r8 /* and unit number */
70385c9b
MK
71 brw start0
72
73/*
74 * Leave space for pack label.
75 */
76pad:
77 .space LABELOFFSET - (pad - init)
78packlabel:
79 .space d_end_
80
81start0:
71b1fc7a
SL
82 movl $RELOC,sp
83 moval init,r6
84 movc3 $end,(r6),(sp)
85 jmp *$RELOC+start1
86/* running relocated */
87start1:
71b1fc7a
SL
88 movl $MBAinit,M_cr(r9)
89/* read-in-preset the drive and set format */
a6f89995
MK
90 mull2 $RPDR,r8
91 movab RP(r9)[r8],r8
92 movl $RP_RIP+RP_GO,RP_cr(r8)
93 movl $RP_FMT,RP_off(r8)
71b1fc7a
SL
94
95 .set PROGSIZE,(BOOTSIZE*RPBPSECT)
96start2:
a6f89995
MK
97 movl $0,RP_cyl(r8)
98 movl $1,RP_stk(r8)
71b1fc7a
SL
99 movl $-PROGSIZE,M_bc(r9)
100/* set up MASSBUS map for DMA */
101 clrl r0
1021:
103 bisl3 $0x80000000,r0,M_map(r9)[r0]
104 aobleq $BOOTSIZE,r0,1b
105 clrl M_var(r9)
a6f89995 106 movl $RP_RED+RP_GO,RP_cr(r8)
71b1fc7a 107rprdy:
a6f89995 108 movl RP_sr(r8),r0
71b1fc7a
SL
109 bbc $RP_pDRY,r0,rprdy
110 bbs $RP_pERR,r0,rperr
a6f89995
MK
111rprdy2:
112 bbs $pMBABUSY,M_sr(r9),rprdy2
113
114/* Eagles are too fast for the controller. Slow the thing down. */
115/* (May not be needed with wait for mba above.) */
9b9c54f6 116 clrl r3
9b9c54f6 117buzz: acbl $2000,$1,r3,buzz
71b1fc7a
SL
118 bicpsw $2
119 jbr clear
120rperr:
121 halt
122/* clear core and execute program */
123clear:
124 movl $PROGSIZE,r3
125clrcor:
126 clrq (r3)
127 acbl $RELOC,$8,r3,clrcor
128/* run loaded program */
71b1fc7a
SL
129 calls $0,*$0
130 brw start2
131
71b1fc7a 132end: