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
+106
View File
@@ -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
+70
View File
@@ -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
+131
View File
@@ -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
+231
View File
@@ -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
+170
View File
@@ -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
+291
View File
@@ -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
+220
View File
@@ -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
+65
View File
@@ -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
+347
View File
@@ -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.
+258
View File
@@ -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
+151
View File
@@ -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
+165
View File
@@ -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
+113
View File
@@ -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
+4
View File
@@ -0,0 +1,4 @@
/
/
/ as25 is empty
+559
View File
@@ -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
+294
View File
@@ -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
+77
View File
@@ -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
+280
View File
@@ -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.
+9
View File
@@ -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