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