home *** CD-ROM | disk | FTP | other *** search
/ Really Useful CD 1 / ReallyUsefulCD1.iso / extras / languages / smalltalk / _smalltalk / sources / a / _mysyscall next >
Encoding:
Text File  |  1988-12-28  |  1.3 KB  |  85 lines

  1. ;-> a.SystemCall
  2.  
  3. pc    = 15
  4.  
  5.         .EXTERN __main, Image$$RO$$Base
  6.  
  7. ;       ========== ADR macro
  8.  
  9.     .MACRO  ADR reg, label
  10.     .IF (label) >= $ + 8
  11.       ADD reg, R15, #(label) - $ - 8
  12.     .ELSE
  13.       SUB reg, R15, #$ + 8 - (label)
  14.     .ENDIF
  15.     .ENDM
  16.  
  17. ;       ==========
  18.  
  19.         .AREA  A$$code .READONLY,.CODE
  20.  
  21.         B __main
  22.  
  23. oursystemcall::
  24.  
  25.         STMDB R12!, {R0-R11, R13,R14}
  26.         MOV R9, R0
  27.  
  28.         ; find and save current env & control values
  29.         MOV R0, #0
  30.         MOV R1, #0
  31.         MOV R2, #0
  32.         MOV R3, #2
  33.         MOV R4, #0
  34.         MOV R5, #0
  35.         MOV R6, #0
  36.         MOV R7, #0
  37.  
  38.         SWI 0x12 ; OS_SetEnv
  39.  
  40.         STMDB R12!, {R0-R7}
  41.  
  42.         MOV R0, #0
  43.         MOV R1, #0
  44.         MOV R2, #0
  45.         MOV R3, #0
  46.  
  47.         SWI 0x0F ; OS_Control
  48.  
  49.         STMDB R12!, {R0-R3}
  50.  
  51.         ; now set up env & control for called prog
  52.         ADR R0, exitCode
  53.         LDR R1, base
  54.         MOV R2, #0
  55.         MOV R3, #2
  56.         MOV R4, #0
  57.         MOV R5, #0
  58.         MOV R6, #0
  59.         MOV R7, #0
  60.  
  61.         SWI 0x12 ; OS_SetEnv
  62.  
  63.         STR R12, stackSave
  64.  
  65.         MOV R0, R9
  66.  
  67.         SWI 0x05 ; OS_CLI
  68.  
  69. exitCode:
  70.         LDR R12, stackSave
  71.  
  72.         LDMIA R12!, {R0-R3}
  73.  
  74.         SWI 0x0F ; OS_Control
  75.  
  76.         LDMIA R12!, {R0-R7}
  77.  
  78.         SWI 0x12 ; OS_SetEnv
  79.  
  80.         LDMIA R12!, {R0-R11, R13, pc}^
  81.  
  82. stackSave:
  83.         .ADDRESS 0
  84. base:   .ADDRESS Image$$RO$$Base
  85.