MiniUnix/usr/source/as/as23.s
/
/
/ a3 -- pdp-11 assembler pass 2
assem:
jsr pc,readop
cmp r4,$5
beq 2f
cmp r4,$'<
beq 2f
jsr pc,checkeos
br eal1
mov r4,-(sp)
cmp (sp),$1
bne 1f
mov $2,(sp)
jsr pc,getw
mov r4,numval
1:
jsr pc,readop
cmp r4,$'=
beq 4f
cmp r4,$':
beq 1f
mov r4,savop
mov (sp)+,r4
2:
jsr pc,opline
dotmax:
tstb passno
bne eal1
movb dotrel,r0
asl r0
cmp dot,txtsiz-4(r0)
blos ealoop
mov dot,txtsiz-4(r0)
eal1:
jmp ealoop
1:
mov (sp)+,r4
cmp r4,$200
bhis 1f
cmp r4,$2
beq 3f
jsr r5,error; 'x
br assem
1:
tstb passno
bne 2f
movb (r4),r0
bic $!37,r0
beq 5f
cmp r0,$33
blt 6f
cmp r0,$34
ble 5f
6:
jsr r5,error; 'm
5:
bic $37,(r4)
bis dotrel,(r4)
mov 2(r4),brdelt
sub dot,brdelt
mov dot,2(r4)
br assem
2:
cmp dot,2(r4)
beq assem
jsr r5,error; 'p
br assem
3:
mov numval,r4
jsr pc,fbadv
asl r4
mov curfb(r4),r0
movb dotrel,(r0)
mov 2(r0),brdelt
sub dot,brdelt
mov dot,2(r0)
br assem
4:
jsr pc,readop
jsr pc,expres
mov (sp)+,r1
cmp r1,$symtab /test for dot
bne 1f
bic $40,r3
cmp r3,dotrel / can't change relocation
bne 2f
cmp r3,$4 / bss
bne 3f
mov r2,dot
br dotmax
3:
sub dot,r2
bmi 2f
mov r2,-(sp)
3:
dec (sp)
bmi 3f
clr r2
mov $1,r3
jsr pc,outb
br 3b
3:
tst (sp)+
br dotmax
2:
jsr r5,error; '.
br ealoop
1:
cmp r3,$40
bne 1f
jsr r5,error; 'r
1:
bic $37,(r1)
bic $!37,r3
bne 1f
clr r2
1:
bisb r3,(r1)
mov r2,2(r1)
ealoop:
cmp r4,$'\n
beq 1f
cmp r4,$'\e
bne 9f
rts pc
1:
inc line
9:
jmp assem
checkeos:
cmp r4,$'\n
beq 1f
cmp r4,$';
beq 1f
cmp r4,$'\e
beq 1f
add $2,(sp)
1:
rts pc
fbadv:
asl r4
mov nxtfb(r4),r1
mov r1,curfb(r4)
bne 1f
mov fbbufp,r1
br 2f
1:
add $4,r1
2:
cmpb 1(r1),r4
beq 1f
tst (r1)
bpl 1b
1:
mov r1,nxtfb(r4)
asr r4
rts pc