Add original unix v6
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user