/ db2 -- debugger

lookupn:
	cmp	symbol,$'.
	bne	1f
	mov	dot,taddr
	rts	pc
1:
	tst	error
	beq	1f
	rts	pc
1:
	mov	r2,-(sp)
	mov	$regnames,r1
	mov	$ereg,r2
	jsr	pc,1f
	tst	error
	beq	2f
	clr	error
	mov	namstrt,r1
	mov	namsiz,r2
	jsr	pc,1f
2:
	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
	add	getoff,r0
	jsr	r5,remap
		br 3f
	mov	r0,0f
	mov	dbfin,r0
	sys	seek; 0:0; 0
	bec	1f
2:
	inc	error
	rts	r5
1:
	mov	dbfin,r0
	sys	read; temp; 2
	bes	2b
	tst	r0
	beq	2b
	mov	temp,r0
	rts	r5
3:
	clr	-(sp)
	movb	(r0),(sp)
	movb	1(r0),1(sp)
	mov	(sp)+,r0
	rts	r5

remap:
	cmp	r0,u.break
	blo	1f
	cmp	r0,u.uusp
	blo	2f
	cmp	r0,$160000
	bhis	3f
	sub	u.uusp,r0
	add	u.break,r0
	br	1f
3:
	sub	$160000,r0
	cmp	r0,$512.+2
	bhis	2f
	add	$regbuf,r0
	rts	r5
1:
	tst	(r5)+
	rts	r5
2:
	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
	add	getoff,r0
	jsr	r5,remap
		br 3f
	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	r0,r5
	jsr	pc,string
	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
