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