292 lines
2.8 KiB
ArmAsm
292 lines
2.8 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ a6 -- pdp-11 assembler pass 1
|
|
|
|
opline:
|
|
mov r4,r0
|
|
jsr r5,betwen; 0; 200
|
|
br 1f
|
|
cmp r0,$'<
|
|
bne xpr
|
|
jmp opl17
|
|
xpr:
|
|
jsr pc,expres
|
|
add $2,dot
|
|
rts pc
|
|
1:
|
|
movb (r4),r0
|
|
cmp r0,$24
|
|
beq xpr
|
|
jsr r5,betwen; 5; 36
|
|
br xpr
|
|
mov r0,-(sp)
|
|
jsr pc,readop
|
|
mov (sp)+,r0
|
|
asl r0
|
|
jmp *1f-12(r0)
|
|
|
|
1:
|
|
opl13 / map fop freg,fdst to double
|
|
opl6
|
|
opl7
|
|
opl10
|
|
opl11
|
|
opl13 / map fld/fst to double
|
|
opl13
|
|
opl13 / map fop fsrc,freg to double
|
|
opl15
|
|
opl16
|
|
opl17
|
|
opl20
|
|
opl21
|
|
opl22
|
|
opl23
|
|
xpr
|
|
opl25
|
|
opl26
|
|
opl27
|
|
opl13 / map mul s,r to double
|
|
opl31
|
|
opl32
|
|
xpr
|
|
xpr
|
|
opl35
|
|
opl36
|
|
|
|
/ jbr
|
|
opl35:
|
|
mov $4,-(sp)
|
|
br 1f
|
|
|
|
/ jeq, etc
|
|
opl36:
|
|
mov $6,-(sp)
|
|
1:
|
|
jsr pc,expres
|
|
cmp r3,dotrel
|
|
bne 1f
|
|
sub dot,r2
|
|
bge 1f
|
|
cmp r2,$-376
|
|
blt 1f
|
|
mov $2,(sp)
|
|
1:
|
|
add (sp)+,dot
|
|
rts pc
|
|
|
|
/double
|
|
opl13:
|
|
opl7:
|
|
jsr pc,addres
|
|
op2:
|
|
cmp r4,$',
|
|
beq 1f
|
|
jsr pc,errora
|
|
rts pc
|
|
1:
|
|
jsr pc,readop
|
|
opl15: / single operand
|
|
jsr pc,addres
|
|
add $2,dot
|
|
rts pc
|
|
|
|
opl31: / sob
|
|
jsr pc,expres
|
|
cmp r4,$',
|
|
beq 1f
|
|
jsr pc,errora
|
|
1:
|
|
jsr pc,readop
|
|
|
|
/branch
|
|
opl6:
|
|
opl10:
|
|
opl11:
|
|
jsr pc,expres
|
|
add $2,dot
|
|
rts pc
|
|
|
|
/ .byte
|
|
opl16:
|
|
jsr pc,expres
|
|
inc dot
|
|
cmp r4,$',
|
|
bne 1f
|
|
jsr pc,readop
|
|
br opl16
|
|
1:
|
|
rts pc
|
|
|
|
/ < (.ascii)
|
|
opl17:
|
|
add numval,dot
|
|
jsr pc,readop
|
|
rts pc
|
|
|
|
/.even
|
|
opl20:
|
|
inc dot
|
|
bic $1,dot
|
|
rts pc
|
|
|
|
/.if
|
|
opl21:
|
|
jsr pc,expres
|
|
tst r3
|
|
bne 1f
|
|
jsr r5,error; 'U
|
|
1:
|
|
tst r2
|
|
bne opl22
|
|
inc ifflg
|
|
opl22: /endif
|
|
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:
|
|
rts pc
|
|
|
|
opl25:
|
|
opl26:
|
|
opl27:
|
|
mov dotrel,r1
|
|
asl r1
|
|
mov dot,savdot-4(r1)
|
|
mov savdot-[2*25](r0),dot
|
|
asr r0
|
|
sub $25-2,r0
|
|
mov r0,dotrel
|
|
rts pc
|
|
|
|
/ .common
|
|
opl32:
|
|
cmp r4,$200
|
|
blo 1f
|
|
bis $40,(r4)
|
|
jsr pc,readop
|
|
cmp r4,$',
|
|
bne 1f
|
|
jsr pc,readop
|
|
jsr pc,expres
|
|
rts pc
|
|
1:
|
|
jsr r5,error; 'x
|
|
rts pc
|
|
|
|
addres:
|
|
cmp r4,$'(
|
|
beq alp
|
|
cmp r4,$'-
|
|
beq amin
|
|
cmp r4,$'$
|
|
beq adoll
|
|
cmp r4,$'*
|
|
beq astar
|
|
getx:
|
|
jsr pc,expres
|
|
cmp r4,$'(
|
|
bne 2f
|
|
jsr pc,readop
|
|
jsr pc,expres
|
|
jsr pc,checkreg
|
|
jsr pc,checkrp
|
|
add $2,dot
|
|
clr r0
|
|
rts pc
|
|
2:
|
|
cmp r3,$24 / register type
|
|
bne 1f
|
|
jsr pc,checkreg
|
|
clr r0
|
|
rts pc
|
|
1:
|
|
add $2,dot
|
|
clr r0
|
|
rts pc
|
|
|
|
alp:
|
|
jsr pc,readop
|
|
jsr pc,expres
|
|
jsr pc,checkrp
|
|
jsr pc,checkreg
|
|
cmp r4,$'+
|
|
bne 1f
|
|
jsr pc,readop
|
|
clr r0
|
|
rts pc
|
|
1:
|
|
mov $2,r0
|
|
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
|
|
clr r0
|
|
rts pc
|
|
|
|
adoll:
|
|
jsr pc,readop
|
|
jsr pc,expres
|
|
add $2,dot
|
|
clr r0
|
|
rts pc
|
|
|
|
astar:
|
|
jsr pc,readop
|
|
cmp r4,$'*
|
|
bne 1f
|
|
jsr r5,error; '*
|
|
1:
|
|
jsr pc,addres
|
|
add r0,dot
|
|
rts pc
|
|
|
|
errora:
|
|
jsr r5,error; 'a
|
|
rts pc
|
|
|
|
checkreg:
|
|
cmp r2,$7
|
|
bhi 1f
|
|
cmp r3,$1
|
|
beq 2f
|
|
cmp r3,$4
|
|
bhi 2f
|
|
1:
|
|
jsr pc,errora
|
|
2:
|
|
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
|
|
|