home *** CD-ROM | disk | FTP | other *** search
- /
- /
-
- / 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
-