start.S revision 1.13 1 /* $NetBSD: start.S,v 1.13 2003/08/29 12:58:39 dsl Exp $ */
2
3 /*
4 * Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Christopher G. Demetriou
17 * for the NetBSD Project.
18 * 4. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 /*
34 * Mach Operating System
35 * Copyright (c) 1992 Carnegie Mellon University
36 * All Rights Reserved.
37 *
38 * Permission to use, copy, modify and distribute this software and its
39 * documentation is hereby granted, provided that both the copyright
40 * notice and this permission notice appear in all copies of the
41 * software, derivative works or modified versions, and any portions
42 * thereof, and that both notices appear in supporting documentation.
43 *
44 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
45 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
46 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
47 *
48 * Carnegie Mellon requests users of this software to return to
49 *
50 * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU
51 * School of Computer Science
52 * Carnegie Mellon University
53 * Pittsburgh PA 15213-3890
54 *
55 * any improvements or extensions that they make and grant Carnegie Mellon
56 * the rights to redistribute these changes.
57 */
58
59 #include "include/asm.h"
60
61 /*
62 * start --
63 * Entry point for boot/standalone programs.
64 *
65 * Unified and Primary Bootstrap arguments:
66 * None.
67 *
68 * Secondary Bootstrap arguments:
69 * a0 first free physical page
70 *
71 * Standalone program arguments:
72 *
73 * a0 first free physical page
74 * a1 page table base register (PTBR)
75 * a2 bootinfo magic number
76 * a3 pointer to the bootinfo structure
77 * a4 bootinfo version number
78 *
79 * All bootstrap and standalone programs leave exception and interrupt
80 * handling to the firmware, and run from the firmware-provided stack.
81 * To return to the firmware, these programs simply invoke the 'halt'
82 * PALcode operation.
83 *
84 * Bootstrap programs have to clear their own BSS. Standalone programs
85 * have their BSS cleared by the bootstraps.
86 */
87 .text
88 .set noreorder /* don't reorder instructions */
89
90 #define ENTRY_FRAME 32
91
92 NESTED(start, 1, ENTRY_FRAME, ra, 0, 0)
93 br pv,Lstartgp
94 Lstartgp:
95 LDGP(pv)
96
97 #if defined(STANDALONE_PROGRAM)
98
99 /*
100 * save the arguments, invoke init_prom_calls() to set up console
101 * callbacks and output, then restore the arguments.
102 */
103 mov a0, s0
104 mov a1, s1
105 mov a2, s2
106 mov a3, s3
107 mov a4, s4
108 CALL(init_prom_calls)
109 mov s0, a0
110 mov s1, a1
111 mov s2, a2
112 mov s3, a3
113 mov s4, a4
114
115 #else /* defined(STANDALONE_PROGRAM) */
116
117 #if !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK)
118 lda sp,start /* start stack below text */
119 lda sp,-ENTRY_FRAME(sp)
120
121 or a0,zero,s0
122 #endif /* !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK) */
123 lda a0,_edata
124 xor a1,a1,a1
125 lda a2,_end
126 subq a2,a0,a2
127 CALL(memset)
128 #if !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK)
129 or s0,zero,a0
130 #endif /* !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK) */
131
132 #endif /* defined(STANDALONE_PROGRAM) */
133
134 CALL(main) /* transfer to C */
135
136 XLEAF(_rtt, 0)
137 XLEAF(halt, 0)
138 call_pal PAL_halt /* halt if we ever return */
139 END(start)
140