/ / / 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