/ 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.
