259 lines
2.9 KiB
ArmAsm
259 lines
2.9 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ f39 -- i/o statements
|
|
|
|
.globl sread
|
|
.globl swrit
|
|
.globl sprin
|
|
.globl sback
|
|
.globl srewi
|
|
.globl sendf
|
|
|
|
.globl getsym
|
|
.globl error
|
|
.globl geticon
|
|
.globl e2
|
|
.globl lvalue
|
|
.globl rvalue
|
|
.globl iserror
|
|
.globl convrt
|
|
.globl code
|
|
.globl chrtab
|
|
.globl blocks
|
|
.globl blockp
|
|
.globl doend
|
|
.globl genop
|
|
.globl levzer
|
|
.globl dobeg
|
|
.globl intexp
|
|
.globl ptemp
|
|
.globl blocks
|
|
.globl blockp
|
|
.globl intexp
|
|
.globl newline
|
|
.globl nelem
|
|
|
|
sprin:
|
|
mov $8.,-(sp)
|
|
jsr r5,getfmt
|
|
br 9f
|
|
cmp r0,$36. / ,
|
|
beq 1f
|
|
cmp r0,$40. / =|
|
|
bne 8f
|
|
clrb (r1)
|
|
1:
|
|
mov $34.,r0 / simulate )
|
|
br 2f
|
|
|
|
sread:
|
|
mov $2,-(sp)
|
|
br 1f
|
|
|
|
swrit:
|
|
clr -(sp)
|
|
|
|
1:
|
|
cmpb (r1)+,$'(
|
|
bne 8f
|
|
jsr r5,intexp
|
|
mov $blocks,blockp
|
|
cmp r0,$34. / ), implies unformatted
|
|
beq 2f
|
|
cmp r0,$36. / ,
|
|
bne 8f
|
|
jsr r5,getfmt
|
|
br 9f
|
|
add $4,(sp)
|
|
cmp r0,$34. / )
|
|
bne 8f
|
|
2:
|
|
mov (sp),r0
|
|
mov iotype(r0),r0
|
|
jsr r5,code
|
|
< %s\n\0>; .even
|
|
r0
|
|
1:
|
|
tstb (r1)
|
|
beq 9f
|
|
1:
|
|
jsr r5,list
|
|
cmp r0,$40. / |=
|
|
beq 9f
|
|
8:
|
|
jsr r5,error; 41.
|
|
9:
|
|
jsr r5,code
|
|
< endio\n\0>; .even
|
|
tst (sp)+
|
|
rts r5
|
|
|
|
iotype:
|
|
1f
|
|
2f
|
|
3f
|
|
4f
|
|
5f
|
|
|
|
1:
|
|
<iowu\0>
|
|
2:
|
|
<ioru\0>
|
|
3:
|
|
<iowf\0>
|
|
4:
|
|
<iorf\0>
|
|
5:
|
|
<iowp\0>
|
|
.even
|
|
|
|
getfmt:
|
|
movb (r1),r0
|
|
cmpb chrtab(r0),$4 / digit
|
|
beq 1f
|
|
jsr r5,e2
|
|
jsr r5,iserror
|
|
rts r5
|
|
mov r0,-(sp)
|
|
jsr r5,lvalue
|
|
mov $blocks,blockp
|
|
br 8f
|
|
1:
|
|
jsr r5,geticon
|
|
br 8f
|
|
mov r0,temp
|
|
jsr r5,ptemp; 'i; temp; line / register use of format
|
|
jsr r5,code
|
|
< lval; .%d\n\0>; .even
|
|
r0
|
|
jsr r5,getsym
|
|
mov r0,-(sp)
|
|
8:
|
|
mov (sp)+,r0
|
|
tst (r5)+
|
|
rts r5
|
|
|
|
list:
|
|
jsr r5,lstitm
|
|
cmp r0,$36. / ,
|
|
beq list
|
|
rts r5
|
|
|
|
lstitm:
|
|
mov $blocks,blockp
|
|
cmpb (r1),$'( / test for sublist
|
|
beq 1f
|
|
jsr r5,e2
|
|
jsr r5,iserror
|
|
rts r5
|
|
mov r0,-(sp)
|
|
clr -(sp)
|
|
tst (r2)
|
|
bne 2f / test for name
|
|
mov 2(r2),r3
|
|
mov symtab(r3),r0
|
|
bic $!70,r0
|
|
cmp r0,$20 / test for short list
|
|
bne 2f
|
|
mov pc,(sp)
|
|
mov symtab+2(r3),r3
|
|
mov (r3)+,-(sp)
|
|
asl (sp)
|
|
add (sp)+,r3
|
|
mov (r3),r3
|
|
jsr r5,code
|
|
< slist1; d%d\n2:\0>; .even
|
|
r3
|
|
2:
|
|
jsr r5,lvalue
|
|
tst (sp)
|
|
beq 3f
|
|
jsr r5,code
|
|
< slist3\n\0>; .even
|
|
3:
|
|
mov $"io,r0
|
|
jsr r5,genop
|
|
tst (sp)+
|
|
beq 2f
|
|
jsr r5,code
|
|
<\n slist2; 2b\0>; .even
|
|
2:
|
|
jsr r5,newline
|
|
mov (sp)+,r0
|
|
rts r5
|
|
1:
|
|
inc r1
|
|
jsr r5,levzer; '=
|
|
br 1f / yes, implied do
|
|
jsr r5,list
|
|
jsr r5,chkel
|
|
jsr r5,getsym
|
|
rts r5
|
|
1:
|
|
cmp r1,r0
|
|
bhis 8f
|
|
cmpb -(r0),$', / look backwards
|
|
bne 1b
|
|
mov r0,-(sp)
|
|
mov r1,-(sp)
|
|
movb $'),(r0) / fake!!
|
|
mov r0,r1
|
|
inc r1
|
|
clr r0
|
|
jsr r5,dobeg / get do
|
|
jsr r5,chkel
|
|
mov (sp)+,r0
|
|
mov r1,-(sp)
|
|
mov r0,r1
|
|
jsr r5,list
|
|
jsr r5,chkel
|
|
clr r0
|
|
jsr r5,doend
|
|
mov (sp)+,r1
|
|
movb $',,*(sp)+ / unfake!!
|
|
jsr r5,getsym
|
|
rts r5
|
|
|
|
chkel:
|
|
cmp r0,$34. / )
|
|
beq 1f
|
|
8:
|
|
jsr r5,error; 41.
|
|
1:
|
|
rts r5
|
|
|
|
sback:
|
|
mov $bksp,r2
|
|
br 1f
|
|
|
|
srewi:
|
|
mov $rewi,r2
|
|
br 1f
|
|
|
|
sendf:
|
|
mov $enfl,r2
|
|
|
|
1:
|
|
mov r2,-(sp)
|
|
jsr r5,intexp
|
|
mov (sp),r2
|
|
jsr r5,code
|
|
< %s\n\0>; .even
|
|
r2
|
|
cmp r0,$40. / =|
|
|
beq 9f
|
|
8:
|
|
jsr r5,error; 41.
|
|
9:
|
|
tst (sp)+
|
|
rts r5
|
|
|
|
bksp:
|
|
<bksp\0>
|
|
rewi:
|
|
<rewi\0>
|
|
enfl:
|
|
<enfl\0>
|
|
|