152 lines
1.6 KiB
ArmAsm
152 lines
1.6 KiB
ArmAsm
/
|
|
/
|
|
|
|
/ a2 -- pdp-11 assembler pass 2
|
|
|
|
outw:
|
|
cmp dot-2,$4
|
|
beq 9f
|
|
bit $1,dot
|
|
bne 1f
|
|
add $2,dot
|
|
tstb passno
|
|
beq 8f
|
|
clr -(sp)
|
|
rol r3
|
|
adc (sp)
|
|
asr r3 / get relative pc bit
|
|
cmp r3,$40
|
|
bne 2f
|
|
/ external references
|
|
mov $666,outmod / make nonexecutable
|
|
mov xsymbol,r3
|
|
sub $usymtab,r3
|
|
asl r3
|
|
bis $4,r3 / external relocation
|
|
br 3f
|
|
2:
|
|
bic $40,r3 / clear any ext bits
|
|
cmp r3,$5
|
|
blo 4f
|
|
cmp r3,$33 / est. text, data
|
|
beq 6f
|
|
cmp r3,$34
|
|
bne 7f
|
|
6:
|
|
jsr r5,error; 'r
|
|
7:
|
|
mov $1,r3 / make absolute
|
|
4:
|
|
cmp r3,$2
|
|
blo 5f
|
|
cmp r3,$4
|
|
bhi 5f
|
|
tst (sp)
|
|
bne 4f
|
|
add dotdot,r2
|
|
br 4f
|
|
5:
|
|
tst (sp)
|
|
beq 4f
|
|
sub dotdot,r2
|
|
4:
|
|
dec r3
|
|
bpl 3f
|
|
clr r3
|
|
3:
|
|
asl r3
|
|
bis (sp)+,r3
|
|
mov r2,r0
|
|
jsr r5,putw; txtp
|
|
add $2,*tseekp
|
|
mov r3,r0
|
|
jsr r5,putw; relp
|
|
add $2,*rseekp
|
|
8:
|
|
rts pc
|
|
1:
|
|
jsr r5,error; 'o
|
|
clr r3
|
|
jsr pc,outb
|
|
rts pc
|
|
|
|
9:
|
|
jsr r5,error; 'x
|
|
rts pc
|
|
|
|
outb:
|
|
cmp dot-2,$4 / test bss mode
|
|
beq 9b
|
|
cmp r3,$1
|
|
blos 1f
|
|
jsr r5,error; 'r
|
|
1:
|
|
tstb passno
|
|
beq 2f
|
|
mov r2,r0
|
|
bit $1,dot
|
|
bne 1f
|
|
jsr r5,putw; txtp
|
|
clr r0
|
|
jsr r5,putw; relp
|
|
add $2,*rseekp
|
|
add $2,*tseekp
|
|
br 2f
|
|
1:
|
|
mov txtp,r0
|
|
movb r2,-1(r0)
|
|
2:
|
|
inc dot
|
|
rts pc
|
|
|
|
error:
|
|
mov $666,outmod / make nonexecutable
|
|
mov r3,-(sp)
|
|
mov r2,-(sp)
|
|
mov r1,-(sp)
|
|
mov r0,-(sp)
|
|
mov $argb,r1
|
|
1:
|
|
movb (r1),ch
|
|
beq 1f
|
|
clrb (r1)+
|
|
mov $1,r0
|
|
sys write; ch; 1
|
|
br 1b
|
|
1:
|
|
mov (r5)+,r0
|
|
movb r0,0f
|
|
mov line,r3
|
|
mov $0f+6,r0
|
|
mov $4,r1
|
|
2:
|
|
clr r2
|
|
dvd $10.,r2
|
|
add $'0,r3
|
|
movb r3,-(r0)
|
|
mov r2,r3
|
|
sob r1,2b
|
|
mov $1,r0
|
|
sys write; 0f; 7
|
|
mov (sp)+,r0
|
|
mov (sp)+,r1
|
|
mov (sp)+,r2
|
|
mov (sp)+,r3
|
|
rts r5
|
|
|
|
.data
|
|
0: <f xxxx\n>
|
|
.even
|
|
.text
|
|
|
|
betwen:
|
|
cmp r0,(r5)+
|
|
blt 1f
|
|
cmp (r5)+,r0
|
|
blt 2f
|
|
1:
|
|
tst (r5)+
|
|
2:
|
|
rts r5
|
|
|