1/* $NetBSD: rmheader.S,v 1.2.2.3 2004/09/21 13:11:35 skrll Exp $ */ 2 3/*- 4 * Copyright (c) 2001 Ben Harris 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. The name of the author may not be used to endorse or promote products 16 * derived from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30/* 31 * Relocatable module header for boot32. 32 */ 33 34#include <riscoscalls.h> 35 36rmbase: 37 b rmstart /* Start code */ 38 .word 0 /* Initialisation code */ 39 .word 0 /* Finalisation code */ 40 .word 0 /* Service call handler */ 41 .word rmtitle - rmbase /* Title string */ 42 .word rmhelp - rmbase /* Help string */ 43 .word rmcmdtbl - rmbase /* Help and command keyword table */ 44 .word 0 /* SWI chunk base number */ 45 .word 0 /* SWI handler code offset */ 46 .word 0 /* SWI decoding table offset */ 47 .word 0 /* SWI decoding code offset */ 48 .word 0 /* Messages filename offset */ 49 .word flags - rmbase /* Module flags extension offset */ 50 51rmtitle: 52 .asciz "boot32" 53 .align 54flags: 55 .word 1 /* 32 bit compatible */ 56 57rmstart: 58 /* 59 * This entry point is called when we're started up as an application, 60 * so we're allowed to use application workspace. This is good, 61 * because most of our code is linked to run at 0x8000. 62 */ 63 mov r0, #0x8000 64 adr r1, rmbase 65 ldr r2, Lsize 66Lcopyloop: 67 ldr r3, [r1], #4 68 str r3, [r0], #4 69 subs r2, r2, #4 70 bgt Lcopyloop 71 mov r0, #0x8000 72 mov r1, #128*1024 73LDsync_loop: 74 ldrb r3, [r0], #1 75 subs r1, r1, #1 76 bgt LDsync_loop 77 ldr r0, Lstart 78 mov pc, r0 79 80 /* 81 * The size of the code/data to be moved is not `end - rmbase' but 82 * `__bss_start__ - rmbase' for the module is loaded into RISC OS 83 * based on the filesize where as NetBSD doesn't have to include all 84 * the bss space into the file itself. In some odd cases the 85 * relocatable module area can be smaller than the module + bss and 86 * thus bomb out. 87 */ 88Lsize: 89 .word __bss_start__ - rmbase 90Lstart: 91 .word _start 92 93rmcmdtbl: 94 .asciz "boot32" /* Command text */ 95 .align 96 .word rmcmd_boot32 - rmbase /* Command code */ 97 .byte 0x00 /* Min 0 parameters */ 98 .byte 0x00 /* No GSTransed parameters */ 99 .byte 0xff /* Max 255 parameters */ 100 .byte 0x00 /* Normal command */ 101 .word 0 /* No syntax message */ 102 .word 0 /* No help message */ 103 104rmcmd_boot32: 105 /* We're called with r0 -> command tail. */ 106 stmfd r13!, {r14} 107 mov r2, r0 108 mov r0, #2 109 adr r1, rmtitle 110 swi XOS_Module 111 ldmfd r13!, {pc} 112