V5/usr/mdec/mcopy.s

Compare this file to the similar file:
Show the results in this format:

/ copy mag tape to disk

	jsr	pc,rew
2:
	jsr	pc,4(r5)
		<'p' for rp; 'k' for rk\n\0>
		.even
	jsr	pc,2(r5)
	cmp	r0,$'k
	bne	3f
	mov	$rkblk,r0
	br	1f
3:
	cmp	r0,$'p
	bne	2b
	mov	$rpblk,r0
1:
	mov	r0,rxblk
	mov	$'\n,r0
	jsr	pc,(r5)
	jsr	pc,4(r5)
		<disk offset\n\0>
		.even
	jsr	pc,numb
	mov	r0,bno
	jsr	pc,4(r5)
		<tape offset\n\0>
		.even
	jsr	pc,numb
	mov	r0,r1
	beq	2f
1:
	jsr	pc,rblk
	dec	r1
	bne	1b
2:

	jsr	pc,4(r5)
		<count\n\0>
		.even
	jsr	pc,numb
	mov	r0,r1
1:
	jsr	pc,rblk
	jsr	pc,wblk
	dec	r1
	bne	1b
	jsr	pc,rew
	rts	pc

numb:
	clr	r1
1:
	jsr	pc,2(r5)
	cmp	r0,$'\n
	beq	1f
	sub	$'0,r0
	cmp	r0,$9
	bhi	2f
	mul	$10.,r1
	add	r0,r1
	br	1b
1:
	mov	r1,r0
	rts	pc
2:
	jsr	pc,4(r5)
		<illegal digit\n\0>
		.even
	tst	(sp)+
	rts	pc

mts = 172520
mtc = 172522
mtbrc = 172524
mtcma = 172526

rblk:
	bit	$2,*$mts
	bne	rblk
	tstb	*$mtc
	bge	rblk
	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	rblk
1:
	rts	pc

rew:
	mov	$60017,*$mtc
	rts	pc

wblk:
	mov	bno,r0
	inc	bno
	mov	r1,-(sp)
	mov	r0,r1
	clr	r0
	jmp	*rxblk

rpda = 176724
rpblk:
	div	$10.,r0
	mov	r1,-(sp)
	mov	r0,r1
	clr	r0
	div	$20.,r0
	bisb	r1,1(sp)
	mov	$rpda,r1
	mov	(sp)+,(r1)
	mov	r0,-(r1)
	br	1f

rkda = 177412
rkblk:
	div	$12.,r0
	ash	$4.,r0
	bis	r1,r0
	mov	$rkda,r1
	mov	r0,(r1)

1:
	mov	$buf,-(r1)
	mov	$-256.,-(r1)
	mov	$3,-(r1)
1:
	tstb	(r1)
	bge	1b
	tst	(r1)
	blt	1f
	mov	(sp)+,r1
	rts	pc
1:
	jsr	pc,4(r5)
		<disk error\n\0>
		.even
	mov	(sp)+,r1
	dec	bno
	br	wblk

.bss
buf:	.=.+512.
rxblk:	.=.+2
bno:	.=.+2