338 lines
3.7 KiB
ArmAsm
338 lines
3.7 KiB
ArmAsm
/ 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
|
|
|