Add original unix v6
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ PDP-11 assembler pass 0
|
||||
|
||||
indir = 0
|
||||
|
||||
jmp start
|
||||
go:
|
||||
jsr pc,assem
|
||||
movb pof,r0
|
||||
sys write; outbuf; 512.
|
||||
movb pof,r0
|
||||
sys close
|
||||
movb fbfil,r0
|
||||
sys close
|
||||
tstb errflg
|
||||
bne aexit
|
||||
jsr r5,fcreat; a.tmp3
|
||||
mov r0,r1
|
||||
mov symend,0f
|
||||
sub $usymtab,0f
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys write; usymtab; 0:..
|
||||
.text
|
||||
mov r1,r0
|
||||
sys close
|
||||
sys exec; 2f; 1f
|
||||
mov $2f,r0
|
||||
jsr r5,filerr; "?\n
|
||||
|
||||
aexit:
|
||||
sys unlink; a.tmp1
|
||||
sys unlink; a.tmp2
|
||||
sys unlink; a.tmp3
|
||||
sys exit
|
||||
.data
|
||||
1:
|
||||
2f
|
||||
a.tmp1
|
||||
a.tmp2
|
||||
a.tmp3
|
||||
unglob:
|
||||
3f
|
||||
0
|
||||
.text
|
||||
2:
|
||||
fpass2:
|
||||
</lib/as2\0>
|
||||
3:
|
||||
<-g\0>
|
||||
.even
|
||||
|
||||
filerr:
|
||||
mov r4,-(sp)
|
||||
mov r0,r4
|
||||
mov r4,0f
|
||||
clr r0
|
||||
1:
|
||||
tstb (r4)+
|
||||
beq 1f
|
||||
inc r0
|
||||
br 1b
|
||||
1:
|
||||
mov r0,1f
|
||||
mov $1,r0
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys write; 0:0; 1:0
|
||||
.text
|
||||
mov r5,0f
|
||||
mov $1,r0
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys write; 0:0; 2
|
||||
.text
|
||||
tst (r5)+
|
||||
mov (sp)+,r4
|
||||
rts r5
|
||||
|
||||
fcreat:
|
||||
mov r4,-(sp)
|
||||
mov (r5)+,r4
|
||||
mov r4,0f
|
||||
1:
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys stat; 0:..; outbuf
|
||||
.text
|
||||
bec 2f
|
||||
mov r4,0f
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys creat; 0:..; 444
|
||||
.text
|
||||
bes 2f
|
||||
mov (sp)+,r4
|
||||
rts r5
|
||||
2:
|
||||
incb 9.(r4)
|
||||
cmpb 9.(r4),$'z
|
||||
blos 1b
|
||||
mov r4,r0
|
||||
jsr r5,filerr; "?\n
|
||||
sys exit
|
||||
@@ -0,0 +1,70 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a2 -- pdp-11 assembler pass 1
|
||||
|
||||
error:
|
||||
incb errflg
|
||||
mov r0,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov (r5)+,r0
|
||||
tst *curarg
|
||||
beq 1f
|
||||
mov r0,-(sp)
|
||||
mov *curarg,r0
|
||||
clr *curarg
|
||||
jsr r5,filerr; '\n
|
||||
mov (sp)+,r0
|
||||
1:
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
mov line,r3
|
||||
movb r0,1f
|
||||
mov $1f+6,r0
|
||||
mov $4,r1
|
||||
2:
|
||||
clr r2
|
||||
dvd $10.,r2
|
||||
add $'0,r3
|
||||
movb r3,-(r0)
|
||||
mov r2,r3
|
||||
sob r1,2b
|
||||
mov $1,r0
|
||||
sys write; 1f; 7
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r0
|
||||
rts r5
|
||||
|
||||
.data
|
||||
1: <f xxxx\n>
|
||||
.even
|
||||
.text
|
||||
|
||||
betwen:
|
||||
cmp r0,(r5)+
|
||||
blt 1f
|
||||
cmp (r5)+,r0
|
||||
blt 2f
|
||||
1:
|
||||
tst (r5)+
|
||||
2:
|
||||
rts r5
|
||||
|
||||
putw:
|
||||
tst ifflg
|
||||
beq 1f
|
||||
cmp r4,$'\n
|
||||
bne 2f
|
||||
1:
|
||||
mov r4,*obufp
|
||||
add $2,obufp
|
||||
cmp obufp,$outbuf+512.
|
||||
blo 2f
|
||||
mov $outbuf,obufp
|
||||
movb pof,r0
|
||||
sys write; outbuf; 512.
|
||||
2:
|
||||
rts pc
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a3 -- pdp-11 assembler pass 1
|
||||
|
||||
assem:
|
||||
jsr pc,readop
|
||||
jsr pc,checkeos
|
||||
br ealoop
|
||||
tst ifflg
|
||||
beq 3f
|
||||
cmp r4,$200
|
||||
blos assem
|
||||
cmpb (r4),$21 /if
|
||||
bne 2f
|
||||
inc ifflg
|
||||
2:
|
||||
cmpb (r4),$22 /endif
|
||||
bne assem
|
||||
dec ifflg
|
||||
br assem
|
||||
3:
|
||||
mov r4,-(sp)
|
||||
jsr pc,readop
|
||||
cmp r4,$'=
|
||||
beq 4f
|
||||
cmp r4,$':
|
||||
beq 1f
|
||||
mov r4,savop
|
||||
mov (sp)+,r4
|
||||
jsr pc,opline
|
||||
br ealoop
|
||||
1:
|
||||
mov (sp)+,r4
|
||||
cmp r4,$200
|
||||
bhis 1f
|
||||
cmp r4,$1 / digit
|
||||
beq 3f
|
||||
jsr r5,error; 'x
|
||||
br assem
|
||||
1:
|
||||
bitb $37,(r4)
|
||||
beq 1f
|
||||
jsr r5,error; 'm
|
||||
1:
|
||||
bisb dot-2,(r4)
|
||||
mov dot,2(r4)
|
||||
br assem
|
||||
3:
|
||||
mov numval,r0
|
||||
jsr pc,fbcheck
|
||||
movb dotrel,curfbr(r0)
|
||||
asl r0
|
||||
movb dotrel,nxtfb
|
||||
mov dot,nxtfb+2
|
||||
movb r0,nxtfb+1
|
||||
mov dot,curfb(r0)
|
||||
movb fbfil,r0
|
||||
sys write; nxtfb; 4
|
||||
br assem
|
||||
4:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
mov (sp)+,r1
|
||||
cmp r1,$200
|
||||
bhis 1f
|
||||
jsr r5,error; 'x
|
||||
br ealoop
|
||||
1:
|
||||
cmp r1,$dotrel
|
||||
bne 2f
|
||||
bic $40,r3
|
||||
cmp r3,dotrel
|
||||
bne 1f
|
||||
2:
|
||||
bicb $37,(r1)
|
||||
bic $!37,r3
|
||||
bne 2f
|
||||
clr r2
|
||||
2:
|
||||
bisb r3,(r1)
|
||||
mov r2,2(r1)
|
||||
br ealoop
|
||||
1:
|
||||
jsr r5,error; '.
|
||||
movb $2,dotrel
|
||||
ealoop:
|
||||
cmp r4,$';
|
||||
beq assem1
|
||||
cmp r4,$'\n
|
||||
bne 1f
|
||||
inc line
|
||||
br assem1
|
||||
1:
|
||||
cmp r4,$'\e
|
||||
bne 2f
|
||||
tst ifflg
|
||||
beq 1f
|
||||
jsr r5,error; 'x
|
||||
1:
|
||||
rts pc
|
||||
2:
|
||||
jsr r5,error; 'x
|
||||
2:
|
||||
jsr pc,checkeos
|
||||
br assem1
|
||||
jsr pc,readop
|
||||
br 2b
|
||||
assem1:
|
||||
jmp assem
|
||||
|
||||
fbcheck:
|
||||
cmp r0,$9.
|
||||
bhi 1f
|
||||
rts pc
|
||||
1:
|
||||
jsr r5,error; 'f
|
||||
clr r0
|
||||
rts pc
|
||||
|
||||
checkeos:
|
||||
cmp r4,$'\n
|
||||
beq 1f
|
||||
cmp r4,$';
|
||||
beq 1f
|
||||
cmp r4,$'\e
|
||||
beq 1f
|
||||
add $2,(sp)
|
||||
1:
|
||||
rts pc
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a4 -- pdp-11 assembler pass1
|
||||
|
||||
rname:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
mov $8,r5
|
||||
mov $symbol+8.,r2
|
||||
clr -(r2)
|
||||
clr -(r2)
|
||||
clr -(r2)
|
||||
clr -(r2)
|
||||
clr -(sp)
|
||||
clr -(sp)
|
||||
cmp r0,$'~ / symbol not for hash table
|
||||
bne 1f
|
||||
inc 2(sp)
|
||||
clr ch
|
||||
1:
|
||||
jsr pc,rch
|
||||
movb chartab(r0),r3
|
||||
ble 1f
|
||||
add r3,(sp)
|
||||
swab (sp)
|
||||
dec r5
|
||||
blt 1b
|
||||
movb r3,(r2)+
|
||||
br 1b
|
||||
1:
|
||||
mov r0,ch
|
||||
mov (sp)+,r1
|
||||
clr r0
|
||||
tst (sp)+
|
||||
beq 1f
|
||||
mov symend,r4
|
||||
br 4f
|
||||
1:
|
||||
div $hshsiz,r0
|
||||
ashc $1,r0
|
||||
add $hshtab,r1
|
||||
1:
|
||||
sub r0,r1
|
||||
cmp r1,$hshtab
|
||||
bhi 2f
|
||||
add $2*hshsiz,r1
|
||||
2:
|
||||
mov $symbol,r2
|
||||
mov -(r1),r4
|
||||
beq 3f
|
||||
cmp (r2)+,(r4)+
|
||||
bne 1b
|
||||
cmp (r2)+,(r4)+
|
||||
bne 1b
|
||||
cmp (r2)+,(r4)+
|
||||
bne 1b
|
||||
cmp (r2)+,(r4)+
|
||||
bne 1b
|
||||
br 1f
|
||||
3:
|
||||
mov symend,r4
|
||||
mov r4,(r1)
|
||||
4:
|
||||
mov $symbol,r2
|
||||
mov r4,-(sp)
|
||||
add $20,r4
|
||||
cmp r4,0f
|
||||
blos 4f
|
||||
add $512.,0f
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys break; 0:end
|
||||
.text
|
||||
4:
|
||||
mov (sp)+,r4
|
||||
mov (r2)+,(r4)+
|
||||
mov (r2)+,(r4)+
|
||||
mov (r2)+,(r4)+
|
||||
mov (r2)+,(r4)+
|
||||
clr (r4)+
|
||||
clr (r4)+
|
||||
mov r4,symend
|
||||
sub $4,r4
|
||||
1:
|
||||
mov r4,-(sp)
|
||||
mov r4,r3
|
||||
sub $8,r3
|
||||
cmp r3,$usymtab
|
||||
blo 1f
|
||||
sub $usymtab,r3
|
||||
clr r2
|
||||
div $3,r2
|
||||
mov r2,r4
|
||||
add $4000,r4 / user symbol
|
||||
br 2f
|
||||
1:
|
||||
sub $symtab,r3
|
||||
clr r2
|
||||
div $3,r2
|
||||
mov r2,r4
|
||||
add $1000,r4 / builtin symbol
|
||||
2:
|
||||
jsr pc,putw
|
||||
mov (sp)+,r4
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
number:
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
mov r5,-(sp)
|
||||
clr r1
|
||||
clr r5
|
||||
1:
|
||||
jsr pc,rch
|
||||
jsr r5,betwen; '0; '9
|
||||
br 1f
|
||||
sub $'0,r0
|
||||
mpy $10.,r5
|
||||
add r0,r5
|
||||
als $3,r1
|
||||
add r0,r1
|
||||
br 1b
|
||||
1:
|
||||
cmp r0,$'b
|
||||
beq 1f
|
||||
cmp r0,$'f
|
||||
beq 1f
|
||||
cmp r0,$'.
|
||||
bne 2f
|
||||
mov r5,r1
|
||||
clr r0
|
||||
2:
|
||||
movb r0,ch
|
||||
mov r1,r0
|
||||
mov (sp)+,r5
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
rts pc
|
||||
1:
|
||||
mov r0,r3
|
||||
mov r5,r0
|
||||
jsr pc,fbcheck
|
||||
add $141,r0
|
||||
cmp r3,$'b
|
||||
beq 1f
|
||||
add $10.,r0
|
||||
1:
|
||||
mov r0,r4
|
||||
mov (sp)+,r5
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
add $2,(sp)
|
||||
rts pc
|
||||
|
||||
rch:
|
||||
movb ch,r0
|
||||
beq 1f
|
||||
clrb ch
|
||||
rts pc
|
||||
1:
|
||||
dec inbfcnt
|
||||
blt 2f
|
||||
movb *inbfp,r0
|
||||
inc inbfp
|
||||
bic $!177,r0
|
||||
beq 1b
|
||||
rts pc
|
||||
2:
|
||||
movb fin,r0
|
||||
beq 3f
|
||||
sys read; inbuf;512.
|
||||
bcs 2f
|
||||
tst r0
|
||||
beq 2f
|
||||
mov r0,inbfcnt
|
||||
mov $inbuf,inbfp
|
||||
br 1b
|
||||
2:
|
||||
movb fin,r0
|
||||
clrb fin
|
||||
sys close
|
||||
3:
|
||||
decb nargs
|
||||
bgt 2f
|
||||
mov $'\e,r0
|
||||
rts pc
|
||||
2:
|
||||
tst ifflg
|
||||
beq 2f
|
||||
jsr r5,error; 'i
|
||||
jmp aexit
|
||||
2:
|
||||
mov curarg,r0
|
||||
tst (r0)+
|
||||
mov (r0),0f
|
||||
mov r0,curarg
|
||||
incb fileflg
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys open; 0:0; 0
|
||||
.text
|
||||
bec 2f
|
||||
mov 0b,r0
|
||||
jsr r5,filerr; <?\n>
|
||||
jmp aexit
|
||||
2:
|
||||
movb r0,fin
|
||||
mov $1,line
|
||||
mov r4,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov $5,r4
|
||||
jsr pc,putw
|
||||
mov *curarg,r1
|
||||
2:
|
||||
movb (r1)+,r4
|
||||
beq 2f
|
||||
jsr pc,putw
|
||||
br 2b
|
||||
2:
|
||||
mov $-1,r4
|
||||
jsr pc,putw
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r4
|
||||
br 1b
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a5 -- pdp-11 assembler pass 1
|
||||
|
||||
readop:
|
||||
mov savop,r4
|
||||
beq 1f
|
||||
clr savop
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,8f
|
||||
jsr pc,putw
|
||||
rts pc
|
||||
|
||||
8:
|
||||
jsr pc,rch
|
||||
_readop:
|
||||
mov r0,r4
|
||||
movb chartab(r0),r1
|
||||
bgt rdname
|
||||
jmp *1f-2(r1)
|
||||
|
||||
fixor
|
||||
escp
|
||||
8b
|
||||
retread
|
||||
dquote
|
||||
garb
|
||||
squote
|
||||
rdname
|
||||
skip
|
||||
rdnum
|
||||
retread
|
||||
string
|
||||
1:
|
||||
|
||||
escp:
|
||||
jsr pc,rch
|
||||
mov $esctab,r1
|
||||
1:
|
||||
cmpb r0,(r1)+
|
||||
beq 1f
|
||||
tstb (r1)+
|
||||
bne 1b
|
||||
rts pc
|
||||
1:
|
||||
movb (r1),r4
|
||||
rts pc
|
||||
|
||||
esctab:
|
||||
.byte '/, '/
|
||||
.byte '\<, 035
|
||||
.byte '>, 036
|
||||
.byte '%, 037
|
||||
.byte 0, 0
|
||||
|
||||
fixor:
|
||||
mov $037,r4
|
||||
retread:
|
||||
rts pc
|
||||
|
||||
rdname:
|
||||
movb r0,ch
|
||||
cmp r1,$'0
|
||||
blo 1f
|
||||
cmp r1,$'9
|
||||
blos rdnum
|
||||
1:
|
||||
jmp rname
|
||||
|
||||
rdnum:
|
||||
jsr pc,number
|
||||
br 1f
|
||||
rts pc
|
||||
|
||||
squote:
|
||||
jsr pc,rsch
|
||||
br 1f
|
||||
dquote:
|
||||
jsr pc,rsch
|
||||
mov r0,-(sp)
|
||||
jsr pc,rsch
|
||||
swab r0
|
||||
bis (sp)+,r0
|
||||
1:
|
||||
mov r0,numval
|
||||
mov $1,r4
|
||||
jsr pc,putw
|
||||
mov numval,r4
|
||||
jsr pc,putw
|
||||
mov $1,r4
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
skip:
|
||||
jsr pc,rch
|
||||
mov r0,r4
|
||||
cmp r0,$'\e
|
||||
beq 1f
|
||||
cmp r0,$'\n
|
||||
bne skip
|
||||
1:
|
||||
rts pc
|
||||
|
||||
garb:
|
||||
jsr r5,error; 'g
|
||||
br 8b
|
||||
|
||||
string:
|
||||
mov $'<,r4
|
||||
jsr pc,putw
|
||||
clr numval
|
||||
1:
|
||||
jsr pc,rsch
|
||||
tst r1
|
||||
bne 1f
|
||||
mov r0,r4
|
||||
bis $400,r4
|
||||
jsr pc,putw
|
||||
inc numval
|
||||
br 1b
|
||||
1:
|
||||
mov $-1,r4
|
||||
jsr pc,putw
|
||||
mov $'<,r4
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
rsch:
|
||||
jsr pc,rch
|
||||
cmp r0,$'\e
|
||||
beq 4f
|
||||
cmp r0,$'\n
|
||||
beq 4f
|
||||
clr r1
|
||||
cmp r0,$'\\
|
||||
bne 3f
|
||||
jsr pc,rch
|
||||
mov $schar,r2
|
||||
1:
|
||||
cmpb (r2)+,r0
|
||||
beq 2f
|
||||
tstb (r2)+
|
||||
bpl 1b
|
||||
rts pc
|
||||
2:
|
||||
movb (r2)+,r0
|
||||
clr r1
|
||||
rts pc
|
||||
3:
|
||||
cmp r0,$'>
|
||||
bne 1f
|
||||
inc r1
|
||||
1:
|
||||
rts pc
|
||||
4:
|
||||
jsr r5,error; '<
|
||||
jmp aexit
|
||||
|
||||
schar:
|
||||
.byte 'n, 012
|
||||
.byte 't, 011
|
||||
.byte 'e, 004
|
||||
.byte '0, 000
|
||||
.byte 'r, 015
|
||||
.byte 'a, 006
|
||||
.byte 'p, 033
|
||||
.byte 0, -1
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a6 -- pdp-11 assembler pass 1
|
||||
|
||||
opline:
|
||||
mov r4,r0
|
||||
jsr r5,betwen; 0; 200
|
||||
br 1f
|
||||
cmp r0,$'<
|
||||
bne xpr
|
||||
jmp opl17
|
||||
xpr:
|
||||
jsr pc,expres
|
||||
add $2,dot
|
||||
rts pc
|
||||
1:
|
||||
movb (r4),r0
|
||||
cmp r0,$24
|
||||
beq xpr
|
||||
jsr r5,betwen; 5; 36
|
||||
br xpr
|
||||
mov r0,-(sp)
|
||||
jsr pc,readop
|
||||
mov (sp)+,r0
|
||||
asl r0
|
||||
jmp *1f-12(r0)
|
||||
|
||||
1:
|
||||
opl13 / map fop freg,fdst to double
|
||||
opl6
|
||||
opl7
|
||||
opl10
|
||||
opl11
|
||||
opl13 / map fld/fst to double
|
||||
opl13
|
||||
opl13 / map fop fsrc,freg to double
|
||||
opl15
|
||||
opl16
|
||||
opl17
|
||||
opl20
|
||||
opl21
|
||||
opl22
|
||||
opl23
|
||||
xpr
|
||||
opl25
|
||||
opl26
|
||||
opl27
|
||||
opl13 / map mul s,r to double
|
||||
opl31
|
||||
opl32
|
||||
xpr
|
||||
xpr
|
||||
opl35
|
||||
opl36
|
||||
|
||||
/ jbr
|
||||
opl35:
|
||||
mov $4,-(sp)
|
||||
br 1f
|
||||
|
||||
/ jeq, etc
|
||||
opl36:
|
||||
mov $6,-(sp)
|
||||
1:
|
||||
jsr pc,expres
|
||||
cmp r3,dotrel
|
||||
bne 1f
|
||||
sub dot,r2
|
||||
bge 1f
|
||||
cmp r2,$-376
|
||||
blt 1f
|
||||
mov $2,(sp)
|
||||
1:
|
||||
add (sp)+,dot
|
||||
rts pc
|
||||
|
||||
/double
|
||||
opl13:
|
||||
opl7:
|
||||
jsr pc,addres
|
||||
op2:
|
||||
cmp r4,$',
|
||||
beq 1f
|
||||
jsr pc,errora
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,readop
|
||||
opl15: / single operand
|
||||
jsr pc,addres
|
||||
add $2,dot
|
||||
rts pc
|
||||
|
||||
opl31: / sob
|
||||
jsr pc,expres
|
||||
cmp r4,$',
|
||||
beq 1f
|
||||
jsr pc,errora
|
||||
1:
|
||||
jsr pc,readop
|
||||
|
||||
/branch
|
||||
opl6:
|
||||
opl10:
|
||||
opl11:
|
||||
jsr pc,expres
|
||||
add $2,dot
|
||||
rts pc
|
||||
|
||||
/ .byte
|
||||
opl16:
|
||||
jsr pc,expres
|
||||
inc dot
|
||||
cmp r4,$',
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
br opl16
|
||||
1:
|
||||
rts pc
|
||||
|
||||
/ < (.ascii)
|
||||
opl17:
|
||||
add numval,dot
|
||||
jsr pc,readop
|
||||
rts pc
|
||||
|
||||
/.even
|
||||
opl20:
|
||||
inc dot
|
||||
bic $1,dot
|
||||
rts pc
|
||||
|
||||
/.if
|
||||
opl21:
|
||||
jsr pc,expres
|
||||
tst r3
|
||||
bne 1f
|
||||
jsr r5,error; 'U
|
||||
1:
|
||||
tst r2
|
||||
bne opl22
|
||||
inc ifflg
|
||||
opl22: /endif
|
||||
rts pc
|
||||
|
||||
/.globl
|
||||
opl23:
|
||||
cmp r4,$200
|
||||
blo 1f
|
||||
bisb $40,(r4)
|
||||
jsr pc,readop
|
||||
cmp r4,$',
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
br opl23
|
||||
1:
|
||||
rts pc
|
||||
|
||||
opl25:
|
||||
opl26:
|
||||
opl27:
|
||||
mov dotrel,r1
|
||||
asl r1
|
||||
mov dot,savdot-4(r1)
|
||||
mov savdot-[2*25](r0),dot
|
||||
asr r0
|
||||
sub $25-2,r0
|
||||
mov r0,dotrel
|
||||
rts pc
|
||||
|
||||
/ .common
|
||||
opl32:
|
||||
cmp r4,$200
|
||||
blo 1f
|
||||
bis $40,(r4)
|
||||
jsr pc,readop
|
||||
cmp r4,$',
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
rts pc
|
||||
1:
|
||||
jsr r5,error; 'x
|
||||
rts pc
|
||||
|
||||
addres:
|
||||
cmp r4,$'(
|
||||
beq alp
|
||||
cmp r4,$'-
|
||||
beq amin
|
||||
cmp r4,$'$
|
||||
beq adoll
|
||||
cmp r4,$'*
|
||||
beq astar
|
||||
getx:
|
||||
jsr pc,expres
|
||||
cmp r4,$'(
|
||||
bne 2f
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
jsr pc,checkreg
|
||||
jsr pc,checkrp
|
||||
add $2,dot
|
||||
clr r0
|
||||
rts pc
|
||||
2:
|
||||
cmp r3,$24 / register type
|
||||
bne 1f
|
||||
jsr pc,checkreg
|
||||
clr r0
|
||||
rts pc
|
||||
1:
|
||||
add $2,dot
|
||||
clr r0
|
||||
rts pc
|
||||
|
||||
alp:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
jsr pc,checkrp
|
||||
jsr pc,checkreg
|
||||
cmp r4,$'+
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
clr r0
|
||||
rts pc
|
||||
1:
|
||||
mov $2,r0
|
||||
rts pc
|
||||
|
||||
amin:
|
||||
jsr pc,readop
|
||||
cmp r4,$'(
|
||||
beq 1f
|
||||
mov r4,savop
|
||||
mov $'-,r4
|
||||
br getx
|
||||
1:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
jsr pc,checkrp
|
||||
jsr pc,checkreg
|
||||
clr r0
|
||||
rts pc
|
||||
|
||||
adoll:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
add $2,dot
|
||||
clr r0
|
||||
rts pc
|
||||
|
||||
astar:
|
||||
jsr pc,readop
|
||||
cmp r4,$'*
|
||||
bne 1f
|
||||
jsr r5,error; '*
|
||||
1:
|
||||
jsr pc,addres
|
||||
add r0,dot
|
||||
rts pc
|
||||
|
||||
errora:
|
||||
jsr r5,error; 'a
|
||||
rts pc
|
||||
|
||||
checkreg:
|
||||
cmp r2,$7
|
||||
bhi 1f
|
||||
cmp r3,$1
|
||||
beq 2f
|
||||
cmp r3,$4
|
||||
bhi 2f
|
||||
1:
|
||||
jsr pc,errora
|
||||
2:
|
||||
rts pc
|
||||
|
||||
errore:
|
||||
jsr r5,error; 'e
|
||||
rts pc
|
||||
|
||||
checkrp:
|
||||
cmp r4,$')
|
||||
beq 1f
|
||||
jsr r5,error; ')
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,readop
|
||||
rts pc
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a7 -- pdp-11 assembler pass 1
|
||||
|
||||
expres:
|
||||
mov r5,-(sp)
|
||||
mov $'+,-(sp)
|
||||
clr opfound
|
||||
clr r2
|
||||
mov $1,r3
|
||||
br 1f
|
||||
advanc:
|
||||
jsr pc,readop
|
||||
1:
|
||||
mov r4,r0
|
||||
jsr r5,betwen; 0; 177
|
||||
br .+4
|
||||
br 7f
|
||||
movb (r4),r0
|
||||
mov 2(r4),r1
|
||||
br oprand
|
||||
7:
|
||||
cmp r4,$141
|
||||
blo 1f
|
||||
cmp r4,$141+10.
|
||||
bhis 2f
|
||||
movb curfbr-141(r4),r0
|
||||
asl r4
|
||||
mov curfb-[2*141](r4),r2
|
||||
bpl oprand
|
||||
jsr r5,error; 'f
|
||||
br oprand
|
||||
2:
|
||||
clr r3
|
||||
clr r2
|
||||
br oprand
|
||||
1:
|
||||
mov $esw1,r1
|
||||
1:
|
||||
cmp (r1)+,r4
|
||||
beq 1f
|
||||
tst (r1)+
|
||||
bne 1b
|
||||
tst opfound
|
||||
bne 2f
|
||||
jsr pc,errore
|
||||
2:
|
||||
tst (sp)+
|
||||
mov (sp)+,r5
|
||||
rts pc
|
||||
1:
|
||||
jmp *(r1)
|
||||
|
||||
esw1:
|
||||
'+; binop
|
||||
'-; binop
|
||||
'*; binop
|
||||
'/; binop
|
||||
'&; binop
|
||||
037; binop
|
||||
035; binop
|
||||
036; binop
|
||||
'%; binop
|
||||
'[; brack
|
||||
'^; binop
|
||||
1; exnum
|
||||
'!; binop
|
||||
0; 0
|
||||
|
||||
binop:
|
||||
cmpb (sp),$'+
|
||||
beq 1f
|
||||
jsr pc,errore
|
||||
1:
|
||||
movb r4,(sp)
|
||||
br advanc
|
||||
|
||||
exnum:
|
||||
mov numval,r1
|
||||
mov $1,r0
|
||||
br oprand
|
||||
|
||||
brack:
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
cmp r4,$']
|
||||
beq 1f
|
||||
jsr r5,error; ']
|
||||
1:
|
||||
mov r3,r0
|
||||
mov r2,r1
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
|
||||
oprand:
|
||||
inc opfound
|
||||
mov $exsw2,r5
|
||||
1:
|
||||
cmp (sp),(r5)+
|
||||
beq 1f
|
||||
tst (r5)+
|
||||
bne 1b
|
||||
br eoprnd
|
||||
1:
|
||||
jmp *(r5)
|
||||
|
||||
exsw2:
|
||||
'+; exadd
|
||||
'-; exsub
|
||||
'*; exmul
|
||||
'/; exdiv
|
||||
037; exor
|
||||
'&; exand
|
||||
035;exlsh
|
||||
036;exrsh
|
||||
'%; exmod
|
||||
'!; exnot
|
||||
'^; excmbin
|
||||
0; 0
|
||||
|
||||
excmbin:
|
||||
mov r0,r3 / give left flag of right
|
||||
br eoprnd
|
||||
|
||||
exrsh:
|
||||
neg r1
|
||||
beq exlsh
|
||||
inc r1
|
||||
clc
|
||||
ror r2
|
||||
exlsh:
|
||||
jsr r5,combin; 0
|
||||
als r1,r2
|
||||
br eoprnd
|
||||
|
||||
exmod:
|
||||
jsr r5,combin; 0
|
||||
mov r1,-(sp)
|
||||
mov r2,r1
|
||||
clr r0
|
||||
dvd (sp)+,r0
|
||||
mov r1,r2
|
||||
br eoprnd
|
||||
|
||||
exadd:
|
||||
jsr r5,combin; 0
|
||||
add r1,r2
|
||||
br eoprnd
|
||||
|
||||
exsub:
|
||||
jsr r5,combin; 1
|
||||
sub r1,r2
|
||||
br eoprnd
|
||||
|
||||
exand:
|
||||
jsr r5,combin; 0
|
||||
com r1
|
||||
bic r1,r2
|
||||
br eoprnd
|
||||
|
||||
exor:
|
||||
jsr r5,combin; 0
|
||||
bis r1,r2
|
||||
br eoprnd
|
||||
|
||||
exmul:
|
||||
jsr r5,combin; 0
|
||||
mpy r2,r1
|
||||
mov r1,r2
|
||||
br eoprnd
|
||||
|
||||
exdiv:
|
||||
jsr r5,combin; 0
|
||||
mov r1,-(sp)
|
||||
mov r2,r1
|
||||
clr r0
|
||||
dvd (sp)+,r0
|
||||
mov r0,r2
|
||||
br eoprnd
|
||||
|
||||
exnot:
|
||||
jsr r5,combin; 0
|
||||
com r1
|
||||
add r1,r2
|
||||
br eoprnd
|
||||
|
||||
eoprnd:
|
||||
mov $'+,(sp)
|
||||
jmp advanc
|
||||
|
||||
combin:
|
||||
mov r0,-(sp)
|
||||
bis r3,(sp)
|
||||
bic $!40,(sp)
|
||||
bic $!37,r0
|
||||
bic $!37,r3
|
||||
cmp r0,r3
|
||||
ble 1f
|
||||
mov r0,-(sp)
|
||||
mov r3,r0
|
||||
mov (sp)+,r3
|
||||
1:
|
||||
tst r0
|
||||
beq 1f
|
||||
tst (r5)+
|
||||
beq 2f
|
||||
cmp r0,r3
|
||||
bne 2f
|
||||
mov $1,r3
|
||||
br 2f
|
||||
1:
|
||||
tst (r5)+
|
||||
clr r3
|
||||
2:
|
||||
bis (sp)+,r3
|
||||
rts r5
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a8 -- pdp-11 assembler pass 1
|
||||
|
||||
chartab:
|
||||
.byte -14,-14,-14,-14,-02,-14,-14,-14
|
||||
.byte -14,-22, -2,-14,-14,-22,-14,-14
|
||||
.byte -14,-14,-14,-14,-14,-14,-14,-14
|
||||
.byte -14,-14,-14,-14,-14,-14,-14,-14
|
||||
.byte -22,-20,-16,-14,-20,-20,-20,-12
|
||||
.byte -20,-20,-20,-20,-20,-20,056,-06
|
||||
.byte 060,061,062,063,064,065,066,067
|
||||
.byte 070,071,-20,-02,-00,-20,-14,-14
|
||||
.byte -14,101,102,103,104,105,106,107
|
||||
.byte 110,111,112,113,114,115,116,117
|
||||
.byte 120,121,122,123,124,125,126,127
|
||||
.byte 130,131,132,-20,-24,-20,-20,137
|
||||
.byte -14,141,142,143,144,145,146,147
|
||||
.byte 150,151,152,153,154,155,156,157
|
||||
.byte 160,161,162,163,164,165,166,167
|
||||
.byte 170,171,172,-14,-26,-14,176,-14
|
||||
|
||||
.data
|
||||
|
||||
namedone:.byte 0
|
||||
a.tmp1: </tmp/atm1a\0>
|
||||
a.tmp2: </tmp/atm2a\0>
|
||||
a.tmp3: </tmp/atm3a\0>
|
||||
.even
|
||||
curfb:
|
||||
-1;-1;-1;-1;-1;-1;-1;-1;-1;-1
|
||||
obufp: outbuf
|
||||
symend: usymtab
|
||||
|
||||
.bss
|
||||
curfbr: .=.+10.
|
||||
savdot: .=.+6
|
||||
bufcnt: .=.+2
|
||||
hshsiz = 1553.
|
||||
hshtab: .=2*hshsiz+.
|
||||
pof: .=.+1
|
||||
wordf: .=.+1
|
||||
fin: .=.+1
|
||||
fbfil: .=.+1
|
||||
fileflg:.=.+1
|
||||
errflg: .=.+1
|
||||
ch: .=.+1
|
||||
.even
|
||||
symbol: .=.+8.
|
||||
obufc: .=.+2
|
||||
outbuf: .=.+512.
|
||||
line: .=.+2
|
||||
inbfcnt:.=.+2
|
||||
ifflg: .=.+2
|
||||
inbfp: .=.+2
|
||||
nargs: .=.+2
|
||||
curarg: .=.+2
|
||||
opfound:.=.+2
|
||||
savop: .=.+2
|
||||
numval: .=.+2
|
||||
nxtfb: .=.+4
|
||||
usymtab:.=.+36.
|
||||
end:
|
||||
.text
|
||||
@@ -0,0 +1,347 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a9 -- pdp-11 assembler pass 1
|
||||
|
||||
eae = 0
|
||||
|
||||
/ key to types
|
||||
|
||||
/ 0 undefined
|
||||
/ 1 absolute
|
||||
/ 2 text
|
||||
/ 3 data
|
||||
/ 4 bss
|
||||
/ 5 flop freg,dst (movfo, = stcfd)
|
||||
/ 6 branch
|
||||
/ 7 jsr
|
||||
/ 10 rts
|
||||
/ 11 sys
|
||||
/ 12 movf (=ldf,stf)
|
||||
/ 13 double operand (mov)
|
||||
/ 14 flop fsrc,freg (addf)
|
||||
/ 15 single operand (clr)
|
||||
/ 16 .byte
|
||||
/ 17 string (.ascii, "<")
|
||||
/ 20 .even
|
||||
/ 21 .if
|
||||
/ 22 .endif
|
||||
/ 23 .globl
|
||||
/ 24 register
|
||||
/ 25 .text
|
||||
/ 26 .data
|
||||
/ 27 .bss
|
||||
/ 30 mul,div, etc
|
||||
/ 31 sob
|
||||
/ 32 .comm
|
||||
/ 33 estimated text
|
||||
/ 34 estimated data
|
||||
/ 35 jbr
|
||||
/ 36 jeq, jne, etc
|
||||
|
||||
.data
|
||||
symtab:
|
||||
/ special variables
|
||||
|
||||
<.\0\0\0\0\0\0\0>; dotrel:02; dot:000000
|
||||
<..\0\0\0\0\0\0>; 01; dotdot:000000
|
||||
|
||||
/ register
|
||||
|
||||
<r0\0\0\0\0\0\0>; 24;000000
|
||||
<r1\0\0\0\0\0\0>; 24;000001
|
||||
<r2\0\0\0\0\0\0>; 24;000002
|
||||
<r3\0\0\0\0\0\0>; 24;000003
|
||||
<r4\0\0\0\0\0\0>; 24;000004
|
||||
<r5\0\0\0\0\0\0>; 24;000005
|
||||
<sp\0\0\0\0\0\0>; 24;000006
|
||||
<pc\0\0\0\0\0\0>; 24;000007
|
||||
|
||||
.if eae
|
||||
|
||||
/eae & switches
|
||||
|
||||
<csw\0\0\0\0\0>; 01;177570
|
||||
<div\0\0\0\0\0>; 01;177300
|
||||
<ac\0\0\0\0\0\0>; 01;177302
|
||||
<mq\0\0\0\0\0\0>; 01;177304
|
||||
<mul\0\0\0\0\0>; 01;177306
|
||||
<sc\0\0\0\0\0\0>; 01;177310
|
||||
<sr\0\0\0\0\0\0>; 01;177311
|
||||
<nor\0\0\0\0\0>; 01;177312
|
||||
<lsh\0\0\0\0\0>; 01;177314
|
||||
<ash\0\0\0\0\0>; 01;177316
|
||||
|
||||
.endif
|
||||
|
||||
/ system calls
|
||||
|
||||
<exit\0\0\0\0>; 01;0000001
|
||||
<fork\0\0\0\0>; 01;0000002
|
||||
<read\0\0\0\0>; 01;0000003
|
||||
<write\0\0\0>; 01;0000004
|
||||
<open\0\0\0\0>; 01;0000005
|
||||
<close\0\0\0>; 01;0000006
|
||||
<wait\0\0\0\0>; 01;0000007
|
||||
<creat\0\0\0>; 01;0000010
|
||||
<link\0\0\0\0>; 01;0000011
|
||||
<unlink\0\0>; 01;0000012
|
||||
<exec\0\0\0\0>; 01;0000013
|
||||
<chdir\0\0\0>; 01;0000014
|
||||
<time\0\0\0\0>; 01;0000015
|
||||
<makdir\0\0>; 01;0000016
|
||||
<chmod\0\0\0>; 01;0000017
|
||||
<chown\0\0\0>; 01;0000020
|
||||
<break\0\0\0>; 01;0000021
|
||||
<stat\0\0\0\0>; 01;0000022
|
||||
<seek\0\0\0\0>; 01;0000023
|
||||
<tell\0\0\0\0>; 01;0000024
|
||||
<mount\0\0\0>; 01;0000025
|
||||
<umount\0\0>; 01;0000026
|
||||
<setuid\0\0>; 01;0000027
|
||||
<getuid\0\0>; 01;0000030
|
||||
<stime\0\0\0>; 01;0000031
|
||||
<fstat\0\0\0>; 01;0000034
|
||||
<mdate\0\0\0>; 01;0000036
|
||||
<stty\0\0\0\0>; 01;0000037
|
||||
<gtty\0\0\0\0>; 01;0000040
|
||||
<nice\0\0\0\0>; 01;0000042
|
||||
<signal\0\0>; 01;0000060
|
||||
|
||||
/ double operand
|
||||
|
||||
<mov\0\0\0\0\0>; 13;0010000
|
||||
<movb\0\0\0\0>; 13;0110000
|
||||
<cmp\0\0\0\0\0>; 13;0020000
|
||||
<cmpb\0\0\0\0>; 13;0120000
|
||||
<bit\0\0\0\0\0>; 13;0030000
|
||||
<bitb\0\0\0\0>; 13;0130000
|
||||
<bic\0\0\0\0\0>; 13;0040000
|
||||
<bicb\0\0\0\0>; 13;0140000
|
||||
<bis\0\0\0\0\0>; 13;0050000
|
||||
<bisb\0\0\0\0>; 13;0150000
|
||||
<add\0\0\0\0\0>; 13;0060000
|
||||
<sub\0\0\0\0\0>; 13;0160000
|
||||
|
||||
/ branch
|
||||
|
||||
<br\0\0\0\0\0\0>; 06;0000400
|
||||
<bne\0\0\0\0\0>; 06;0001000
|
||||
<beq\0\0\0\0\0>; 06;0001400
|
||||
<bge\0\0\0\0\0>; 06;0002000
|
||||
<blt\0\0\0\0\0>; 06;0002400
|
||||
<bgt\0\0\0\0\0>; 06;0003000
|
||||
<ble\0\0\0\0\0>; 06;0003400
|
||||
<bpl\0\0\0\0\0>; 06;0100000
|
||||
<bmi\0\0\0\0\0>; 06;0100400
|
||||
<bhi\0\0\0\0\0>; 06;0101000
|
||||
<blos\0\0\0\0>; 06;0101400
|
||||
<bvc\0\0\0\0\0>; 06;0102000
|
||||
<bvs\0\0\0\0\0>; 06;0102400
|
||||
<bhis\0\0\0\0>; 06;0103000
|
||||
<bec\0\0\0\0\0>; 06;0103000
|
||||
<bcc\0\0\0\0\0>; 06;0103000
|
||||
<blo\0\0\0\0\0>; 06;0103400
|
||||
<bcs\0\0\0\0\0>; 06;0103400
|
||||
<bes\0\0\0\0\0>; 06;0103400
|
||||
|
||||
/ jump/branch type
|
||||
|
||||
<jbr\0\0\0\0\0>; 35;0000400
|
||||
<jne\0\0\0\0\0>; 36;0001000
|
||||
<jeq\0\0\0\0\0>; 36;0001400
|
||||
<jge\0\0\0\0\0>; 36;0002000
|
||||
<jlt\0\0\0\0\0>; 36;0002400
|
||||
<jgt\0\0\0\0\0>; 36;0003000
|
||||
<jle\0\0\0\0\0>; 36;0003400
|
||||
<jpl\0\0\0\0\0>; 36;0100000
|
||||
<jmi\0\0\0\0\0>; 36;0100400
|
||||
<jhi\0\0\0\0\0>; 36;0101000
|
||||
<jlos\0\0\0\0>; 36;0101400
|
||||
<jvc\0\0\0\0\0>; 36;0102000
|
||||
<jvs\0\0\0\0\0>; 36;0102400
|
||||
<jhis\0\0\0\0>; 36;0103000
|
||||
<jec\0\0\0\0\0>; 36;0103000
|
||||
<jcc\0\0\0\0\0>; 36;0103000
|
||||
<jlo\0\0\0\0\0>; 36;0103400
|
||||
<jcs\0\0\0\0\0>; 36;0103400
|
||||
<jes\0\0\0\0\0>; 36;0103400
|
||||
|
||||
/ single operand
|
||||
|
||||
<clr\0\0\0\0\0>; 15;0005000
|
||||
<clrb\0\0\0\0>; 15;0105000
|
||||
<com\0\0\0\0\0>; 15;0005100
|
||||
<comb\0\0\0\0>; 15;0105100
|
||||
<inc\0\0\0\0\0>; 15;0005200
|
||||
<incb\0\0\0\0>; 15;0105200
|
||||
<dec\0\0\0\0\0>; 15;0005300
|
||||
<decb\0\0\0\0>; 15;0105300
|
||||
<neg\0\0\0\0\0>; 15;0005400
|
||||
<negb\0\0\0\0>; 15;0105400
|
||||
<adc\0\0\0\0\0>; 15;0005500
|
||||
<adcb\0\0\0\0>; 15;0105500
|
||||
<sbc\0\0\0\0\0>; 15;0005600
|
||||
<sbcb\0\0\0\0>; 15;0105600
|
||||
<tst\0\0\0\0\0>; 15;0005700
|
||||
<tstb\0\0\0\0>; 15;0105700
|
||||
<ror\0\0\0\0\0>; 15;0006000
|
||||
<rorb\0\0\0\0>; 15;0106000
|
||||
<rol\0\0\0\0\0>; 15;0006100
|
||||
<rolb\0\0\0\0>; 15;0106100
|
||||
<asr\0\0\0\0\0>; 15;0006200
|
||||
<asrb\0\0\0\0>; 15;0106200
|
||||
<asl\0\0\0\0\0>; 15;0006300
|
||||
<aslb\0\0\0\0>; 15;0106300
|
||||
<jmp\0\0\0\0\0>; 15;0000100
|
||||
<swab\0\0\0\0>; 15;0000300
|
||||
|
||||
/ jsr
|
||||
|
||||
<jsr\0\0\0\0\0>; 07;0004000
|
||||
|
||||
/ rts
|
||||
|
||||
<rts\0\0\0\0\0>; 010;000200
|
||||
|
||||
/ simple operand
|
||||
|
||||
<sys\0\0\0\0\0>; 011;104400
|
||||
|
||||
/ flag-setting
|
||||
|
||||
<clc\0\0\0\0\0>; 01;0000241
|
||||
<clv\0\0\0\0\0>; 01;0000242
|
||||
<clz\0\0\0\0\0>; 01;0000244
|
||||
<cln\0\0\0\0\0>; 01;0000250
|
||||
<sec\0\0\0\0\0>; 01;0000261
|
||||
<sev\0\0\0\0\0>; 01;0000262
|
||||
<sez\0\0\0\0\0>; 01;0000264
|
||||
<sen\0\0\0\0\0>; 01;0000270
|
||||
|
||||
/ floating point ops
|
||||
|
||||
<cfcc\0\0\0\0>; 01;170000
|
||||
<setf\0\0\0\0>; 01;170001
|
||||
<setd\0\0\0\0>; 01;170011
|
||||
<seti\0\0\0\0>; 01;170002
|
||||
<setl\0\0\0\0>; 01;170012
|
||||
<clrf\0\0\0\0>; 15;170400
|
||||
<negf\0\0\0\0>; 15;170700
|
||||
<absf\0\0\0\0>; 15;170600
|
||||
<tstf\0\0\0\0>; 15;170500
|
||||
<movf\0\0\0\0>; 12;172400
|
||||
<movif\0\0\0>; 14;177000
|
||||
<movfi\0\0\0>; 05;175400
|
||||
<movof\0\0\0>; 14;177400
|
||||
<movfo\0\0\0>; 05;176000
|
||||
<addf\0\0\0\0>; 14;172000
|
||||
<subf\0\0\0\0>; 14;173000
|
||||
<mulf\0\0\0\0>; 14;171000
|
||||
<divf\0\0\0\0>; 14;174400
|
||||
<cmpf\0\0\0\0>; 14;173400
|
||||
<modf\0\0\0\0>; 14;171400
|
||||
<movie\0\0\0>; 14;176400
|
||||
<movei\0\0\0>; 05;175000
|
||||
<ldfps\0\0\0>; 15;170100
|
||||
<stfps\0\0\0>; 15;170200
|
||||
<fr0\0\0\0\0\0>; 24;000000
|
||||
<fr1\0\0\0\0\0>; 24;000001
|
||||
<fr2\0\0\0\0\0>; 24;000002
|
||||
<fr3\0\0\0\0\0>; 24;000003
|
||||
<fr4\0\0\0\0\0>; 24;000004
|
||||
<fr5\0\0\0\0\0>; 24;000005
|
||||
|
||||
/ 11/45 operations
|
||||
|
||||
<als\0\0\0\0\0>; 30;072000
|
||||
<alsc\0\0\0\0>; 30;073000
|
||||
<mpy\0\0\0\0\0>; 30;070000
|
||||
.if eae-1
|
||||
<mul\0\0\0\0\0>; 30;070000
|
||||
<div\0\0\0\0\0>; 30;071000
|
||||
<ash\0\0\0\0\0>; 30;072000
|
||||
<ashc\0\0\0\0>; 30;073000
|
||||
.endif
|
||||
<dvd\0\0\0\0\0>; 30;071000
|
||||
<xor\0\0\0\0\0>; 07;074000
|
||||
<sxt\0\0\0\0\0>; 15;006700
|
||||
<mark\0\0\0\0>; 11;006400
|
||||
<sob\0\0\0\0\0>; 31;077000
|
||||
|
||||
/ specials
|
||||
|
||||
<.byte\0\0\0>; 16;000000
|
||||
<.even\0\0\0>; 20;000000
|
||||
<.if\0\0\0\0\0>; 21;000000
|
||||
<.endif\0\0>; 22;000000
|
||||
<.globl\0\0>; 23;000000
|
||||
<.text\0\0\0>; 25;000000
|
||||
<.data\0\0\0>; 26;000000
|
||||
<.bss\0\0\0\0>; 27;000000
|
||||
<.comm\0\0\0>; 32;000000
|
||||
|
||||
ebsymtab:
|
||||
|
||||
|
||||
start:
|
||||
sys signal; 2; 1
|
||||
ror r0
|
||||
bcs 1f
|
||||
sys signal; 2; aexit
|
||||
1:
|
||||
mov sp,r5
|
||||
mov (r5)+,r0
|
||||
cmpb *2(r5),$'-
|
||||
bne 1f
|
||||
tst (r5)+
|
||||
dec r0
|
||||
br 2f
|
||||
1:
|
||||
clr unglob
|
||||
2:
|
||||
movb r0,nargs
|
||||
mov r5,curarg
|
||||
jsr r5,fcreat; a.tmp1
|
||||
movb r0,pof
|
||||
jsr r5,fcreat; a.tmp2
|
||||
movb r0,fbfil
|
||||
jsr pc,setup
|
||||
jmp go
|
||||
|
||||
setup:
|
||||
mov $symtab,r1
|
||||
1:
|
||||
clr r3
|
||||
mov $8,r2
|
||||
mov r1,-(sp)
|
||||
2:
|
||||
movb (r1)+,r4
|
||||
beq 2f
|
||||
add r4,r3
|
||||
swab r3
|
||||
sob r2,2b
|
||||
2:
|
||||
clr r2
|
||||
div $hshsiz,r2
|
||||
ashc $1,r2
|
||||
add $hshtab,r3
|
||||
4:
|
||||
sub r2,r3
|
||||
cmp r3,$hshtab
|
||||
bhi 3f
|
||||
add $2*hshsiz,r3
|
||||
3:
|
||||
tst -(r3)
|
||||
bne 4b
|
||||
mov (sp)+,r1
|
||||
mov r1,(r3)
|
||||
add $12.,r1
|
||||
cmp r1,$ebsymtab
|
||||
blo 1b
|
||||
rts pc
|
||||
|
||||
/overlay buffer
|
||||
inbuf = setup
|
||||
. =inbuf+512.
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a21 -- pdp-11 assembler pass 2
|
||||
|
||||
indir = 0
|
||||
|
||||
main:
|
||||
sys signal; 2; 1
|
||||
ror r0
|
||||
bcs 1f
|
||||
sys signal; 2; aexit
|
||||
1:
|
||||
jmp start
|
||||
|
||||
/ set up sizes and origins
|
||||
|
||||
go:
|
||||
|
||||
/ read in symbol table
|
||||
|
||||
mov $usymtab,r1
|
||||
1:
|
||||
jsr pc,getw
|
||||
bvs 1f
|
||||
add $14,symsiz / count symbols
|
||||
jsr pc,getw
|
||||
jsr pc,getw
|
||||
jsr pc,getw
|
||||
jsr pc,getw
|
||||
mov r4,r0
|
||||
bic $!37,r0
|
||||
cmp r0,$2 /text
|
||||
blo 2f
|
||||
cmp r0,$3 /data
|
||||
bhi 2f
|
||||
add $31,r4 /mark "estimated"
|
||||
mov r4,(r1)+
|
||||
jsr pc,getw
|
||||
mov r4,(r1)+
|
||||
br 3f
|
||||
2:
|
||||
clr (r1)+
|
||||
clr (r1)+
|
||||
jsr pc,getw
|
||||
3:
|
||||
jsr pc,setbrk
|
||||
br 1b
|
||||
1:
|
||||
|
||||
/ read in f-b definitions
|
||||
|
||||
mov r1,fbbufp
|
||||
movb fbfil,fin
|
||||
clr ibufc
|
||||
1:
|
||||
jsr pc,getw
|
||||
bvs 1f
|
||||
add $31,r4 / "estimated"
|
||||
mov r4,(r1)+
|
||||
jsr pc,getw
|
||||
mov r4,(r1)+
|
||||
jsr pc,setbrk
|
||||
br 1b
|
||||
1:
|
||||
mov r1,endtable
|
||||
mov $100000,(r1)+
|
||||
|
||||
/ set up input text file; initialize f-b table
|
||||
|
||||
jsr pc,setup
|
||||
/ do pass 1
|
||||
|
||||
jsr pc,assem
|
||||
|
||||
/ prepare for pass 2
|
||||
cmp outmod,$777
|
||||
beq 1f
|
||||
jmp aexit
|
||||
1:
|
||||
clr dot
|
||||
mov $2,dotrel
|
||||
mov $..,dotdot
|
||||
clr brtabp
|
||||
movb fin,r0
|
||||
sys close
|
||||
jsr r5,ofile; a.tmp1
|
||||
movb r0,fin
|
||||
clr ibufc
|
||||
jsr pc,setup
|
||||
inc passno
|
||||
inc bsssiz
|
||||
bic $1,bsssiz
|
||||
mov txtsiz,r1
|
||||
inc r1
|
||||
bic $1,r1
|
||||
mov r1,txtsiz
|
||||
mov datsiz,r2
|
||||
inc r2
|
||||
bic $1,r2
|
||||
mov r2,datsiz
|
||||
mov r1,r3
|
||||
mov r3,datbase / txtsiz
|
||||
mov r3,savdot+2
|
||||
add r2,r3
|
||||
mov r3,bssbase / txtsiz+datsiz
|
||||
mov r3,savdot+4
|
||||
asl r3
|
||||
add $20,r3
|
||||
mov r3,symseek / 2*txtsiz+2*datsiz+20
|
||||
sub r2,r3
|
||||
mov r3,drelseek / 2*txtsiz+datsiz
|
||||
sub r1,r3
|
||||
mov r3,trelseek / txtsiz+datsiz+20
|
||||
sub r2,r3
|
||||
mov r3,datseek / txtsiz+20
|
||||
mov $usymtab,r1
|
||||
1:
|
||||
jsr pc,doreloc
|
||||
add $4,r1
|
||||
cmp r1,endtable
|
||||
blo 1b
|
||||
clr r0
|
||||
jsr r5,oset; txtp
|
||||
mov trelseek,r0
|
||||
jsr r5,oset; relp
|
||||
mov $8.,r2
|
||||
mov $txtmagic,r1
|
||||
1:
|
||||
mov (r1)+,r0
|
||||
jsr r5,putw; txtp
|
||||
dec r2
|
||||
bne 1b
|
||||
jsr pc,assem
|
||||
|
||||
/polish off text and relocation
|
||||
|
||||
jsr r5,flush; txtp
|
||||
jsr r5,flush; relp
|
||||
|
||||
/ append full symbol table
|
||||
|
||||
mov symf,r0
|
||||
mov r0,fin
|
||||
sys seek; 0; 0;
|
||||
clr ibufc
|
||||
mov symseek,r0
|
||||
jsr r5,oset; txtp
|
||||
mov $usymtab,r1
|
||||
1:
|
||||
jsr pc,getw
|
||||
bvs 1f
|
||||
mov r4,r0
|
||||
jsr r5,putw; txtp
|
||||
jsr pc,getw
|
||||
mov r4,r0
|
||||
jsr r5,putw; txtp
|
||||
jsr pc,getw
|
||||
mov r4,r0
|
||||
jsr r5,putw; txtp
|
||||
jsr pc,getw
|
||||
mov r4,r0
|
||||
jsr r5,putw; txtp
|
||||
mov (r1)+,r0
|
||||
jsr r5,putw; txtp
|
||||
mov (r1)+,r0
|
||||
jsr r5,putw; txtp
|
||||
jsr pc,getw
|
||||
jsr pc,getw
|
||||
br 1b
|
||||
1:
|
||||
jsr r5,flush; txtp
|
||||
jmp aexit
|
||||
|
||||
.data
|
||||
aexit:
|
||||
mov a.tmp1,0f
|
||||
sys unlink; 0:..
|
||||
mov a.tmp2,0f
|
||||
sys unlink; 0:..
|
||||
mov a.tmp3,0f
|
||||
sys unlink; 0:..
|
||||
sys chmod; a.out; outmod: 777
|
||||
sys exit
|
||||
.text
|
||||
|
||||
filerr:
|
||||
mov *(r5),r5
|
||||
1:
|
||||
movb (r5)+,ch
|
||||
beq 1f
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
br 1b
|
||||
1:
|
||||
mov $1,r0
|
||||
sys write; qnl; 2
|
||||
jmp aexit
|
||||
|
||||
doreloc:
|
||||
movb (r1),r0
|
||||
bne 1f
|
||||
bisb defund,(r1)
|
||||
1:
|
||||
bic $!37,r0
|
||||
cmp r0,$5
|
||||
bhis 1f
|
||||
cmp r0,$3
|
||||
blo 1f
|
||||
beq 2f
|
||||
add bssbase,2(r1)
|
||||
rts pc
|
||||
2:
|
||||
add datbase,2(r1)
|
||||
1:
|
||||
rts pc
|
||||
|
||||
setbrk:
|
||||
mov r1,-(sp)
|
||||
add $20,r1
|
||||
cmp r1,0f
|
||||
blo 1f
|
||||
add $512.,0f
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys break; 0: end
|
||||
.text
|
||||
1:
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
|
||||
setup:
|
||||
mov $curfb,r4
|
||||
1:
|
||||
clr (r4)+
|
||||
cmp r4,$curfb+40.
|
||||
blo 1b
|
||||
mov txtfil,fin
|
||||
clr ibufc
|
||||
clr r4
|
||||
1:
|
||||
jsr pc,fbadv
|
||||
tstb (r4)+
|
||||
cmp r4,$10.
|
||||
blt 1b
|
||||
rts pc
|
||||
|
||||
ofile:
|
||||
mov *(r5),0f
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys open; 0:..; 0
|
||||
.text
|
||||
bes 1f
|
||||
tst (r5)+
|
||||
rts r5
|
||||
1:
|
||||
jmp filerr
|
||||
@@ -0,0 +1,151 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a2 -- pdp-11 assembler pass 2
|
||||
|
||||
outw:
|
||||
cmp dot-2,$4
|
||||
beq 9f
|
||||
bit $1,dot
|
||||
bne 1f
|
||||
add $2,dot
|
||||
tstb passno
|
||||
beq 8f
|
||||
clr -(sp)
|
||||
rol r3
|
||||
adc (sp)
|
||||
asr r3 / get relative pc bit
|
||||
cmp r3,$40
|
||||
bne 2f
|
||||
/ external references
|
||||
mov $666,outmod / make nonexecutable
|
||||
mov xsymbol,r3
|
||||
sub $usymtab,r3
|
||||
asl r3
|
||||
bis $4,r3 / external relocation
|
||||
br 3f
|
||||
2:
|
||||
bic $40,r3 / clear any ext bits
|
||||
cmp r3,$5
|
||||
blo 4f
|
||||
cmp r3,$33 / est. text, data
|
||||
beq 6f
|
||||
cmp r3,$34
|
||||
bne 7f
|
||||
6:
|
||||
jsr r5,error; 'r
|
||||
7:
|
||||
mov $1,r3 / make absolute
|
||||
4:
|
||||
cmp r3,$2
|
||||
blo 5f
|
||||
cmp r3,$4
|
||||
bhi 5f
|
||||
tst (sp)
|
||||
bne 4f
|
||||
add dotdot,r2
|
||||
br 4f
|
||||
5:
|
||||
tst (sp)
|
||||
beq 4f
|
||||
sub dotdot,r2
|
||||
4:
|
||||
dec r3
|
||||
bpl 3f
|
||||
clr r3
|
||||
3:
|
||||
asl r3
|
||||
bis (sp)+,r3
|
||||
mov r2,r0
|
||||
jsr r5,putw; txtp
|
||||
add $2,*tseekp
|
||||
mov r3,r0
|
||||
jsr r5,putw; relp
|
||||
add $2,*rseekp
|
||||
8:
|
||||
rts pc
|
||||
1:
|
||||
jsr r5,error; 'o
|
||||
clr r3
|
||||
jsr pc,outb
|
||||
rts pc
|
||||
|
||||
9:
|
||||
jsr r5,error; 'x
|
||||
rts pc
|
||||
|
||||
outb:
|
||||
cmp dot-2,$4 / test bss mode
|
||||
beq 9b
|
||||
cmp r3,$1
|
||||
blos 1f
|
||||
jsr r5,error; 'r
|
||||
1:
|
||||
tstb passno
|
||||
beq 2f
|
||||
mov r2,r0
|
||||
bit $1,dot
|
||||
bne 1f
|
||||
jsr r5,putw; txtp
|
||||
clr r0
|
||||
jsr r5,putw; relp
|
||||
add $2,*rseekp
|
||||
add $2,*tseekp
|
||||
br 2f
|
||||
1:
|
||||
mov txtp,r0
|
||||
movb r2,-1(r0)
|
||||
2:
|
||||
inc dot
|
||||
rts pc
|
||||
|
||||
error:
|
||||
mov $666,outmod / make nonexecutable
|
||||
mov r3,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
mov $argb,r1
|
||||
1:
|
||||
movb (r1),ch
|
||||
beq 1f
|
||||
clrb (r1)+
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
br 1b
|
||||
1:
|
||||
mov (r5)+,r0
|
||||
movb r0,0f
|
||||
mov line,r3
|
||||
mov $0f+6,r0
|
||||
mov $4,r1
|
||||
2:
|
||||
clr r2
|
||||
dvd $10.,r2
|
||||
add $'0,r3
|
||||
movb r3,-(r0)
|
||||
mov r2,r3
|
||||
sob r1,2b
|
||||
mov $1,r0
|
||||
sys write; 0f; 7
|
||||
mov (sp)+,r0
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r3
|
||||
rts r5
|
||||
|
||||
.data
|
||||
0: <f xxxx\n>
|
||||
.even
|
||||
.text
|
||||
|
||||
betwen:
|
||||
cmp r0,(r5)+
|
||||
blt 1f
|
||||
cmp (r5)+,r0
|
||||
blt 2f
|
||||
1:
|
||||
tst (r5)+
|
||||
2:
|
||||
rts r5
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a3 -- pdp-11 assembler pass 2
|
||||
|
||||
assem:
|
||||
jsr pc,readop
|
||||
cmp r4,$5
|
||||
beq 2f
|
||||
cmp r4,$'<
|
||||
beq 2f
|
||||
jsr pc,checkeos
|
||||
br eal1
|
||||
mov r4,-(sp)
|
||||
cmp (sp),$1
|
||||
bne 1f
|
||||
mov $2,(sp)
|
||||
jsr pc,getw
|
||||
mov r4,numval
|
||||
1:
|
||||
jsr pc,readop
|
||||
cmp r4,$'=
|
||||
beq 4f
|
||||
cmp r4,$':
|
||||
beq 1f
|
||||
mov r4,savop
|
||||
mov (sp)+,r4
|
||||
2:
|
||||
jsr pc,opline
|
||||
dotmax:
|
||||
tstb passno
|
||||
bne eal1
|
||||
movb dotrel,r0
|
||||
asl r0
|
||||
cmp dot,txtsiz-4(r0)
|
||||
blos ealoop
|
||||
mov dot,txtsiz-4(r0)
|
||||
eal1:
|
||||
jmp ealoop
|
||||
1:
|
||||
mov (sp)+,r4
|
||||
cmp r4,$200
|
||||
bhis 1f
|
||||
cmp r4,$2
|
||||
beq 3f
|
||||
jsr r5,error; 'x
|
||||
br assem
|
||||
1:
|
||||
tstb passno
|
||||
bne 2f
|
||||
movb (r4),r0
|
||||
bic $!37,r0
|
||||
beq 5f
|
||||
cmp r0,$33
|
||||
blt 6f
|
||||
cmp r0,$34
|
||||
ble 5f
|
||||
6:
|
||||
jsr r5,error; 'm
|
||||
5:
|
||||
bic $37,(r4)
|
||||
bis dotrel,(r4)
|
||||
mov 2(r4),brdelt
|
||||
sub dot,brdelt
|
||||
mov dot,2(r4)
|
||||
br assem
|
||||
2:
|
||||
cmp dot,2(r4)
|
||||
beq assem
|
||||
jsr r5,error; 'p
|
||||
br assem
|
||||
3:
|
||||
mov numval,r4
|
||||
jsr pc,fbadv
|
||||
asl r4
|
||||
mov curfb(r4),r0
|
||||
movb dotrel,(r0)
|
||||
mov 2(r0),brdelt
|
||||
sub dot,brdelt
|
||||
mov dot,2(r0)
|
||||
br assem
|
||||
4:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
mov (sp)+,r1
|
||||
cmp r1,$symtab /test for dot
|
||||
bne 1f
|
||||
bic $40,r3
|
||||
cmp r3,dotrel / can't change relocation
|
||||
bne 2f
|
||||
cmp r3,$4 / bss
|
||||
bne 3f
|
||||
mov r2,dot
|
||||
br dotmax
|
||||
3:
|
||||
sub dot,r2
|
||||
bmi 2f
|
||||
mov r2,-(sp)
|
||||
3:
|
||||
dec (sp)
|
||||
bmi 3f
|
||||
clr r2
|
||||
mov $1,r3
|
||||
jsr pc,outb
|
||||
br 3b
|
||||
3:
|
||||
tst (sp)+
|
||||
br dotmax
|
||||
2:
|
||||
jsr r5,error; '.
|
||||
br ealoop
|
||||
1:
|
||||
cmp r3,$40
|
||||
bne 1f
|
||||
jsr r5,error; 'r
|
||||
1:
|
||||
bic $37,(r1)
|
||||
bic $!37,r3
|
||||
bne 1f
|
||||
clr r2
|
||||
1:
|
||||
bisb r3,(r1)
|
||||
mov r2,2(r1)
|
||||
|
||||
ealoop:
|
||||
cmp r4,$'\n
|
||||
beq 1f
|
||||
cmp r4,$'\e
|
||||
bne 9f
|
||||
rts pc
|
||||
1:
|
||||
inc line
|
||||
9:
|
||||
jmp assem
|
||||
|
||||
checkeos:
|
||||
cmp r4,$'\n
|
||||
beq 1f
|
||||
cmp r4,$';
|
||||
beq 1f
|
||||
cmp r4,$'\e
|
||||
beq 1f
|
||||
add $2,(sp)
|
||||
1:
|
||||
rts pc
|
||||
|
||||
fbadv:
|
||||
asl r4
|
||||
mov nxtfb(r4),r1
|
||||
mov r1,curfb(r4)
|
||||
bne 1f
|
||||
mov fbbufp,r1
|
||||
br 2f
|
||||
1:
|
||||
add $4,r1
|
||||
2:
|
||||
cmpb 1(r1),r4
|
||||
beq 1f
|
||||
tst (r1)
|
||||
bpl 1b
|
||||
1:
|
||||
mov r1,nxtfb(r4)
|
||||
asr r4
|
||||
rts pc
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a4 -- pdp-11 assembler pass 2
|
||||
|
||||
oset:
|
||||
mov r2,-(sp)
|
||||
mov (r5)+,r1
|
||||
mov r0,r2
|
||||
bic $!777,r0
|
||||
add r1,r0
|
||||
add $6,r0
|
||||
mov r0,(r1)+ / next slot
|
||||
mov r1,r0
|
||||
add $1004,r0
|
||||
mov r0,(r1)+ / buf max
|
||||
mov r2,(r1)+ / seek addr
|
||||
mov (sp)+,r2
|
||||
rts r5
|
||||
|
||||
putw:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov (r5)+,r2
|
||||
mov (r2)+,r1 / slot
|
||||
cmp r1,(r2) / buf max
|
||||
bhis 1f
|
||||
mov r0,(r1)+
|
||||
mov r1,-(r2)
|
||||
br 2f
|
||||
1:
|
||||
tst (r2)+
|
||||
mov r0,-(sp)
|
||||
jsr r5,flush1
|
||||
mov (sp)+,r0
|
||||
mov r0,*(r2)+
|
||||
add $2,-(r2)
|
||||
2:
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
|
||||
flush:
|
||||
mov (r5)+,r2
|
||||
cmp (r2)+,(r2)+
|
||||
flush1:
|
||||
mov (r2)+,r1
|
||||
mov r1,0f / seek address
|
||||
mov fout,r0
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys seek; 0:..; 0
|
||||
.text
|
||||
bic $!777,r1
|
||||
add r2,r1 / write address
|
||||
mov r1,0f
|
||||
mov r2,r0
|
||||
bis $777,-(r2)
|
||||
inc (r2) / new seek addr
|
||||
cmp -(r2),-(r2)
|
||||
sub (r2),r1
|
||||
neg r1
|
||||
mov r1,0f+2 / count
|
||||
mov r0,(r2) / new next slot
|
||||
mov fout,r0
|
||||
sys indir; 9f
|
||||
.data
|
||||
9: sys write; 0:..; ..
|
||||
.text
|
||||
rts r5
|
||||
|
||||
readop:
|
||||
mov savop,r4
|
||||
beq 1f
|
||||
clr savop
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,getw1
|
||||
cmp r4,$200
|
||||
blo 1f
|
||||
cmp r4,$4000
|
||||
blo 2f
|
||||
add $usymtab-4000,r4
|
||||
rts pc
|
||||
2:
|
||||
add $symtab-1000,r4
|
||||
1:
|
||||
rts pc
|
||||
|
||||
getw:
|
||||
mov savop,r4
|
||||
beq getw1
|
||||
clr savop
|
||||
rts pc
|
||||
getw1:
|
||||
dec ibufc
|
||||
bgt 1f
|
||||
movb fin,r0
|
||||
sys read; inbuf; 512.
|
||||
bes 3f
|
||||
asr r0
|
||||
mov r0,ibufc
|
||||
bne 2f
|
||||
3:
|
||||
mov $4,r4
|
||||
sev
|
||||
rts pc
|
||||
2:
|
||||
mov $inbuf,ibufp
|
||||
1:
|
||||
mov *ibufp,r4
|
||||
add $2,ibufp
|
||||
rts pc
|
||||
@@ -0,0 +1,4 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ as25 is empty
|
||||
@@ -0,0 +1,559 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a6 -- pdp-11 assembler pass 2
|
||||
|
||||
opline:
|
||||
mov r4,r0
|
||||
jsr r5,betwen; 0; 177
|
||||
br 2f
|
||||
cmp r4,$5
|
||||
beq opeof
|
||||
cmp r4,$'<
|
||||
bne xpr
|
||||
jmp opl17
|
||||
xxpr:
|
||||
tst (sp)+
|
||||
xpr:
|
||||
jsr pc,expres
|
||||
jsr pc,outw
|
||||
rts pc
|
||||
2:
|
||||
movb (r4),r0
|
||||
cmp r0,$24 /reg
|
||||
beq xpr
|
||||
cmp r0,$33 /est text
|
||||
beq xpr
|
||||
cmp r0,$34 / est data
|
||||
beq xpr
|
||||
jsr r5,betwen; 5; 36
|
||||
br xpr
|
||||
mov 2(r4),-(sp)
|
||||
mov r0,-(sp)
|
||||
jsr pc,readop
|
||||
mov (sp)+,r0
|
||||
asl r0
|
||||
mov $adrbuf,r5
|
||||
clr swapf
|
||||
mov $-1,rlimit
|
||||
jmp *1f-10.(r0)
|
||||
|
||||
1:
|
||||
opl5
|
||||
opl6
|
||||
opl7
|
||||
opl10
|
||||
opl11
|
||||
opl12
|
||||
opl13
|
||||
opl14
|
||||
opl15
|
||||
opl16
|
||||
opl17
|
||||
opl20
|
||||
opl21
|
||||
opl22
|
||||
opl23
|
||||
xxpr
|
||||
opl25
|
||||
opl26
|
||||
opl27
|
||||
opl30
|
||||
opl31
|
||||
opl32
|
||||
xxpr
|
||||
xxpr
|
||||
opl35
|
||||
opl36
|
||||
|
||||
opeof:
|
||||
mov $1,line
|
||||
mov $20,-(sp)
|
||||
mov $argb,r1
|
||||
1:
|
||||
jsr pc,getw
|
||||
tst r4
|
||||
bmi 1f
|
||||
movb r4,(r1)+
|
||||
dec (sp)
|
||||
bgt 1b
|
||||
tstb -(r1)
|
||||
br 1b
|
||||
1:
|
||||
movb $'\n,(r1)+
|
||||
clrb (r1)+
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
opl30: / mpy, dvd etc
|
||||
inc swapf
|
||||
mov $1000,rlimit
|
||||
br opl13
|
||||
|
||||
opl14: / flop freg,fsrc
|
||||
inc swapf
|
||||
|
||||
opl5: / flop src,freg
|
||||
mov $400,rlimit
|
||||
|
||||
/double
|
||||
opl13:
|
||||
jsr pc,addres
|
||||
op2a:
|
||||
mov r2,-(sp)
|
||||
jsr pc,readop
|
||||
op2b:
|
||||
jsr pc,addres
|
||||
tst swapf
|
||||
beq 1f
|
||||
mov (sp),r0
|
||||
mov r2,(sp)
|
||||
mov r0,r2
|
||||
1:
|
||||
swab (sp)
|
||||
asr (sp)
|
||||
asr (sp)
|
||||
cmp (sp),rlimit
|
||||
blo 1f
|
||||
jsr r5,error; 'x
|
||||
1:
|
||||
bis (sp)+,r2
|
||||
bis (sp)+,r2
|
||||
clr r3
|
||||
jsr pc,outw
|
||||
mov $adrbuf,r1
|
||||
1:
|
||||
cmp r1,r5
|
||||
bhis 1f
|
||||
mov (r1)+,r2
|
||||
mov (r1)+,r3
|
||||
mov (r1)+,xsymbol
|
||||
jsr pc,outw
|
||||
br 1b
|
||||
1:
|
||||
rts pc
|
||||
|
||||
opl15: / single operand
|
||||
clr -(sp)
|
||||
br op2b
|
||||
|
||||
opl12: / movf
|
||||
mov $400,rlimit
|
||||
jsr pc,addres
|
||||
cmp r2,$4 / see if source is fregister
|
||||
blo 1f
|
||||
inc swapf
|
||||
br op2a
|
||||
1:
|
||||
mov $174000,(sp)
|
||||
br op2a
|
||||
|
||||
/ jbr
|
||||
opl35:
|
||||
/ jeq, jne, etc
|
||||
opl36:
|
||||
jsr pc,expres
|
||||
tstb passno
|
||||
bne 1f
|
||||
mov r2,r0
|
||||
jsr pc,setbr
|
||||
tst r2
|
||||
beq 2f
|
||||
cmp (sp),$br
|
||||
beq 2f
|
||||
add $2,r2
|
||||
2:
|
||||
add r2,dot / if doesn't fit
|
||||
add $2,dot
|
||||
tst (sp)+
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,getbr
|
||||
bcc dobranch
|
||||
mov (sp)+,r0
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
cmp r0,$br
|
||||
beq 2f
|
||||
mov $402,r2
|
||||
xor r0,r2 / flip cond, add ".+6"
|
||||
mov $1,r3
|
||||
jsr pc,outw
|
||||
2:
|
||||
mov $1,r3
|
||||
mov $jmp+37,r2
|
||||
jsr pc,outw
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
jsr pc,outw
|
||||
rts pc
|
||||
|
||||
/sob
|
||||
opl31: / sob
|
||||
jsr pc,expres
|
||||
jsr pc,checkreg
|
||||
swab r2
|
||||
asr r2
|
||||
asr r2
|
||||
bis r2,(sp)
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
tstb passno
|
||||
beq 3f
|
||||
sub dot,r2
|
||||
neg r2
|
||||
mov r2,r0
|
||||
jsr r5,betwen; -2; 175
|
||||
br 2f
|
||||
add $4,r2
|
||||
br 1f
|
||||
|
||||
/branch
|
||||
opl6:
|
||||
jsr pc,expres
|
||||
tstb passno
|
||||
beq 3f
|
||||
dobranch:
|
||||
sub dot,r2
|
||||
mov r2,r0
|
||||
jsr r5,betwen; -254.; 256.
|
||||
br 2f
|
||||
1:
|
||||
bit $1,r2
|
||||
bne 2f
|
||||
cmp r3,dot-2 / same relocation as .
|
||||
bne 2f
|
||||
asr r2
|
||||
dec r2
|
||||
bic $177400,r2
|
||||
3:
|
||||
bis (sp)+,r2
|
||||
clr r3
|
||||
jsr pc,outw
|
||||
rts pc
|
||||
2:
|
||||
jsr r5,error; 'b
|
||||
clr r2
|
||||
br 3b
|
||||
|
||||
/jsr
|
||||
opl7:
|
||||
jsr pc,expres
|
||||
jsr pc,checkreg
|
||||
jmp op2a
|
||||
|
||||
/ rts
|
||||
opl10:
|
||||
jsr pc,expres
|
||||
jsr pc,checkreg
|
||||
br 1f
|
||||
|
||||
/ sys, emt etc
|
||||
opl11:
|
||||
jsr pc,expres
|
||||
cmp r2,$64.
|
||||
bhis 0f
|
||||
cmp r3,$1
|
||||
ble 1f
|
||||
0:
|
||||
jsr pc,errora
|
||||
1:
|
||||
bis (sp)+,r2
|
||||
jsr pc,outw
|
||||
rts pc
|
||||
|
||||
/ .byte
|
||||
opl16:
|
||||
jsr pc,expres
|
||||
jsr pc,outb
|
||||
cmp r4,$',
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
br opl16
|
||||
1:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
/ < (.ascii)
|
||||
opl17:
|
||||
jsr pc,getw
|
||||
mov $1,r3
|
||||
mov r4,r2
|
||||
bmi 2f
|
||||
bic $!377,r2
|
||||
jsr pc,outb
|
||||
br opl17
|
||||
2:
|
||||
jsr pc,getw
|
||||
rts pc
|
||||
|
||||
/.even
|
||||
opl20:
|
||||
bit $1,dot
|
||||
beq 1f
|
||||
cmp dot-2,$4
|
||||
beq 2f / bss mode
|
||||
clr r2
|
||||
clr r3
|
||||
jsr pc,outb
|
||||
br 1f
|
||||
2:
|
||||
inc dot
|
||||
1:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
opl21: /if
|
||||
jsr pc,expres
|
||||
opl22:
|
||||
oplret:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
|
||||
/.globl
|
||||
opl23:
|
||||
cmp r4,$200
|
||||
blo 1f
|
||||
bisb $40,(r4)
|
||||
jsr pc,readop
|
||||
cmp r4,$',
|
||||
bne 1f
|
||||
jsr pc,readop
|
||||
br opl23
|
||||
1:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
/ .text, .data, .bss
|
||||
opl25:
|
||||
opl26:
|
||||
opl27:
|
||||
inc dot
|
||||
bic $1,dot
|
||||
mov r0,-(sp)
|
||||
mov dot-2,r1
|
||||
asl r1
|
||||
mov dot,savdot-4(r1)
|
||||
tstb passno
|
||||
beq 1f
|
||||
jsr r5,flush; txtp
|
||||
jsr r5,flush; relp
|
||||
mov (sp),r2
|
||||
add $txtseek-[2*25],r2
|
||||
mov r2,tseekp
|
||||
mov (r2),r0
|
||||
jsr r5,oset; txtp
|
||||
add $trelseek-txtseek,r2
|
||||
mov (r2),r0
|
||||
mov r2,rseekp
|
||||
jsr r5,oset; relp
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
mov savdot-[2*25](r0),dot
|
||||
asr r0
|
||||
sub $25-2,r0
|
||||
mov r0,dot-2 / new . relocation
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
opl32:
|
||||
cmp r4,$200
|
||||
blo 1f
|
||||
mov r4,-(sp)
|
||||
jsr pc,readop
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
mov (sp)+,r0
|
||||
bit $37,(r0)
|
||||
bne 1f
|
||||
bis $40,(r0)
|
||||
mov r2,2(r0)
|
||||
1:
|
||||
tst (sp)+
|
||||
rts pc
|
||||
|
||||
addres:
|
||||
clr -(sp)
|
||||
4:
|
||||
cmp r4,$'(
|
||||
beq alp
|
||||
cmp r4,$'-
|
||||
beq amin
|
||||
cmp r4,$'$
|
||||
beq adoll
|
||||
cmp r4,$'*
|
||||
bne getx
|
||||
jmp astar
|
||||
getx:
|
||||
jsr pc,expres
|
||||
cmp r4,$'(
|
||||
bne 2f
|
||||
jsr pc,readop
|
||||
mov r2,(r5)+
|
||||
mov r3,(r5)+
|
||||
mov xsymbol,(r5)+
|
||||
jsr pc,expres
|
||||
jsr pc,checkreg
|
||||
jsr pc,checkrp
|
||||
bis $60,r2
|
||||
bis (sp)+,r2
|
||||
rts pc
|
||||
|
||||
2:
|
||||
cmp r3,$24
|
||||
bne 1f
|
||||
jsr pc,checkreg
|
||||
bis (sp)+,r2
|
||||
rts pc
|
||||
1:
|
||||
mov r3,-(sp)
|
||||
bic $40,r3
|
||||
mov (sp)+,r3
|
||||
bis $100000,r3
|
||||
sub dot,r2
|
||||
sub $4,r2
|
||||
cmp r5,$adrbuf
|
||||
beq 1f
|
||||
sub $2,r2
|
||||
1:
|
||||
mov r2,(r5)+ / index
|
||||
mov r3,(r5)+ / index reloc.
|
||||
mov xsymbol,(r5)+ / index global
|
||||
mov $67,r2 / address mode
|
||||
bis (sp)+,r2
|
||||
rts pc
|
||||
|
||||
alp:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
jsr pc,checkrp
|
||||
jsr pc,checkreg
|
||||
cmp r4,$'+
|
||||
beq 1f
|
||||
tst (sp)+
|
||||
beq 2f
|
||||
bis $70,r2
|
||||
clr (r5)+
|
||||
clr (r5)+
|
||||
mov xsymbol,(r5)+
|
||||
rts pc
|
||||
2:
|
||||
bis $10,r2
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,readop
|
||||
bis $20,r2
|
||||
bis (sp)+,r2
|
||||
rts pc
|
||||
|
||||
amin:
|
||||
jsr pc,readop
|
||||
cmp r4,$'(
|
||||
beq 1f
|
||||
mov r4,savop
|
||||
mov $'-,r4
|
||||
br getx
|
||||
1:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
jsr pc,checkrp
|
||||
jsr pc,checkreg
|
||||
bis (sp)+,r2
|
||||
bis $40,r2
|
||||
rts pc
|
||||
|
||||
adoll:
|
||||
jsr pc,readop
|
||||
jsr pc,expres
|
||||
mov r2,(r5)+
|
||||
mov r3,(r5)+
|
||||
mov xsymbol,(r5)+
|
||||
mov (sp)+,r2
|
||||
bis $27,r2
|
||||
rts pc
|
||||
|
||||
astar:
|
||||
tst (sp)
|
||||
beq 1f
|
||||
jsr r5,error; '*
|
||||
1:
|
||||
mov $10,(sp)
|
||||
jsr pc,readop
|
||||
jmp 4b
|
||||
|
||||
errora:
|
||||
jsr r5,error; 'a
|
||||
rts pc
|
||||
|
||||
checkreg:
|
||||
cmp r2,$7
|
||||
bhi 1f
|
||||
cmp r1,$1
|
||||
blos 2f
|
||||
cmp r3,$5
|
||||
blo 1f
|
||||
2:
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,errora
|
||||
clr r2
|
||||
clr r3
|
||||
rts pc
|
||||
|
||||
errore:
|
||||
jsr r5,error; 'e
|
||||
rts pc
|
||||
|
||||
checkrp:
|
||||
cmp r4,$')
|
||||
beq 1f
|
||||
jsr r5,error; ')
|
||||
rts pc
|
||||
1:
|
||||
jsr pc,readop
|
||||
rts pc
|
||||
|
||||
setbr:
|
||||
mov brtabp,r1
|
||||
cmp r1,$brlen
|
||||
blt 1f
|
||||
mov $2,r2
|
||||
rts pc
|
||||
1:
|
||||
inc brtabp
|
||||
clr -(sp)
|
||||
sub dot,r0
|
||||
ble 1f
|
||||
sub brdelt,r0
|
||||
1:
|
||||
jsr r5,betwen; -254.; 256.
|
||||
br 1f
|
||||
br 2f
|
||||
1:
|
||||
mov r1,-(sp)
|
||||
bic $!7,(sp)
|
||||
mov $1,r0
|
||||
ash (sp)+,r0
|
||||
ash $-3,r1
|
||||
bisb r0,brtab(r1)
|
||||
mov $2,(sp)
|
||||
2:
|
||||
mov (sp)+,r2
|
||||
rts pc
|
||||
|
||||
getbr:
|
||||
mov brtabp,r1
|
||||
cmp r1,$brlen
|
||||
blt 1f
|
||||
sec
|
||||
rts pc
|
||||
1:
|
||||
mov r1,-(sp)
|
||||
bic $!7,(sp)
|
||||
neg (sp)
|
||||
inc brtabp
|
||||
ash $-3,r1
|
||||
movb brtab(r1),r1
|
||||
ash (sp)+,r1
|
||||
ror r1 / 0-bit into c-bit
|
||||
rts pc
|
||||
@@ -0,0 +1,294 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ a7 -- pdp-11 assembler
|
||||
|
||||
expres:
|
||||
clr xsymbol
|
||||
expres1:
|
||||
mov r5,-(sp)
|
||||
mov $'+,-(sp)
|
||||
clr r2
|
||||
mov $1,r3
|
||||
br 1f
|
||||
advanc:
|
||||
jsr pc,readop
|
||||
1:
|
||||
mov r4,r0
|
||||
jsr r5,betwen; 0; 177
|
||||
br .+4
|
||||
br 7f
|
||||
movb (r4),r0
|
||||
tst r0
|
||||
bne 1f
|
||||
tstb passno
|
||||
beq 1f
|
||||
jsr r5,error; 'u
|
||||
1:
|
||||
cmp r0,$40
|
||||
bne 1f
|
||||
mov r4,xsymbol
|
||||
clr r1
|
||||
br oprand
|
||||
1:
|
||||
mov 2(r4),r1
|
||||
br oprand
|
||||
7:
|
||||
cmp r4,$141
|
||||
blo 1f
|
||||
asl r4
|
||||
mov curfb-[2*141](r4),r0
|
||||
mov 2(r0),r1
|
||||
movb (r0),r0
|
||||
br oprand
|
||||
1:
|
||||
mov $esw1,r1
|
||||
1:
|
||||
cmp (r1)+,r4
|
||||
beq 1f
|
||||
tst (r1)+
|
||||
bne 1b
|
||||
tst (sp)+
|
||||
mov (sp)+,r5
|
||||
rts pc
|
||||
1:
|
||||
jmp *(r1)
|
||||
|
||||
esw1:
|
||||
'+; binop
|
||||
'-; binop
|
||||
'*; binop
|
||||
'/; binop
|
||||
'&; binop
|
||||
037; binop
|
||||
035; binop
|
||||
036; binop
|
||||
'%; binop
|
||||
'[; brack
|
||||
'^; binop
|
||||
1; exnum
|
||||
2; exnum1
|
||||
'!; binop
|
||||
200; 0
|
||||
|
||||
binop:
|
||||
cmpb (sp),$'+
|
||||
beq 1f
|
||||
jsr pc,errore
|
||||
1:
|
||||
movb r4,(sp)
|
||||
br advanc
|
||||
|
||||
exnum1:
|
||||
mov numval,r1
|
||||
br 1f
|
||||
|
||||
exnum:
|
||||
jsr pc,getw
|
||||
mov r4,r1
|
||||
1:
|
||||
mov $1,r0
|
||||
br oprand
|
||||
|
||||
brack:
|
||||
mov r2,-(sp)
|
||||
mov r3,-(sp)
|
||||
jsr pc,readop
|
||||
jsr pc,expres1
|
||||
cmp r4,$']
|
||||
beq 1f
|
||||
jsr r5,error; ']
|
||||
1:
|
||||
mov r3,r0
|
||||
mov r2,r1
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r2
|
||||
|
||||
oprand:
|
||||
mov $exsw2,r5
|
||||
1:
|
||||
cmp (sp),(r5)+
|
||||
beq 1f
|
||||
tst (r5)+
|
||||
bne 1b
|
||||
br eoprnd
|
||||
1:
|
||||
jmp *(r5)
|
||||
|
||||
exsw2:
|
||||
'+; exadd
|
||||
'-; exsub
|
||||
'*; exmul
|
||||
'/; exdiv
|
||||
037; exor
|
||||
'&; exand
|
||||
035;exlsh
|
||||
036;exrsh
|
||||
'%; exmod
|
||||
'^; excmbin
|
||||
'!; exnot
|
||||
200; 0
|
||||
|
||||
excmbin:
|
||||
mov r0,r3
|
||||
br eoprnd
|
||||
|
||||
exrsh:
|
||||
neg r1
|
||||
beq exlsh
|
||||
inc r1
|
||||
clc
|
||||
ror r2
|
||||
exlsh:
|
||||
jsr r5,combin; relte2
|
||||
als r1,r2
|
||||
br eoprnd
|
||||
|
||||
exmod:
|
||||
jsr r5,combin; relte2
|
||||
mov r3,r0
|
||||
mov r2,r3
|
||||
clr r2
|
||||
dvd r1,r2
|
||||
mov r3,r2
|
||||
mov r0,r3
|
||||
br eoprnd
|
||||
|
||||
exadd:
|
||||
jsr r5,combin; reltp2
|
||||
add r1,r2
|
||||
br eoprnd
|
||||
|
||||
exsub:
|
||||
jsr r5,combin; reltm2
|
||||
sub r1,r2
|
||||
br eoprnd
|
||||
|
||||
exand:
|
||||
jsr r5,combin; relte2
|
||||
com r1
|
||||
bic r1,r2
|
||||
br eoprnd
|
||||
|
||||
exor:
|
||||
jsr r5,combin; relte2
|
||||
bis r1,r2
|
||||
br eoprnd
|
||||
|
||||
exmul:
|
||||
jsr r5,combin; relte2
|
||||
mpy r2,r1
|
||||
mov r1,r2
|
||||
br eoprnd
|
||||
|
||||
exdiv:
|
||||
jsr r5,combin; relte2
|
||||
mov r3,r0
|
||||
mov r2,r3
|
||||
clr r2
|
||||
dvd r1,r2
|
||||
mov r0,r3
|
||||
br eoprnd
|
||||
|
||||
exnot:
|
||||
jsr r5,combin; relte2
|
||||
com r1
|
||||
add r1,r2
|
||||
br eoprnd
|
||||
|
||||
eoprnd:
|
||||
mov $'+,(sp)
|
||||
jmp advanc
|
||||
|
||||
combin:
|
||||
tstb passno
|
||||
bne combin1
|
||||
mov r0,-(sp)
|
||||
bis r3,(sp)
|
||||
bic $!40,(sp)
|
||||
bic $!37,r0
|
||||
bic $!37,r3
|
||||
cmp r0,r3
|
||||
ble 1f
|
||||
mov r0,-(sp)
|
||||
mov r3,r0
|
||||
mov (sp)+,r3
|
||||
1:
|
||||
tst r0
|
||||
beq 1f
|
||||
cmp (r5)+,$reltm2
|
||||
bne 2f
|
||||
cmp r0,r3
|
||||
bne 2f
|
||||
mov $1,r3
|
||||
br 2f
|
||||
1:
|
||||
tst (r5)+
|
||||
clr r3
|
||||
2:
|
||||
bis (sp)+,r3
|
||||
rts r5
|
||||
combin1:
|
||||
mov r1,-(sp)
|
||||
clr maxtyp
|
||||
jsr pc,maprel
|
||||
mov r0,r1
|
||||
mpy $6,r1
|
||||
mov r3,r0
|
||||
jsr pc,maprel
|
||||
add (r5)+,r0
|
||||
add r1,r0
|
||||
movb (r0),r3
|
||||
bpl 1f
|
||||
cmp r3,$-1
|
||||
beq 2f
|
||||
jsr r5,error; 'r
|
||||
2:
|
||||
mov maxtyp,r3
|
||||
1:
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
|
||||
maprel:
|
||||
cmp r0,$40
|
||||
bne 1f
|
||||
mov $5,r0
|
||||
rts pc
|
||||
1:
|
||||
bic $!37,r0
|
||||
cmp r0,maxtyp
|
||||
blos 1f
|
||||
mov r0,maxtyp
|
||||
1:
|
||||
cmp r0,$5
|
||||
blos 1f
|
||||
mov $1,r0
|
||||
1:
|
||||
rts pc
|
||||
|
||||
X = -2
|
||||
M = -1
|
||||
reltp2:
|
||||
.byte 0, 0, 0, 0, 0, 0
|
||||
.byte 0, M, 2, 3, 4,40
|
||||
.byte 0, 2, X, X, X, X
|
||||
.byte 0, 3, X, X, X, X
|
||||
.byte 0, 4, X, X, X, X
|
||||
.byte 0,40, X, X, X, X
|
||||
|
||||
reltm2:
|
||||
.byte 0, 0, 0, 0, 0, 0
|
||||
.byte 0, M, 2, 3, 4,40
|
||||
.byte 0, X, 1, X, X, X
|
||||
.byte 0, X, X, 1, X, X
|
||||
.byte 0, X, X, X, 1, X
|
||||
.byte 0, X, X, X, X, X
|
||||
|
||||
relte2:
|
||||
.byte 0, 0, 0, 0, 0, 0
|
||||
.byte 0, M, X, X, X, X
|
||||
.byte 0, X, X, X, X, X
|
||||
.byte 0, X, X, X, X, X
|
||||
.byte 0, X, X, X, X, X
|
||||
.byte 0, X, X, X, X, X
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ as8 -- PDP-11 assembler pass 2
|
||||
|
||||
qnl: <?\n>
|
||||
a.out: <a.out\0>
|
||||
|
||||
.even
|
||||
a.outp: a.out
|
||||
|
||||
.data
|
||||
a.tmp1: 0
|
||||
a.tmp2: 0
|
||||
a.tmp3: 0
|
||||
|
||||
tseekp: txtseek
|
||||
rseekp: trelseek
|
||||
|
||||
txtmagic:
|
||||
br .+20
|
||||
txtsiz: .=.+2
|
||||
datsiz: .=.+2
|
||||
bsssiz: .=.+2
|
||||
symsiz: .=.+2
|
||||
stksiz: .=.+2
|
||||
exorig: .=.+2
|
||||
.=.+2
|
||||
|
||||
txtseek: 20
|
||||
datseek:.=.+2
|
||||
.=.+2
|
||||
trelseek:.=.+2
|
||||
drelseek:.=.+2
|
||||
.=.+2
|
||||
symseek:.=.+2
|
||||
|
||||
.bss
|
||||
|
||||
brlen = 1024.
|
||||
brtab: .=.+[brlen\/8.]
|
||||
brtabp: .=.+2
|
||||
brdelt: .=.+2
|
||||
fbbufp: .=.+2
|
||||
defund: .=.+2
|
||||
savdot: .=.+6
|
||||
datbase:.=.+2
|
||||
bssbase:.=.+2
|
||||
fbfil: .=.+2
|
||||
fin: .=.+2
|
||||
ibufc: .=.+2
|
||||
txtfil: .=.+2
|
||||
symf: .=.+2
|
||||
adrbuf: .=.+12.
|
||||
xsymbol:.=.+2
|
||||
fout: .=.+2
|
||||
ch: .=.+2
|
||||
wordf: .=.+2
|
||||
argb: .=.+22.
|
||||
line: .=.+2
|
||||
savop: .=.+2
|
||||
curfb: .=.+20.
|
||||
nxtfb: .=.+20.
|
||||
numval: .=.+2
|
||||
maxtyp: .=.+2
|
||||
relfil: .=.+2
|
||||
ibufp: .=.+2
|
||||
txtp: .=.+6+512.
|
||||
relp: .=.+6+512.
|
||||
swapf: .=.+2
|
||||
rlimit: .=.+2
|
||||
passno: .=.+2
|
||||
endtable:.=.+2
|
||||
usymtab:.=.+20.
|
||||
end:
|
||||
|
||||
.text
|
||||
@@ -0,0 +1,280 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ as9 -- PDP-11 assembler pass 2
|
||||
|
||||
eae = 0
|
||||
|
||||
.data
|
||||
symtab:
|
||||
|
||||
/ special variables
|
||||
|
||||
dotrel: 02; dot:000000 /.
|
||||
01; dotdot:000000 /..
|
||||
|
||||
/ register
|
||||
|
||||
24;000000 /r0
|
||||
24;000001 /r1
|
||||
24;000002 /r2
|
||||
24;000003 /r3
|
||||
24;000004 /r4
|
||||
24;000005 /r5
|
||||
24;000006 /sp
|
||||
24;000007 /pc
|
||||
|
||||
|
||||
.if eae
|
||||
/eae & switches
|
||||
|
||||
01;177570 /csw
|
||||
01;177300 /div
|
||||
01;177302 /ac
|
||||
01;177304 /mq
|
||||
01;177306 /mul
|
||||
01;177310 /sc
|
||||
01;177311 /sr
|
||||
01;177312 /nor
|
||||
01;177314 /lsh
|
||||
01;177316 /ash
|
||||
|
||||
.endif
|
||||
|
||||
/ system calls
|
||||
|
||||
01;0000001 /exit
|
||||
01;0000002 /fork
|
||||
01;0000003 /read
|
||||
01;0000004 /write
|
||||
01;0000005 /open
|
||||
01;0000006 /close
|
||||
01;0000007 /wait
|
||||
01;0000010 /creat
|
||||
01;0000011 /link
|
||||
01;0000012 /unlink
|
||||
01;0000013 /exec
|
||||
01;0000014 /chdir
|
||||
01;0000015 /time
|
||||
01;0000016 /makdir
|
||||
01;0000017 /chmod
|
||||
01;0000020 /chown
|
||||
01;0000021 /break
|
||||
01;0000022 /stat
|
||||
01;0000023 /seek
|
||||
01;0000024 /tell
|
||||
01;0000025 /mount
|
||||
01;0000026 /umount
|
||||
01;0000027 /setuid
|
||||
01;0000030 /getuid
|
||||
01;0000031 /stime
|
||||
01;0000034 /fstat
|
||||
01;0000036 /mdate
|
||||
01;0000037 /stty
|
||||
01;0000040 /gtty
|
||||
01;0000042 /nice
|
||||
01;0000060 /signal
|
||||
|
||||
/ double operand
|
||||
|
||||
13;0010000 /mov
|
||||
13;0110000 /movb
|
||||
13;0020000 /cmp
|
||||
13;0120000 /cmpb
|
||||
13;0030000 /bit
|
||||
13;0130000 /bitb
|
||||
13;0040000 /bic
|
||||
13;0140000 /bicb
|
||||
13;0050000 /bis
|
||||
13;0150000 /bisb
|
||||
13;0060000 /add
|
||||
13;0160000 /sub
|
||||
|
||||
/ branch
|
||||
|
||||
06;0000400 /br
|
||||
06;0001000 /bne
|
||||
06;0001400 /beq
|
||||
06;0002000 /bge
|
||||
06;0002400 /blt
|
||||
06;0003000 /bgt
|
||||
06;0003400 /ble
|
||||
06;0100000 /bpl
|
||||
06;0100400 /bmi
|
||||
06;0101000 /bhi
|
||||
06;0101400 /blos
|
||||
06;0102000 /bvc
|
||||
06;0102400 /bvs
|
||||
06;0103000 /bhis
|
||||
06;0103000 /bec
|
||||
06;0103000 /bcc
|
||||
06;0103400 /blo
|
||||
06;0103400 /bcs
|
||||
06;0103400 /bes
|
||||
|
||||
/ jump/ branch type
|
||||
|
||||
35;0000400 /jbr
|
||||
36;0001000 /jne
|
||||
36;0001400 /jeq
|
||||
36;0002000 /jge
|
||||
36;0002400 /jlt
|
||||
36;0003000 /jgt
|
||||
36;0003400 /jle
|
||||
36;0100000 /jpl
|
||||
36;0100400 /jmi
|
||||
36;0101000 /jhi
|
||||
36;0101400 /jlos
|
||||
36;0102000 /jvc
|
||||
36;0102400 /jvs
|
||||
36;0103000 /jhis
|
||||
36;0103000 /jec
|
||||
36;0103000 /jcc
|
||||
36;0103400 /jlo
|
||||
36;0103400 /jcs
|
||||
36;0103400 /jes
|
||||
|
||||
/ single operand
|
||||
|
||||
15;0005000 /clr
|
||||
15;0105000 /clrb
|
||||
15;0005100 /com
|
||||
15;0105100 /comb
|
||||
15;0005200 /inc
|
||||
15;0105200 /incb
|
||||
15;0005300 /dec
|
||||
15;0105300 /decb
|
||||
15;0005400 /neg
|
||||
15;0105400 /negb
|
||||
15;0005500 /adc
|
||||
15;0105500 /adcb
|
||||
15;0005600 /sbc
|
||||
15;0105600 /sbcb
|
||||
15;0005700 /tst
|
||||
15;0105700 /tstb
|
||||
15;0006000 /ror
|
||||
15;0106000 /rorb
|
||||
15;0006100 /rol
|
||||
15;0106100 /rolb
|
||||
15;0006200 /asr
|
||||
15;0106200 /asrb
|
||||
15;0006300 /asl
|
||||
15;0106300 /aslb
|
||||
15;0000100 /jmp
|
||||
15;0000300 /swab
|
||||
|
||||
/ jsr
|
||||
|
||||
07;0004000 /jsr
|
||||
|
||||
/ rts
|
||||
|
||||
10;000200 /rts
|
||||
|
||||
/ simple operand
|
||||
|
||||
11;104400 /sys
|
||||
|
||||
/ flag-setting
|
||||
|
||||
01;0000241 /clc
|
||||
01;0000242 /clv
|
||||
01;0000244 /clz
|
||||
01;0000250 /cln
|
||||
01;0000261 /sec
|
||||
01;0000262 /sev
|
||||
01;0000264 /sez
|
||||
01;0000270 /sen
|
||||
|
||||
/ floating point ops
|
||||
|
||||
01;170000 / cfcc
|
||||
01;170001 / setf
|
||||
01;170011 / setd
|
||||
01;170002 / seti
|
||||
01;170012 / setl
|
||||
15;170400 / clrf
|
||||
15;170700 / negf
|
||||
15;170600 / absf
|
||||
15;170500 / tstf
|
||||
12;172400 / movf
|
||||
14;177000 / movif
|
||||
05;175400 / movfi
|
||||
14;177400 / movof
|
||||
05;176000 / movfo
|
||||
14;172000 / addf
|
||||
14;173000 / subf
|
||||
14;171000 / mulf
|
||||
14;174400 / divf
|
||||
14;173400 / cmpf
|
||||
14;171400 / modf
|
||||
14;176400 / movie
|
||||
05;175000 / movei
|
||||
15;170100 / ldfps
|
||||
15;170200 / stfps
|
||||
24;000000 / fr0
|
||||
24;000001 / fr1
|
||||
24;000002 / fr2
|
||||
24;000003 / fr3
|
||||
24;000004 / fr4
|
||||
24;000005 / fr5
|
||||
|
||||
/ 11/45 operations
|
||||
|
||||
30;072000 /als (ash)
|
||||
30;073000 /alsc (ashc)
|
||||
30;070000 /mpy
|
||||
.if eae-1
|
||||
30;070000/ mul
|
||||
30;071000 / div
|
||||
30;072000 / ash
|
||||
30;073000 /ashc
|
||||
.endif
|
||||
30;071000 /dvd
|
||||
07;074000 /xor
|
||||
15;006700 /sxt
|
||||
11;006400 /mark
|
||||
31;077000 /sob
|
||||
|
||||
/ specials
|
||||
|
||||
16;000000 /.byte
|
||||
20;000000 /.even
|
||||
21;000000 /.if
|
||||
22;000000 /.endif
|
||||
23;000000 /.globl
|
||||
25;000000 /.text
|
||||
26;000000 /.data
|
||||
27;000000 /.bss
|
||||
32;000000 /.comm
|
||||
|
||||
start:
|
||||
cmp (sp),$4
|
||||
bge 1f
|
||||
jmp aexit
|
||||
1:
|
||||
cmp (sp)+,$5
|
||||
blt 1f
|
||||
mov $40,defund / globalize all undefineds
|
||||
1:
|
||||
tst (sp)+
|
||||
mov (sp)+,a.tmp1
|
||||
mov (sp)+,a.tmp2
|
||||
mov (sp)+,a.tmp3
|
||||
jsr r5,ofile; a.tmp1
|
||||
movb r0,txtfil
|
||||
jsr r5,ofile; a.tmp2
|
||||
movb r0,fbfil
|
||||
jsr r5,ofile; a.tmp3
|
||||
movb r0,symf
|
||||
movb r0,fin
|
||||
sys creat; a.out; 0
|
||||
bec 1f
|
||||
jsr r5,filerr; a.outp
|
||||
1:
|
||||
movb r0,fout
|
||||
jmp go
|
||||
|
||||
/ overlaid buffer
|
||||
inbuf = start
|
||||
. = inbuf+512.
|
||||
@@ -0,0 +1,9 @@
|
||||
as as1?.s
|
||||
ld -s -n a.out
|
||||
cmp a.out /bin/as
|
||||
cp a.out /bin/as
|
||||
as as2?.s
|
||||
ld -s -n a.out
|
||||
cmp a.out /lib/as2
|
||||
cp a.out /lib/as2
|
||||
rm a.out
|
||||
Reference in New Issue
Block a user