Home | History | Annotate | Line # | Download | only in boot
srt0.s revision 1.1
      1 /*	$NetBSD: srt0.s,v 1.1 1998/06/09 07:53:06 dbj 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 /*
     33  * Startup code for standalone system
     34  */
     35 
     36     .globl _mg			| struct prominfo
     37     .globl _end
     38     .globl _edata
     39     .globl _main
     40 
     41     .text
     42     .globl start
     43 
     44 start:
     45     || clear bss (this shouldn't hurt us i.e. cause an exception)
     46     movel #_edata,a2		| start of BSS
     47     movel #_end,a3		| end
     48 Lclr:
     49     clrb a2@+			| clear BSS
     50     cmpl a2,a3			| done?
     51     bne Lclr			| no, keep going
     52 
     53     movl	#0x0808,d0
     54     movc	d0,cacr         | clear and disable on-chip cache(s)
     55 
     56     || catch exceptions myself
     57     movec vbr, a3
     58     movel a3, save_vbr		| save register for restoration
     59     lea vectbl, a4
     60     movel a3@(4),a4@(4)		| copy mg, just for sure
     61     movel a3@(180),a4@(180)	| copy vector for trap #13
     62     movel a3@(124),a4@(124)	| copy vector for int 7
     63     movec a4,vbr		| use the new table
     64 
     65     || save mg as pi
     66     movel a3@(4),_mg
     67 
     68     || make sure we disallow interrupts
     69     movew #0x2600,sr
     70 
     71     || let's go
     72     movel sp@(4),sp@-		| copy the argument we got
     73     jsr _main			| call C
     74     addql #4,sp
     75 
     76     || restore prom vectors
     77     movel save_vbr, a0
     78     movec a0,vbr
     79 
     80     || return kernel start address (still in d0)
     81     rts
     82 
     83     .globl __halt
     84 __halt:
     85     movel save_vbr, a0
     86     movec a0,vbr		| restore prom vbr
     87 hloop:
     88     movel #halt, d0
     89     trap #13			| halt the system
     90     bra hloop			| and don't allow continuation
     91 
     92     .globl _trap
     93 trap:
     94     moveml d0-d7/a0-a7,sp@-	| save all registers
     95 
     96     movel sp,sp@-		| push pointer to registers
     97     jsr _trap			| call C to handle things (dump regs)
     98     addql   #4,sp
     99     tstl    d0
    100     jeq     Lstop
    101     moveml  sp@+,d0-d7/a0-a7
    102     rte
    103 Lstop:
    104     bra Lstop			| don't move
    105 
    106     .data
    107 save_vbr:
    108     .long 0
    109 halt:
    110     .asciz "-h"
    111 vectbl:				| copy of vector table (can't use .fill)
    112     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    113     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    114     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    115     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    116     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    117     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    118     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    119     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    120     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    121     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    122     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    123     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    124     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    125     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    126     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    127     .long trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap,trap
    128