USG_PG3/usr/source/util/list.s
/ tape boot program to load and transfer
/ to a 'tp' entry
/ entry is made by jsr pc,*$0
/ so return can be rts pc
/ jsr pc,(r5) is putc
/ jsr pc,2(r5) is getc
/ jsr pc,4(r5) is mesg
tmsize = 62.
tcsize = 24.
start:
2:
jsr pc,4(r5)
<'m' for tm11; 'c' for tc11 ; 'u' for tu16\n\0>
.even
jsr pc,2(r5)
mov $tmsize,tpsize
cmp r0,$'m
bne 3f
mov $tmblk,rblk
mov $tmrew,rew
br 1f
3:
cmp r0,$'c
bne 3f
mov $tcblk,rblk
mov $tcrew,rew
mov $tcsize,tpsize
br 1f
3:
cmp r0,$'u
bne 2b
mov $tublk,rblk
mov $turew,rew
1:
jsr pc,*rew
jsr pc,4(r5)
<\nTape entries\n\0>
.even
jsr pc,*rblk
clr tapa
tread:
inc tapa
cmp tapa,tpsize
bhi 4f
jsr pc,*rblk
mov $buf,r1
1:
mov r1,r2
tstb (r1)
beq 2f
jsr pc,string
2:
cmp r2,r1
beq 2f
3:
mov r1,-(sp)
clr r0
mov 38.(r2),r1
div $512.,r0
tst r1
beq 3f
inc r0
3:
add r0,wc
mov (sp)+,r1
2:
mov r2,r1
add $64.,r1
cmp r1,$buf+512.
blo 1b
br tread
4:
jsr pc,psize
rts pc
psize:
jsr pc,*rew
jsr pc,4(r5)
<\nTape size = \0>
.even
mov $bsize,r2
mov wc,r1
add tpsize,r1
add $1,r1
2:
clr r0
div $10.,r0
add $'0,r1
movb r1,(r2)+
mov r0,r1
tst r0
bne 2b
2:
mov $size,r0
3:
movb -(r2),(r0)+
cmp $bsize,r2
blo 3b
movb $'\n,(r0)+
clrb (r0)
mov $size,r1
jsr pc,string
jsr pc,4(r5)
<(decimal)\n\0>
.even
rts pc
mts = 172520
mtc = 172522
mtbrc = 172524
mtcma = 172526
tmblk:
bit $2,*$mts
bne tmblk
tstb *$mtc
bge tmblk
mov $-512.,*$mtbrc
mov $buf,*$mtcma
mov $60003,*$mtc
1:
tstb *$mtc
bge 1b
tst *$mtc
bge 1f
jsr pc,4(r5)
<tape error\n\0>
.even
mov $-1,*$mtbrc
mov $60013,*$mtc
br tmblk
1:
rts pc
tmrew:
mov $60017,*$mtc
rts pc
tucs1 = 172440
tuwc = 172442
tuba = 172444
tufc = 172446
tucs2 = 172450
tuds = 172452
tutc = 172472
tublk:
bit $020000,*$tuds
bne tublk
tstb *$tucs1
bge tublk
mov $-256.,*$tuwc
mov $buf,*$tuba
mov $071,*$tucs1
1:
tstb *$tucs1
bge 1b
bit $040000,*$tucs1
beq 1f
jsr pc,4(r5)
<tape error\n\0>
.even
mov $040,*$tucs2
mov $-1,*$tufc
mov $033,*$tucs1
br tublk
1:
rts pc
turew:
mov $040,*$tucs2
mov $07,*$tucs1
rts pc
tcdt = 177350
tccm = 177342
tcblk:
mov $tcdt,r0
mov $tccm,r1
for:
mov $3,(r1) / rbn for
1:
tstb (r1)
bge 1b
tst (r1)
blt rev
cmp tapa,(r0)
beq rd
bgt for
rev:
mov $4003,(r1) / rbn bac
1:
tstb (r1)
bge 1b
tst (r1)
blt for
mov (r0),r2
add $5,r2
cmp tapa,r2
blt rev
br for
rd:
mov $buf,-(r0) / bus addr
mov $-256.,-(r0) / wc
mov $5,-(r0) / read
1:
tstb (r1)
bge 1b
tst (r1)
blt tcblk
rts pc
tcrew:
mov $4003,tccm
rts pc
tks = 177560
tkb = 177562
getc:
mov $tks,r0
inc (r0)
1:
tstb (r0)
bge 1b
mov tkb,r0
bic $!177,r0
cmp r0,$'A
blo 1f
cmp r0,$'Z
bhi 1f
add $40,r0
1:
cmp r0,$'\r
bne putc
mov $'\n,r0
tps = 177564
tpb = 177566
putc:
tstb tps
bge putc
cmp r0,$'\n
bne 1f
mov $'\r,r0
jsr pc,(r5)
mov $'\n+200,r0
jsr pc,(r5)
clr r0
jsr pc,(r5)
mov $'\n,r0
rts pc
1:
mov r0,tpb
rts pc
mesg:
movb *(sp),r0
beq 1f
jsr pc,(r5)
inc (sp)
br mesg
1:
add $2,(sp)
bic $1,(sp)
rts pc
string:
clr r4
2:
tstb (r1)
beq 2f
cmpb (r1),$'!
blo 3f
cmpb (r1),$0176
bhi 3f
movb (r1)+,r0
jsr pc,(r5)
inc r4
cmp $32.,r4
bhi 2b
2:
mov $'\n,r0
jsr pc,(r5)
3:
rts pc
.bss
buf: .=.+512.
tapa: .=.+2
rblk: .=.+2
rew: .=.+2
tpsize: .=.+2
wc: .=.+2
bsize: .=.+32.
size: .=.+32.