;----------------------------------------------------------------------------
;
; $Source: /cvsroot/riscossmbserver/smbserver/src/riscos/s/_os,v $
; $Date: 1999/05/16 12:00:08 $
; $Revision: 1.1 $
; $State: Exp $
; $Author: david $
;
; $Log: _os,v $
; Revision 1.1  1999/05/16 12:00:08  david
; Initial revision
;
; Revision 1.4  1996/11/06 22:01:42  unixlib
; Yet more changes by NB, PB and SC.
;
; Revision 1.3  1996/10/30 21:59:00  unixlib
; Massive changes made by Nick Burret and Peter Burwood.
;
; Revision 1.2  1996/09/16 21:23:52  unixlib
; CL_0002 Nick Burret
; Minor changes to file handling
; Change most error numbers, and use in assembler sources (SJC)
; Various minor bug fixes and compatability changes.
;
; Revision 1.1  1996/04/19 21:34:32  simon
; Initial revision
;
;----------------------------------------------------------------------------

    GET    <samba$dir>.riscos.src.riscos.s.asm_dec

    AREA    |C$$code|,CODE,READONLY

    EXPORT    myos_console

    NAME    myos_console
myos_console
    MOV    a1,#3
    MOV    a2,#0
    SWI    XOS_Byte
    BVS    myos_console_l1
    MOV    a1,#2
    MOV    a2,#2
    SWI    XOS_Byte
    MOVVC    a1,#0
myos_console_l1
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_vdu

    NAME    myos_vdu
myos_vdu
    SWI    XOS_WriteC
    MOVVCS    pc,lr
    MVN    a1,#0
    MOVS    pc,lr

    EXPORT    myos_get

    NAME    myos_get
myos_get
    SWI    XOS_ReadC
    MOVVCS    pc,lr
    MVN    a1,#0
    MOVS    pc,lr

    EXPORT    myos_inkey

    NAME    myos_inkey
myos_inkey
    MOV    ip,a1
    MOV    a1,#&81
    AND    a2,ip,#&ff
    MOV    a3,ip,LSR #8
    SWI    XOS_Byte
    MVNVS    a1,#0
    MOVVSS    pc,lr
    CMP    a3,#0
    MOVEQ    a1,a2
    MVNNE    a1,#0
    MOVS    pc,lr

    EXPORT    myos_keyflush

    NAME    myos_keyflush
myos_keyflush
    MOV    a1,#21
    MOV    a2,#0
    MOV    a3,#0
    SWI    XOS_Byte
    MOVVC    a1,#0
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423

    NAME    myos_423
myos_423
    MOV    a1,#2
    MOV    a2,#2
    SWI    XOS_Byte
    BVS    myos_423_l1
    MOV    a1,#0
    MOV    a2,#0    ; reset 6551
    MOV    a3,#0
    SWI    XOS_SerialOp
    MOVVC    a1,#0
myos_423_l1
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423vdu

    NAME    myos_423vdu
myos_423vdu
    MOV    a2,a1
    MOV    a1,#3
    SWI    XOS_SerialOp
    MOVVC    a1,#0
    MVNCS    a1,#0    ; buffer full
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423get

    NAME    myos_423get
myos_423get
    MOV    a1,#4
myos_423get_l1
    SWI    XOS_SerialOp
    BCS    myos_423get_l1
    MOVVC    a1,a2
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423inkey

    NAME    myos_423inkey
myos_423inkey
    MOV    a4,a1
    SWI    XOS_ReadMonotonicTime
    ADD    a4,a4,a1
myos_423inkey_l1
    MOV    a1,#4
    SWI    XOS_SerialOp
    BCC    myos_423inkey_l2
    BVS    myos_423inkey_l2
    SWI    XOS_ReadMonotonicTime
    CMP    a4,a1
    BHI    myos_423inkey_l1
    MVN    a2,#0
myos_423inkey_l2
    MOVVC    a1,a2
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423flush

    NAME    myos_423flush
myos_423flush
    MOV    a1,#21
    MOV    a2,#1
    MOV    a3,#0
    SWI    XOS_Byte
    MOVVC    a1,#0
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_423break

    NAME    myos_423break
