        .globl  debug,search,bpserv,debu,output,demw
        .globl  actbp,rtabend,rshow,ccr
;
; Subroutine DEBUG:
; Bekommt eine Befehlszeile (Zeiger auf dem Stack) und bearbeitet diese
; entsprechend. Syntax-Fehler NACH einem korrekten Befehl werden nicht
; erkannt! (Etwa "$rudi" wird als "$r" ohne Fehlermeldung bearbeitet.)
;
debug:  mov     2(sp),r0
        cmpb    #'$,(r0)
        beq     regs
        cmpb    #'%,(r0)
        beq     runcon
        mov     r0,-(sp)
        jsr     pc,search
        mov     (sp)+,r1
        tst     r0
        beq     mssg
        cmpb    #'%,(r1)+
        bne     mssg
        cmpb    #'b,(r1)
        beq     bpset
        cmpb    #'d,(r1)
        bne     mssg
        mov     #bptab,r1
dellp:  cmp     #bpend,r1
        beq     delend          ; BP nicht gefunden
        cmp     (r1),r0
        beq     del
        add     #6,r1
        br      dellp
del:    clr     (r1)+           ; Eintrag in BP-Tabelle loeschen
        mov     (r1)+,(r0)+     ; Programm wieder restaurieren
        mov     (r1),(r0)
delend: jsr     pc,debu
bpset:  mov     #bptab,r1
setlp1: cmp     #bpend,r1
        beq     bpset2          ; BP noch nicht gesetzt
        cmp     (r1),r0
        beq     delend          ; BP ist schon gesetzt
        add     #6,r1
        br      setlp1
bpset2: mov     #bptab,r1
setlp2: tst     (r1)            ; freier Platz gefunden
        beq     bpset3          ;   ja
        add     #6,r1
        br      setlp2
bpset3: mov     r0,(r1)+        ; BP in die Tabelle eintragen
        mov     (r0),(r1)+
        mov     2(r0),(r1)
        mov     jump1,(r0)+
        mov     #bpserv,(r0)
        jsr     pc,debu
runcon: cmpb    #'r,1(r0)
        bne     cont
        jsr     pc,demw
cont:   cmpb    #'c,1(r0)
        bne     mssg
        mov     actbp,r0
        beq     delend          ; %c nicht moeglich, da noch kein Break
        mov     #bptab,r1
cntlp:  cmp     #bpend,r1
        beq     cntdir          ; kein BP mehr vorhanden
        cmp     (r1)+,r0
        beq     cntfnd
        add     #4,r1
        br      cntlp
cntdir: mov     jump2,exec
        mov     actbp,exec+2
        br      cntdir2
cntfnd: mov     (r1)+,exec
        mov     (r1),exec+2
        mov     actbp,exec+6
        add     #4,exec+6
cntdir2:mov     #rtabend,r0     ; Register zurueckholen
        mov     -(r0),sp
        mov     -(r0),r5
        mov     -(r0),r4
        mov     -(r0),r3
        mov     -(r0),r2
        mov     -(r0),r1
        mov     -(r0),r0
        mov     ccr,177776      ; CCR zurueckholen
exec:   .blkw   2
        jmp     @#exec
regs:   jsr     pc,rshow
        jsr     pc,debu
mssg:   mov     #str,-(sp)
        jsr     pc,output
        add     #2,sp
        jsr     pc,debu
str:    .ascii  'syntax error or wrong address           '
        .ascii  '                                        '
bptab:  .word   0,0,0,0,0,0,0,0,0,0
        .word   0,0,0,0,0,0,0,0,0,0
        .word   0,0,0,0,0,0,0,0,0,0
bpend:
jump1:  jsr     pc,@#bpserv
jump2:  jmp     @#jump2
        .end
