start.S revision 1.2 1 1.2 martin /* $NetBSD: start.S,v 1.2 2008/04/28 20:23:19 martin Exp $ */
2 1.1 tsutsui
3 1.1 tsutsui /*-
4 1.1 tsutsui * Copyright (c) 2004 The NetBSD Foundation, Inc.
5 1.1 tsutsui * All rights reserved.
6 1.1 tsutsui *
7 1.1 tsutsui * This code is derived from software contributed to The NetBSD Foundation
8 1.1 tsutsui * by UCHIYAMA Yasushi.
9 1.1 tsutsui *
10 1.1 tsutsui * Redistribution and use in source and binary forms, with or without
11 1.1 tsutsui * modification, are permitted provided that the following conditions
12 1.1 tsutsui * are met:
13 1.1 tsutsui * 1. Redistributions of source code must retain the above copyright
14 1.1 tsutsui * notice, this list of conditions and the following disclaimer.
15 1.1 tsutsui * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 tsutsui * notice, this list of conditions and the following disclaimer in the
17 1.1 tsutsui * documentation and/or other materials provided with the distribution.
18 1.1 tsutsui *
19 1.1 tsutsui * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 tsutsui * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 tsutsui * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 tsutsui * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 tsutsui * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 tsutsui * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 tsutsui * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 tsutsui * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 tsutsui * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 tsutsui * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 tsutsui * POSSIBILITY OF SUCH DAMAGE.
30 1.1 tsutsui */
31 1.1 tsutsui
32 1.1 tsutsui #include <mips/regdef.h>
33 1.1 tsutsui
34 1.1 tsutsui .set noreorder
35 1.1 tsutsui .set mips3
36 1.1 tsutsui .align 2
37 1.1 tsutsui .text
38 1.1 tsutsui /*
39 1.1 tsutsui * Entry point.
40 1.1 tsutsui */
41 1.1 tsutsui .globl start
42 1.1 tsutsui start:
43 1.1 tsutsui nop
44 1.1 tsutsui nop
45 1.1 tsutsui nop
46 1.1 tsutsui nop
47 1.1 tsutsui la sp, _ftext
48 1.1 tsutsui
49 1.1 tsutsui mfc0 t0, $12
50 1.1 tsutsui lui t1, 0x0040 /* BEV : use IPL's exception vector. */
51 1.1 tsutsui and t0, t0, t1
52 1.1 tsutsui mtc0 t0, $12
53 1.1 tsutsui nop
54 1.1 tsutsui la t0, main
55 1.1 tsutsui move a1, v0
56 1.1 tsutsui jr t0
57 1.1 tsutsui move a2, v1 /* v1 = mainfo */
58 1.1 tsutsui 1: b 1b
59 1.1 tsutsui nop
60 1.1 tsutsui /* NOTREACHED */
61 1.1 tsutsui
62 1.1 tsutsui #if 0 /* ROM putc test */
63 1.1 tsutsui li a0, 50 /* x-pos */
64 1.1 tsutsui 2: li a2, 90 /* 'Z' */
65 1.1 tsutsui lui v0, 0xbfc0
66 1.1 tsutsui ori v0, 0xff60
67 1.1 tsutsui li a1, 50 /* y-pos */
68 1.1 tsutsui jal v0
69 1.1 tsutsui nop
70 1.1 tsutsui b 2b
71 1.1 tsutsui addiu a0, a0, 12
72 1.1 tsutsui /* NOTREACHED */
73 1.1 tsutsui #endif
74 1.1 tsutsui #if 0 /* Frame buffer (TLB kseg2 mapped by IPL) test */
75 1.1 tsutsui move a3, zero
76 1.1 tsutsui xori a3, a3, 0x00
77 1.1 tsutsui 3: sll v0, a3, 0x18
78 1.1 tsutsui sra a2, v0, 0x18
79 1.1 tsutsui lui a0, 0xf000
80 1.1 tsutsui move v1, zero
81 1.1 tsutsui lui a1, 0x1
82 1.1 tsutsui ori a1, a1, 0xffff
83 1.1 tsutsui 2: sb a2, 0(a0)
84 1.1 tsutsui addiu v1, v1, 1
85 1.1 tsutsui slt v0, a1, v1
86 1.1 tsutsui addiu a0, a0, 1
87 1.1 tsutsui beqz v0, 2b
88 1.1 tsutsui nop
89 1.1 tsutsui xori a3, a3, 0xff
90 1.1 tsutsui j 3b
91 1.1 tsutsui nop
92 1.1 tsutsui /* NOTREACHED */
93 1.1 tsutsui #endif
94 1.1 tsutsui
95 1.1 tsutsui /*
96 1.1 tsutsui * void tlb_read(int index, void *)
97 1.1 tsutsui */
98 1.1 tsutsui .global tlb_read
99 1.1 tsutsui .ent tlb_read
100 1.1 tsutsui tlb_read:
101 1.1 tsutsui mtc0 a0, $0 /* Index Register */
102 1.1 tsutsui nop; nop; nop; nop;
103 1.1 tsutsui tlbr
104 1.1 tsutsui nop; nop; nop; nop;
105 1.1 tsutsui mfc0 t0, $5 /* PageMask */
106 1.1 tsutsui nop; nop; nop; nop;
107 1.1 tsutsui mfc0 t1, $10 /* EntryHi */
108 1.1 tsutsui nop; nop; nop; nop;
109 1.1 tsutsui mfc0 t2, $2 /* EntryLo0 */
110 1.1 tsutsui nop; nop; nop; nop;
111 1.1 tsutsui mfc0 t3, $3 /* EntryLo1 */
112 1.1 tsutsui nop; nop; nop; nop;
113 1.1 tsutsui sw t0, 0(a1)
114 1.1 tsutsui sw t1, 4(a1)
115 1.1 tsutsui sw t2, 8(a1)
116 1.1 tsutsui sw t3, 12(a1)
117 1.1 tsutsui jr ra
118 1.1 tsutsui nop
119 1.1 tsutsui .end tlb_read
120