Add original unix v6
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user