Work on file usr/mdec/dtf.s
Synthesized-from: v5
--- /dev/null
+/ unix DEC-tape time/mtrack track formatter
+
+nword = 256.
+nblock = 578.
+endz = 7200.
+
+ps = 177776
+tcst = 177340
+tccm = 177342
+tcwc = 177344
+tcba = 177346
+tcdt = 177350
+
+ mov r5,savr5
+ mov sp,savsp
+
+start:
+ mov savr5,r5
+ mov savsp,sp
+ jsr pc,4(r5)
+ <set up to format on drive 0\n\0>
+ .even
+
+ clr r0
+ mov $cobtab,r1
+1:
+ jsr pc,bcomobv
+ mov r2,(r1)+
+ inc r0
+ cmp r0,$512.
+ bne 1b
+
+ mov $buffer,r0
+1:
+ mov $-1,(r0)+
+ cmp r0,$buffer+nword+nword
+ blo 1b
+
+ mov savr5,r5
+ jsr pc,2(r5)
+
+ mov $340,ps
+ mov $tcdt,r5
+ mov $13,tccm
+ jsr pc,flag
+
+/ 8Kch for end zone
+
+ mov $endz,r4
+1:
+ jsr r0,mtrack; 101101
+ dec r4
+ bne 1b
+
+/ foreward guard
+
+ mov $199.,r4
+1:
+ jsr r0,mtrack; 10101
+ dec r4
+ bne 1b
+
+/ blocks
+
+ mov $nblock,r3
+1:
+ jsr r0,mtrack; 10101
+ jsr r0,mtrack; 10110
+ jsr r0,mtrack; 11010
+ jsr r0,mtrack; 01000
+ jsr r0,mtrack; 01000
+ jsr r0,mtrack; 01000
+ jsr r0,mtrack; 01000
+ mov $nword-4,r4
+2:
+ jsr r0,mtrack; 111000
+ dec r4
+ bne 2b
+ jsr r0,mtrack; 111011
+ jsr r0,mtrack; 111011
+ jsr r0,mtrack; 111011
+ jsr r0,mtrack; 111011
+ jsr r0,mtrack; 101001
+ jsr r0,mtrack; 100101
+ jsr r0,mtrack; 10101
+ dec r3
+ bne 1b
+
+/ rear guard
+
+ mov $199.,r4
+1:
+ jsr r0,mtrack; 10101
+ dec r4
+ bne 1b
+
+/ rear end zone
+
+ mov $endz,r4
+1:
+ jsr r0,mtrack; 10010
+ dec r4
+ bne 1b
+ clr tccm
+
+/ end of mtrack pass
+/ go back 12 blocks
+
+ mov $12.,r0
+ mov $4002,tccm
+1:
+ incb tccm
+ jsr pc,flag
+ dec r0
+ bne 1b
+
+/ put comobv(nblock-1) in everything
+/ up to end zone
+
+ mov $nblock-1,r0
+ mov r0,bn
+ jsr pc,comobv
+ mov $17,tccm
+ jsr pc,flag
+1:
+ movb r1,tcst
+ mov r0,(r5)
+ jsr pc,flag1
+ br 1b
+
+/ reverse pass put in
+/ foreward and reverse
+/ block numbers
+
+ mov $4017,tccm
+ jsr pc,flag
+1:
+ mov $nword+3.,r4
+2:
+ clrb tcst
+ clr (r5)
+ jsr pc,flag
+ dec r4
+ bne 2b
+
+ clrb tcst
+ clr (r5)
+ mov bn,r0
+ jsr pc,comobv
+ jsr pc,flag
+ movb r1,tcst
+ mov r0,(r5)
+ jsr pc,flag
+ dec bn
+ blt check
+ clrb tcst
+ clr (r5)
+ jsr pc,flag
+ clrb tcst
+ clr (r5)
+ jsr pc,flag
+ clrb tcst
+ mov bn,(r5)
+ jsr pc,flag
+ clrb tcst
+ clr (r5)
+ jsr pc,flag
+ clrb tcst
+ clr (r5)
+ jsr pc,flag
+ br 1b
+
+/ foreward pass
+/ confirm block numbers
+/ write all 1's in data
+
+check:
+ clrb tcst
+ clr (r5)
+ jsr pc,flag1
+ br check
+ clr r4
+1:
+ mov $3,tccm
+ jsr pc,flag
+ cmp (r5),r4
+ bne error1
+ mov $-nword,tcwc
+ mov $buffer,tcba
+ mov $15,tccm
+ jsr pc,flag
+ inc r4
+ cmp r4,$nblock
+ bne 1b
+ mov $3,tccm
+ jsr pc,flag1
+ br error2
+
+/ reverse pass
+/ confirm block numbers
+/ read data and compare
+/ to all 1's
+
+1:
+ mov $4003,tccm
+ jsr pc,flag
+ dec r4
+ cmp r4,(r5)
+ bne error3
+ mov $-nword,tcwc
+ mov $buffer,tcba
+ mov $4005,tccm
+ jsr pc,compare
+ jsr pc,flag
+ tst r4
+ bne 1b
+ mov $4003,tccm
+ jsr pc,flag1
+ br error4
+ jsr pc,compare
+ jmp start
+
+error1:
+ mov $1,r0
+ br 1f
+error2:
+ mov $1,r0
+ br 1f
+error3:
+ mov $3,r0
+ br 1f
+error4:
+ mov $4,r0
+ br 1f
+error5:
+ mov $5,r0
+ br 1f
+error6:
+ mov $6,r0
+ br 1f
+error7:
+ mov $7,r0
+1:
+ add $'0,r0
+ movb r0,0f
+ mov tcst,-(sp)
+ mov tccm,-(sp)
+ mov $1,tccm
+ mov savr5,r5
+ jsr pc,4(r5)
+ <error>
+0:
+ <x\ntcst in r0; tccm in r1\n\0>
+ .even
+ mov (sp)+,r1
+ mov (sp)+,r0
+ 0
+ rts pc
+
+compare:
+ mov r0,-(sp)
+ mov $buffer,r0
+1:
+ cmp (r0)+,$-1
+ bne error5
+ cmp r0,$buffer+nword+nword
+ blo 1b
+ mov (sp)+,r0
+ rts pc
+
+mtrack:
+ mov (r0)+,(r5)
+ jsr pc,flag
+ rts r0
+
+flag:
+ bit $100200,tccm
+ beq flag
+ blt error6
+ rts pc
+
+flag1:
+ bit $100200,tccm
+ beq flag1
+ bge 1f
+ tst tcst
+ bge error7
+ add $2,(sp)
+1:
+ rts pc
+
+comobv:
+ mov r0,r4
+ bic $!777,r0
+ asl r0
+ mov cobtab(r0),r0
+ swab r0
+ clr r1
+ ror r0
+ rol r1
+ asl r0
+ asl r0
+ rol r1
+ swab r4
+ bic $177401,r4
+ bis cobtab(r4),r0
+ rts pc
+
+bcomobv:
+ mov r0,r2
+ bic $!70,r2
+ mov r0,r3
+ mov $6.,r4
+1:
+ asr r3
+ dec r4
+ bne 1b
+ bic $!7,r3
+ bis r3,r2
+ mov r0,r3
+ mov $6.,r4
+1:
+ asl r3
+ dec r4
+ bne 1b
+ bic $!700,r3
+ bis r3,r2
+ com r2
+ bic $!777,r2
+ rts pc
+
+bn: .=.+2
+savr5: .=.+2
+savsp: .=.+2
+cobtab: .=.+1024.
+buffer: .=.+nword+nword
+