90 lines
1.0 KiB
ArmAsm
90 lines
1.0 KiB
ArmAsm
/ putw/putc -- write words/characters on output file
|
|
|
|
.globl _putc, _putw, _fflush, _fcreat
|
|
.globl cerror
|
|
.comm _errno,2
|
|
|
|
_fcreat:
|
|
mov r5,-(sp)
|
|
mov sp,r5
|
|
mov 4(r5),0f
|
|
mov 6(r5),r1
|
|
mov pc,(r1) / a putatively illegal file desc.
|
|
sys 0; 9f
|
|
.data
|
|
9: sys creat; 0:..; 666
|
|
.text
|
|
bes badret
|
|
mov r0,(r1)+
|
|
clr (r1)+
|
|
clr (r1)+
|
|
br goodret
|
|
|
|
_putw:
|
|
mov r5,-(sp)
|
|
mov sp,r5
|
|
mov 6(r5),r1
|
|
dec 2(r1)
|
|
bge 1f
|
|
jsr pc,fl
|
|
dec 2(r1)
|
|
1:
|
|
movb 4(r5),*4(r1)
|
|
inc 4(r1)
|
|
dec 2(r1)
|
|
bge 1f
|
|
jsr pc,fl
|
|
dec 2(r1)
|
|
1:
|
|
movb 5(r5),*4(r1)
|
|
inc 4(r1)
|
|
mov 4(r5),r0
|
|
br goodret
|
|
|
|
_putc:
|
|
mov r5,-(sp)
|
|
mov sp,r5
|
|
mov 6(r5),r1
|
|
dec 2(r1)
|
|
bge 1f
|
|
jsr pc,fl
|
|
dec 2(r1)
|
|
1:
|
|
mov 4(r5),r0
|
|
movb r0,*4(r1)
|
|
inc 4(r1)
|
|
br goodret
|
|
|
|
_fflush:
|
|
mov r5,-(sp)
|
|
mov sp,r5
|
|
mov 4(r5),r1
|
|
jsr pc,fl
|
|
br goodret
|
|
|
|
fl:
|
|
mov r1,r0
|
|
add $6,r0
|
|
mov r0,-(sp)
|
|
mov r0,0f
|
|
mov 4(r1),0f+2
|
|
beq 1f
|
|
sub r0,0f+2
|
|
mov (r1),r0
|
|
sys 0; 9f
|
|
.data
|
|
9: sys write; 0:..; ..
|
|
.text
|
|
1:
|
|
mov (sp)+,4(r1)
|
|
mov $512.,2(r1)
|
|
rts pc
|
|
|
|
badret:
|
|
jmp cerror
|
|
|
|
goodret:
|
|
clr _errno
|
|
mov (sp)+,r5
|
|
rts pc
|