376 lines
3.5 KiB
ArmAsm
376 lines
3.5 KiB
ArmAsm
/ db2 -- debugger
|
|
|
|
lookupn:
|
|
cmp symbol,$'.
|
|
bne 1f
|
|
mov dot,taddr
|
|
rts pc
|
|
1:
|
|
tst error
|
|
beq 1f
|
|
rts pc
|
|
1:
|
|
mov r2,-(sp)
|
|
mov namstrt,r1
|
|
mov namsiz,r2
|
|
jsr pc,1f
|
|
mov (sp)+,r2
|
|
rts pc
|
|
1:
|
|
mov $symbol,r0
|
|
cmp (r0)+,(r1)+
|
|
bne 2f
|
|
cmp (r0)+,(r1)+
|
|
bne 3f
|
|
cmp (r0)+,(r1)+
|
|
bne 4f
|
|
cmp (r0)+,(r1)+
|
|
bne 5f
|
|
tst (r1)+
|
|
mov (r1)+,taddr
|
|
rts pc
|
|
2:
|
|
tst (r1)+
|
|
3:
|
|
tst (r1)+
|
|
4:
|
|
tst (r1)+
|
|
5:
|
|
cmp (r1)+,(r1)+
|
|
cmp r1,r2
|
|
blo 1b
|
|
inc error
|
|
clr taddr
|
|
rts pc
|
|
|
|
lookupv:
|
|
mov r5,-(sp)
|
|
mov $nambuf,r5
|
|
clr r2
|
|
mov $177777,r3
|
|
1:
|
|
cmp r5,namsiz
|
|
bhis 4f
|
|
mov 12(r5),r1
|
|
sub r0,r1
|
|
neg r1
|
|
blt 3f
|
|
cmp r1,r3
|
|
bhi 3f
|
|
cmp r1,$4000
|
|
bhis 3f
|
|
cmp r2,r5
|
|
bhi 3f
|
|
mov r1,r3
|
|
mov r5,r2
|
|
3:
|
|
add $14,r5
|
|
br 1b
|
|
4:
|
|
mov (sp)+,r5
|
|
rts pc
|
|
|
|
get:
|
|
mov *(r5)+,r0
|
|
jsr r5,remap
|
|
tst error
|
|
bne 2f
|
|
mov r0,0f
|
|
mov curfin,r0
|
|
sys seek; 0:0; 0
|
|
bec 1f
|
|
2:
|
|
inc error
|
|
rts r5
|
|
1:
|
|
mov curfin,r0
|
|
sys read; temp; 2
|
|
bes 2b
|
|
tst r0
|
|
beq 2b
|
|
mov temp,r0
|
|
rts r5
|
|
|
|
remap:
|
|
mov dbfin,curfin
|
|
cmp getoff,$1024.
|
|
bne 1f
|
|
cmp r0,txtsiz
|
|
bhis 2f
|
|
add $20,r0
|
|
mov symfin,curfin
|
|
rts r5
|
|
2:
|
|
cmp r0,rtxtsiz
|
|
blo 3f
|
|
sub rtxtsiz,r0
|
|
cmp r0,datsiz
|
|
bhis 2f
|
|
add $1024.,r0
|
|
rts r5
|
|
2:
|
|
add rtxtsiz,r0
|
|
neg r0
|
|
cmp r0,stksiz
|
|
bhi 3f
|
|
neg r0
|
|
add datsiz,r0
|
|
add stksiz,r0
|
|
add $1024.,r0
|
|
rts r5
|
|
1:
|
|
add getoff,r0
|
|
rts r5
|
|
3:
|
|
inc error
|
|
rts r5
|
|
|
|
printo:
|
|
mov $obuf+6,r1
|
|
clr r2
|
|
1:
|
|
inc r2
|
|
movb r0,-(r1)
|
|
bicb $!7,(r1)
|
|
bisb $'0,(r1)
|
|
clc
|
|
ror r0
|
|
asr r0
|
|
asr r0
|
|
bne 1b
|
|
mov r2,0f+2
|
|
mov r1,0f
|
|
mov $1,r0
|
|
sys write; 0:obuf; 6
|
|
rts pc
|
|
|
|
mesg:
|
|
movb (r5)+,r0
|
|
beq 1f
|
|
jsr pc,putc
|
|
br mesg
|
|
1:
|
|
inc r5
|
|
bic $1,r5
|
|
rts r5
|
|
|
|
pnl:
|
|
jsr r5,mesg; <\n\0>
|
|
rts pc
|
|
|
|
psp:
|
|
jsr r5,mesg; < \0>
|
|
rts pc
|
|
|
|
pstar:
|
|
jsr r5,mesg; <*\0>
|
|
rts pc
|
|
|
|
plp:
|
|
jsr r5,mesg; <(\0>
|
|
rts pc
|
|
|
|
prp:
|
|
jsr r5,mesg; <)\0>
|
|
rts pc
|
|
|
|
pb:
|
|
jsr r5,mesg; <b\0>
|
|
rts pc
|
|
|
|
pcom:
|
|
jsr r5,mesg; <,\0>
|
|
rts pc
|
|
|
|
put:
|
|
mov *(r5)+,r0
|
|
jsr r5,remap
|
|
tst error
|
|
bne 2f
|
|
cmp curfin,dbfin
|
|
bne 2f
|
|
mov r0,0f
|
|
mov dbfout,r0
|
|
bne 1f
|
|
2:
|
|
tst (r5)+
|
|
3:
|
|
inc error
|
|
rts r5
|
|
1:
|
|
tst error
|
|
bne 3b
|
|
sys seek; 0:0; 0
|
|
bes 2b
|
|
mov (r5)+,0f
|
|
mov dbfout,r0
|
|
tst bytemod
|
|
beq 1f
|
|
mov $1,0f+2
|
|
br 2f
|
|
1:
|
|
mov $2,0f+2
|
|
2:
|
|
sys write; 0:0; 2
|
|
bes 3b
|
|
rts r5
|
|
|
|
decodadr:
|
|
mov r0,r3
|
|
mov r3,-(sp)
|
|
bic $!10,(sp)
|
|
bic $!7,r0
|
|
cmp r0,$7
|
|
beq pcadr
|
|
7:
|
|
mov r3,r0
|
|
asr r0
|
|
asr r0
|
|
asr r0
|
|
bic $!6,r0
|
|
jmp *1f(r0)
|
|
|
|
1:
|
|
simp
|
|
incr
|
|
decr
|
|
indx
|
|
|
|
simp:
|
|
tst (sp)
|
|
beq 1f
|
|
jsr pc,plp
|
|
1:
|
|
jsr pc,preg
|
|
tst (sp)+
|
|
beq 9f
|
|
jsr pc,prp
|
|
br 9f
|
|
|
|
incr:
|
|
tst (sp)+
|
|
beq 1f
|
|
jsr pc,pstar
|
|
1:
|
|
jsr pc,plp
|
|
jsr pc,preg
|
|
jsr r5,mesg; <)+\0>; .even
|
|
br 9f
|
|
|
|
decr:
|
|
tst (sp)+
|
|
beq 1f
|
|
jsr pc,pstar
|
|
1:
|
|
jsr r5,mesg; <-(\0>; .even
|
|
jsr pc,preg
|
|
jsr pc,prp
|
|
br 9f
|
|
|
|
indx:
|
|
tst (sp)+
|
|
beq 1f
|
|
jsr pc,pstar
|
|
1:
|
|
jsr pc,get1
|
|
jsr pc,pname
|
|
jsr pc,plp
|
|
jsr pc,preg
|
|
jsr pc,prp
|
|
br 5f
|
|
|
|
pcadr:
|
|
mov r3,r0
|
|
bit $20,r3
|
|
beq 7b
|
|
tst (sp)+
|
|
beq 1f
|
|
jsr pc,pstar
|
|
1:
|
|
bit $40,r3
|
|
bne 6f
|
|
jsr r5,mesg; <$\0>
|
|
jsr pc,get1
|
|
jsr pc,pname
|
|
br 5f
|
|
6:
|
|
jsr pc,get1
|
|
add $2,r0
|
|
add r1,r0
|
|
mov $3,r1
|
|
jsr pc,pname
|
|
br 5f
|
|
9:
|
|
tst (r5)+
|
|
clr r0
|
|
rts r5
|
|
5:
|
|
mov $2,r0
|
|
rts r5
|
|
|
|
preg:
|
|
mov r3,r0
|
|
bic $!7,r0
|
|
asl r0
|
|
mov regtab(r0),obuf
|
|
mov $1,r0
|
|
sys write; obuf; 2
|
|
rts pc
|
|
|
|
regtab:
|
|
"r0
|
|
"r1
|
|
"r2
|
|
"r3
|
|
"r4
|
|
"r5
|
|
"sp
|
|
"pc
|
|
|
|
pname:
|
|
mov r5,-(sp)
|
|
mov r3,-(sp)
|
|
mov r1,-(sp)
|
|
jsr pc,lookupv
|
|
tst r2
|
|
beq 5f
|
|
cmp (sp),$1
|
|
bne 1f
|
|
tst r3
|
|
bne 5f
|
|
1:
|
|
mov r2,r1
|
|
mov $8,-(sp)
|
|
mov r0,r5
|
|
1:
|
|
movb (r1)+,r0
|
|
beq 1f
|
|
jsr pc,putc
|
|
dec (sp)
|
|
bne 1b
|
|
1:
|
|
tst (sp)+
|
|
cmp 12(r2),r5
|
|
beq 1f
|
|
blt 2f
|
|
jsr r5,mesg; <-\0>
|
|
br 3f
|
|
2:
|
|
jsr r5,mesg; <+\0>
|
|
3:
|
|
mov r3,r0
|
|
5:
|
|
jsr pc,printo
|
|
1:
|
|
tst (sp)+
|
|
mov (sp)+,r3
|
|
mov (sp)+,r5
|
|
rts pc
|
|
|
|
get1:
|
|
mov *(r5)+,r1
|
|
add $2,r1
|
|
mov r1,temp
|
|
jsr r5,get; temp
|
|
rts pc
|