|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 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: * @(#)srt0.c 7.4 (Berkeley) 1/28/88
7: */
8:
9: #include "../vax/mtpr.h"
10: #define LOCORE
11: #include "../vax/cpu.h"
12:
13: /*
14: * Startup code for standalone system
15: * Non-relocating version -- for programs which are loaded by boot
16: * Relocating version for boot*
17: */
18:
19: .globl _end
20: .globl _edata
21: .globl _main
22: .globl __rtt
23: .globl _configure
24: .globl _cpu
25: .globl _openfirst
26: .globl _boothowto
27: .globl _bootdev
28:
29: .set HIGH,31 # mask for total disable
30:
31: entry: .globl entry
32: nop; nop # .word 0x0101
33: mtpr $HIGH,$IPL # just in case
34:
35: #ifdef REL
36: # we need to do special stuff on microvax II
37: mfpr $SID,r0
38: cmpzv $24,$8,r0,$VAX_630
39: bneq 1f
40:
41: /*
42: * Were we booted by VMB? If so, r11 is not boothowto,
43: * but rather the address of the `Extended RPB' (see KA630
44: * User's Manual, pp 3-21). These tests were devised by
45: * richl@tektronix, 11/10/87.
46: */
47: cmpl (r11),r11 # if boothowto, r11 will be small
48: bneq 1f # and these will not fault
49: cmpl 4(r11),$0
50: bneq 1f
51: cmpl 8(r11),$-1
52: bneq 1f
53: tstl 0xc(r11)
54: bneq 1f
55:
56: /*
57: * Booted by VMB: get flags from extended rpb.
58: * We can only guess at the boot device (here ra(0,0)).
59: */
60: movl 0x30(r11),r11
61: movl $9,r10 # device = ra(0,0)
62: 1:
63: movl $RELOC,sp
64: #else
65: movl $RELOC-0x2400,sp
66: #endif
67: start:
68: #ifndef REL
69: /*
70: * Clear bss segment
71: */
72: movl aedata,r0
73: clr:
74: clrl (r0)+
75: cmpl r0,sp
76: jlss clr
77: #else
78: /*
79: * `entry' below generates a pc-relative reference to the
80: * code, so this works no matter where we are now.
81: * Clear bss segment *after* moving text and data.
82: */
83: movc3 aedata,entry,(sp)
84: dclr:
85: clrl (r3)+
86: cmpl r3,$_end
87: jlss dclr
88: /* this loop shouldn't be necessary, but is when booting from an ra81 */
89: xclr:
90: clrl (r3)+
91: cmpl r3,$0x100000
92: jlss xclr
93: jmp *abegin
94: begin:
95: #endif
96: movl r11,_boothowto
97: movl r10,_bootdev
98: again:
99: mtpr $0,$SCBB
100: calls $0,_configure
101: movl $1,_openfirst
102: calls $0,_main
103: #ifdef REL
104: jmp again
105: #else
106: ret
107: #endif
108:
109: .data
110: #ifdef REL
111: abegin: .long begin
112: aedata: .long _edata-RELOC
113: #else
114: aedata: .long _edata
115: #endif
116: _bootdev: .long 0
117: _boothowto: .long 0
118: .text
119:
120: __rtt:
121: .word 0x0
122: #ifdef REL
123: halt
124: #else
125: jmp start
126: #endif
127:
128: .globl _badaddr
129: _badaddr:
130: .word 0
131: movl $1,r0
132: movl 4(ap),r3
133: movl 8(ap),r4
134: movl $4,r2
135: movab 9f,(r2)
136: bbc $0,r4,1f; tstb (r3)
137: 1: bbc $1,r4,1f; tstw (r3)
138: 1: bbc $2,r4,1f; tstl (r3)
139: 1: clrl r0 # made it w/o machine checks
140: 2: movl $4,r2
141: clrl (r2)
142: ret
143: .align 2
144: 9:
145: casel _cpu,$1,$VAX_MAX
146: 0:
147: .word 8f-0b # 1 is 780
148: .word 5f-0b # 2 is 750
149: .word 5f-0b # 3 is 730
150: .word 6f-0b # 4 is 8600
151: .word 5f-0b # 5 is 8200
152: .word 1f-0b # 6 is 8800
153: .word 1f-0b # 7 is 610
154: .word 5f-0b # 8 is 630
155: 5:
156: mtpr $0xf,$MCESR
157: brb 1f
158: 6:
159: mtpr $0,$EHSR
160: brb 1f
161: 8:
162: mtpr $0,$SBIFS
163: 1:
164: addl2 (sp)+,sp # discard mchchk trash
165: movab 2b,(sp)
166: rei
167:
168: /*
169: * Short assembly versions of strcmp, strcpy, and strlen
170: * that do not use special instructions.
171: */
172: .globl _strcmp
173: _strcmp:
174: .word 0
175: movq 4(ap),r0
176: 0: cmpb (r0),(r1)+
177: bneq 1f
178: tstb (r0)+
179: bneq 0b
180: clrl r0
181: ret
182: 1: cvtbl (r0),r0
183: cvtbl -(r1),r1
184: subl2 r1,r0
185: ret
186:
187: .globl _strcpy
188: _strcpy:
189: .word 0
190: movq 4(ap),r0
191: 0: movb (r1)+,(r0)+
192: bneq 0b
193: movl 4(ap),r0
194: ret
195:
196: .globl _strlen
197: _strlen:
198: .word 0
199: movl 4(ap),r0
200: 0: tstb (r0)+
201: bneq 0b
202: decl r0
203: subl2 4(ap),r0
204: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.