home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 2 / DATAFILE_PDCD2.iso / utilities2 / unixlib36d / UnixLib36d / src / sys / s / _os < prev    next >
Encoding:
Text File  |  1994-03-01  |  6.4 KB  |  371 lines

  1. ;       /* _os.s (c) Copyright 1990 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         EXPORT  os_console
  8.  
  9.         NAME    os_console
  10. os_console
  11.         MOV     a1,#3
  12.         MOV     a2,#0
  13.         SWI     &020006
  14.         BVS     os_console_l1
  15.         MOV     a1,#2
  16.         MOV     a2,#2
  17.         SWI     &020006
  18.         MOVVC   a1,#0
  19. os_console_l1
  20.         MVNVS   a1,#0
  21.         MOVS    pc,lr
  22.  
  23.         EXPORT  os_vdu
  24.  
  25.         NAME    os_vdu
  26. os_vdu
  27.         SWI     &020000
  28.         MOVVCS  pc,lr
  29.         MVN     a1,#0
  30.         MOVS    pc,lr
  31.  
  32.         EXPORT  os_get
  33.  
  34.         NAME    os_get
  35. os_get
  36.         SWI     &020004
  37.         MOVVCS  pc,lr
  38.         MVN     a1,#0
  39.         MOVS    pc,lr
  40.  
  41.         EXPORT  os_inkey
  42.  
  43.         NAME    os_inkey
  44. os_inkey
  45.         MOV     ip,a1
  46.         MOV     a1,#&81
  47.         AND     a2,ip,#&ff
  48.         MOV     a3,ip,LSR #8
  49.         SWI     &020006
  50.         MVNVS   a1,#0
  51.         MOVVSS  pc,lr
  52.         CMP     a3,#0
  53.         MOVEQ   a1,a2
  54.         MVNNE   a1,#0
  55.         MOVS    pc,lr
  56.  
  57.         EXPORT  os_keyflush
  58.  
  59.         NAME    os_keyflush
  60. os_keyflush
  61.         MOV     a1,#21
  62.         MOV     a2,#0
  63.         MOV     a3,#0
  64.         SWI     &020006
  65.         MOVVC   a1,#0
  66.         MVNVS   a1,#0
  67.         MOVS    pc,lr
  68.  
  69.         EXPORT  os_423
  70.  
  71.         NAME    os_423
  72. os_423
  73.         MOV     a1,#2
  74.         MOV     a2,#2
  75.         SWI     &020006
  76.         BVS     os_423_l1
  77.         MOV     a1,#0
  78.         MOV     a2,#0   ; reset 6551
  79.         MOV     a3,#0
  80.         SWI     &020057 ; OS_SerialOp
  81.         MOVVC   a1,#0
  82. os_423_l1
  83.         MVNVS   a1,#0
  84.         MOVS    pc,lr
  85.  
  86.         EXPORT  os_423vdu
  87.  
  88.         NAME    os_423vdu
  89. os_423vdu
  90.         MOV     a2,a1
  91.         MOV     a1,#3
  92.         SWI     &020057
  93.         MOVVC   a1,#0
  94.         MVNCS   a1,#0   ; buffer full
  95.         MVNVS   a1,#0
  96.         MOVS    pc,lr
  97.  
  98.         EXPORT  os_423get
  99.  
  100.         NAME    os_423get
  101. os_423get
  102.         MOV     a1,#4
  103. os_423get_l1
  104.         SWI     &020057
  105.         BCS     os_423get_l1
  106.         MOVVC   a1,a2
  107.         MVNVS   a1,#0
  108.         MOVS    pc,lr
  109.  
  110.         EXPORT  os_423inkey
  111.  
  112.         NAME    os_423inkey
  113. os_423inkey
  114.         MOV     a4,a1
  115.         SWI     &020042
  116.         ADD     a4,a4,a1
  117. os_423inkey_l1
  118.         MOV     a1,#4
  119.         SWI     &020057
  120.         BCC     os_423inkey_l2
  121.         BVS     os_423inkey_l2
  122.         SWI     &020042
  123.         CMP     a4,a1
  124.         BHI     os_423inkey_l1
  125.         MVN     a2,#0
  126. os_423inkey_l2
  127.         MOVVC   a1,a2
  128.         MVNVS   a1,#0
  129.         MOVS    pc,lr
  130.  
  131.         EXPORT  os_423flush
  132.  
  133.         NAME    os_423flush
  134. os_423flush
  135.         MOV     a1,#21
  136.         MOV     a2,#1
  137.         MOV     a3,#0
  138.         SWI     &020006
  139.         MOVVC   a1,#0
  140.         MVNVS   a1,#0
  141.         MOVS    pc,lr
  142.  
  143.         EXPORT  os_423break
  144.  
  145.         NAME    os_423break
  146. os_423break
  147.         MOV     a2,a1
  148.         MOV     a1,#2
  149.         SWI     &020057
  150.         MOVVC   a1,#0
  151.         MVNVS   a1,#0
  152.         MOVS    pc,lr
  153.  
  154.         EXPORT  os_byte
  155.  
  156.         NAME    os_byte
  157. os_byte
  158.         MOVS    ip,a4
  159.  
  160.         SWI     &20006
  161.  
  162.         STMNEIA ip,{a1,a2,a3}
  163.  
  164.         MOVVC   a1,#0
  165.         MOVS    pc,lr
  166.  
  167.         EXPORT  os_word
  168.  
  169.         NAME    os_word
  170. os_word
  171.         SWI     &20007
  172.  
  173.         MOVVC   a1,#0
  174.         MOVS    pc,lr
  175.  
  176. os_xbuf
  177.         %       8
  178.  
  179.         EXPORT  os_prhex
  180.  
  181.         NAME    os_prhex
  182. os_prhex
  183.         ADR     a4,os_xbuf
  184.         MOVS    a3,#7
  185. os_prhex_l1
  186.         ANDS    a2,a1,#&f
  187.         CMP     a2,#10
  188.         ADDLT   a2,a2,#48
  189.         ADDGE   a2,a2,#87
  190.         STRB    a2,[a4,a3]
  191.         SUBS    a3,a3,#1
  192.         BLT     os_prhex_l4
  193.         MOVS    a1,a1,LSR #4
  194.         BNE     os_prhex_l1
  195. os_prhex_l2
  196.         MOV     a2,#32
  197. os_prhex_l3
  198.         STRB    a2,[a4,a3]
  199.         SUBS    a3,a3,#1
  200.         BGE     os_prhex_l3
  201. os_prhex_l4
  202.         MOV     a1,a4
  203.         MOV     a2,#8
  204.         B       os_write
  205.  
  206.         EXPORT  os_print
  207.  
  208.         NAME    os_print
  209. os_print
  210.         SWI     &20002
  211.  
  212.         MOVVC   a1,#0
  213.         MOVS    pc,lr
  214.  
  215.         EXPORT  os_write
  216.  
  217.         NAME    os_write
  218. os_write
  219.         SWI     &20046
  220.  
  221.         MOVVC   a1,#0
  222.         MOVS    pc,lr
  223.  
  224.         EXPORT  os_nl
  225.  
  226.         NAME    os_nl
  227. os_nl
  228.         SWI     &20003
  229.  
  230.         MOVVC   a1,#0
  231.         MOVS    pc,lr
  232.  
  233.         EXPORT  os_cli
  234.  
  235.         NAME    os_cli
  236. os_cli
  237.         SWI     &20005
  238.  
  239.         MOVVC   a1,#0
  240.         MOVS    pc,lr
  241.  
  242.         EXPORT  os_file
  243.  
  244.         NAME    os_file
  245. os_file
  246.         STMFD   sp!,{v1,v2,lr}
  247.  
  248.         CMP     a3,#0
  249.         ADDNE   ip,a3,#8
  250.         LDMNEIA ip,{a3,a4,v1,v2}
  251.  
  252.         SWI     &20008
  253.  
  254.         SUBNE   ip,ip,#8
  255.         STMNEIA ip,{a1,a2,a3,a4,v1,v2}
  256.  
  257.         MOVVC   a1,#0
  258.         LDMFD   sp!,{v1,v2,pc}^
  259.  
  260.         EXPORT  os_fopen
  261.  
  262.         NAME    os_fopen
  263. os_fopen
  264.         MOV     ip,a3
  265.  
  266.         SWI     &2000d
  267.  
  268.         STR     a1,[ip,#0]
  269.  
  270.         MOVVC   a1,#0
  271.         MOVS    pc,lr
  272.  
  273.         EXPORT  os_fclose
  274.  
  275.         NAME    os_fclose
  276. os_fclose
  277.         MOV     a2,a1
  278.         MOV     a1,#0
  279.  
  280.         SWI     &2000d
  281.  
  282.         MOVVC   a1,#0
  283.         MOVS    pc,lr
  284.  
  285.         EXPORT  os_fread
  286.  
  287.         NAME    os_fread
  288. os_fread
  289.         STMFD   sp!,{v1,lr}
  290.  
  291.         MOVS    ip,a4
  292.  
  293.         MOV     a4,a3
  294.         MOV     a3,a2
  295.         MOV     a2,a1
  296.         MOV     a1,#4
  297.  
  298.         SWI     &2000c
  299.  
  300.         STMNEIA ip,{a1,a2,a3,a4,v1}
  301.  
  302.         MOVVC   a1,#0
  303.         LDMFD   sp!,{v1,pc}^
  304.  
  305.         EXPORT  os_fwrite
  306.  
  307.         NAME    os_fwrite
  308. os_fwrite
  309.         STMFD   sp!,{v1,lr}
  310.  
  311.         MOVS    ip,a4
  312.  
  313.         MOV     a4,a3
  314.         MOV     a3,a2
  315.         MOV     a2,a1
  316.         MOV     a1,#2
  317.  
  318.         SWI     &2000c
  319.  
  320.         STMNEIA ip,{a1,a2,a3,a4,v1}
  321.  
  322.         MOVVC   a1,#0
  323.         LDMFD   sp!,{v1,pc}^
  324.  
  325.         EXPORT  os_args
  326.  
  327.         NAME    os_args
  328. os_args
  329.         MOVS    ip,a4
  330.  
  331.         SWI     &20009
  332.  
  333.         STMNEIA ip,{a1,a2,a3}
  334.  
  335.         MOVVC   a1,#0
  336.         MOVS    pc,lr
  337.  
  338.         EXPORT  os_fsctrl
  339.  
  340.         NAME    os_fsctrl
  341. os_fsctrl
  342.         SWI     &20029
  343.  
  344.         MOVVC   a1,#0
  345.         MOVS    pc,lr
  346.  
  347.  
  348.         AREA    |C$$wrcode|,CODE
  349.  
  350.         EXPORT  os_swi
  351.  
  352.         NAME    os_swi
  353. os_swi
  354.         STMFD   sp!,{v1,v2,v3,v4,v5,v6,lr}
  355.  
  356.         ORR     a1,a1,#&20000           ; X bit
  357.         ORR     a1,a1,#&EF000000        ; SWI opcode
  358.         STR     a1,[pc,#|_os_swi|-.-8]
  359.         MOVS    ip,a2
  360.         LDMNEIA ip,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}
  361.         B       |_os_swi|               ; Force a bubble in the pipeline
  362. |_os_swi|
  363.         DCD     0
  364.  
  365.         STMNEIA ip,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}
  366.  
  367.         MOVVC   a1,#0
  368.         LDMFD   sp!,{v1,v2,v3,v4,v5,v6,pc}^
  369.  
  370.         END
  371.