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
+40
View File
@@ -0,0 +1,40 @@
/
/
/ f41 -- everything else
.globl pass4
.globl signon
.globl flush
.globl dope
.globl formts
.globl globls
.globl constn
.globl fopen
.globl bsss
.globl tfil2
pass4:
setd
jsr r5,signon; 4
mov ibuf,r0
sys close
jsr r5,flush; obuf
jsr r5,flush; tbuf
jsr r5,dope
jsr r5,formts
jsr r5,constn
jsr r5,bsss
jsr r5,globls / uses r4 from bsss
jsr r5,flush; obuf
sys unlink; tfil2
clr r0
tst nerror
beq 1f
sys seek; 0; 2
mov $1,r0 / syntax errors
1:
sys exit
+97
View File
@@ -0,0 +1,97 @@
/
/
/ 42 -- definition
.globl bsss
.globl code
.globl size
.globl declimpl
.globl cdata
.globl dodata
.globl dattab
bsss:
jsr r5,cdata
cmp progt,$6 / test block common
bne 1f
rts r5
1:
jsr r5,code
<.bss\n\0>; .even
mov functm,r3
beq 1f
jsr r5,code
<ft: .=.+%d.\n\0>; .even
r3
1:
cmp r4,$dattab / any data?
beq 1f
jsr r5,code
<.data\n\0>; .even
1:
jsr r5,code
<base:\n\0>; .even
clr r3
1:
cmp r3,symtp
bhis pass2
bit $70,symtab(r3) / test classed
bne 2f
jsr r5,declimpl
2:
mov symtab(r3),r0
mov symtab+6(r3),r2
bic $!70,r0 / class
cmp r0,$10 / simple
beq 1f
cmp r0,$20 / array
beq 1f
cmp r0,$30 / extrn
bne 2f
bit $200,symtab(r3) / param
beq 2f
jsr r5,code
<%n. = %d.\n\0>; .even
r3
r2
2:
cmp r0,$40 / common block
bne 2f
mov symtab+6(r3),r2 / size
beq 2f
jsr r5,code
<.comm %n,%d.\n\0>; .even
r3
r2
2:
add $8,r3
br 1b
1:
bit $300,symtab(r3)
beq 1f
jsr r5,code
<%n_ = %d.\n\0>; .even
r3
r2
br 2b
1:
tst r2
bne 1f
jsr r5,size
mov nxtaloc,r2
mov r2,symtab+6(r3)
add r0,nxtaloc
1:
jsr r5,code
<%n_ = base+%d.\n\0>; .even
r3
r2
br 2b
pass2:
jsr r5,dodata
rts r5
+83
View File
@@ -0,0 +1,83 @@
/
/
/ f43 -- output globals and bdata bss's
.globl globls
.globl code
.globl dattab
.globl onedata
.globl error
.globl perror
globls:
mov progt,r0
jmp *1f(r0)
1:
1f
2f
3f
4f
1:
jsr r5,code
<.globl main\n\0>; .even
rts r5
2:
3:
jsr r5,code
<.globl %n.\n\0>; .even
8
rts r5
4:
1:
clr r3
1:
cmp r3,symtp
blo 2f
rts r5
2:
mov symtab(r3),r0
bic $!270,r0
cmp r0,$40 / common block
bne 2f
mov symtab+6(r3),r2
beq 2f
mov $dattab,r1
3:
cmp r1,r4
bhis 3f
cmp (r1),r3
beq 4f
add $8.,r1
br 3b
3:
jsr r5,code
<.bss\n.globl %n\n%n: .=.+%d.\n.text\n\0>; .even
r3
r3
r2
br 2f
4:
jsr r5,code
<.data\n.globl %n\n%n:\n\0>; .even
r3
r3
mov r2,-(sp)
mov r3,-(sp)
mov r1,r3
jsr r5,onedata
mov (sp)+,r3
mov (sp)+,r2
sub r1,r2
bge 9f
jsr r5,error; 22. / data overrun
jsr r5,perror
9:
jsr r5,code
<.=.+%d.\n.text\n\0>; .even
r2
2:
add $8,r3
br 1b
+110
View File
@@ -0,0 +1,110 @@
/
/
/ f44 -- formats
.globl formts
.globl strout
.globl setln
.globl getln
.globl code
.globl error
.globl perror
.globl putc
.globl xbuf
formts:
jsr r5,setln
mov $2,r3
clr xbuf+518. / pick up zero efn formats
1:
jsr r5,getln
br 1f
cmp r0,$'s
beq 2f
cmp r0,$'f
bne 1b
mov efno,r0
jsr r5,code
<.%d: <\0>; .even
r0
mov $line+6,r1
jsr r5,strout
mov efno,r0
neg r0
br 3f
2:
mov efno,r0
3:
clr r2
2:
cmp r2,r3
bhis 2f
cmp r0,xbuf+518.(r2)
beq 3f
neg r0
cmp r0,xbuf+518.(r2)
beq 3f
add $2,r2
neg r0
br 2b
3:
jsr r5,error; 51.
jsr r5,perror
2:
mov r0,xbuf+518.(r3)
add $2,r3
br 1b
1:
jsr r5,code
< .even\n>; .even
jsr r5,setln
1:
jsr r5,getln
br 1f
cmp r0,$'r
beq 2f
cmp r0,$'i
bne 1b
mov efno,r0
neg r0
br 3f
2:
mov efno,r0
3:
mov $2,r2 / not zero
2:
cmp r2,r3
bhis 2f
cmp r0,xbuf+518.(r2)
beq 1b
add $2,r2
br 2b
2:
jsr r5,error; 52.
jsr r5,perror
br 1b
1:
rts r5
strout:
movb (r1)+,r0
beq 3f
cmp r0,$'>
beq 4f
cmp r0,$'\\
bne 5f
4:
mov r0,-(sp)
mov $'\\,r0
jsr r5,putc; obuf
mov (sp)+,r0
5:
jsr r5,putc; obuf
br strout
3:
jsr r5,code
<\\0\>\n\0>; .even
rts r5
+144
View File
@@ -0,0 +1,144 @@
/
/
/ f45 -- constant pool
.globl constn
.globl evalcon
.globl error
.globl perror
.globl code
.globl getcon
.globl setln
.globl getln
.globl xbuf
.globl symbuf
.globl negflg
constn:
jsr r5,setln
mov $xbuf+518.,r3 / pool max pointer
mov $ibuf+518.,r4 / pool pointer pointer
1:
jsr r5,getln
br 1f
cmp r0,$'c
bne 1b
jsr r5,packcon
mov r2,-(r4) / put p ptr in p p ptr
cmp r3,r4
blo 1b
jsr r5,error; 99.
jsr r5,perror
1:
mov $xbuf+518.,r2
1:
cmp r2,r3
bhis 1f
mov $ibuf+518.,r1
2:
cmp r1,r4
blo 2f
cmp -(r1),r2
bne 2b
mov r1,r0
sub $ibuf+516.,r0
asr r0
neg r0
jsr r5,code
<c%d:\n\0>; .even
r0
br 2b
2:
mov (r2)+,r0
jsr r5,code
< %o\n\0>; .even
r0
br 1b
1:
rts r5
packcon:
mov $line,r1
jsr r5,evalcon
mov r1,-(sp)
mov r3,-(sp)
sub r2,(sp)
asr (sp)
mov r2,-(sp)
mov $xbuf+518.,r2
1:
mov (sp),r3
mov r2,r1
tst (r2)+
mov 2(sp),r0
2:
cmp (r1)+,(r3)+
bne 1b
dec r0
bgt 2b
tst -(r2)
mov (sp)+,r3
asl (sp)
add r2,(sp)
cmp (sp),r3
blos 1f
mov (sp),r3 / eureka
1:
tst (sp)+
mov (sp)+,r1
rts r5
evalcon:
cmpb efno,$5
bne 2f
movb efno+1,r0
mov r3,r2
br 1f
2:
jsr r5,getcon
tst negflg
beq 2f
negf fr0
negf fr1
2:
mov r3,r2
mov efno,r0
mov r0,r1
clrb r0
swab r0
bic $!7,r1
cmpb r1,$realcon
beq 3f
cmpb r1,$cplxcon
beq 2f
setl
movfi r0,symbuf+1
seti
mov $symbuf+5,r1
sub r0,r1
br 1f
2:
mov $symbuf+1,r1
movf fr1,symbuf+1
cmp r0,$8
beq 2f
movf fr0,symbuf+9.
br 1f
2:
movf fr0,symbuf+5
br 1f
3:
movf fr0,symbuf+1
mov $symbuf+1,r1
1:
movb (r1)+,(r3)+
dec r0
bgt 1b
bit $1,r3
beq 1f
clrb (r3)+
1:
rts r5
+166
View File
@@ -0,0 +1,166 @@
/
/
/ f46 -- constant evaluation
.globl getcon
.globl dope
.globl code
getcon:
mov r0,-(sp)
mov r2,-(sp)
clr r2 / dec . counter
clrf fr0
movif $10.,fr1
clr -(sp) / - flag
cmpb (r1)+,$'+
beq 1f
cmpb -(r1),$'-
bne 1f
inc r1
inc (sp)
1:
movb (r1)+,r0
sub $'0,r0
cmp r0,$9
blos 2f
cmp r0,$'.-'0
bne 1f
dec r2
br 1b
2:
tst r2
beq 2f
dec r2
2:
mulf fr1,fr0
movif r0,fr2
addf fr2,fr0
br 1b
1:
tst r2
bne 1f
dec r2
1:
cmp r0,$'e-'0
beq 2f
cmp r0,$'d-'0
bne 1f
2:
mov r3,-(sp)
clr r3
clr -(sp)
cmpb (r1),$'-
bne 3f
inc r1
inc (sp)
br 2f
3:
cmpb (r1),$'+
bne 2f
inc r1
2:
movb (r1)+,r0
sub $'0,r0
cmp r0,$9
bhi 2f
mpy $10.,r3
add r0,r3
br 2b
2:
tst (sp)+
beq 2f
neg r3
2:
add r3,r2
mov (sp)+,r3
1:
movf fr1,fr2
add $1,r2
beq 1f
blt 2f
clr -(sp)
br 3f
2:
mov pc,-(sp)
neg r2
3:
sub $1,r2
ble 2f
mulf fr1,fr2
br 3b
2:
tst (sp)+
bne 2f
mulf fr2,fr0
br 1f
2:
divf fr2,fr0
1:
tst (sp)+
beq 1f
negf fr0
1:
cmpb -(r1),$',
bne 1f
movf fr0,-(sp)
inc r1
jsr r5,getcon
movf (sp)+,fr1 / a,b -> r1,r0
1:
mov (sp)+,r2
mov (sp)+,r0
rts r5
dope:
cmp progt,$6 / test "block data"
bne 1f
rts r5
1:
clr r3
1:
cmp r3,symtp
bhis 1f
mov symtab(r3),r0
bic $!70,r0
cmp r0,$20
bne 2f
mov symtab+2(r3),r0
beq 2f
mov (r0)+,r1
mov r1,r2
asl r2
add r0,r2
mov (r2),r0
jsr r5,code
<d%d: %d.\n \0>; .even
r0
r1
3:
dec r1
blt 3f
mov -(r2),r0
bge 4f
jsr r5,code
<..; \0>; .even
br 3b
4:
jsr r5,code
<%d.; \0>; .even
r0
br 3b
3:
mov symtab(r3),r2
clrb r2
swab r2
jsr r5,code
<%d.\n\0>; .even
r2
2:
add $8,r3
br 1b
1:
rts r5
+298
View File
@@ -0,0 +1,298 @@
/
/
/ f47 -- analysis of data statements
.globl cdata
.globl dodata
.globl onedata
.globl compare
.globl code
.globl getcon
.globl error
.globl getsym
.globl consub
.globl size
.globl geti
.globl setln
.globl getln
.globl declimpl
.globl evalcon
.globl dattab
.globl contab
.globl efno
.globl perror
.globl qsort
.globl negflg
.globl repfact
.globl geti
.globl holround
cdata:
mov r5,-(sp)
jsr r5,setln
mov $dattab,r4
mov $contab,r5
dloop:
jsr r5,getln
br 2f
br 1f
2:
mov r4,-(sp)
mov $dattab,r1
mov r4,r2
mov $8.,r3
jsr pc,qsort
mov (sp)+,r4
mov (sp)+,r5
rts r5
1:
cmp r0,$'d
bne dloop
mov $line+4,r1
/ loop per specification-set
1:
clr repfact
mov r1,r2
2:
jsr r5,getsym
cmp r0,$40. / =|
bne 3f
8:
jmp 8f
9:
jmp 9f
3:
cmp r0,$6 / /
bne 2b
mov r1,-(sp)
mov r2,r1
mov (sp)+,r2
/ loop per specification
2:
cmp r4,r5
blo 3f
jmp 7f
3:
jsr r5,getsym
tst r0
bne 8b
bit $70,symtab(r3) / test classed
bne 3f
jsr r5,declimpl
3:
mov symtab(r3),r0
mov r0,holquo / temp storage
incb holquo+1 / round size
bicb $1,holquo+1
bit $200,r0 / test parameter
bne 9b
bic $!70,r0
cmp r0,$10 / simple
beq 3f
cmp r0,$20 / array
bne 9b
3:
bit $100,symtab(r3) / test common
beq 3f
cmp progt,$6 / test block data
bne 9b
mov symtab+4(r3),(r4)+ / common block
br 4f
3:
cmp progt,$6 / test block data
beq 9b
clr (r4)+
tst symtab+6(r3) / test allocated
bne 4f
mov nxtaloc,symtab+6(r3)
jsr r5,size
add r0,nxtaloc
4:
clr (r4) / offset slot
cmpb (r1),$'( / test subscript
bne 3f
inc r1
jsr r5,consub
bic $70,holquo
bis $10,holquo / array -> scalar
mov r0,(r4)
3:
movb symtab+1(r3),r0 / width of item
inc r0
bic $1,r0
mov r0,holround
add symtab+6(r3),(r4)+
tst repfact
beq 3f
dec repfact
movb efno+1,r3
mov r3,(r4)+
mov r5,(r4)+
br 4f
3:
mov r1,-(sp)
mov r2,r1
mov (sp)+,r2
5:
jsr r5,getsym
cmp r0,$2 / constant
beq 3f
cmp r0,$10. / -
bne 8f
inc negflg
jsr r5,getsym
cmp r0,$2 / constant
bne 8f
3:
cmpb (r1)+,$'*
bne 3f
cmp r3,$intcon
bne 8f
jsr r5,geti
dec r0
bmi 8f
mov r0,repfact
br 5b
3:
dec r1
mov r1,-(sp)
mov r2,-(sp)
mov r3,efno
clrb r3
swab r3
mov r3,(r4)+
sub r3,r5
mov r5,(r4)+ / ptr to const
mov r5,r3
mov $symbuf,r1
jsr r5,evalcon
clr negflg
mov (sp)+,r1
mov (sp)+,r2 / note r1 <=> r2
4:
cmpb efno+1,holquo+1 / compare sizes
blt 9f / constant too small
beq 3f
bicb $!77,holquo
cmp holquo,$int2con+10 / simple int*2?
bne 4f
sub $2,-4(r4) / reduce const length
cmpb efno,$5
beq 3f / hollerith, OK
add $2,-2(r4) / get least sig.
br 3f
4:
bit $20,holquo / test array
beq 9f
cmpb efno,$5 / test hollerith
bne 9f
3:
cmpb (r1),$'/
beq 3f
cmpb (r1)+,$',
bne 8f
tst repfact
bne 4f
cmpb (r2)+,$',
bne 8f
4:
jmp 2b
3:
cmpb (r2)+,$'/
bne 8f
tstb (r2)
beq 1f
cmpb (r2),$',
bne 3f
inc r2
3:
mov r2,r1
tst repfact
bne 8f
jmp 1b
7:
jsr r5,error; 28. / data table overflow
br 2f
8:
jsr r5,error; 21. / data syntax error
br 2f
9:
jsr r5,error; 22. / data semantic error
2:
mov $dattab,r4 / reset ptrs
mov $contab,r5
jsr r5,perror
1:
jmp dloop
dodata:
cmp progt,$6
beq 1f / block data
mov $dattab,r3
cmp r3,r4
bne 2f / is data
mov nxtaloc,r0
jsr r5,code
<.=.+%d.\n.text\n\0>; .even
r0
rts r5
2:
jsr r5,onedata
sub nxtaloc,r1
neg r1
blt 9b
jsr r5,code
<.=.+%d.\n.text\n\0>; .even
r1
1:
rts r5
onedata:
clr r1
2:
mov 2(r3),r0
sub r1,r0
bmi 9f
beq 3f
jsr r5,code
<.=.+%d.\n\0>; .even
r0
add r0,r1
3:
mov 4(r3),r0
add r0,r1
asr r0
mov r0,-(sp)
mov 6(r3),r2
3:
mov (r2)+,r0
jsr r5,code
<%o\n\0>; .even
r0
dec (sp)
bne 3b
tst (sp)+
add $8.,r3
cmp r3,r4
bhis 1f
cmp (r3),-8(r3) / any more in this block
beq 2b
1:
rts r5
9:
clr line
jsr r5,error; 32. / overlapping data init
jsr r5,perror
rts r5
/ comparison routine for qsort
compare:
cmp (r0),(r4)
bne 1f
cmp 2(r0),2(r4)
1:
rts pc