Add original unix v6

This commit is contained in:
memnoth
2018-01-27 22:35:41 +09:00
commit 2c7099ee50
664 changed files with 106254 additions and 0 deletions
+106
View File
@@ -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:
+337
View File
@@ -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
+183
View File
@@ -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
+38
View File
@@ -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
+70
View File
@@ -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
+256
View File
@@ -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.
+59
View File
@@ -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
+3
View File
@@ -0,0 +1,3 @@
/ reset
5
rts pc
+5
View File
@@ -0,0 +1,5 @@
/ hpread
rblk:
iocom = 71
+17
View File
@@ -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
+37
View File
@@ -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
+21
View File
@@ -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
+4
View File
@@ -0,0 +1,4 @@
/ read rk
rblk:
iocom = 5
+4
View File
@@ -0,0 +1,4 @@
/ read rp
rblk:
iocom = 5
+71
View File
@@ -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
+256
View File
@@ -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.
+43
View File
@@ -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
+332
View File
@@ -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
+55
View File
@@ -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
+92
View File
@@ -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.
+64
View File
@@ -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
+239
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
/ hpwrite
wblk:
iocom = 61
+4
View File
@@ -0,0 +1,4 @@
/ write rk
wblk:
iocom = 3
+4
View File
@@ -0,0 +1,4 @@
/ write rp
wblk:
iocom = 3