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