| | copy binary image and execute | | written by Yasha (ITOH Yasufumi) | public domain | | $NetBSD: trampoline.S,v 1.1 1998/09/01 19:55:33 itohy Exp $ #include #include "trampoline.h" | arg+0 bsr trampoline | +4 a3+0 temporary stack address | +8 a3+4 processor type | +12 a3+8 struct execkern_arg | +52 trampoline ENTRY_NOPROFILE(trampoline) oriw #0x0700,sr | keep out interrupts moveal sp@+,a3 moveal a3@+,sp | set temporary stack movel a3@+,d2 | MPU type | | turn off MMU | moveq #MPU_68030,d0 cmpl d2,d0 bccs Lmmu030 | 040/060 moveq #0,d0 .long 0x4E7B0003 | movec d0,tc .long 0x4E7B0004 | movec d0,itt0 .long 0x4E7B0005 | movec d0,itt1 .long 0x4E7B0006 | movec d0,dtt0 .long 0x4E7B0007 | movec d0,dtt1 .long 0x4E7B0806 | movec d0,urp .long 0x4E7B0807 | movec d0,srp bras Lmmudone Lmmu030: | 020/030 clrl sp@- .long 0xF0174000 | pmove sp@,tc cmpl d0,d2 bnes Lmmu020 | 68851 has no tt regs .long 0xF0170800 | pmove sp@,tt0 .long 0xF0170C00 | pmove sp@,tt1 Lmmu020: movel #0x7fff0001,sp@- | null root pointer .long 0xF0174C00 | pmove sp@,crp .long 0xF0174800 | pmove sp@,srp addql #8,sp Lmmudone: | minimize supervisor protection clrb AREA_SET_REG | reset VBR (for compatibility) subal a1,a1 .long 0x4E7B9801 | movec a1,vbr | then transfer and exec kernel #define XK_NO_C_INTERFACE /* pass arg with a3 */ #include "../common/execkern.S" GLOBAL(end_trampoline)