xref: /netbsd-src/sys/arch/x68k/stand/loadbsd/trampoline.S (revision ed461fc193a34ff07bc68b0c28567cb8cfe199e5)
1ecc30b17Sitohy|
2ecc30b17Sitohy|	copy binary image and execute
3ecc30b17Sitohy|
4*ed461fc1Sitohy|	written by ITOH Yasufumi
5ecc30b17Sitohy|	public domain
6ecc30b17Sitohy|
7*ed461fc1Sitohy|	$NetBSD: trampoline.S,v 1.3 2011/02/21 02:31:59 itohy Exp $
8ecc30b17Sitohy
9ecc30b17Sitohy#include <machine/asm.h>
10ecc30b17Sitohy#include "trampoline.h"
11ecc30b17Sitohy
12ecc30b17Sitohy|    arg+0		bsr trampoline
13f8ce82f8Sminoura|	+4	%a3+0	temporary stack address
14f8ce82f8Sminoura|	+8	%a3+4	processor type
15f8ce82f8Sminoura|	+12	%a3+8	struct execkern_arg
16ecc30b17Sitohy|	+52		trampoline
17ecc30b17Sitohy
18ecc30b17SitohyENTRY_NOPROFILE(trampoline)
19f8ce82f8Sminoura	oriw	#0x0700,%sr		| keep out interrupts
20ecc30b17Sitohy
21f8ce82f8Sminoura	moveal	%sp@+,%a3
22f8ce82f8Sminoura	moveal	%a3@+,%sp		| set temporary stack
23ecc30b17Sitohy
24f8ce82f8Sminoura	movel	%a3@+,%d2		| MPU type
25ecc30b17Sitohy
26ecc30b17Sitohy	|
27ecc30b17Sitohy	| turn off MMU
28ecc30b17Sitohy	|
29f8ce82f8Sminoura	moveq	#MPU_68030,%d0
30f8ce82f8Sminoura	cmpl	%d2,%d0
31ecc30b17Sitohy	bccs	Lmmu030
32ecc30b17Sitohy	| 040/060
33f8ce82f8Sminoura	moveq	#0,%d0
34f8ce82f8Sminoura	.long	0x4E7B0003		| movec	%d0,%tc
35f8ce82f8Sminoura	.long	0x4E7B0004		| movec	%d0,%itt0
36f8ce82f8Sminoura	.long	0x4E7B0005		| movec	%d0,%itt1
37f8ce82f8Sminoura	.long	0x4E7B0006		| movec	%d0,%dtt0
38f8ce82f8Sminoura	.long	0x4E7B0007		| movec	%d0,%dtt1
39f8ce82f8Sminoura	.long	0x4E7B0806		| movec	%d0,%urp
40f8ce82f8Sminoura	.long	0x4E7B0807		| movec	%d0,%srp
41ecc30b17Sitohy	bras	Lmmudone
42ecc30b17SitohyLmmu030:
43ecc30b17Sitohy	| 020/030
44f8ce82f8Sminoura	clrl	%sp@-
45f8ce82f8Sminoura	.long	0xF0174000		| pmove	%sp@,%tc
46f8ce82f8Sminoura	cmpl	%d0,%d2
47ecc30b17Sitohy	bnes	Lmmu020			| 68851 has no tt regs
48f8ce82f8Sminoura	.long	0xF0170800		| pmove	%sp@,%tt0
49f8ce82f8Sminoura	.long	0xF0170C00		| pmove	%sp@,%tt1
50ecc30b17SitohyLmmu020:
51f8ce82f8Sminoura	movel	#0x7fff0001,%sp@-	| null root pointer
52f8ce82f8Sminoura	.long	0xF0174C00		| pmove	%sp@,%crp
53f8ce82f8Sminoura	.long	0xF0174800		| pmove	%sp@,%srp
54f8ce82f8Sminoura	addql	#8,%sp
55ecc30b17SitohyLmmudone:
56ecc30b17Sitohy
57ecc30b17Sitohy	| minimize supervisor protection
58ecc30b17Sitohy	clrb	AREA_SET_REG
59ecc30b17Sitohy
60ecc30b17Sitohy	| reset VBR (for compatibility)
61f8ce82f8Sminoura	subal	%a1,%a1
62f8ce82f8Sminoura	.long	0x4E7B9801		| movec	%a1,%vbr
63ecc30b17Sitohy
64ecc30b17Sitohy	| then transfer and exec kernel
65ecc30b17Sitohy
66f8ce82f8Sminoura#define XK_NO_C_INTERFACE		/* pass arg with %a3 */
67ecc30b17Sitohy#include "../common/execkern.S"
68ecc30b17Sitohy
69ecc30b17SitohyGLOBAL(end_trampoline)
70