Add original unix v6
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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