1| 2| copy binary image and execute 3| 4| written by Yasha (ITOH Yasufumi) 5| public domain 6| 7| $NetBSD: trampoline.S,v 1.2 2001/06/12 16:57:28 minoura 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 18ENTRY_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 42Lmmu030: 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 50Lmmu020: 51 movel #0x7fff0001,%sp@- | null root pointer 52 .long 0xF0174C00 | pmove %sp@,%crp 53 .long 0xF0174800 | pmove %sp@,%srp 54 addql #8,%sp 55Lmmudone: 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 69GLOBAL(end_trampoline) 70