Home | History | Annotate | Line # | Download | only in boot
srt0.s revision 1.1.1.1.26.1
      1  1.1.1.1.26.1  nathanw /*	$NetBSD: srt0.s,v 1.1.1.1.26.1 2001/06/21 19:30:52 nathanw Exp $	*/
      2           1.1      dbj /*
      3           1.1      dbj  * Copyright (c) 1994 Rolf Grossmann
      4           1.1      dbj  * All rights reserved.
      5           1.1      dbj  *
      6           1.1      dbj  * Redistribution and use in source and binary forms, with or without
      7           1.1      dbj  * modification, are permitted provided that the following conditions
      8           1.1      dbj  * are met:
      9           1.1      dbj  * 1. Redistributions of source code must retain the above copyright
     10           1.1      dbj  *    notice, this list of conditions and the following disclaimer.
     11           1.1      dbj  * 2. Redistributions in binary form must reproduce the above copyright
     12           1.1      dbj  *    notice, this list of conditions and the following disclaimer in the
     13           1.1      dbj  *    documentation and/or other materials provided with the distribution.
     14           1.1      dbj  * 3. All advertising materials mentioning features or use of this software
     15           1.1      dbj  *    must display the following acknowledgement:
     16           1.1      dbj  *      This product includes software developed by Rolf Grossmann.
     17           1.1      dbj  * 4. The name of the author may not be used to endorse or promote products
     18           1.1      dbj  *    derived from this software without specific prior written permission
     19           1.1      dbj  *
     20           1.1      dbj  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     21           1.1      dbj  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     22           1.1      dbj  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     23           1.1      dbj  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     24           1.1      dbj  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     25           1.1      dbj  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26           1.1      dbj  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27           1.1      dbj  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28           1.1      dbj  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     29           1.1      dbj  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30           1.1      dbj  */
     31           1.1      dbj 
     32  1.1.1.1.26.1  nathanw #include <machine/asm.h>
     33  1.1.1.1.26.1  nathanw 
     34           1.1      dbj /*
     35           1.1      dbj  * Startup code for standalone system
     36           1.1      dbj  */
     37           1.1      dbj 
     38  1.1.1.1.26.1  nathanw 	.text
     39  1.1.1.1.26.1  nathanw ASENTRY_NOPROFILE(start)
     40  1.1.1.1.26.1  nathanw 	|| clear bss (this should not hurt us i.e. cause an exception)
     41  1.1.1.1.26.1  nathanw 	movel	#_C_LABEL(edata),%a2	| start of BSS
     42  1.1.1.1.26.1  nathanw 	movel	#_C_LABEL(end),%a3	| end
     43           1.1      dbj Lclr:
     44  1.1.1.1.26.1  nathanw 	clrb	%a2@+			| clear BSS
     45  1.1.1.1.26.1  nathanw 	cmpl	%a2,%a3			| done?
     46  1.1.1.1.26.1  nathanw 	bne	Lclr			| no, keep going
     47  1.1.1.1.26.1  nathanw 
     48  1.1.1.1.26.1  nathanw 	movl	#0x0808,%d0
     49  1.1.1.1.26.1  nathanw 	movc	%d0,%cacr		| clear and disable on-chip cache(s)
     50  1.1.1.1.26.1  nathanw 
     51  1.1.1.1.26.1  nathanw 	|| catch exceptions myself
     52  1.1.1.1.26.1  nathanw 	movec	%vbr,%a3
     53  1.1.1.1.26.1  nathanw 	movel	%a3,save_vbr		| save register for restoration
     54  1.1.1.1.26.1  nathanw 	lea	vectbl,%a4
     55  1.1.1.1.26.1  nathanw 	movel	%a3@(4),%a4@(4)		| copy mg, just for sure
     56  1.1.1.1.26.1  nathanw 	movel	%a3@(180),%a4@(180)	| copy vector for trap #13
     57  1.1.1.1.26.1  nathanw 	movel	%a3@(124),%a4@(124)	| copy vector for int 7
     58  1.1.1.1.26.1  nathanw 	movec	%a4,%vbr		| use the new table
     59  1.1.1.1.26.1  nathanw 
     60  1.1.1.1.26.1  nathanw 	|| save mg as pi
     61  1.1.1.1.26.1  nathanw 	movel	%a3@(4),_C_LABEL(mg)
     62  1.1.1.1.26.1  nathanw 
     63  1.1.1.1.26.1  nathanw 	|| make sure we disallow interrupts
     64  1.1.1.1.26.1  nathanw 	movew	#0x2600,%sr
     65  1.1.1.1.26.1  nathanw 
     66  1.1.1.1.26.1  nathanw 	|| away we go
     67  1.1.1.1.26.1  nathanw 	movel	%sp@(4),%sp@-		| copy the argument we got
     68  1.1.1.1.26.1  nathanw 	jsr	_C_LABEL(main)		| call C
     69  1.1.1.1.26.1  nathanw 	addql	#4,%sp
     70  1.1.1.1.26.1  nathanw 
     71  1.1.1.1.26.1  nathanw 	|| restore prom vectors
     72  1.1.1.1.26.1  nathanw 	movel	save_vbr,%a0
     73  1.1.1.1.26.1  nathanw 	movec	%a0,%vbr
     74  1.1.1.1.26.1  nathanw 
     75  1.1.1.1.26.1  nathanw 	|| return kernel start address (still in d0)
     76  1.1.1.1.26.1  nathanw 	rts
     77  1.1.1.1.26.1  nathanw 
     78  1.1.1.1.26.1  nathanw ENTRY(_halt)
     79  1.1.1.1.26.1  nathanw 	movel	save_vbr,%a0
     80  1.1.1.1.26.1  nathanw 	movec	%a0,%vbr		| restore prom vbr
     81           1.1      dbj hloop:
     82  1.1.1.1.26.1  nathanw 	movel	#halt,%d0
     83  1.1.1.1.26.1  nathanw 	trap	#13			| halt the system
     84  1.1.1.1.26.1  nathanw 	bra	hloop			| and do not allow continuation
     85  1.1.1.1.26.1  nathanw 
     86  1.1.1.1.26.1  nathanw ASENTRY_NOPROFILE(astrap)
     87  1.1.1.1.26.1  nathanw 	moveml	%d0-%d7/%a0-%a7,%sp@-	| save all registers
     88  1.1.1.1.26.1  nathanw 
     89  1.1.1.1.26.1  nathanw 	movel	%sp,%sp@-		| push pointer to registers
     90  1.1.1.1.26.1  nathanw 	jsr	_C_LABEL(trap)		| call C to handle things (dump regs)
     91  1.1.1.1.26.1  nathanw 	addql   #4,%sp
     92  1.1.1.1.26.1  nathanw 	tstl    %d0
     93  1.1.1.1.26.1  nathanw 	jeq     Lstop
     94  1.1.1.1.26.1  nathanw 	moveml  %sp@+,%d0-%d7/%a0-%a7
     95  1.1.1.1.26.1  nathanw 	rte
     96           1.1      dbj Lstop:
     97  1.1.1.1.26.1  nathanw 	bra	Lstop			| stay here
     98  1.1.1.1.26.1  nathanw 
     99  1.1.1.1.26.1  nathanw 	.data
    100           1.1      dbj save_vbr:
    101  1.1.1.1.26.1  nathanw 	.long 0
    102           1.1      dbj halt:
    103  1.1.1.1.26.1  nathanw 	.asciz "-h"
    104  1.1.1.1.26.1  nathanw 
    105  1.1.1.1.26.1  nathanw #define TRAP16 \
    106  1.1.1.1.26.1  nathanw 	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
    107  1.1.1.1.26.1  nathanw 	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
    108  1.1.1.1.26.1  nathanw 	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); \
    109  1.1.1.1.26.1  nathanw 	VECTOR(astrap); VECTOR(astrap); VECTOR(astrap); VECTOR(astrap);
    110  1.1.1.1.26.1  nathanw 
    111  1.1.1.1.26.1  nathanw vectbl:
    112  1.1.1.1.26.1  nathanw 	TRAP16
    113  1.1.1.1.26.1  nathanw 	TRAP16
    114  1.1.1.1.26.1  nathanw 	TRAP16
    115  1.1.1.1.26.1  nathanw 	TRAP16
    116  1.1.1.1.26.1  nathanw 	TRAP16
    117  1.1.1.1.26.1  nathanw 	TRAP16
    118  1.1.1.1.26.1  nathanw 	TRAP16
    119  1.1.1.1.26.1  nathanw 	TRAP16
    120  1.1.1.1.26.1  nathanw 	TRAP16
    121  1.1.1.1.26.1  nathanw 	TRAP16
    122  1.1.1.1.26.1  nathanw 	TRAP16
    123  1.1.1.1.26.1  nathanw 	TRAP16
    124  1.1.1.1.26.1  nathanw 	TRAP16
    125  1.1.1.1.26.1  nathanw 	TRAP16
    126  1.1.1.1.26.1  nathanw 	TRAP16
    127  1.1.1.1.26.1  nathanw 	TRAP16
    128