560 lines
5.9 KiB
ArmAsm
560 lines
5.9 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ 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
|