| | copy binary image and execute | | written by ITOH Yasufumi | public domain | | $NetBSD: trampoline.S,v 1.3 2011/02/21 02:31:59 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)