;$Id: s.cstart 3.1 93/03/09 23:36:57 brian Exp $
r0      RN      0
r1      RN      1
r2      RN      2
r3      RN      3
r4      RN      4
r5      RN      5
r6      RN      6
r7      RN      7
r8      RN      8
r9      RN      9
r10     RN     10
r11     RN     11
r12     RN     12
r13     RN     13
r14     RN     14
r15     RN     15

a1      RN      0
a2      RN      1
a3      RN      2
a4      RN      3

v1      RN      4
v2      RN      5
v3      RN      6
v4      RN      7
v5      RN      8
v6      RN      9

sl      RN     10
fp      RN     11
ip      RN     12
sp      RN     13
lr      RN     14
pc      RN     15

STACK_SIZE * 8192
OS_Module * &001e
OS_Exit * &0011


        IMPORT  |Image$$RO$$Base|
        IMPORT  |_Lib$Reloc$Off$DP|
        IMPORT  filertask
        IMPORT  taskstack

        EXPORT  |_blib_entermodule|

        AREA    |_blib_entermodulearea|,REL,CODE,READONLY

|_blib_entermodule|
        MOV     v1,r0           ;Save command tail
        LDR     r12,[r12]       ;Workspace ptr from private word
        LDMIB   r12,{v2,v3}     ;Module relocations
        LDR     v4,taskstackptr ;A Ptr to taskstack variable
        ADD     v4,v4,v3        ;gets relocated for user variable
        MOV     r0,#6
        MOV     r3,#STACK_SIZE
        SWI     OS_Module
        MOV     sl,r2
        STR     sl,[v4]
        ADD     sp,sl,r3
        STMIA   sl,{v2,v3}

        ; This is equivalent of 'ADD r10, r10, #0' + |_Lib$Reloc$Off$DP|
        DCD     |_Lib$Reloc$Off$DP| + &E28AA000

        MOV     fp,#0
        MOV     a1,v1
        BL      filertask

        ; This is equivalent of 'SUB r10, r10, #0' + |_Lib$Reloc$Off$DP|
        DCD     |_Lib$Reloc$Off$DP| + &E24AA000

        MOV     v1,r0

        MOV     r2,sl
        MOV     r0,#7
        SWI     OS_Module
        MOV     r0,#0
        STR     r0,[v4]

        MOV     r0,v1
        SWI     OS_Exit

taskstackptr
        DCD     taskstack

        END
