Add original unix v6
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/ copy and execute DEC loaders
|
||||
|
||||
core = 24.
|
||||
prs = 177550
|
||||
|
||||
mov $dldr,r0
|
||||
mov $[core*2048.]-300,r1
|
||||
mov r1,r2
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r0,$end
|
||||
blo 1b
|
||||
jmp (r2)
|
||||
|
||||
dldr:
|
||||
10706
|
||||
24646
|
||||
10705
|
||||
62705
|
||||
114
|
||||
5001
|
||||
13716
|
||||
177570
|
||||
6016
|
||||
103402
|
||||
5016
|
||||
404
|
||||
241
|
||||
6116
|
||||
1001
|
||||
10116
|
||||
5000
|
||||
4715
|
||||
105303
|
||||
1374
|
||||
4715
|
||||
4767
|
||||
74
|
||||
10402
|
||||
162702
|
||||
4
|
||||
22702
|
||||
2
|
||||
1441
|
||||
4767
|
||||
54
|
||||
61604
|
||||
10401
|
||||
4715
|
||||
2004
|
||||
105700
|
||||
1753
|
||||
0
|
||||
751
|
||||
110321
|
||||
770
|
||||
16703
|
||||
150
|
||||
105213
|
||||
105713
|
||||
100376
|
||||
116303
|
||||
2
|
||||
60300
|
||||
42703
|
||||
177400
|
||||
5302
|
||||
207
|
||||
12667
|
||||
44
|
||||
4715
|
||||
10304
|
||||
4715
|
||||
303
|
||||
50304
|
||||
16707
|
||||
26
|
||||
4767
|
||||
177752
|
||||
4715
|
||||
105700
|
||||
1342
|
||||
6204
|
||||
103002
|
||||
0
|
||||
677
|
||||
6304
|
||||
114
|
||||
0
|
||||
|
||||
. = dldr-500+744
|
||||
16701
|
||||
26
|
||||
12702
|
||||
352
|
||||
5211
|
||||
105711
|
||||
100376
|
||||
116162
|
||||
2
|
||||
[core*2048.]-400
|
||||
5267
|
||||
177756
|
||||
765
|
||||
prs
|
||||
end:
|
||||
@@ -0,0 +1,337 @@
|
||||
/ 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
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
/ disk boot program to load and transfer
|
||||
/ to a unix file system entry
|
||||
/ must be assembled with tty.s and
|
||||
/ appropriate disk driver
|
||||
|
||||
/ entry is made by jsr pc,*$0
|
||||
/ so return can be rts pc
|
||||
|
||||
core = 24. / first core loc (in KW) not used
|
||||
.. = [core*2048.]-512.
|
||||
start:
|
||||
|
||||
/ copy self to 'core' - 512. bytes
|
||||
/ strip of UNIX execute header if present
|
||||
|
||||
mov $..,sp
|
||||
mov sp,r1
|
||||
clr r0
|
||||
cmp pc,r1
|
||||
bhis 2f
|
||||
cmp (r0),$407
|
||||
bne 1f
|
||||
mov $20,r0
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r1,$core*2048.
|
||||
blo 1b
|
||||
jmp (sp)
|
||||
|
||||
/ clear all of core
|
||||
|
||||
2:
|
||||
clr (r0)+
|
||||
cmp r0,sp
|
||||
blo 2b
|
||||
|
||||
/ prompt
|
||||
/ read in path name
|
||||
/ breaking on '/' into 14 ch names
|
||||
|
||||
mov $trvect,r5
|
||||
mov $'@,r0
|
||||
jsr pc,(r5)
|
||||
mov $names,r2
|
||||
1:
|
||||
mov r2,r1
|
||||
2:
|
||||
jsr pc,getc
|
||||
cmp r0,$'\n
|
||||
beq 1f
|
||||
cmp r0,$'/
|
||||
beq 3f
|
||||
movb r0,(r1)+
|
||||
br 2b
|
||||
3:
|
||||
cmp r2,r1
|
||||
beq 2b
|
||||
add $14.,r2
|
||||
br 1b
|
||||
1:
|
||||
|
||||
/ start of path name decoding
|
||||
/ start with first name and root ino
|
||||
|
||||
mov $names,r2
|
||||
mov $1,r0
|
||||
|
||||
/ get next inode
|
||||
|
||||
1:
|
||||
clr bno
|
||||
jsr pc,iget
|
||||
tst (r2)
|
||||
beq 1f
|
||||
|
||||
/ read next directory looking for next name
|
||||
|
||||
2:
|
||||
jsr pc,rmblk
|
||||
br start
|
||||
mov $buf,r1
|
||||
3:
|
||||
mov r2,r3
|
||||
mov r1,r4
|
||||
add $16.,r1
|
||||
tst (r4)+
|
||||
beq 5f
|
||||
4:
|
||||
cmpb (r3)+,(r4)+
|
||||
bne 5f
|
||||
cmp r4,r1
|
||||
blo 4b
|
||||
mov -16.(r1),r0
|
||||
add $14.,r2
|
||||
br 1b
|
||||
5:
|
||||
cmp r1,$buf+512.
|
||||
blo 3b
|
||||
br 2b
|
||||
|
||||
/ last entry was found
|
||||
/ read into 0.
|
||||
|
||||
1:
|
||||
clr r2
|
||||
1:
|
||||
jsr pc,rmblk
|
||||
br callout
|
||||
mov $buf,r1
|
||||
2:
|
||||
mov (r1)+,(r2)+
|
||||
cmp r1,$buf+512.
|
||||
blo 2b
|
||||
br 1b
|
||||
|
||||
/ subroutine will read in inode
|
||||
/ number specified in r0
|
||||
iget:
|
||||
add $31.,r0
|
||||
mov r0,r5
|
||||
ash $-4.,r0
|
||||
jsr pc,rblka
|
||||
bic $!17,r5
|
||||
ash $5.,r5
|
||||
add $buf,r5
|
||||
mov $inod,r4
|
||||
1:
|
||||
mov (r5)+,(r4)+
|
||||
cmp r4,$addr+16.
|
||||
blo 1b
|
||||
rts pc
|
||||
|
||||
/ routine to read in block
|
||||
/ number specified by bno
|
||||
/ after applying file system
|
||||
/ mapping algorithm in inode.
|
||||
/ bno is incremented, success
|
||||
/ return is a skip, error (eof)
|
||||
/ is direct return.
|
||||
rmblk:
|
||||
add $2,(sp)
|
||||
mov bno,r0
|
||||
inc bno
|
||||
bit $LRG,mode
|
||||
bne 1f
|
||||
asl r0
|
||||
mov addr(r0),r0
|
||||
bne rblka
|
||||
2:
|
||||
sub $2,(sp)
|
||||
rts pc
|
||||
/ large algorithm
|
||||
/ huge algorithm is not implemented
|
||||
1:
|
||||
clr -(sp)
|
||||
movb r0,(sp)
|
||||
clrb r0
|
||||
swab r0
|
||||
asl r0
|
||||
mov addr(r0),r0
|
||||
beq 2b
|
||||
jsr pc,rblka
|
||||
mov (sp)+,r0
|
||||
asl r0
|
||||
mov buf(r0),r0
|
||||
beq 2b
|
||||
rblka:
|
||||
mov r0,dska
|
||||
br rblk
|
||||
|
||||
ba: buf
|
||||
wc: -256.
|
||||
.bss
|
||||
end:
|
||||
inod = ..-1024.
|
||||
mode = inod
|
||||
addr = inod+8.
|
||||
buf = inod+32.
|
||||
bno = buf+514.
|
||||
dska = bno+2
|
||||
names = dska+2
|
||||
LRG = 10000
|
||||
.text
|
||||
@@ -0,0 +1,38 @@
|
||||
/ rp04 disk driver
|
||||
|
||||
hpcs1 = 176700
|
||||
hpda = 176706
|
||||
hpcs2 = 176710
|
||||
hpof = 176732
|
||||
hpca = 176734
|
||||
|
||||
fmt22 = 010000
|
||||
preset = 021
|
||||
clear = 040
|
||||
|
||||
first = .+2 / dirty, but i need the space
|
||||
tst $0
|
||||
bne 1f
|
||||
mov $clear,*$hpcs2
|
||||
mov $preset,*$hpcs1
|
||||
mov $fmt22,*$hpof
|
||||
inc first
|
||||
1:
|
||||
mov dska,r1
|
||||
clr r0
|
||||
div $22.,r0
|
||||
mov r1,-(sp)
|
||||
mov r0,r1
|
||||
clr r0
|
||||
div $19.,r0
|
||||
bisb r1,1(sp)
|
||||
mov r0,*$hpca
|
||||
mov $hpda,r1
|
||||
mov (sp)+,(r1)
|
||||
mov ba,-(r1)
|
||||
mov wc,-(r1)
|
||||
mov $iocom,-(r1)
|
||||
1:
|
||||
tstb (r1)
|
||||
bpl 1b
|
||||
rts pc
|
||||
@@ -0,0 +1,70 @@
|
||||
htcs1 = 172440
|
||||
htba = 172444
|
||||
htfc = 172446
|
||||
htcs2 = 172450
|
||||
htds = 172452
|
||||
httc = 172472
|
||||
|
||||
P800 = 1300
|
||||
P1600 = 2300
|
||||
PIP = 20000
|
||||
MOL = 10000
|
||||
ERR = 40000
|
||||
REV = 33
|
||||
READ = 71
|
||||
REW = 7
|
||||
|
||||
tread:
|
||||
1:
|
||||
mov ba,mtma
|
||||
cmp mtapa,tapa
|
||||
beq 1f
|
||||
bhi 2f
|
||||
jsr pc,rrec
|
||||
br 1b
|
||||
2:
|
||||
jsr pc,rew
|
||||
br 1b
|
||||
1:
|
||||
mov wc,r1
|
||||
1:
|
||||
jsr pc,rrec
|
||||
add $256.,r1
|
||||
bmi 1b
|
||||
rts pc
|
||||
|
||||
rrec:
|
||||
mov $htds,r0
|
||||
tstb (r0)
|
||||
bpl rrec
|
||||
bit $PIP,(r0)
|
||||
bne rrec
|
||||
bit $MOL,(r0)
|
||||
beq rrec
|
||||
mov $htfc,r0
|
||||
mov $-512.,(r0)
|
||||
mov mtma,-(r0)
|
||||
mov $-256.,-(r0)
|
||||
mov $READ,-(r0)
|
||||
1:
|
||||
tstb (r0)
|
||||
bpl 1b
|
||||
bit $ERR,*$htds
|
||||
bpl 1f
|
||||
mov $-1,*$htfc
|
||||
mov $REV,(r0)
|
||||
br rrec
|
||||
1:
|
||||
add $512.,mtma
|
||||
inc mtapa
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
clr *$htcs2
|
||||
mov $P800,*$httc
|
||||
mov $REW,*$htcs1
|
||||
clr mtapa
|
||||
rts pc
|
||||
|
||||
mtapa: 0
|
||||
mtma: 0
|
||||
@@ -0,0 +1,256 @@
|
||||
/ 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
|
||||
|
||||
core = 24.
|
||||
.mt. = 1
|
||||
.. = [core*2048.]-512.
|
||||
start:
|
||||
mov $..,sp
|
||||
mov $name,r4
|
||||
mov sp,r1
|
||||
cmp pc,r1
|
||||
bhis 2f
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 1f
|
||||
mov $20,r0
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r1,$end
|
||||
blo 1b
|
||||
jmp (sp)
|
||||
|
||||
2:
|
||||
jsr pc,rew
|
||||
mov $tvec,r5
|
||||
mov $'=,r0
|
||||
jsr pc,(r5)
|
||||
2:
|
||||
mov r4,r1
|
||||
1:
|
||||
jsr pc,2(r5)
|
||||
cmp r0,$'\n
|
||||
beq 1f
|
||||
cmp r0,$'@
|
||||
beq 2b
|
||||
movb r0,(r1)+
|
||||
cmp r0,$'#
|
||||
bne 1b
|
||||
sub $2,r1
|
||||
cmp r1,r4
|
||||
blo 2b
|
||||
br 1b
|
||||
1:
|
||||
clrb (r1)
|
||||
cmp r1,r4
|
||||
blos start
|
||||
mov $1,tapa
|
||||
mov $-6144.,wc
|
||||
jsr pc,taper
|
||||
clr r1
|
||||
1:
|
||||
mov r1,r2
|
||||
mov r4,r0
|
||||
2:
|
||||
cmpb (r0)+,(r1)
|
||||
bne 2f
|
||||
tstb (r1)+
|
||||
bne 2b
|
||||
br 1f
|
||||
2:
|
||||
mov r2,r1
|
||||
add $64.,r1
|
||||
cmp r1,$12288.
|
||||
blo 1b
|
||||
jsr pc,rew
|
||||
br start
|
||||
1:
|
||||
mov 44.(r2),tapa
|
||||
mov 38.(r2),r0
|
||||
inc r0
|
||||
clc
|
||||
ror r0
|
||||
neg r0
|
||||
mov r0,wc
|
||||
clr r0
|
||||
1:
|
||||
clr (r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
jsr pc,taper
|
||||
jsr pc,rew
|
||||
clr r0
|
||||
cmp (r0),$407 / unix a.out?
|
||||
bne 2f
|
||||
1:
|
||||
mov 20(r0),(r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
2:
|
||||
jsr pc,*$0
|
||||
br start
|
||||
|
||||
.if .mt.
|
||||
mts = 172520
|
||||
mtc = 172522
|
||||
mtbrc = 172524
|
||||
mtcma = 172526
|
||||
|
||||
taper:
|
||||
clr mtma
|
||||
cmp mtapa,tapa
|
||||
beq 1f
|
||||
bhi 2f
|
||||
jsr pc,rrec
|
||||
br taper
|
||||
2:
|
||||
jsr pc,rew
|
||||
br taper
|
||||
1:
|
||||
mov wc,r1
|
||||
1:
|
||||
jsr pc,rrec
|
||||
add $256.,r1
|
||||
bmi 1b
|
||||
rts pc
|
||||
|
||||
rrec:
|
||||
bit $2,*$mts
|
||||
bne rrec
|
||||
tstb *$mtc
|
||||
bge rrec
|
||||
mov $-512.,*$mtbrc
|
||||
mov mtma,*$mtcma
|
||||
mov $60003,*$mtc
|
||||
1:
|
||||
tstb *$mtc
|
||||
bge 1b
|
||||
tst *$mtc
|
||||
bge 1f
|
||||
mov $-1,*$mtbrc
|
||||
mov $60013,*$mtc
|
||||
br rrec
|
||||
1:
|
||||
add $512.,mtma
|
||||
inc mtapa
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $60017,*$mtc
|
||||
clr mtapa
|
||||
rts pc
|
||||
.endif
|
||||
|
||||
.if .mt.-1
|
||||
tcdt = 177350
|
||||
tccm = 177342
|
||||
taper:
|
||||
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:
|
||||
clr -(r0) / bus addr
|
||||
mov wc,-(r0) / wc
|
||||
mov $5,-(r0) / read
|
||||
1:
|
||||
tstb (r1)
|
||||
bge 1b
|
||||
tst (r1)
|
||||
blt taper
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $4003,tccm
|
||||
rts pc
|
||||
.endif
|
||||
|
||||
tvec:
|
||||
br putc
|
||||
br getc
|
||||
br mesg
|
||||
|
||||
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
|
||||
|
||||
end:
|
||||
tapa: .=.+2
|
||||
mtapa: .=.+2
|
||||
mtma: .=.+2
|
||||
wc: .=.+2
|
||||
name: .=.+32.
|
||||
@@ -0,0 +1,59 @@
|
||||
/ copy mag tape to disk
|
||||
/ load with proper tape and disk drivers
|
||||
|
||||
jsr pc,rew
|
||||
2:
|
||||
jsr pc,4(r5)
|
||||
<disk offset\n\0>
|
||||
.even
|
||||
jsr pc,numb
|
||||
mov r0,dska
|
||||
jsr pc,4(r5)
|
||||
<tape offset\n\0>
|
||||
.even
|
||||
jsr pc,numb
|
||||
mov r0,tapa
|
||||
jsr pc,4(r5)
|
||||
<count\n\0>
|
||||
.even
|
||||
jsr pc,numb
|
||||
mov r0,r2
|
||||
1:
|
||||
jsr pc,tread
|
||||
jsr pc,wblk
|
||||
inc tapa
|
||||
inc dska
|
||||
dec r2
|
||||
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
|
||||
|
||||
ba: buf
|
||||
wc: -256.
|
||||
.bss
|
||||
buf: .=.+512.
|
||||
dska: .=.+2
|
||||
tapa: .=.+2
|
||||
.text
|
||||
@@ -0,0 +1,3 @@
|
||||
/ reset
|
||||
5
|
||||
rts pc
|
||||
@@ -0,0 +1,5 @@
|
||||
/ hpread
|
||||
|
||||
rblk:
|
||||
|
||||
iocom = 71
|
||||
@@ -0,0 +1,17 @@
|
||||
/ rk05 disk driver
|
||||
|
||||
rkda = 177412
|
||||
mov dska,r1
|
||||
clr r0
|
||||
div $12.,r0
|
||||
ash $4.,r0
|
||||
bis r1,r0
|
||||
mov $rkda,r1
|
||||
mov r0,(r1)
|
||||
mov ba,-(r1)
|
||||
mov wc,-(r1)
|
||||
mov $iocom,-(r1)
|
||||
1:
|
||||
tstb (r1)
|
||||
bpl 1b
|
||||
rts pc
|
||||
@@ -0,0 +1,37 @@
|
||||
/ format RK03/05 disk packs
|
||||
|
||||
rkda = 177412
|
||||
|
||||
jsr pc,4(r5)
|
||||
<ready drive 0 and type y\n\0>; .even
|
||||
jsr pc,2(r5)
|
||||
mov r0,-(sp)
|
||||
mov $'\n,r0
|
||||
jsr pc,(r5)
|
||||
cmp (sp)+,$'y
|
||||
beq 1f
|
||||
rts pc
|
||||
1:
|
||||
mov $203.*2,r4
|
||||
clr r3
|
||||
1:
|
||||
mov $rkda+2,r0
|
||||
mov r3,-(r0)
|
||||
mov $buf,-(r0)
|
||||
mov $-12.*256.,-(r0)
|
||||
mov $6003,-(r0)
|
||||
2:
|
||||
tstb (r0)
|
||||
bge 2b
|
||||
tst (r0)
|
||||
blt 1f
|
||||
add $20,r3
|
||||
dec r4
|
||||
bne 1b
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,4(r5)
|
||||
<rkf: error\n\0>; .even
|
||||
rts pc
|
||||
|
||||
buf: .=.+2
|
||||
@@ -0,0 +1,21 @@
|
||||
/ rp03 disk driver
|
||||
|
||||
rpda = 176724
|
||||
mov dska,r1
|
||||
clr r0
|
||||
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)
|
||||
mov ba,-(r1)
|
||||
mov wc,-(r1)
|
||||
mov $iocom,-(r1)
|
||||
1:
|
||||
tstb (r1)
|
||||
bpl 1b
|
||||
rts pc
|
||||
@@ -0,0 +1,4 @@
|
||||
/ read rk
|
||||
|
||||
rblk:
|
||||
iocom = 5
|
||||
@@ -0,0 +1,4 @@
|
||||
/ read rp
|
||||
|
||||
rblk:
|
||||
iocom = 5
|
||||
@@ -0,0 +1,71 @@
|
||||
as fsboot.s tty.s rrk.s rk.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/rkuboot
|
||||
|
||||
as fsboot.s tty.s rrp.s rp.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/rpuboot
|
||||
|
||||
as fsboot.s tty.s rhp.s hp.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/hpuboot
|
||||
|
||||
as tpboot.s tty.s tc.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/tboot
|
||||
|
||||
as tpboot.s tty.s tm.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/mboot
|
||||
|
||||
as tpboot.s tty.s ht.s
|
||||
strip a.out
|
||||
ls -l a.out
|
||||
cp a.out /usr/mdec/hboot
|
||||
|
||||
as tcf.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/tcf
|
||||
|
||||
as rkf.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/rkf
|
||||
|
||||
as reset.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/reset
|
||||
|
||||
as dldr.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/dldr
|
||||
|
||||
as mcopy.s tm.s wrk.s rk.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/tmrk
|
||||
|
||||
as mcopy.s tm.s wrp.s rp.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/tmrp
|
||||
|
||||
as mcopy.s tm.s whp.s hp.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/tmhp
|
||||
|
||||
as mcopy.s ht.s wrk.s rk.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/htrk
|
||||
|
||||
as mcopy.s ht.s wrp.s rp.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/htrp
|
||||
|
||||
as mcopy.s ht.s whp.s hp.s
|
||||
strip a.out
|
||||
cp a.out /usr/mdec/hthp
|
||||
|
||||
rm a.out
|
||||
@@ -0,0 +1,256 @@
|
||||
/ 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
|
||||
|
||||
core = 24.
|
||||
.mt. = 0
|
||||
.. = [core*2048.]-512.
|
||||
start:
|
||||
mov $..,sp
|
||||
mov $name,r4
|
||||
mov sp,r1
|
||||
cmp pc,r1
|
||||
bhis 2f
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 1f
|
||||
mov $20,r0
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r1,$end
|
||||
blo 1b
|
||||
jmp (sp)
|
||||
|
||||
2:
|
||||
jsr pc,rew
|
||||
mov $tvec,r5
|
||||
mov $'=,r0
|
||||
jsr pc,(r5)
|
||||
2:
|
||||
mov r4,r1
|
||||
1:
|
||||
jsr pc,2(r5)
|
||||
cmp r0,$'\n
|
||||
beq 1f
|
||||
cmp r0,$'@
|
||||
beq 2b
|
||||
movb r0,(r1)+
|
||||
cmp r0,$'#
|
||||
bne 1b
|
||||
sub $2,r1
|
||||
cmp r1,r4
|
||||
blo 2b
|
||||
br 1b
|
||||
1:
|
||||
clrb (r1)
|
||||
cmp r1,r4
|
||||
blos start
|
||||
mov $1,tapa
|
||||
mov $-6144.,wc
|
||||
jsr pc,taper
|
||||
clr r1
|
||||
1:
|
||||
mov r1,r2
|
||||
mov r4,r0
|
||||
2:
|
||||
cmpb (r0)+,(r1)
|
||||
bne 2f
|
||||
tstb (r1)+
|
||||
bne 2b
|
||||
br 1f
|
||||
2:
|
||||
mov r2,r1
|
||||
add $64.,r1
|
||||
cmp r1,$12288.
|
||||
blo 1b
|
||||
jsr pc,rew
|
||||
br start
|
||||
1:
|
||||
mov 44.(r2),tapa
|
||||
mov 38.(r2),r0
|
||||
inc r0
|
||||
clc
|
||||
ror r0
|
||||
neg r0
|
||||
mov r0,wc
|
||||
clr r0
|
||||
1:
|
||||
clr (r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
jsr pc,taper
|
||||
jsr pc,rew
|
||||
clr r0
|
||||
cmp (r0),$407 / unix a.out?
|
||||
bne 2f
|
||||
1:
|
||||
mov 20(r0),(r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
2:
|
||||
jsr pc,*$0
|
||||
br start
|
||||
|
||||
.if .mt.
|
||||
mts = 172520
|
||||
mtc = 172522
|
||||
mtbrc = 172524
|
||||
mtcma = 172526
|
||||
|
||||
taper:
|
||||
clr mtma
|
||||
cmp mtapa,tapa
|
||||
beq 1f
|
||||
bhi 2f
|
||||
jsr pc,rrec
|
||||
br taper
|
||||
2:
|
||||
jsr pc,rew
|
||||
br taper
|
||||
1:
|
||||
mov wc,r1
|
||||
1:
|
||||
jsr pc,rrec
|
||||
add $256.,r1
|
||||
bmi 1b
|
||||
rts pc
|
||||
|
||||
rrec:
|
||||
bit $2,*$mts
|
||||
bne rrec
|
||||
tstb *$mtc
|
||||
bge rrec
|
||||
mov $-512.,*$mtbrc
|
||||
mov mtma,*$mtcma
|
||||
mov $60003,*$mtc
|
||||
1:
|
||||
tstb *$mtc
|
||||
bge 1b
|
||||
tst *$mtc
|
||||
bge 1f
|
||||
mov $-1,*$mtbrc
|
||||
mov $60013,*$mtc
|
||||
br rrec
|
||||
1:
|
||||
add $512.,mtma
|
||||
inc mtapa
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $60017,*$mtc
|
||||
clr mtapa
|
||||
rts pc
|
||||
.endif
|
||||
|
||||
.if .mt.-1
|
||||
tcdt = 177350
|
||||
tccm = 177342
|
||||
taper:
|
||||
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:
|
||||
clr -(r0) / bus addr
|
||||
mov wc,-(r0) / wc
|
||||
mov $5,-(r0) / read
|
||||
1:
|
||||
tstb (r1)
|
||||
bge 1b
|
||||
tst (r1)
|
||||
blt taper
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $4003,tccm
|
||||
rts pc
|
||||
.endif
|
||||
|
||||
tvec:
|
||||
br putc
|
||||
br getc
|
||||
br mesg
|
||||
|
||||
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
|
||||
|
||||
end:
|
||||
tapa: .=.+2
|
||||
mtapa: .=.+2
|
||||
mtma: .=.+2
|
||||
wc: .=.+2
|
||||
name: .=.+32.
|
||||
@@ -0,0 +1,43 @@
|
||||
tcdt = 177350
|
||||
tccm = 177342
|
||||
tread:
|
||||
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 ba,-(r0) / bus addr
|
||||
mov wc,-(r0) / wc
|
||||
mov $5,-(r0) / read
|
||||
1:
|
||||
tstb (r1)
|
||||
bge 1b
|
||||
tst (r1)
|
||||
blt tread
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $4003,tccm
|
||||
rts pc
|
||||
@@ -0,0 +1,332 @@
|
||||
/ 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
|
||||
|
||||
jsr pc,4(r5)
|
||||
<ready drive 0 and type y\n\0>; .even
|
||||
jsr pc,2(r5)
|
||||
mov r0,-(sp)
|
||||
mov $'\n,r0
|
||||
jsr pc,(r5)
|
||||
cmp (sp)+,$'y
|
||||
beq 1f
|
||||
rts pc
|
||||
1:
|
||||
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
|
||||
mov savr5,r5
|
||||
mov savsp,sp
|
||||
rts pc
|
||||
|
||||
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:
|
||||
mov $1,tccm
|
||||
mov savr5,r5
|
||||
mov savsp,sp
|
||||
jsr pc,4(r5)
|
||||
<tcf: error\n\0>; .even
|
||||
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
|
||||
@@ -0,0 +1,55 @@
|
||||
mts = 172520
|
||||
mtc = 172522
|
||||
mtbrc = 172524
|
||||
mtcma = 172526
|
||||
|
||||
tread:
|
||||
1:
|
||||
mov ba,mtma
|
||||
cmp mtapa,tapa
|
||||
beq 1f
|
||||
bhi 2f
|
||||
jsr pc,rrec
|
||||
br 1b
|
||||
2:
|
||||
jsr pc,rew
|
||||
br 1b
|
||||
1:
|
||||
mov wc,r1
|
||||
1:
|
||||
jsr pc,rrec
|
||||
add $256.,r1
|
||||
bmi 1b
|
||||
rts pc
|
||||
|
||||
rrec:
|
||||
mov $mts,r0
|
||||
bit $2,(r0)+ / rewind status
|
||||
bne rrec
|
||||
tstb (r0)+ / cu ready
|
||||
bpl rrec
|
||||
inc r0
|
||||
mov $-512.,(r0)+ / byte count
|
||||
mov mtma,(r0) / bus address
|
||||
mov $mtc,r0
|
||||
mov $60003,(r0) / read 800bpi
|
||||
1:
|
||||
tstb (r0)
|
||||
bpl 1b
|
||||
tst (r0)+
|
||||
bpl 1f
|
||||
mov $-1,(r0)
|
||||
mov $60013,-(r0) / backspace
|
||||
br rrec
|
||||
1:
|
||||
add $512.,mtma
|
||||
inc mtapa
|
||||
rts pc
|
||||
|
||||
rew:
|
||||
mov $60017,*$mtc
|
||||
clr mtapa
|
||||
rts pc
|
||||
|
||||
mtapa: 0
|
||||
mtma: 0
|
||||
@@ -0,0 +1,92 @@
|
||||
/ 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
|
||||
|
||||
core = 24.
|
||||
.. = [core*2048.]-512.
|
||||
start:
|
||||
mov $..,sp
|
||||
mov sp,r1
|
||||
cmp pc,r1
|
||||
bhis 2f
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 1f
|
||||
mov $20,r0
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r1,$core*2048.
|
||||
blo 1b
|
||||
jmp (sp)
|
||||
|
||||
2:
|
||||
mov $trvect,r5
|
||||
mov $name,r4
|
||||
jsr pc,rew
|
||||
mov $'=,r0
|
||||
jsr pc,(r5)
|
||||
2:
|
||||
mov r4,r1
|
||||
1:
|
||||
jsr pc,getc
|
||||
cmp r0,$'\n
|
||||
beq 1f
|
||||
cmp r0,$'@
|
||||
beq 2b
|
||||
movb r0,(r1)+
|
||||
cmp r0,$'#
|
||||
bne 1b
|
||||
sub $2,r1
|
||||
cmp r1,r4
|
||||
blo 2b
|
||||
br 1b
|
||||
1:
|
||||
clrb (r1)
|
||||
cmp r1,r4
|
||||
blos start
|
||||
mov $1,tapa
|
||||
mov $-6144.,wc
|
||||
jsr pc,tread
|
||||
clr r1
|
||||
1:
|
||||
mov r1,r2
|
||||
mov r4,r0
|
||||
2:
|
||||
cmpb (r0)+,(r1)
|
||||
bne 2f
|
||||
tstb (r1)+
|
||||
bne 2b
|
||||
br 1f
|
||||
2:
|
||||
mov r2,r1
|
||||
add $64.,r1
|
||||
cmp r1,$12288.
|
||||
blo 1b
|
||||
jsr pc,rew
|
||||
br start
|
||||
1:
|
||||
mov 44.(r2),tapa
|
||||
mov 38.(r2),r0
|
||||
inc r0
|
||||
clc
|
||||
ror r0
|
||||
neg r0
|
||||
mov r0,wc
|
||||
clr r0
|
||||
1:
|
||||
clr (r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
jsr pc,tread
|
||||
jsr pc,rew
|
||||
br callout
|
||||
|
||||
tapa: 0
|
||||
wc: 0
|
||||
ba: 0
|
||||
name = ..-32.
|
||||
@@ -0,0 +1,64 @@
|
||||
/ read and echo character from tty.
|
||||
/ perform normal cr/lf uc/lc mapping.
|
||||
tks = 177560
|
||||
tkb = 177562
|
||||
getc:
|
||||
tstb *$tks
|
||||
bge getc
|
||||
mov tkb,r0
|
||||
bic $!177,r0
|
||||
cmp r0,$'A
|
||||
blo 1f
|
||||
cmp r0,$'Z
|
||||
bhi 1f
|
||||
add $'a-'A,r0
|
||||
1:
|
||||
cmp r0,$'\r
|
||||
bne putc
|
||||
mov $'\n,r0
|
||||
|
||||
/ put a character on the tty.
|
||||
/ also performs delay.
|
||||
tps = 177564
|
||||
tpb = 177566
|
||||
putc:
|
||||
cmp r0,$'\n
|
||||
bne 1f
|
||||
mov $'\r,r0
|
||||
jsr pc,(r5)
|
||||
mov $'\n,r0
|
||||
1:
|
||||
tstb tps
|
||||
bpl 1b
|
||||
mov r0,tpb
|
||||
rts pc
|
||||
|
||||
/ write a string to tty
|
||||
/ jsr pc, mesg; <string\0>; .even
|
||||
mesg:
|
||||
movb *(sp),r0
|
||||
beq 1f
|
||||
jsr pc,(r5)
|
||||
inc (sp)
|
||||
br mesg
|
||||
1:
|
||||
add $2,(sp)
|
||||
bic $1,(sp)
|
||||
rts pc
|
||||
|
||||
callout:
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 2f
|
||||
1:
|
||||
mov 20(r0),(r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
2:
|
||||
mov $start,-(sp)
|
||||
clr pc
|
||||
|
||||
trvect:
|
||||
br putc
|
||||
br getc
|
||||
br mesg
|
||||
@@ -0,0 +1,239 @@
|
||||
/ disk boot program to load and transfer
|
||||
/ to a unix entry
|
||||
|
||||
/ entry is made by jsr pc,*$0
|
||||
/ so return can be rts pc
|
||||
|
||||
core = 24.
|
||||
.. = [core*2048.]-512.
|
||||
start:
|
||||
mov $..,sp
|
||||
mov sp,r1
|
||||
cmp pc,r1
|
||||
bhis 2f
|
||||
reset
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 1f
|
||||
mov $20,r0
|
||||
1:
|
||||
mov (r0)+,(r1)+
|
||||
cmp r1,$end
|
||||
blo 1b
|
||||
jmp (sp)
|
||||
|
||||
2:
|
||||
mov $inod,r0
|
||||
1:
|
||||
clr (r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
jsr pc,getc
|
||||
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,putc
|
||||
mov $names,r1
|
||||
|
||||
1:
|
||||
mov r1,r2
|
||||
2:
|
||||
jsr pc,getc
|
||||
cmp r0,$'\n
|
||||
beq 1f
|
||||
cmp r0,$'/
|
||||
beq 3f
|
||||
movb r0,(r2)+
|
||||
br 2b
|
||||
3:
|
||||
cmp r1,r2
|
||||
beq 2b
|
||||
add $14.,r1
|
||||
br 1b
|
||||
1:
|
||||
mov $names,r1
|
||||
mov $1,r0
|
||||
1:
|
||||
clr bno
|
||||
jsr pc,iget
|
||||
tst (r1)
|
||||
beq 1f
|
||||
2:
|
||||
jsr pc,rmblk
|
||||
br start
|
||||
mov $buf,r2
|
||||
3:
|
||||
mov r1,r3
|
||||
mov r2,r4
|
||||
add $16.,r2
|
||||
tst (r4)+
|
||||
beq 5f
|
||||
4:
|
||||
cmpb (r3)+,(r4)+
|
||||
bne 5f
|
||||
cmp r4,r2
|
||||
blo 4b
|
||||
mov -16.(r2),r0
|
||||
add $14.,r1
|
||||
br 1b
|
||||
5:
|
||||
cmp r2,$buf+512.
|
||||
blo 3b
|
||||
br 2b
|
||||
1:
|
||||
clr r1
|
||||
1:
|
||||
jsr pc,rmblk
|
||||
br 1f
|
||||
mov $buf,r2
|
||||
2:
|
||||
mov (r2)+,(r1)+
|
||||
cmp r2,$buf+512.
|
||||
blo 2b
|
||||
br 1b
|
||||
1:
|
||||
clr r0
|
||||
cmp (r0),$407
|
||||
bne 2f
|
||||
1:
|
||||
mov 20(r0),(r0)+
|
||||
cmp r0,sp
|
||||
blo 1b
|
||||
2:
|
||||
jsr pc,*$0
|
||||
br start
|
||||
|
||||
iget:
|
||||
add $31.,r0
|
||||
mov r0,r5
|
||||
ash $-4.,r0
|
||||
jsr pc,rblk
|
||||
bic $!17,r5
|
||||
ash $5.,r5
|
||||
add $buf,r5
|
||||
mov $inod,r4
|
||||
1:
|
||||
mov (r5)+,(r4)+
|
||||
cmp r4,$addr+16.
|
||||
blo 1b
|
||||
rts pc
|
||||
|
||||
rmblk:
|
||||
add $2,(sp)
|
||||
mov bno,r0
|
||||
inc bno
|
||||
bit $LRG,mode
|
||||
bne 1f
|
||||
asl r0
|
||||
mov addr(r0),r0
|
||||
bne rblk
|
||||
2:
|
||||
sub $2,(sp)
|
||||
rts pc
|
||||
1:
|
||||
clr -(sp)
|
||||
movb r0,(sp)
|
||||
clrb r0
|
||||
swab r0
|
||||
asl r0
|
||||
mov addr(r0),r0
|
||||
beq 2b
|
||||
jsr pc,rblk
|
||||
mov (sp)+,r0
|
||||
asl r0
|
||||
mov buf(r0),r0
|
||||
beq 2b
|
||||
|
||||
rblk:
|
||||
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)
|
||||
br 1f
|
||||
|
||||
rkda = 177412
|
||||
rkblk:
|
||||
div $12.,r0
|
||||
ash $4.,r0
|
||||
bis r1,r0
|
||||
mov $rkda+2,r1
|
||||
|
||||
1:
|
||||
mov r0,-(r1)
|
||||
mov $buf,-(r1)
|
||||
mov $-256.,-(r1)
|
||||
mov $5,-(r1)
|
||||
1:
|
||||
tstb (r1)
|
||||
bge 1b
|
||||
mov (sp)+,r1
|
||||
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,putc
|
||||
mov $'\n+200,r0
|
||||
jsr pc,putc
|
||||
clr r0
|
||||
jsr pc,putc
|
||||
mov $'\n,r0
|
||||
rts pc
|
||||
1:
|
||||
mov r0,tpb
|
||||
rts pc
|
||||
|
||||
end:
|
||||
inod = ..-1024.
|
||||
mode = inod
|
||||
addr = inod+8.
|
||||
buf = inod+32.
|
||||
bno = buf+514.
|
||||
rxblk = bno+2
|
||||
names = rxblk+2
|
||||
LRG = 10000
|
||||
reset = 5
|
||||
@@ -0,0 +1,5 @@
|
||||
/ hpwrite
|
||||
|
||||
wblk:
|
||||
|
||||
iocom = 61
|
||||
@@ -0,0 +1,4 @@
|
||||
/ write rk
|
||||
|
||||
wblk:
|
||||
iocom = 3
|
||||
@@ -0,0 +1,4 @@
|
||||
/ write rp
|
||||
|
||||
wblk:
|
||||
iocom = 3
|
||||
Reference in New Issue
Block a user