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

  1. ;       /* _syslib.s (c) Copyright 1990 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         ENTRY
  8.  
  9.         IMPORT  |_main|
  10.         EXPORT  |__main|
  11.  
  12.         NAME    __main
  13. |__main|
  14.         SWI     &20010                  ; OS_GetEnv
  15.         MOV     sp,a2
  16.         SUB     sl,sp,#2048
  17.  
  18.         LDR     a4,[pc,#|__cli_ptr|-.-8]
  19.         STR     a1,[a4,#0]
  20.         LDR     a4,[pc,#|__himem_ptr|-.-8]
  21.         STR     a2,[a4,#0]
  22.         LDR     a4,[pc,#|__stack_ptr|-.-8]
  23.         STR     sl,[a4,#0]
  24.         LDMIA   a3,{a1,a2}
  25.         AND     a2,a2,#&ff
  26.         LDR     a3,[pc,#|__time_ptr|-.-8]
  27.         STMIA   a3,{a1,a2}
  28.         LDR     a4,[pc,#|__robase_ptr|-.-8]
  29.         LDR     a1,[a4,#0]
  30.         LDR     a4,[pc,#|__base_ptr|-.-8]
  31.         STR     a1,[a4,#0]
  32.         LDR     a4,[pc,#|__rwlimit_ptr|-.-8]
  33.         LDR     a1,[a4,#0]
  34.         LDR     a4,[pc,#|__lomem_ptr|-.-8]
  35.         STR     a1,[a4,#0]
  36.         LDR     a4,[pc,#|__break_ptr|-.-8]
  37.         STR     a1,[a4,#0]
  38.  
  39.         CMP     sl,a1
  40.         MOVLSS  pc,lr                   ; no stack - exit fast
  41.         ADD     sl,sl,#256
  42.         MOV     fp,#0
  43.         LDR     a1,[pc,#|__alloca_list_ptr|-.-8]
  44.         CMP     a1,#0
  45.         STRNE   fp,[a1,#0]
  46.         B       |_main|
  47.  
  48.  
  49.         IMPORT  |Image$$RO$$Base|
  50.         IMPORT  |Image$$RW$$Base|
  51.         IMPORT  |Image$$RW$$Limit|
  52.  
  53.         EXPORT  |__svccli|      ; copy CLI in SVC mode
  54.  
  55.         NAME    __svccli
  56. |__svccli|
  57.         LDR     a2,[pc,#|__cli_ptr|-.-8]
  58.         LDR     a2,[a2,#0]
  59.         MOV     a4,lr
  60.         SWI     &16             ; OS_EnterOS
  61. |__svccli_l0|
  62.         LDRBT   a3,[a2],#1
  63.         STRBT   a3,[a1],#1
  64.         CMP     a3,#0
  65.         BNE     |__svccli_l0|
  66.         MOVS    pc,a4           ; return to USR mode
  67.  
  68. |__cli_ptr|
  69.         DCD     |__cli|
  70.  
  71. |__robase_ptr|
  72.         DCD     |__robase|
  73. |__base_ptr|
  74.         DCD     |__base|
  75. |__rwbase_ptr|
  76.         DCD     |__rwbase|
  77. |__rwlimit_ptr|
  78.         DCD     |__rwlimit|
  79. |__himem_ptr|
  80.         DCD     |__himem|
  81. |__lomem_ptr|
  82.         DCD     |__lomem|
  83.  
  84. |__break_ptr|
  85.         DCD     |__break|
  86. |__stack_ptr|
  87.         DCD     |__stack|
  88.  
  89. |__time_ptr|
  90.         DCD     |__time|
  91.  
  92.         IMPORT  |__alloca_list|,WEAK
  93. |__alloca_list_ptr|
  94.         DCD     |__alloca_list|
  95.  
  96.         IMPORT  |__uname_dont_pack|,WEAK
  97.         EXPORT  |__uname_dont_pack_ptr|
  98. |__uname_dont_pack_ptr|
  99.         DCD     |__uname_dont_pack|
  100.  
  101.  
  102.         EXPORT  |__exit|
  103.  
  104.         NAME    __exit
  105. |__exit|
  106.         MOV     a3,a1
  107.         LDR     a2,[pc,#|__exit_word|-.-8]
  108.         MOV     a1,#0
  109.  
  110.         SWI     &11                     ; OS_Exit - never returns
  111.  
  112. |__exit_word|
  113.         DCD     &58454241
  114.  
  115.  
  116.         IMPORT  |__vret|,WEAK
  117.         EXPORT  |___vret|
  118. |___vret|
  119.         DCD     |__vret|
  120.  
  121.         IMPORT  |__stdioinit|,WEAK
  122.         EXPORT  |___stdioinit|
  123. |___stdioinit|
  124.         DCD     |__stdioinit|
  125.  
  126.         IMPORT  |__stdioexit|,WEAK
  127.         EXPORT  |___stdioexit|
  128. |___stdioexit|
  129.         DCD     |__stdioexit|
  130.  
  131.         IMPORT  |___main|, WEAK
  132.         EXPORT  |___do_global_ctors|
  133. |___do_global_ctors|
  134.         DCD     |___main|
  135.  
  136.  
  137.         EXPORT  |__rdenv|
  138.  
  139.         NAME    __rdenv
  140. |__rdenv|
  141.         MOV     ip,a2
  142.         MOV     a2,#0
  143.         MOV     a3,#0
  144.         MOV     a4,#0
  145.  
  146.         SWI     &20040
  147.  
  148.         STMVCIA ip,{a2,a3,a4}
  149.         MOVVC   a1,#0
  150.  
  151.         MOVS    pc,lr
  152.  
  153.         EXPORT  |__wrenv|
  154.  
  155.         NAME    __wrenv
  156. |__wrenv|
  157.         LDMIA   a2,{a2,a3,a4}
  158.  
  159.         SWI     &20040
  160.  
  161.         MOVVC   a1,#0
  162.  
  163.         MOVS    pc,lr
  164.  
  165.  
  166.         EXPORT  |x$divtest|
  167. |x$divtest|
  168.         MOVS    pc,lr
  169.  
  170.         EXPORT  |x$remainder|
  171.  
  172.         NAME    x$remainder
  173. |x$remainder|
  174.         STMFD   sp!,{lr}
  175.         BL      |x$divide|
  176.         MOV     a1,a2
  177.         LDMFD   sp!,{pc}^
  178.  
  179.         EXPORT  |x$uremainder|
  180.  
  181.         NAME    x$uremainder
  182. |x$uremainder|
  183.         STMFD   sp!,{lr}
  184.         BL      |x$udivide|
  185.         MOV     a1,a2
  186.         LDMFD   sp!,{pc}^
  187.  
  188. |x$overflow|
  189.         MVN     a1,#0
  190.         MOVS    pc,lr
  191.  
  192.         EXPORT  |x$udivide|     ; a1 = a2 / a1; a2 = a2 % a1
  193.  
  194.         NAME    x$udivide
  195. |x$udivide|
  196.         CMP     a1,#1
  197.         BLO     |x$overflow|
  198.         BEQ     |x$divide_l0|
  199.         MOV     ip,#0
  200.         MOVS    a2,a2
  201.         BPL     |x$divide_l1|
  202.         ORR     ip,ip,#&20000000; ip bit &20000000 = -ve a2
  203.         MOVS    a2,a2,LSR #1
  204.         ORRCS   ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
  205.         B       |x$divide_l1|
  206.  
  207. |x$divide_l0|                   ; a1 == 1
  208.         MOV     a1,a2
  209.         MOV     a2,#0
  210.         MOVS    pc,lr
  211.  
  212.         EXPORT  |x$divide|      ; a1 = a2 / a1; a2 = a2 % a1
  213.  
  214.         NAME    x$divide
  215. |x$divide|
  216.         CMP     a1,#1
  217.         BLO     |x$overflow|
  218.         BEQ     |x$divide_l0|
  219.         ANDS    ip,a1,#&80000000
  220.         RSBMI   a1,a1,#0
  221.         ANDS    a3,a2,#&80000000
  222.         EOR     ip,ip,a3
  223.         RSBMI   a2,a2,#0
  224.         ORR     ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
  225.                                 ; ip bit &80000000 = -ve remainder
  226.  
  227. |x$divide_l1|
  228.         MOV     a3,#1
  229.         MOV     a4,#0
  230.  
  231.         CMP     a2,a1
  232.         BLO     |x$divide_b0|
  233.         CMP     a2,a1,LSL #1
  234.         BLO     |x$divide_b1|
  235.         CMP     a2,a1,LSL #2
  236.         BLO     |x$divide_b2|
  237.         CMP     a2,a1,LSL #3
  238.         BLO     |x$divide_b3|
  239.         CMP     a2,a1,LSL #4
  240.         BLO     |x$divide_b4|
  241.         CMP     a2,a1,LSL #5
  242.         BLO     |x$divide_b5|
  243.         CMP     a2,a1,LSL #6
  244.         BLO     |x$divide_b6|
  245.         CMP     a2,a1,LSL #7
  246.         BLO     |x$divide_b7|
  247.         CMP     a2,a1,LSL #8
  248.         BLO     |x$divide_b8|
  249.         CMP     a2,a1,LSL #9
  250.         BLO     |x$divide_b9|
  251.         CMP     a2,a1,LSL #10
  252.         BLO     |x$divide_b10|
  253.         CMP     a2,a1,LSL #11
  254.         BLO     |x$divide_b11|
  255.         CMP     a2,a1,LSL #12
  256.         BLO     |x$divide_b12|
  257.         CMP     a2,a1,LSL #13
  258.         BLO     |x$divide_b13|
  259.         CMP     a2,a1,LSL #14
  260.         BLO     |x$divide_b14|
  261.         CMP     a2,a1,LSL #15
  262.         BLO     |x$divide_b15|
  263.         CMP     a2,a1,LSL #16
  264.         BLO     |x$divide_b16|
  265.         CMP     a2,a1,LSL #17
  266.         BLO     |x$divide_b17|
  267.         CMP     a2,a1,LSL #18
  268.         BLO     |x$divide_b18|
  269.         CMP     a2,a1,LSL #19
  270.         BLO     |x$divide_b19|
  271.         CMP     a2,a1,LSL #20
  272.         BLO     |x$divide_b20|
  273.         CMP     a2,a1,LSL #21
  274.         BLO     |x$divide_b21|
  275.         CMP     a2,a1,LSL #22
  276.         BLO     |x$divide_b22|
  277.         CMP     a2,a1,LSL #23
  278.         BLO     |x$divide_b23|
  279.         CMP     a2,a1,LSL #24
  280.         BLO     |x$divide_b24|
  281.         CMP     a2,a1,LSL #25
  282.         BLO     |x$divide_b25|
  283.         CMP     a2,a1,LSL #26
  284.         BLO     |x$divide_b26|
  285.         CMP     a2,a1,LSL #27
  286.         BLO     |x$divide_b27|
  287.         CMP     a2,a1,LSL #28
  288.         BLO     |x$divide_b28|
  289.         CMP     a2,a1,LSL #29
  290.         BLO     |x$divide_b29|
  291.         CMP     a2,a1,LSL #30
  292.         BLO     |x$divide_b30|
  293.         CMP     a2,a1,LSL #31
  294.         SUBHS   a2,a2,a1,LSL #31
  295.         ADDHS   a4,a4,a3,LSL #31
  296.         CMP     a2,a1,LSL #30
  297.         SUBHS   a2,a2,a1,LSL #30
  298.         ADDHS   a4,a4,a3,LSL #30
  299. |x$divide_b30|
  300.         CMP     a2,a1,LSL #29
  301.         SUBHS   a2,a2,a1,LSL #29
  302.         ADDHS   a4,a4,a3,LSL #29
  303. |x$divide_b29|
  304.         CMP     a2,a1,LSL #28
  305.         SUBHS   a2,a2,a1,LSL #28
  306.         ADDHS   a4,a4,a3,LSL #28
  307. |x$divide_b28|
  308.         CMP     a2,a1,LSL #27
  309.         SUBHSS  a2,a2,a1,LSL #27
  310.         ADDHS   a4,a4,a3,LSL #27
  311. |x$divide_b27|
  312.         CMP     a2,a1,LSL #26
  313.         SUBHS   a2,a2,a1,LSL #26
  314.         ADDHS   a4,a4,a3,LSL #26
  315. |x$divide_b26|
  316.         CMP     a2,a1,LSL #25
  317.         SUBHS   a2,a2,a1,LSL #25
  318.         ADDHS   a4,a4,a3,LSL #25
  319. |x$divide_b25|
  320.         CMP     a2,a1,LSL #24
  321.         SUBHS   a2,a2,a1,LSL #24
  322.         ADDHS   a4,a4,a3,LSL #24
  323. |x$divide_b24|
  324.         CMP     a2,a1,LSL #23
  325.         SUBHS   a2,a2,a1,LSL #23
  326.         ADDHS   a4,a4,a3,LSL #23
  327. |x$divide_b23|
  328.         CMP     a2,a1,LSL #22
  329.         SUBHS   a2,a2,a1,LSL #22
  330.         ADDHS   a4,a4,a3,LSL #22
  331. |x$divide_b22|
  332.         CMP     a2,a1,LSL #21
  333.         SUBHS   a2,a2,a1,LSL #21
  334.         ADDHS   a4,a4,a3,LSL #21
  335. |x$divide_b21|
  336.         CMP     a2,a1,LSL #20
  337.         SUBHS   a2,a2,a1,LSL #20
  338.