versie          ask     Atom (0) of BBC (1) versie
                list    on

;**********************************************************************;
;*                 A T O M I C   D E B U G G E R                      *;
;*--------------------------------------------------------------------*;
;*    doel           : machinetaal debugger voor Atom-in-PC met       *;
;*                     ondersteuning van 6502, 65C02 en 65802         *;
;*--------------------------------------------------------------------*;
;*    filenaam       : debug.asm                                      *;
;*    auteur         : Roland Leurs                                   *;
;*                     The Atomic Development Studio                  *;
;*    ontwikkeld     : feb 1996                                       *;
;*    laatste update :                                                *;
;*--------------------------------------------------------------------*;
;*    assembleren    : x6502 DEBUG                                    *;
;*--------------------------------------------------------------------*;
;*    oproep         : DEBUG                                          *;
;**********************************************************************;

                org     $8800-16

header          .dw     header+16, begin
                .dw     0,0,0,0,0,0

                if versie=0
                        include atom.inc    ; constanten en variabelen Atom
                        include osvatom.inc ; osv routine voor Atom mode
                else
                        include bbc.inc     ; constanten en variabelen bbc
                        include osvbbc.inc  ; osv routine voor BBC mode2
                endif
                include routines.inc
                include memedit.inc
                include input.inc
                include identcpu.inc
                include disas.inc
                include regedit.inc
                include trace.inc
;               include command.inc
                include breakpnt.inc
                include options.inc
                
mem_home        equ     work+14         ;opslag beginadres van memedit window
disas_home      equ     work+12         ;opslag beginadres van disas window
trace_home      equ     work+10         ;opslag beginadres van trace routine
options         equ     work+$30        ;debugger opties
kaderkleur      equ     work+$31
menukleur       equ     work+$32
tekstkleur      equ     work+$33
menutxtkleur    equ     work+$34
oldadr7         equ     work+$37        ;zeropage adres $07
oldstack        equ     work+$38        ;oude stackpointer

defaults        .db     $80             ;default opties:
                                        ;  bit7 = 0 -> rom debuggin' aan
                .db     9               ;default kaderkleur
                .db     $70             ;default menukleur
                .db     14              ;default tekstkleur
                .db     15              ;default menutekstkleur

kaderdef        .db      1,1,201,54,205,1,203,11,205,1,203,11,205,1,187
                .db     12,1,186,54, 32,1,186,11, 32,1,186,11, 32,1,186
                .db      1,1,204,54,205,1,202,11,205,1,202,11,205,1,185
                .db      8,1,186,54, 32,1, 32,11, 32,1, 32,11, 32,1,186
                .db      1,1,200,54,205,1,205,11,205,1,205,11,205,1,188
                .db     0

statusmain      .db     "Main menu",0
copyright       .db     "Atomic Debugger  6502                  "
                .db     "(c) 1996-1998 Atomic Development Studio",0
proc_65c02      .db     31,20,24,"C02",0
proc_65802      .db     31,20,24,"802",0

main_txt        .db     31,68, 2,"F1:Disas"
                .db     31,68, 3,"F2:Mem edit"
                .db     31,68, 4,"F3:Reg edit"
                .db     31,68, 5,"F4:Breakpnt"
                .db     31,68, 6,"F5:Step"
                .db     31,68, 8,"F7:Stack"
                .db     31,68, 9,"F8:Vectors"
                .db     31,68,10,"F9:Options"
                .db     31,68,13,"Esc: Quit"
                .db     0

begin           tsx                     ;save stack pointer
                stx     oldstack
                lda     $07             ;bewaar adres $07
                sta     oldadr7         ; d.i. HIMEM in BBC mode
                ldx     #4              ;zet standaard instellingen
set_defaults    lda     defaults,x      ;laadt instelling
                sta     options,x       ;zet in optie werkruimte
                dex                     ;verlaag pointer
                bpl     set_defaults    ;spring indien er nog opties volgen
                ldy     #0              ;reset beginadressen
                sty     mem_home
                sty     mem_home+1
                sty     disas_home
                sty     disas_home+1
                jsr     bpclearall      ;clear alle breakpoints
;               jsr     command         ;verwerk command line parameters
                if versie = 1           ; alleen voor bbc versie
                        lda #22         ; schakel naar mode 3
                        jsr wrch
                        lda #3
                        jsr wrch
                        lda #$1F        ; zet pc in 80x25 tekst mode
                        jsr pccom
                        lda #3          ; stuur mode naar pc
                        jsr zendbyte
                        lda #0          ; stuur commando naar pc
                        ldx #6          ; laadt teller
initscrn1               jsr zendbyte    ; stuur naar pc
                        dex             ; verlaag teller
                        bpl initscrn1
                        ldx #7          ; laadt teller opnieuw
initscrn2               jsr leesbyte    ; dummy read
                        dex             ; verlaag teller
                        bpl initscrn2
                endif
                ldy     #runscrn        ;wis runtime scherm
                jsr     screen
                lda     #12
                jsr     wrch
                ldy     #7              ;schakel scherm 7 voor
                jsr     screen
                lda     #$4F            ;achtergrondkleur
                jsr     colour
                lda     #16             ;wis scherm
                jsr     zendbyte
                jsr     cursor_off      ;zet cursor uit
                lda     kaderkleur      ;zet kaderkleur
                jsr     colour
