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
+24
View File
@@ -0,0 +1,24 @@
/
/
/ f21 -- storage allocation
/
.globl pass2
.globl signon
.globl signoff
.globl calloc
.globl salloc
.globl equiv
.globl entry
pass2:
jsr r5,signon; 2
mov $errb,errp
jsr r5,calloc
jsr r5,equiv
jsr r5,salloc
jsr r5,entry
jsr r5,signoff; 2
+125
View File
@@ -0,0 +1,125 @@
/
/
/ f22 -- allocate common
.globl calloc
.globl entry
.globl declimpl
.globl size
.globl getc
.globl getw
.globl xbuf
.globl code
.globl typ
calloc:
clr r3
1:
cmp r3,symtp
bhis 1f
mov symtab(r3),r0
bic $!70,r0 / class
cmp r0,$40 / common block
bne 3f
mov r3,-(sp)
mov symtab+2(r3),r3
clr r2 / byte offset
2:
tst r3
beq 2f
jsr r5,declimpl
mov symtab+4(r3),-(sp)
mov 2(sp),symtab+4(r3)
mov r2,symtab+6(r3)
jsr r5,size
add r0,r2
mov (sp)+,r3
br 2b
2:
mov (sp)+,r3
clr symtab+2(r3)
mov r2,symtab+6(r3) / common block size
3:
add $8,r3
br 1b
1:
rts r5
entry:
mov progt,r0
jmp *1f(r0)
1:
main
subr
funct
blocd
main:
jsr r5,code
<main:\n\0>; .even
rts r5
subr:
funct:
jsr r5,code
<%n.: %n_\n\0>; .even
8
8
clr r3
1:
cmp r3,symtp
bhis 1f
mov symtab+2(r3),r0
beq 2f
mov (r0)+,r1 / num dims
asl r1
add r0,r1 / ptr to last dim
mov r3,-(sp)
mov (r1),-(sp) / dope id
clr r2 / dope offset
3:
add $2,r2
mov -(r1),r3
cmp r0,r1
bhi 3f
neg r3 / adjustable dimension
ble 3b
mov r0,-(sp)
jsr r5,declimpl
mov symtab(r3),r0
clrb r0
swab r0
jsr r5,code
< rval%dp; %n_\n\0>; .even
r0
r3
mov symtab(r3),r3
bic $![377\<8+7],r3
cmp r3,$2\<8+1 / is it i*2
beq 4f
bic $!7,r3
movb typ(r3),r3
jsr r5,code
< %c%di2\n\0>; .even
r3
r0
4:
mov 2(sp),r0
jsr r5,code
< stst; d%d+%d.\n\0>; .even
r0
r2
mov (sp)+,r0
br 3b
3:
tst (sp)+
mov (sp)+,r3
2:
add $8,r3
br 1b
1:
blocd:
rts r5
+120
View File
@@ -0,0 +1,120 @@
/
/
/ f23 -- do equivalence statements
.globl equiv
.globl getsym
.globl consub
.globl eqvtab
.globl error
.globl declimpl
.globl perror
.globl setln
.globl getln
/ equivalence statements, part 1
/ destroys all registers
equiv:
jsr r5,setln
1:
jsr r5,getln
rts r5
cmp r0,$'e
bne 1b
mov $line+11.,r1
mov r5,-(sp)
2: / start equivalence group
cmpb (r1)+,$'( / check (
bne 9f / syntax error
jsr r5,getsym
tst r0
bne 9f / not identifier
mov r3,r5
jsr r5,equset
movb (r1)+,r2
clr r4 / offset
cmp r2,$',
beq 3f
cmp r2,$'( / subscripted vble
bne 9f / syntax error
jsr r5,consub / get subscript
mov r0,r4
cmpb (r1)+,$',
bne 9f
3: / rest of group
jsr r5,getsym / next ident
tst r0
bne 9f / syntax
jsr r5,equset
clr r0
mov r3,r2
cmpb (r1),$'( / subscript?
bne 4f
inc r1
jsr r5,consub
4:
mov eqvtab+2(r2),r2
cmp r2,r5
beq 5f / already in same group
cmp r2,r3
bne 4b / not yet in different group
sub r4,r0 / adjust offsets
sub eqvtab+4(r5),r0 / left vble's offset
add eqvtab+4(r3),r0 / new vble's offset
4:
sub r0,eqvtab+4(r2)
mov eqvtab+2(r2),r2
cmp r2,r3
bne 4b
mov eqvtab+2(r3),r0 / link up groups
mov eqvtab+2(r5),eqvtab+2(r3)
mov r0,eqvtab+2(r5) / link groups
br 6f
5: / here already in same group
cmp r0,r4 / offset must be same
beq 6f
jsr r5,error; 23. / inconsistency!
6:
movb (r1)+,r0
cmp r0,$',
beq 3b
cmp r0,$')
bne 9f
movb (r1)+,r0
bne 3f
jsr r5,perror
mov (sp)+,r5
br 1b
3:
cmp r0,$',
beq 2b
9:
jsr r5,error; 24. / equivalence syntax
jsr r5,perror
mov (sp)+,r5
br 1b
/ initialize member of equivalence group
equset:
jsr r5,declimpl / declare if necessary
mov symtab(r3),r0
bit $200,r0 / test parameter
bne 2f
bic $!70,r0
cmp r0,$10 / simple
beq 1f
cmp r0,$20 / array
beq 1f
2:
jsr r5,error; 31. / non-equivalencable variable
1:
tst eqvtab+2(r3) / see if mentioned yet
bne 1f
mov r3,eqvtab+2(r3) / points to itself
1:
rts r5
+130
View File
@@ -0,0 +1,130 @@
/
/
/ f24 -- allocate storage for non-common variables
/ called after common and equivalence have been done
.globl salloc
.globl eqvtab
.globl error
.globl declimpl
.globl size
.globl perror
/ destroys all registers
salloc:
mov r5,-(sp)
clr r3 / loop over symbol table
br 2f
1:
add $8.,r3 / next variable
2:
cmp r3,symtp
blo 2f
mov (sp)+,r5
mov $line,r1
jsr r5,perror / flush errors
rts r5
2:
bit $70,symtab(r3)
beq 1b / unclassed
jsr r5,declimpl / just in case
tst eqvtab(r3) / test for already allocated
bne 1b / yes
mov symtab(r3),r0
bic $!70,r0
cmp r0,$10 / test class=simple
beq 2f
cmp r0,$20 / test array
bne 1b / no, not a variable
2:
bit $200,symtab(r3) / test parameter
bne 1b
tst eqvtab+2(r3) / test for equivalence
bne 2f / yes
bit $100,symtab(r3) / test common
bne 1b / yes, nothing to do
mov nxtaloc,symtab+6(r3) / offset
jsr r5,size / get byte count
add r0,nxtaloc
inc eqvtab(r3) / mark allocated
br 1b
2:
clr r4 / common variable of group
mov $77777,r1 / infinity to smallest offset
mov r3,r5
2:
cmp eqvtab+4(r3),r1
bgt 3f
mov eqvtab+4(r3),r1 / replace smallest offset
3:
bit $100,symtab(r3) / test common
beq 3f
mov r3,r4 / yes
3:
mov eqvtab+2(r3),r3 / next group member
cmp r3,r5
bne 2b
tst r4
bne 2f / *there was a common in group
/ equivalence group w/o common
sub nxtaloc,r1 / get -(group offset)
3:
inc eqvtab(r3) / mark allocated
mov eqvtab+4(r3),r2
sub r1,r2 / compute offset
mov r2,symtab+6(r3) / enter offset
jsr r5,size
add r0,r2 / highest loc of variable
cmp r2,r4
ble 4f
mov r2,r4 / extends storage
4:
mov eqvtab+2(r3),r3 / next of group
cmp r3,r5
bne 3b
mov r4,nxtaloc / account for space
br 1b / done!
2: / equivalence group w/ common
mov symtab+6(r4),r1 / actual common offset
sub eqvtab+4(r4),r1 / virtual common offset
2:
inc eqvtab(r3) / mark allocated
bit $100,symtab(r3) / is variable already in common
beq 3f / *no
cmp symtab+4(r4),symtab+4(r3)
beq 4f
jsr r5,error; 25. / different blocks equiv.
4:
mov r1,r0
add eqvtab+4(r3),r0
cmp r0,symtab+6(r3)
beq 4f / ok
jsr r5,error; 27. / same variable, different offsets
br 4f
3:
bis $100,symtab(r3) / mark common now
mov symtab+4(r4),symtab+4(r3)/ get right common block
mov r1,r0
add eqvtab+4(r3),r0
bge 3f
jsr r5,error; 26. / block extended leftward
clr r0
3:
mov r0,symtab+6(r3) / get proper offset
mov r0,-(sp)
jsr r5,size / see if size is extended
add (sp)+,r0
mov symtab+4(r3),r2 / common block
cmp symtab+6(r2),r0
bge 4f / ok
mov r0,symtab+6(r2) / extend size
4:
mov eqvtab+2(r3),r3
cmp r3,r5
bne 2b
jmp 1b