1/* $NetBSD: srt0.s,v 1.2 2001/05/12 22:35:30 chs 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 39ASENTRY_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 43Lclr: 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 78ENTRY(_halt) 79 movel save_vbr,%a0 80 movec %a0,%vbr | restore prom vbr 81hloop: 82 movel #halt,%d0 83 trap #13 | halt the system 84 bra hloop | and do not allow continuation 85 86ASENTRY_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 96Lstop: 97 bra Lstop | stay here 98 99 .data 100save_vbr: 101 .long 0 102halt: 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 111vectbl: 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