|
|
1.1 root 1: /*
2: * Copyright (c) 1988 University of Utah.
3: * Copyright (c) 1982, 1990 The Regents of the University of California.
4: * All rights reserved.
5: *
6: * This code is derived from software contributed to Berkeley by
7: * the Systems Programming Group of the University of Utah Computer
8: * Science Department.
9: *
10: * Redistribution is only permitted until one year after the first shipment
11: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
12: * binary forms are permitted provided that: (1) source distributions retain
13: * this entire copyright notice and comment, and (2) distributions including
14: * binaries display the following acknowledgement: This product includes
15: * software developed by the University of California, Berkeley and its
16: * contributors'' in the documentation or other materials provided with the
17: * distribution and in all advertising materials mentioning features or use
18: * of this software. Neither the name of the University nor the names of
19: * its contributors may be used to endorse or promote products derived from
20: * this software without specific prior written permission.
21: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
22: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
23: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
24: *
25: * from: Utah $Hdr: srt0.c 1.8 88/12/03$
26: *
27: * @(#)srt0.c 7.2 (Berkeley) 5/25/90
28: */
29:
30: /*
31: * Startup code for standalone system
32: */
33:
34: .globl begin
35: .globl _end
36: .globl _edata
37: .globl _main
38: .globl _configure
39: .globl _openfirst
40: .globl __rtt
41: .globl _lowram,_howto,_devtype,_internalhpib
42:
43: STACK = 0xfffff000 | below the ROM page
44: BOOTTYPE = 0xfffffdc0
45: LOWRAM = 0xfffffdce
46: SYSFLAG = 0xfffffed2 | system flags
47: MSUS = 0xfffffedc | MSUS (?) structure
48: VECTORS = 0xfffffee0 | beginning of jump vectors
49: NMIRESET = 0xffffff9c | reset vector
50: BUSERR = 0xfffffffc
51: MAXADDR = 0xfffff000
52: NBPG = 4096
53:
54: .data
55: _lowram:
56: .long 0
57: _howto:
58: .long 0
59: _devtype:
60: .long 0
61:
62: .text
63: begin:
64: movl #STACK,sp
65: moveq #47,d0 | # of vectors - 1
66: movl #VECTORS+2,a0 | addr part of first vector
67: vecloop:
68: movl #trap,a0@ | make it direct to trap
69: addql #6,a0 | move to next vector addr
70: dbf d0,vecloop | go til done
71: movl #NMIRESET,a0 | NMI keyboard reset addr
72: movl #nmi,a0@ | catch in reset routine
73: btst #5,SYSFLAG | do we have an internal HP-IB?
74: jeq boottype | yes, continue
75: clrl _internalhpib | no, clear the internal address
76: boottype:
77: cmpw #12,BOOTTYPE | is this a reboot (REQ_REBOOT)?
78: jne notreboot | no, skip
79: movl #MAXADDR,a0 | find last page
80: movl a0@+,d7 | and extract howto, devtype
81: movl a0@+,d6 | from where doboot() left them
82: jra boot1
83: /*
84: * At this point we do not know which logical hpib the given select
85: * code refers to. So we just put the select code in the adaptor field
86: * where hpibinit() can replace it with the logical hpib number.
87: * Note that this may clobber the B_DEVMAGIC field but that isn't set
88: * til later anyway.
89: */
90: notreboot:
91: cmpw #18,BOOTTYPE | does the user want to interact?
92: jeq askme | yes, go to it
93: movl MSUS,d1 | no, get rom info
94: movw d1,d6 | MSUS comes with SC in upper, unit in lower
95: swap d6 | put in place
96: movw #2,d6 | assume 'a' partition of rd disk
97: moveq #0,d7 | default to RB_AUTOBOOT
98: jra boot1
99: askme:
100: moveq #7,d6 | default to HP-IB at sc7
101: lslw #8,d6 | position as adaptor number
102: swap d6 | put in place (note implied unit 0)
103: movw #2,d6 | assume 'a' partition of rd disk
104: moveq #3,d7 | default to RB_SINGLE|RB_ASKNAME
105: boot1:
106: movl d6,_devtype | save devtype and howto
107: movl d7,_howto | globally so all can access
108: movl LOWRAM,d0 | read lowram value from bootrom
109: addl #NBPG,d0 | must preserve this for bootrom to reboot
110: andl #0xfffff000,d0 | round to next page
111: movl d0,_lowram | stash that value
112: start:
113: movl #_edata,a2 | start of BSS
114: movl #_end,a3 | end
115: clr:
116: clrb a2@+ | clear BSS
117: cmpl a2,a3 | done?
118: bne clr | no, keep going
119: jsr _configure | configure critical devices
120: movl #1,_openfirst | mark this as the first open
121: jsr _main | lets go
122: __rtt:
123: movl #3,_howto | restarts get RB_SINGLE|RB_ASKNAME
124: jmp start
125:
126: /*
127: * probe a location and see if it causes a bus error
128: */
129: .globl _badaddr
130: _badaddr:
131: movl BUSERR,__bsave | save ROM bus error handler address
132: movl sp,__ssave | and current stack pointer
133: movl #catchbad,BUSERR| plug in our handler
134: movl sp@(4),a0 | address to probe
135: movw a0@,d1 | do it
136: movl __bsave,BUSERR | if we got here, it didn't fault
137: clrl d0 | return that this was not a bad addr
138: rts
139:
140: catchbad:
141: movl __bsave,BUSERR | got a bus error, so restore old handler
142: movl __ssave,sp | manually restore stack
143: moveq #1,d0 | indicate that we got a fault
144: rts | return to caller of badaddr()
145:
146: __bsave:
147: .long 0
148: __ssave:
149: .long 0
150:
151: .globl _trap
152: trap:
153: moveml #0xFFFF,sp@- | save registers
154: movl sp,sp@- | push pointer to frame
155: jsr _trap | call C routine to deal with it
156: stop #0x2700 | stop cold
157:
158: nmi:
159: movw #18,BOOTTYPE | mark as system switch
160: jsr _kbdnmi | clear the interrupt
161: jra begin | start over
162:
163: #ifdef ROMPRF
164: .globl _romout
165: _romout:
166: movl sp@(4),d0 | line number
167: movl sp@(8),a0 | string
168: jsr 0x150 | do it
169: rts
170: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.