home *** CD-ROM | disk | FTP | other *** search
- ; /* _os.s (c) Copyright 1990 H.Rogers */
-
- GET @.src.sys.s.asm_dec
-
- AREA |C$$code|,CODE,READONLY
-
- EXPORT os_console
-
- NAME os_console
- os_console
- MOV a1,#3
- MOV a2,#0
- SWI &020006
- BVS os_console_l1
- MOV a1,#2
- MOV a2,#2
- SWI &020006
- MOVVC a1,#0
- os_console_l1
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_vdu
-
- NAME os_vdu
- os_vdu
- SWI &020000
- MOVVCS pc,lr
- MVN a1,#0
- MOVS pc,lr
-
- EXPORT os_get
-
- NAME os_get
- os_get
- SWI &020004
- MOVVCS pc,lr
- MVN a1,#0
- MOVS pc,lr
-
- EXPORT os_inkey
-
- NAME os_inkey
- os_inkey
- MOV ip,a1
- MOV a1,#&81
- AND a2,ip,#&ff
- MOV a3,ip,LSR #8
- SWI &020006
- MVNVS a1,#0
- MOVVSS pc,lr
- CMP a3,#0
- MOVEQ a1,a2
- MVNNE a1,#0
- MOVS pc,lr
-
- EXPORT os_keyflush
-
- NAME os_keyflush
- os_keyflush
- MOV a1,#21
- MOV a2,#0
- MOV a3,#0
- SWI &020006
- MOVVC a1,#0
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423
-
- NAME os_423
- os_423
- MOV a1,#2
- MOV a2,#2
- SWI &020006
- BVS os_423_l1
- MOV a1,#0
- MOV a2,#0 ; reset 6551
- MOV a3,#0
- SWI &020057 ; OS_SerialOp
- MOVVC a1,#0
- os_423_l1
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423vdu
-
- NAME os_423vdu
- os_423vdu
- MOV a2,a1
- MOV a1,#3
- SWI &020057
- MOVVC a1,#0
- MVNCS a1,#0 ; buffer full
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423get
-
- NAME os_423get
- os_423get
- MOV a1,#4
- os_423get_l1
- SWI &020057
- BCS os_423get_l1
- MOVVC a1,a2
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423inkey
-
- NAME os_423inkey
- os_423inkey
- MOV a4,a1
- SWI &020042
- ADD a4,a4,a1
- os_423inkey_l1
- MOV a1,#4
- SWI &020057
- BCC os_423inkey_l2
- BVS os_423inkey_l2
- SWI &020042
- CMP a4,a1
- BHI os_423inkey_l1
- MVN a2,#0
- os_423inkey_l2
- MOVVC a1,a2
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423flush
-
- NAME os_423flush
- os_423flush
- MOV a1,#21
- MOV a2,#1
- MOV a3,#0
- SWI &020006
- MOVVC a1,#0
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_423break
-
- NAME os_423break
- os_423break
- MOV a2,a1
- MOV a1,#2
- SWI &020057
- MOVVC a1,#0
- MVNVS a1,#0
- MOVS pc,lr
-
- EXPORT os_byte
-
- NAME os_byte
- os_byte
- MOVS ip,a4
-
- SWI &20006
-
- STMNEIA ip,{a1,a2,a3}
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_word
-
- NAME os_word
- os_word
- SWI &20007
-
- MOVVC a1,#0
- MOVS pc,lr
-
- os_xbuf
- % 8
-
- EXPORT os_prhex
-
- NAME os_prhex
- os_prhex
- ADR a4,os_xbuf
- MOVS a3,#7
- os_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 os_prhex_l4
- MOVS a1,a1,LSR #4
- BNE os_prhex_l1
- os_prhex_l2
- MOV a2,#32
- os_prhex_l3
- STRB a2,[a4,a3]
- SUBS a3,a3,#1
- BGE os_prhex_l3
- os_prhex_l4
- MOV a1,a4
- MOV a2,#8
- B os_write
-
- EXPORT os_print
-
- NAME os_print
- os_print
- SWI &20002
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_write
-
- NAME os_write
- os_write
- SWI &20046
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_nl
-
- NAME os_nl
- os_nl
- SWI &20003
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_cli
-
- NAME os_cli
- os_cli
- SWI &20005
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_file
-
- NAME os_file
- os_file
- STMFD sp!,{v1,v2,lr}
-
- CMP a3,#0
- ADDNE ip,a3,#8
- LDMNEIA ip,{a3,a4,v1,v2}
-
- SWI &20008
-
- SUBNE ip,ip,#8
- STMNEIA ip,{a1,a2,a3,a4,v1,v2}
-
- MOVVC a1,#0
- LDMFD sp!,{v1,v2,pc}^
-
- EXPORT os_fopen
-
- NAME os_fopen
- os_fopen
- MOV ip,a3
-
- SWI &2000d
-
- STR a1,[ip,#0]
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_fclose
-
- NAME os_fclose
- os_fclose
- MOV a2,a1
- MOV a1,#0
-
- SWI &2000d
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_fread
-
- NAME os_fread
- os_fread
- STMFD sp!,{v1,lr}
-
- MOVS ip,a4
-
- MOV a4,a3
- MOV a3,a2
- MOV a2,a1
- MOV a1,#4
-
- SWI &2000c
-
- STMNEIA ip,{a1,a2,a3,a4,v1}
-
- MOVVC a1,#0
- LDMFD sp!,{v1,pc}^
-
- EXPORT os_fwrite
-
- NAME os_fwrite
- os_fwrite
- STMFD sp!,{v1,lr}
-
- MOVS ip,a4
-
- MOV a4,a3
- MOV a3,a2
- MOV a2,a1
- MOV a1,#2
-
- SWI &2000c
-
- STMNEIA ip,{a1,a2,a3,a4,v1}
-
- MOVVC a1,#0
- LDMFD sp!,{v1,pc}^
-
- EXPORT os_args
-
- NAME os_args
- os_args
- MOVS ip,a4
-
- SWI &20009
-
- STMNEIA ip,{a1,a2,a3}
-
- MOVVC a1,#0
- MOVS pc,lr
-
- EXPORT os_fsctrl
-
- NAME os_fsctrl
- os_fsctrl
- SWI &20029
-
- MOVVC a1,#0
- MOVS pc,lr
-
-
- AREA |C$$wrcode|,CODE
-
- EXPORT os_swi
-
- NAME os_swi
- os_swi
- STMFD sp!,{v1,v2,v3,v4,v5,v6,lr}
-
- ORR a1,a1,#&20000 ; X bit
- ORR a1,a1,#&EF000000 ; SWI opcode
- STR a1,[pc,#|_os_swi|-.-8]
- MOVS ip,a2
- LDMNEIA ip,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}
- B |_os_swi| ; Force a bubble in the pipeline
- |_os_swi|
- DCD 0
-
- STMNEIA ip,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6}
-
- MOVVC a1,#0
- LDMFD sp!,{v1,v2,v3,v4,v5,v6,pc}^
-
- END
-