From 8d8c20ed013c07c1df481d16c7ec1ebc5cd51b13 Mon Sep 17 00:00:00 2001 From: Dennis Ritchie Date: Wed, 10 Jan 1979 15:00:44 -0500 Subject: [PATCH] Research V7 development Work on file usr/src/cmd/as/as11.s Work on file usr/src/cmd/as/as12.s Work on file usr/src/cmd/as/as13.s Work on file usr/src/cmd/as/as14.s Work on file usr/src/cmd/as/as15.s Work on file usr/src/cmd/as/as17.s Work on file usr/src/cmd/as/as18.s Work on file usr/src/cmd/as/as16.s Work on file usr/src/cmd/as/as19.s Work on file usr/src/cmd/as/as22.s Work on file usr/src/cmd/as/as21.s Work on file usr/src/cmd/as/as25.s Work on file usr/src/cmd/as/as24.s Work on file usr/src/cmd/as/as23.s Work on file usr/src/cmd/as/as26.s Work on file usr/src/cmd/as/as28.s Work on file usr/src/cmd/as/as27.s Work on file usr/src/cmd/as/makefile Synthesized-from: v7 --- usr/src/cmd/as/as11.s | 129 +++++++++ usr/src/cmd/as/as12.s | 71 +++++ usr/src/cmd/as/as13.s | 132 ++++++++++ usr/src/cmd/as/as14.s | 244 +++++++++++++++++ usr/src/cmd/as/as15.s | 171 ++++++++++++ usr/src/cmd/as/as16.s | 291 +++++++++++++++++++++ usr/src/cmd/as/as17.s | 221 ++++++++++++++++ usr/src/cmd/as/as18.s | 65 +++++ usr/src/cmd/as/as19.s | 329 +++++++++++++++++++++++ usr/src/cmd/as/as21.s | 281 ++++++++++++++++++++ usr/src/cmd/as/as22.s | 160 ++++++++++++ usr/src/cmd/as/as23.s | 165 ++++++++++++ usr/src/cmd/as/as24.s | 125 +++++++++ usr/src/cmd/as/as25.s | 4 + usr/src/cmd/as/as26.s | 562 ++++++++++++++++++++++++++++++++++++++++ usr/src/cmd/as/as27.s | 294 +++++++++++++++++++++ usr/src/cmd/as/as28.s | 77 ++++++ usr/src/cmd/as/makefile | 19 ++ 18 files changed, 3340 insertions(+) create mode 100644 usr/src/cmd/as/as11.s create mode 100644 usr/src/cmd/as/as12.s create mode 100644 usr/src/cmd/as/as13.s create mode 100644 usr/src/cmd/as/as14.s create mode 100644 usr/src/cmd/as/as15.s create mode 100644 usr/src/cmd/as/as16.s create mode 100644 usr/src/cmd/as/as17.s create mode 100644 usr/src/cmd/as/as18.s create mode 100644 usr/src/cmd/as/as19.s create mode 100644 usr/src/cmd/as/as21.s create mode 100644 usr/src/cmd/as/as22.s create mode 100644 usr/src/cmd/as/as23.s create mode 100644 usr/src/cmd/as/as24.s create mode 100644 usr/src/cmd/as/as25.s create mode 100644 usr/src/cmd/as/as26.s create mode 100644 usr/src/cmd/as/as27.s create mode 100644 usr/src/cmd/as/as28.s create mode 100644 usr/src/cmd/as/makefile diff --git a/usr/src/cmd/as/as11.s b/usr/src/cmd/as/as11.s new file mode 100644 index 0000000000..a5e5ae9473 --- /dev/null +++ b/usr/src/cmd/as/as11.s @@ -0,0 +1,129 @@ +/ +/ + +/ PDP-11 assembler pass 0 + + jmp start +go: + jsr pc,assem + movb pof,r0 + sys write; outbuf; 512. + jes wrterr + 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 + jes wrterr + .data +9: sys write; usymtab; 0:.. + .text + mov r1,r0 + sys close + sys exec; fpass2; 1f + mov $fpass2,r0 + jsr r5,filerr; "?\n + +aexit: + sys unlink; a.tmp1 + sys unlink; a.tmp2 + sys unlink; a.tmp3 + mov $3,r0 + sys exit +.data +1: + fpass2 + globfl + outfl +outfp: + outfile + a.tmp1 + a.tmp2 + a.tmp3 + 0 +fpass2: + +globfl: +unglob=.+1 + <-\0\0> +outfl: + <-o\0> +outfile: + +3: + <-g\0> + .even + .text + +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,0f+2 + tstb 1(r5) + beq 1f + mov $2,0f+2 +1: + mov $1,r0 + sys indir; 9f + .data +9: sys write; 0:0; 1 + .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 + mov $3,r0 + sys exit + +.=.+2 +wrterr: + mov $1,r0 + sys write; 9f; 9f-8f + inc errflg + jbr aexit +9: ; 8: diff --git a/usr/src/cmd/as/as12.s b/usr/src/cmd/as/as12.s new file mode 100644 index 0000000000..ab555a46b0 --- /dev/null +++ b/usr/src/cmd/as/as12.s @@ -0,0 +1,71 @@ +/ +/ + +/ 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: + .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. + jes wrterr +2: + rts pc + diff --git a/usr/src/cmd/as/as13.s b/usr/src/cmd/as/as13.s new file mode 100644 index 0000000000..9e49eba84a --- /dev/null +++ b/usr/src/cmd/as/as13.s @@ -0,0 +1,132 @@ +/ +/ + +/ 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 + jes wrterr + 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 + diff --git a/usr/src/cmd/as/as14.s b/usr/src/cmd/as/as14.s new file mode 100644 index 0000000000..f8a50183c1 --- /dev/null +++ b/usr/src/cmd/as/as14.s @@ -0,0 +1,244 @@ +/ +/ + +/ 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) + clrb 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: + movb 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 + clr timesaround +1: + sub r0,r1 + cmp r1,$hshtab + bhi 2f + add $2*hshsiz,r1 + tst timesaround + beq 3f + mov $1,r0 + sys write; 9f; 8f-9f + jmp aexit + .data +timesaround: + .=.+2 +9: ; 8: .even + .text +3: + inc timesaround +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; + 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 + diff --git a/usr/src/cmd/as/as15.s b/usr/src/cmd/as/as15.s new file mode 100644 index 0000000000..a6981b3257 --- /dev/null +++ b/usr/src/cmd/as/as15.s @@ -0,0 +1,171 @@ +/ +/ + +/ 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 's, 040 + .byte 't, 011 + .byte 'e, 004 + .byte '0, 000 + .byte 'r, 015 + .byte 'a, 006 + .byte 'p, 033 + .byte 0, -1 + diff --git a/usr/src/cmd/as/as16.s b/usr/src/cmd/as/as16.s new file mode 100644 index 0000000000..799c9fe281 --- /dev/null +++ b/usr/src/cmd/as/as16.s @@ -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 + diff --git a/usr/src/cmd/as/as17.s b/usr/src/cmd/as/as17.s new file mode 100644 index 0000000000..30a17c2d5d --- /dev/null +++ b/usr/src/cmd/as/as17.s @@ -0,0 +1,221 @@ +/ +/ + +/ 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 + cmp r2,$-1 + bne 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 + diff --git a/usr/src/cmd/as/as18.s b/usr/src/cmd/as/as18.s new file mode 100644 index 0000000000..6b6eb81469 --- /dev/null +++ b/usr/src/cmd/as/as18.s @@ -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: +a.tmp2: +a.tmp3: + .even +curfb: + -1;-1;-1;-1;-1;-1;-1;-1;-1;-1 +obufp: outbuf +symend: usymtab + +.bss +curfbr: .=.+10. +savdot: .=.+6 +bufcnt: .=.+2 +hshsiz = 3001. +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 diff --git a/usr/src/cmd/as/as19.s b/usr/src/cmd/as/as19.s new file mode 100644 index 0000000000..6c7be87c77 --- /dev/null +++ b/usr/src/cmd/as/as19.s @@ -0,0 +1,329 @@ +/ +/ + +/ 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 + +; 24;000000 +; 24;000001 +; 24;000002 +; 24;000003 +; 24;000004 +; 24;000005 +; 24;000006 +; 24;000007 + +.if eae + +/eae & switches + +; 01;177570 +; 01;177300 +; 01;177302 +; 01;177304 +; 01;177306 +; 01;177310 +; 01;177311 +; 01;177312 +; 01;177314 +; 01;177316 + +.endif + +/ double operand + +; 13;0010000 +; 13;0110000 +; 13;0020000 +; 13;0120000 +; 13;0030000 +; 13;0130000 +; 13;0040000 +; 13;0140000 +; 13;0050000 +; 13;0150000 +; 13;0060000 +; 13;0160000 + +/ branch + +; 06;0000400 +; 06;0001000 +; 06;0001400 +; 06;0002000 +; 06;0002400 +; 06;0003000 +; 06;0003400 +; 06;0100000 +; 06;0100400 +; 06;0101000 +; 06;0101400 +; 06;0102000 +; 06;0102400 +; 06;0103000 +; 06;0103000 +; 06;0103000 +; 06;0103400 +; 06;0103400 +; 06;0103400 + +/ jump/branch type + +; 35;0000400 +; 36;0001000 +; 36;0001400 +; 36;0002000 +; 36;0002400 +; 36;0003000 +; 36;0003400 +; 36;0100000 +; 36;0100400 +; 36;0101000 +; 36;0101400 +; 36;0102000 +; 36;0102400 +; 36;0103000 +; 36;0103000 +; 36;0103000 +; 36;0103400 +; 36;0103400 +; 36;0103400 + +/ single operand + +; 15;0005000 +; 15;0105000 +; 15;0005100 +; 15;0105100 +; 15;0005200 +; 15;0105200 +; 15;0005300 +; 15;0105300 +; 15;0005400 +; 15;0105400 +; 15;0005500 +; 15;0105500 +; 15;0005600 +; 15;0105600 +; 15;0005700 +; 15;0105700 +; 15;0006000 +; 15;0106000 +; 15;0006100 +; 15;0106100 +; 15;0006200 +; 15;0106200 +; 15;0006300 +; 15;0106300 +; 15;0000100 +; 15;0000300 + +/ jsr + +; 07;0004000 + +/ rts + +; 010;000200 + +/ simple operand + +; 011;104400 + +/ flag-setting + +; 01;0000241 +; 01;0000242 +; 01;0000244 +; 01;0000250 +; 01;0000261 +; 01;0000262 +; 01;0000264 +; 01;0000270 + +/ floating point ops + +; 01;170000 +; 01;170001 +; 01;170011 +; 01;170002 +; 01;170012 +; 15;170400 +; 15;170700 +; 15;170600 +; 15;170500 +; 12;172400 +; 14;177000 +; 05;175400 +; 14;177400 +; 05;176000 +; 14;172000 +; 14;173000 +; 14;171000 +; 14;174400 +; 14;173400 +; 14;171400 +; 14;176400 +; 05;175000 +; 15;170100 +; 15;170200 +; 24;000000 +; 24;000001 +; 24;000002 +; 24;000003 +; 24;000004 +; 24;000005 + +/ 11/45 operations + +; 30;072000 +; 30;073000 +; 30;070000 +.if eae-1 +; 30;070000 +; 30;071000 +; 30;072000 +; 30;073000 +.endif +; 30;071000 +; 07;074000 +; 15;006700 +; 11;006400 +; 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)+,r0 + tst (sp)+ +1: + mov (sp),r1 + cmpb (r1),$'- + bne 1f + tst (sp)+ + dec r0 + cmpb 1(r1),$'u + bne 2f + movb $'g,unglob + br 1b +2: + tstb 1(r1) + bne 2f + movb $'g,unglob + br 1b +2: + cmpb 1(r1),$'o + bne 1f + mov (sp),outfp + tst (sp)+ + dec r0 + br 1b +1: + movb r0,nargs + tst -(sp) + mov sp,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. + diff --git a/usr/src/cmd/as/as21.s b/usr/src/cmd/as/as21.s new file mode 100644 index 0000000000..d4a22637af --- /dev/null +++ b/usr/src/cmd/as/as21.s @@ -0,0 +1,281 @@ +/ +/ + +/ a21 -- pdp-11 assembler pass 2 + +main: + sys signal; 2; 1 + ror r0 + bcs 1f + sys signal; 2; saexit +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 + clr r0 + asl r3 + adc r0 + add $20,r3 + adc r0 + mov r3,symseek+2 / 2*txtsiz+2*datsiz+20 + mov r0,symseek + sub r2,r3 + sbc r0 + mov r3,drelseek+2 / 2*txtsiz+datsiz + mov r0,drelseek + sub r1,r3 + sbc r0 + mov r3,trelseek+2 / txtsiz+datsiz+20 + mov r0,trelseek + sub r2,r3 + sbc r0 + mov r0,datseek + mov r3,datseek+2 / txtsiz+20 + mov $usymtab,r1 +1: + jsr pc,doreloc + add $4,r1 + cmp r1,endtable + blo 1b + clr r0 + clr r1 + jsr r5,oset; txtp + mov trelseek,r0 + mov trelseek+2,r1 + 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 lseek; 0; 0; 0 + clr ibufc + mov symseek,r0 + mov symseek+2,r1 + 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 +saexit: + mov pc,errflg + +aexit: + mov a.tmp1,0f + sys unlink; 0:.. + mov a.tmp2,0f + sys unlink; 0:.. + mov a.tmp3,0f + sys unlink; 0:.. + tst errflg + bne 2f + sys umask; 0 + bic r0,outmod + sys chmod; a.outp2:a.out; outmod: 777 + clr r0 + br 1f +2: + mov $2,r0 +1: + 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 saexit + +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 diff --git a/usr/src/cmd/as/as22.s b/usr/src/cmd/as/as22.s new file mode 100644 index 0000000000..1fbdb3b6a0 --- /dev/null +++ b/usr/src/cmd/as/as22.s @@ -0,0 +1,160 @@ +/ +/ + +/ 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 + mov tseekp,r0 + add $2,2(r0) + adc (r0) + mov r3,r0 + jsr r5,putw; relp + mov rseekp,r0 + add $2,2(r0) + adc (r0) +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 + mov tseekp,r0 + add $2,2(r0) + adc (r0) + mov rseekp,r0 + add $2,2(r0) + adc (r0) + br 2f +1: + mov txtp,r0 + movb r2,-1(r0) +2: + inc dot + rts pc + +error: + mov pc,errflg + 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: + .even + .text + +betwen: + cmp r0,(r5)+ + blt 1f + cmp (r5)+,r0 + blt 2f +1: + tst (r5)+ +2: + rts r5 + diff --git a/usr/src/cmd/as/as23.s b/usr/src/cmd/as/as23.s new file mode 100644 index 0000000000..26f16c89fd --- /dev/null +++ b/usr/src/cmd/as/as23.s @@ -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 + diff --git a/usr/src/cmd/as/as24.s b/usr/src/cmd/as/as24.s new file mode 100644 index 0000000000..b1926636ab --- /dev/null +++ b/usr/src/cmd/as/as24.s @@ -0,0 +1,125 @@ +/ +/ + +/ a4 -- pdp-11 assembler pass 2 + +oset: + mov r2,-(sp) + mov r3,-(sp) + mov (r5)+,r3 + mov r1,r2 + bic $!777,r1 + add r3,r1 + add $8,r1 + mov r1,(r3)+ / next slot + mov r3,r1 + add $1006,r1 + mov r1,(r3)+ / buf max + mov r0,(r3)+ + mov r2,(r3)+ / seek addr + mov (sp)+,r3 + 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)+,0f + mov (r2)+,r1 + mov r1,0f+2 / seek address + mov fout,r0 + sys indir; 9f + .data +9: sys lseek; 0:..; ..; 0 + .text + bic $!777,r1 + add r2,r1 / write address + mov r1,0f + mov r2,r0 + bis $777,-(r2) + add $1,(r2) / new seek addr + adc -(r2) + 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 + jes wrterr + .data +9: sys write; 0:..; .. + .text + rts r5 + +wrterr: + mov $1,r0 + sys write; 9f; 8f-9f + jmp saexit +9: ; 8: + +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 diff --git a/usr/src/cmd/as/as25.s b/usr/src/cmd/as/as25.s new file mode 100644 index 0000000000..f8aaf11c7b --- /dev/null +++ b/usr/src/cmd/as/as25.s @@ -0,0 +1,4 @@ +/ +/ + +/ as25 is empty diff --git a/usr/src/cmd/as/as26.s b/usr/src/cmd/as/as26.s new file mode 100644 index 0000000000..b818624159 --- /dev/null +++ b/usr/src/cmd/as/as26.s @@ -0,0 +1,562 @@ +/ +/ + +/ 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,$256. + 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 + asl r2 + add $txtseek-[4*25],r2 + mov r2,tseekp + mov (r2),r0 + mov 2(r2),r1 + jsr r5,oset; txtp + add $trelseek-txtseek,r2 + mov (r2),r0 + mov 2(r2),r1 + 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 diff --git a/usr/src/cmd/as/as27.s b/usr/src/cmd/as/as27.s new file mode 100644 index 0000000000..cfcfaa80a0 --- /dev/null +++ b/usr/src/cmd/as/as27.s @@ -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 + blo 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 + diff --git a/usr/src/cmd/as/as28.s b/usr/src/cmd/as/as28.s new file mode 100644 index 0000000000..a5e03ccb5a --- /dev/null +++ b/usr/src/cmd/as/as28.s @@ -0,0 +1,77 @@ +/ +/ + +/ as8 -- PDP-11 assembler pass 2 + +qnl: +a.out: +.even +.data +a.outp: a.out + +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:0; 20 +datseek:.=.+4 + .=.+4 +trelseek:.=.+4 +drelseek:.=.+4 + .=.+4 +symseek:.=.+4 + +.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 +errflg: .=.+2 +wordf: .=.+2 +argb: .=.+22. +line: .=.+2 +savop: .=.+2 +curfb: .=.+20. +nxtfb: .=.+20. +numval: .=.+2 +maxtyp: .=.+2 +relfil: .=.+2 +ibufp: .=.+2 +txtp: .=.+8+512. +relp: .=.+8+512. +swapf: .=.+2 +rlimit: .=.+2 +passno: .=.+2 +endtable:.=.+2 +usymtab:.=.+20. +end: + +.text diff --git a/usr/src/cmd/as/makefile b/usr/src/cmd/as/makefile new file mode 100644 index 0000000000..899a596e30 --- /dev/null +++ b/usr/src/cmd/as/makefile @@ -0,0 +1,19 @@ +all: as as2 + +cmp: as as2 + cmp as /bin/as + cmp as2 /lib/as2 + rm as as2 a.out + +cp: as as2 + cp as /bin/as + cp as2 /lib/as2 + rm as as2 a.out + +as: + as /usr/include/sys.s as1?.s + ld -n -s a.out -o as + +as2: + as /usr/include/sys.s as2?.s + ld -n -s a.out -o as2 -- 2.20.1