home *** CD-ROM | disk | FTP | other *** search
- ;-> a.SystemCall
-
- pc = 15
-
- .EXTERN __main, Image$$RO$$Base
-
- ; ========== ADR macro
-
- .MACRO ADR reg, label
- .IF (label) >= $ + 8
- ADD reg, R15, #(label) - $ - 8
- .ELSE
- SUB reg, R15, #$ + 8 - (label)
- .ENDIF
- .ENDM
-
- ; ==========
-
- .AREA A$$code .READONLY,.CODE
-
- B __main
-
- oursystemcall::
-
- STMDB R12!, {R0-R11, R13,R14}
- MOV R9, R0
-
- ; find and save current env & control values
- MOV R0, #0
- MOV R1, #0
- MOV R2, #0
- MOV R3, #2
- MOV R4, #0
- MOV R5, #0
- MOV R6, #0
- MOV R7, #0
-
- SWI 0x12 ; OS_SetEnv
-
- STMDB R12!, {R0-R7}
-
- MOV R0, #0
- MOV R1, #0
- MOV R2, #0
- MOV R3, #0
-
- SWI 0x0F ; OS_Control
-
- STMDB R12!, {R0-R3}
-
- ; now set up env & control for called prog
- ADR R0, exitCode
- LDR R1, base
- MOV R2, #0
- MOV R3, #2
- MOV R4, #0
- MOV R5, #0
- MOV R6, #0
- MOV R7, #0
-
- SWI 0x12 ; OS_SetEnv
-
- STR R12, stackSave
-
- MOV R0, R9
-
- SWI 0x05 ; OS_CLI
-
- exitCode:
- LDR R12, stackSave
-
- LDMIA R12!, {R0-R3}
-
- SWI 0x0F ; OS_Control
-
- LDMIA R12!, {R0-R7}
-
- SWI 0x12 ; OS_SetEnv
-
- LDMIA R12!, {R0-R11, R13, pc}^
-
- stackSave:
- .ADDRESS 0
- base: .ADDRESS Image$$RO$$Base
-