kader           jsr     crlf            ;cursor naar volgende regel
                ldy     #0              ;reset pointer
kader0          lda     kaderdef,y      ;lees aantal keren voor regelafdruk
                beq     kader3          ;spring indien geen regels meer volgen
                sta     work            ;berg op regelteller
                iny                     ;verhoog pointer
                sty     work+1          ;bewaar pointer
kader_a         lda     #7              ;preset regelsectie teller
                sta     work+2
                ldy     work+1          ;zet pointer naar begin van regel
kader1          ldx     kaderdef,y      ;lees aantal af te drukken karakters
                iny                     ;verhoog pointer
                lda     kaderdef,y      ;lees karakter
                iny                     ;verhoog pointer
kader2          jsr     zendbyte        ;druk teken af
                dex                     ;verlaag teller
                bne     kader2          ;spring als nogmaals afdrukken
                dec     work+2          ;verlaag regelsectie teller
                bne     kader1          ;spring indien regel nog niet af is
                dec     work            ;verlaag regelteller
                bne     kader_a         ;ga volgende regel afdrukken
                beq     kader0          ;anders volgende regel inlezen
kader3          lda     #$4F            ;laadt kleur voor copyright
                jsr     colour
                ldx     #1              ;cursor naar positie 1,24
                ldy     #24
                jsr     gotoxy
                ldx     #<copyright     ;druk copyright melding af
                ldy     #>copyright
                jsr     write
                jsr     whichcpu        ;bepaal processortype
                cmp     #$82            ;is 65802?
                bne     not65802
                ldx     #<proc_65802    ;druk type af
                ldy     #>proc_65802
                jsr     write
                jmp     main
not65802        cmp     #$C2            ;is 65c02?
                bne     main
                ldx     #<proc_65c02    ;druk type af
                ldy     #>proc_65c02
                jsr     write

main            lda     tekstkleur      ;stel default kleur weer in
                jsr     colour
                lda     mem_home        ;zet beginadres van dump
                sta     zp
                lda     mem_home+1
                sta     zp+1
                jsr     memdump         ;toon dump
                lda     disas_home      ;zet beginadres van disas
                sta     zp
                sta     trace_home
                lda     disas_home+1
                sta     zp+1
                sta     trace_home+1
                jsr     prtdisas        ;toon disassembler
                jsr     regshow         ;toon registers

mainmenu        ldx     #<main_txt      ;druk main menu functietoetsen af
                ldy     #>main_txt
                jsr     showmenu
                ldx     #<statusmain
                ldy     #>statusmain
                jsr     statusline
mainmenu1       jsr     kb_scan         ;doe keyboardscan
                lsr     a               ;test of toets gedrukt
                bcc     mainmenu1       ;nee, dan verder wachten
                cpx     #27             ;escape?
                beq     exit_debug      ;ja, dan einde
                cpy     #59             ;f1: disas lijst
                bne     mainmenu2
                jmp     disas           ;voer disas uit
mainmenu2       cpy     #60             ;f2: memory editor
                bne     mainmenu3
                lda     mem_home        ;zet beginadres memory dump
                sta     zp
                lda     mem_home+1
                sta     zp+1
                jsr     memedit         ;ja, roep memory editor aan
                lda     disas_home      ;update disaslijst
                sta     zp
                lda     disas_home+1
                sta     zp+1
                jsr     prtdisas
                jmp     mainmenu        ;spring naar main menu
mainmenu3       cpy     #63             ;f5: step
                bne     mainmenu4
                jsr     trace           ;ga steppen
                jmp     mainmenu
mainmenu4       cpy     #65             ;f7: show stack
                bne     mainmenu5
                lda     tekstkleur      ;zet tekstkleur
                jsr     colour
                lda     #<$180          ;zet beginadres stack
                sta     zp
                lda     #>$180
                sta     zp+1
                jsr     memdump
                jmp     mainmenu
mainmenu5       cpy     #61             ;f3: register editor
                bne     mainmenu6
                jsr     regedit         ;voer register editor uit
                jmp     mainmenu
mainmenu6       cpy     #66             ;f8: show osv
                bne     mainmenu7
                jsr     osv
                jmp     mainmenu
mainmenu7       cpy     #62             ;f4: breakpoint menu
                bne     mainmenu8
                jsr     bpmain
                jmp     mainmenu
mainmenu8       cpy     #67             ;f9: options
                bne     mainmenu1
                jsr     opt
                jmp     mainmenu

exit_debug      jsr     cursor_on       ;zet cursor weer aan
                ldy     #0              ;herstel scherm
                jsr     screen
                lda     $1FFC           ;stel default kleur weer in
                jsr     colour
                lda     oldadr7         ;herstel adres $07
                sta     $07
                ldx     oldstack        ;reset stack pointer
                txs
                rts                     ;einde debugger

