AUSAM/source/S/speed.s
.globl getc,fopen,putc,flush
mov (sp)+,r4 /r4 is argc
cmp *(sp)+,$'s / invoked via speed command ??
beq 0f / -> yes
inc fflag / form feed at end please !!
0:
dec r4
ble 0f
br eof
0: jsr r5,getc;ibuf
bes eof
cmp r0,$177
bpl 0b
cmp r0,$40
bpl 2f
bne 1f
inc r5
br 0b
1:
sub $10,r0
bmi 0b
cmp r0,$6
bpl 0b
asl r0
jsr pc,*atab(r0)
br 0b
2:
tstb line0(r5)
bne 2f
movb r0,line0(r5)
inc r5
cmp r5,l0max
bmi 0b
mov r5,l0max
br 0b
2:
tstb line1(r5)
bne 2f
movb r0,line1(r5)
inc r5
cmp r5,l1max
bmi 0b
mov r5,l1max
br 0b
2:
tstb line2(r5)
bne 2f
movb r0,line2(r5)
inc r5
cmp r5,l2max
bmi 0b
mov r5,l2max
br 0b
2:
jsr pc,lflush
movb r0,line0(r5)
inc r5
mov r5,l0max
mov $15,r0
jsr r5,putc; obuf
br 0b
eof:
tst r4
ble 0f
dec r4
mov ibuf,r0
sys close
mov (sp)+,r0
jsr r5,fopen;ibuf
bcc 0b
mov $2,r0
sys write;filerr;filend-filerr
br eof
0:
tst fflag / form feed wanted ??
beq 0f
mov $14,r0
jsr r5,putc; obuf / output a form feed
mov $2,r0
sys write; finmsg ; finmsgl
0:
jsr pc,lflush
jsr r5,flush;obuf
sys exit
.data
atab: bs; tab; nl; vt; ff; cr
.text
bs:
dec r5
rts pc
tab:
add $10,r5
bic $7,r5
rts pc
nl:
jsr pc,lflush
clr r5
mov $12,r0
jsr r5,putc; obuf
rts pc
vt:
ff:
jsr pc,lflush
clr r5
mov $14,r0
jsr r5,putc; obuf
rts pc
cr:
clr r5
rts pc
lflush:
mov l0max,r1
bne 1f
rts pc
1:
clr r3
1:
movb line0(r3),r0
bne 2f
mov $40,r0
2:
clrb line0(r3)
jsr r5,putc; obuf
inc r3
cmp r3,r1
bmi 1b
clr l0max
mov $15,r0
jsr r5,putc; obuf
mov l1max,r1
bne 1f
rts pc
1:
clr r3
1:
movb line1(r3),r0
bne 2f
mov $40,r0
2:
clrb line1(r3)
jsr r5,putc; obuf
inc r3
cmp r3,r1
bmi 1b
clr l1max
mov $15,r0
jsr r5,putc; obuf
mov l2max,r1
bne 1f
rts pc
1:
clr r3
1:
movb line2(r3),r0
bne 2f
mov $40,r0
2:
clrb line2(r3)
jsr r5,putc; obuf
inc r3
cmp r3,r1
bmi 1b
clr l2max
rts pc
.bss
ibuf: .=.+518.
line0: .=.+160.
line1: .=.+160.
line2: .=.+160.
l0max: .=.+2
l1max: .=.+2
l2max: .=.+2
.data
obuf: 1
.=.+516.
fflag: 0
filerr: <file not found\n>
filend:
finmsg: <FINISHED\n>
finmsgl = . - finmsg