xref: /openbsd/sys/arch/landisk/stand/xxboot/xxboot.S (revision 73471bf0)
1/*	$OpenBSD: xxboot.S,v 1.1 2006/11/08 17:46:56 deraadt Exp $	*/
2/*	$NetBSD: xxboot.S,v 1.1 2006/09/01 21:26:19 uwe Exp $	*/
3
4/*-
5 * Copyright (c) 2005 NONAKA Kimihiro
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#include <machine/asm.h>
31
32ENTRY(xxboot_start)
33	bra	xxboot_start1
34	 nop
35	.balign 4
36ENTRY(xxboot_magic)
37	.long	0x20031125
38boot_params:
39	.long	1f - boot_params
40
41	. = xxboot_start + 0x80
42xxboot_start1:
43	mov.l	.L._end, r0		/* zero bss */
44	mov.l	.L.__bss_start, r1
45	sub	r1, r0
46	shlr2	r0			/* _end and __bss_start are aligned */
47	mov	#0, r2
481:	mov.l	r2, @r1
49	dt	r0
50	bf/s	1b
51	 add	#4, r1
52
53	mov.l	.L.2nd_loadaddr, r15	/* new stack pointer */
54	mov.l	r4, @-r15
55	mov.l	.L.boot1, r0
56	jsr	@r0
57	 mov	r15, r4
58
59	tst	r0, r0
60	bf/s	boot_fail
61	 mov.l	@r15+, r5		/* pass boot sector to boot */
62
63	/* flush cache */
64	mov	#0, r4
65	mov	#6, r0
66	trapa	#0x3f
67
68	mov.l	.L.2nd_loadaddr, r0
69	mov.l	.L.boot_params, r4
70	jmp	@r0
71	 nop
72
73boot_fail:
74	mov	r0, r1
75	mova	.L.errtxt, r0
76	mov	r0, r4
77	mov	#32, r0
78	trapa	#0x3f
79	mov	r1, r4
80	mov	#32, r0
81	trapa	#0x3f
82	mova	.L.crlf, r0
83	mov	r0, r4
84	mov	#32, r0
85	trapa	#0x3f
8699:	bra	99b
87	 nop
88
89
90	.align	2
91.L._end:
92	.long	_end
93.L.__bss_start:
94	.long	__bss_start
95.L.boot1:
96	.long	_C_LABEL(boot1)
97.L.2nd_loadaddr:
98	.long	LOADADDRESS
99.L.boot_params:
100	.long	boot_params
101
102	.align	2
103.L.errtxt:	.asciz	"Error: "
104	.align	2
105.L.crlf:	.asciz	"\r\n"
106
107
108/*
109 * int readsects(int dev, uint32_t lba, void *buf, size_t size);
110 */
111ENTRY(readsects)
112	mov	#2, r0
113	trapa	#0x3f
114	rts
115	 nop
116argerror:
117	rts
118	 mov	#-1, r0
119
120/*
121 * void putstr(const char *str);
122 */
123ENTRY(putstr)
124	mov	#32, r0
125	trapa	#0x3f
126	rts
127	 nop
128
129/*
130 * void putchar(int c);
131 */
132ENTRY(putchar)
133	mov	#31, r0
134	trapa	#0x3f
135	rts
136	 nop
137
138