Removed all patch kit headers, sccsid and rcsid strings, put $Id$ in, some
[unix-history] / sys / i386 / stand / srt0.c
CommitLineData
15637ed4
RG
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * William Jolitz.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
e73885af
RG
36 * from: @(#)srt0.c 5.3 (Berkeley) 4/28/91
37 * $Id$
15637ed4
RG
38 */
39
40/*
41 * Startup code for standalone system
42 * Non-relocating version -- for programs which are loaded by boot
43 * Relocating version for boot
44 * Small relocating version for "micro" boot
45 */
46
47 .globl _end
48 .globl _edata
49 .globl _main
50 .globl __rtt
51 .globl _exit
52 .globl _bootdev
53 .globl _cyloffset
54#define NOP inb $0x84,%al ; inb $0x84,%al
55
56#ifdef SMALL
57 /* where the disklabel goes if we have one */
58 .globl _disklabel
59_disklabel:
60 .space 512
61 .globl _scsisn
62 .set _scsisn, RELOC+0x60
63#endif
64
65 .globl entry
66 .set entry,0
67 .globl start
68
69#if defined(REL) && !defined(SMALL)
70
71 /* relocate program and enter at symbol "start" */
72
73 #movl $entry-RELOC,%esi # from beginning of ram
74 movl $0,%esi
75 #movl $entry,%edi # to relocated area
76 movl $ RELOC,%edi # to relocated area
77 # movl $_edata-RELOC,%ecx # this much
78 movl $64*1024,%ecx
79 cld
80 rep
81 movsb
82 # relocate program counter to relocation base
83 pushl $start
84 ret
85#endif
86
87start:
88
89 /* setup stack pointer */
90
91#ifdef REL
92 leal 4(%esp),%eax /* ignore old pc */
93 movl $ RELOC-3*4,%ebx
94 /* copy boot parameters */
95 pushl $3*4
96 pushl %ebx
97 pushl %eax
98 call _bcopy
99 movl %ebx,%esp
100#else
101 /* save old stack state */
102 movl %esp,savearea
103 movl %ebp,savearea+4
104 movl $ RELOC-0x2400,%esp
105#endif
106
107 /* clear memory as needed */
108
109 movl %esp,%esi
110#ifdef REL
111
112 /*
113 * Clear Bss and up to 64K heap
114 */
115 movl $64*1024,%ebx
116 movl $_end,%eax # should be movl $_end-_edata but ...
117 subl $_edata,%eax
118 #addl %ebx,%eax
119 pushl %eax
120 pushl $_edata
121 call _bzero
122
123 /*
124 * Clear 64K of stack
125 */
126 movl %esi,%eax
127 subl %ebx,%eax
128 subl $5*4,%ebx
129 pushl %ebx
130 pushl %eax
131 call _bzero
132#else
133 movl $_edata,%edx
134 movl %esp,%eax
135 subl %edx,%eax
136 pushl %edx
137 pushl %esp
138 call _bzero
139#endif
140
141 call _kbdreset /* resets keyboard and gatea20 brain damage */
142 movl %esi,%esp
143 call _main
144 jmp 1f
145
146 .data
147_bootdev: .long 0
148_cyloffset: .long 0
149savearea: .long 0,0 # sp & bp to return to
150 .text
151 .globl _wait
152
153__rtt:
154 pushl $1000000
155 call _wait
156 popl %eax
157 movl $-7,%eax
158 jmp 1f
159
160_exit:
161 pushl $1000000
162 call _wait
163 popl %eax
164 movl 4(%esp),%eax
1651:
166#ifdef REL
167#ifndef SMALL
168 call _reset_cpu
169#endif
170 movw $0x1234,%ax
171 movw %ax,0x472 # warm boot
172 movl $0,%esp # segment violation
173 ret
174#else
175 movl savearea,%esp
176 movl savearea+4,%ebp
177 ret
178#endif
179
180 .globl _inb
181_inb: movl 4(%esp),%edx
182 subl %eax,%eax # clr eax
183 NOP
184 inb %dx,%al
185 ret
186
187 .globl _outb
188_outb: movl 4(%esp),%edx
189 NOP
190 movl 8(%esp),%eax
191 outb %al,%dx
192 ret
193
194 .globl ___udivsi3
195___udivsi3:
196 movl 4(%esp),%eax
197 xorl %edx,%edx
198 divl 8(%esp)
199 ret
200
201 .globl ___divsi3
202___divsi3:
203 movl 4(%esp),%eax
204 xorl %edx,%edx
205 cltd
206 idivl 8(%esp)
207 ret
208
209 #
210 # bzero (base,cnt)
211 #
212
213 .globl _bzero
214_bzero:
215 pushl %edi
216 movl 8(%esp),%edi
217 movl 12(%esp),%ecx
218 movb $0x00,%al
219 cld
220 rep
221 stosb
222 popl %edi
223 ret
224
225 #
226 # bcopy (src,dst,cnt)
227 # NOTE: does not (yet) handle overlapped copies
228 #
229
230 .globl _bcopy
231_bcopy:
232 pushl %esi
233 pushl %edi
234 movl 12(%esp),%esi
235 movl 16(%esp),%edi
236 movl 20(%esp),%ecx
237 cld
238 rep
239 movsb
240 popl %edi
241 popl %esi
242 ret
243
244 # insw(port,addr,cnt)
245 .globl _insw
246_insw:
247 pushl %edi
248 movw 8(%esp),%dx
249 movl 12(%esp),%edi
250 movl 16(%esp),%ecx
251 NOP
252 cld
253 nop
254 .byte 0x66,0xf2,0x6d # rep insw
255 nop
256 movl %edi,%eax
257 popl %edi
258 ret
259
260 # outsw(port,addr,cnt)
261 .globl _outsw
262_outsw:
263 pushl %esi
264 movw 8(%esp),%dx
265 movl 12(%esp),%esi
266 movl 16(%esp),%ecx
267 NOP
268 cld
269 nop
270 .byte 0x66,0xf2,0x6f # rep outsw
271 nop
272 movl %esi,%eax
273 popl %esi
274 ret