myos_423break
    MOV    a2,a1
    MOV    a1,#2
    SWI    XOS_SerialOp
    MOVVC    a1,#0
    MVNVS    a1,#0
    MOVS    pc,lr

    EXPORT    myos_byte

    NAME    myos_byte
myos_byte
    MOVS    ip,a4

    SWI    XOS_Byte

    STMNEIA ip,{a1,a2,a3}

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_word

    NAME    myos_word
myos_word
    SWI    XOS_Word

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_prhex

    NAME    myos_prhex
myos_prhex
    SUB    a4,sp,#8
    MOVS    a3,#7
myos_prhex_l1
    ANDS    a2,a1,#&f
    CMP    a2,#10
    ADDLT    a2,a2,#48
    ADDGE    a2,a2,#87
    STRB    a2,[a4,a3]
    SUBS    a3,a3,#1
    BLT    myos_prhex_l4
    MOVS    a1,a1,LSR #4
    BNE    myos_prhex_l1
myos_prhex_l2
    MOV    a2,#32
myos_prhex_l3
    STRB    a2,[a4,a3]
    SUBS    a3,a3,#1
    BGE    myos_prhex_l3
myos_prhex_l4
    MOV    a1,a4
    MOV    a2,#8
    B    myos_write

    EXPORT    myos_print

    NAME    myos_print
myos_print
    SWI    XOS_Write0

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_write

    NAME    myos_write
myos_write
    SWI    XOS_WriteN

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_nl

    NAME    myos_nl
myos_nl
    SWI    XOS_NewLine

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_cli

    NAME    myos_cli
myos_cli
    SWI    XOS_CLI

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_file

    NAME    myos_file
myos_file
    STMFD    sp!,{v1,v2,lr}

    CMP    a3,#0
    ADDNE    ip,a3,#8
    LDMNEIA ip,{a3,a4,v1,v2}

    SWI    XOS_File

    SUBNE    ip,ip,#8
    STMNEIA ip,{a1,a2,a3,a4,v1,v2}

    MOVVC    a1,#0
    LDMFD    sp!,{v1,v2,pc}^

    EXPORT    myos_fopen

    NAME    myos_fopen
myos_fopen
    MOV    ip,a3

    SWI    XOS_Find

    STR    a1,[ip,#0]

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_fclose

    NAME    myos_fclose
myos_fclose
    MOV    a2,a1
    MOV    a1,#0

    SWI    XOS_Find

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_fread

    NAME    myos_fread
myos_fread
    STMFD    sp!,{v1,lr}

    MOVS    ip,a4

    MOV    a4,a3
    MOV    a3,a2
    MOV    a2,a1
    MOV    a1,#4

    SWI    XOS_GBPB

    STMNEIA ip,{a1,a2,a3,a4,v1}

    MOVVC    a1,#0
    LDMFD    sp!,{v1,pc}^

    EXPORT    myos_fwrite

    NAME    myos_fwrite
myos_fwrite
    STMFD    sp!,{v1,lr}

    MOVS    ip,a4

    MOV    a4,a3
    MOV    a3,a2
    MOV    a2,a1
    MOV    a1,#2

    SWI    XOS_GBPB

    STMNEIA ip,{a1,a2,a3,a4,v1}

    MOVVC    a1,#0
    LDMFD    sp!,{v1,pc}^

    EXPORT    myos_args

    NAME    myos_args
myos_args
    MOVS    ip,a4

    SWI    XOS_Args

    STMNEIA ip,{a1,a2,a3}

    MOVVC    a1,#0
    MOVS    pc,lr

    EXPORT    myos_fsctrl

    NAME    myos_fsctrl
myos_fsctrl
    SWI    XOS_FSControl

    MOVVC    a1,#0
    MOVS    pc,lr


; TM
; why?
;    AREA    |C$$wrcode|,CODE

    EXPORT    myos_swi

    NAME    myos_swi
myos_swi
    STMFD    sp!,{v1,v2,v3,v4,v5,v6,fp,lr}

    ORR    ip,a1,#&20000        ; X bit
    MOVS    fp,a2
    LDMNEIA fp,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}
    SWI    XOS_CallASWIR12
    TEQ    fp,#0
    STMNEIA fp,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}

    MOVVC    a1,#0
    LDMFD    sp!,{v1,v2,v3,v4,v5,v6,fp,pc}^

    END
