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