home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / sys / s / _exec < prev    next >
Text File  |  1994-02-26  |  4KB  |  161 lines

  1. ;       /* _exec.s (c) Copyright 1990 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         IMPORT  |__exret|
  8.  
  9.         IMPORT  |__base|
  10.         IMPORT  |__break|
  11.  
  12.         IMPORT  |__exerr|
  13.  
  14. |__exec_s0|
  15.  
  16. |__exec_s1|
  17.         MOV     v1,a1
  18.         ADR     a1,|__exreg|
  19.         STMIA   a1,{sl,fp,sp}
  20.  
  21.         MOV     a1,#11
  22.         ADR     a2,|__exec_s4|
  23.         MOV     a3,#0
  24.         MOV     a4,#0
  25.         SWI     &20040
  26.         STR     a2,[pc,#|__o_exit|-.-8]
  27.  
  28.         LDR     a1,[pc,#|__base_ptr|-.-8]
  29.         LDR     a1,[a1,#0]
  30.         STR     a1,[pc,#|__base_|-.-8]
  31.         LDR     a2,[pc,#|__break_ptr|-.-8]
  32.         LDR     a2,[a2,#0]
  33.         STR     a2,[pc,#|__break_|-.-8]
  34.         LDR     a3,[pc,#|__exshift|-.-8]
  35.         CMP     a3,#0
  36.         BEQ     |__exec_s3|
  37.  
  38.         ADD     a3,a2,a3
  39.  
  40.         SUB     a1,a2,a1
  41.         ANDS    a4,a1,#31
  42.         BEQ     |__exec_s2_1|
  43. |__exec_s2_0|
  44.         LDR     ip,[a2,#-4]!
  45.         STR     ip,[a3,#-4]!
  46.         SUB     a1,a1,#4
  47.         ANDS    a4,a1,#31
  48.         BNE     |__exec_s2_0|
  49. |__exec_s2_1|
  50.         CMP     a1,#0
  51.         BEQ     |__exec_s3|
  52. |__exec_s2_2|
  53.         LDMDB   a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  54.         STMDB   a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  55.         SUBS    a1,a1,#64
  56.         LDMGEDB a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  57.         STMGEDB a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  58.         BGT     |__exec_s2_2|
  59.  
  60. |__exec_s3|
  61.         MOV     a1,#0
  62.         MOV     a2,a3
  63.         MOV     a3,#0
  64.         MOV     a4,#0
  65.         SWI     &20040
  66.         STR     a2,[pc,#|__o_himem|-.-8]
  67.  
  68.         MOV     a1,v1
  69.         SWI     &20005
  70.         MOVVC   a1,#0
  71.         STR     a1,[pc,#|__exerr_|-.-8]
  72.  
  73. |__exec_s4|
  74.         MOV     a1,#0
  75.         LDR     a2,[pc,#|__o_himem|-.-8]
  76.         MOV     a3,#0
  77.         MOV     a4,#0
  78.         SWI     &20040
  79.  
  80.         LDR     a3,[pc,#|__base_|-.-8]
  81.         LDR     a1,[pc,#|__break_|-.-8]
  82.         LDR     a2,[pc,#|__exshift|-.-8]
  83.         CMP     a2,#0
  84.         BEQ     |__exec_s6|
  85.  
  86.         ADD     a1,a1,a2
  87.         ADD     a2,a3,a2
  88.  
  89.         SUB     a1,a1,a2
  90.         ANDS    a4,a1,#31
  91.         BEQ     |__exec_s5_1|
  92. |__exec_s5_0|
  93.         LDR     ip,[a2],#4
  94.         STR     ip,[a3],#4
  95.         SUB     a1,a1,#4
  96.         ANDS    a4,a1,#31
  97.         BNE     |__exec_s5_0|
  98. |__exec_s5_1|
  99.         CMP     a1,#0
  100.         BEQ     |__exec_s6|
  101. |__exec_s5_2|
  102.         LDMIA   a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  103.         STMIA   a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  104.         SUBS    a1,a1,#64
  105.         LDMGEIA a2!,{a4,v2,v3,v4,v5,v6,sl,ip}
  106.         STMGEIA a3!,{a4,v2,v3,v4,v5,v6,sl,ip}
  107.         BGT     |__exec_s5_2|
  108.  
  109. |__exec_s6|
  110.         MOV     a1,#11
  111.         LDR     a2,[pc,#|__o_exit|-.-8]
  112.         MOV     a3,#0
  113.         MOV     a4,#0
  114.         SWI     &20040
  115.  
  116.         LDR     a1,[pc,#|__exerr_ptr|-.-8]
  117.         LDR     a2,[pc,#|__exerr_|-.-8]
  118.         STR     a2,[a1,#0]
  119.  
  120.         ADR     a1,|__exreg|
  121.         LDMIA   a1,{sl,fp,sp}
  122.  
  123.         LDR     a1,[pc,#|__exret_ptr|-.-8]
  124.         MOV     pc,a1
  125.  
  126. |__o_exit|
  127.         DCD     0       ; old Exit Handler
  128. |__o_himem|
  129.         DCD     0       ; old HIMEM
  130. |__exret_ptr|
  131.         DCD     |__exret|
  132. |__base_ptr|
  133.         DCD     |__base|
  134. |__base_|
  135.         DCD     0       ; __base value
  136. |__break_ptr|
  137.         DCD     |__break|
  138. |__break_|
  139.         DCD     0       ; __break value
  140. |__exreg|
  141.         %       12      ; sl,fp,sp
  142. |__exerr_ptr|
  143.         DCD     |__exerr|
  144. |__exerr_|
  145.         DCD     0
  146.  
  147.         EXPORT  |__exshift|
  148. |__exshift|
  149.         DCD     0
  150.  
  151. |__exec_s7|
  152.  
  153.         EXPORT  |__exptr|
  154. |__exptr|
  155.         DCD     |__exec_s0|
  156.         EXPORT  |__exlen|
  157. |__exlen|
  158.         DCD     |__exec_s7|-|__exec_s0|
  159.  
  160.         END
  161.