;**********************************************************************; ;* 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 : trace.inc *; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : okt 1996 *; ;* laatste update : augustus 1998 *; ;*--------------------------------------------------------------------*; ;* assembleren : x6502 DEBUG *; ;*--------------------------------------------------------------------*; ;* oproep : DEBUG *; ;**********************************************************************; twrk equ work+$68 ;trace mode vlag eosr equ work+$69 ;end of subroutine vlag tracemenu .db 31,68,10,"R = run" .db 31,68,11,"Ent = trace" .db 31,68,12,"Spc = step" .db 31,68,13,"Esc = quit" .db 17,14,0 statustep .db "Program running in trace mode",0 progend .db 31,30,11,"Program ended normally",0 pijltje .db 31,1,2,17,15,"=>",17,14,0 pijltje_weg .db 31,1,2," ",0 trace sei ;stop interrupts ldx #tracemenu jsr showmenu LDA reg_pc ;zet beginadres voor trace STA zp+4 sta zp LDA reg_pc+1 STA zp+5 sta zp+1 jsr prtdisas ;toon disaslijst op scherm ldx #pijltje jsr write lda #1 ;zet trace mode op step sta twrk INC $D4 LDA VIA+$D STA VIA+$D LDA #TRACE25 STA $0205 ldy #runscrn jsr screen LDX reg_x LDY reg_y lda #$40 ;zet trace mode vlag LDA #$00 STA VIA+$B LDA #$C0 STA VIA+$E LDA #$0A ;WAS $06 STA VIA+$4 LDA #$00 STA VIA+$5 LDA reg_a JSR TRACERUN SEI LDA #$40 STA VIA+$E ldy #7 jsr screen ldx #7 ldy #6 jsr scrcopy kader 29,12,52,10,1,$2F ldx #progend jsr write jsr rdch lda #$0E jsr colour ldx #6 ldy #7 jsr scrcopy JMP TRACE38 TRACERUN CLI JMP (zp+4) TRACE24 BRK TRACE25 SEI LDA #$40 ;clear timer interrupt STA VIA+$D ; ASL A ; BPL TRACE24 TRACE25A STX reg_x ;$DC STY reg_y ;$DB PLA STA reg_a ;$DD PLA STA reg_sr ;$DA PLA STA reg_pc ;$D7 PLA STA reg_pc+1 ;$D8 TSX STX reg_sp ;$D9 PHA LDA reg_pc ;$D7 PHA LDA reg_sr ;$DA PHA lda semafoor ;test of semafoor gezet is bne TRACE28 ;spring indien semafoor vrij jmp TRACE37A ;niet vrij, naar einde isr TRACE28 lda twrk ;test trace mode bne TRACE29 ;spring in step mode ldx #0 ;reset index tracebp1 lda reg_pc ;vergelijk program counter met bp cmp brkpnts,x bne tracebp2 lda reg_pc+1 cmp brkpnts+1,x beq TRACE29A ;spring indien breakpoint gevonden tracebp2 inx ;verhoog index inx cpx #16 ;alle breakpiont gecontroleerd bne tracebp1 ;nee, dan volgende jmp TRACE37 ;geen bp, ga verder met programma TRACE29 cmp #2 ;test op subroutine tracing bne TRACE29A lda reg_sp ;laadt stackpointer cmp eosr ;test op einde van subroutine beq TRACE29A ;ja, show register info jmp TRACE37 ;ga verder met programma TRACE29A lda options ;test of rom debuggin' actief is and reg_pc+1 ;pc in rom? bpl TRACE29B ;trace toegestaan jmp TRACE37 ;spring als trace niet mag TRACE29B CLI lda #1 ;zet trace mode op step sta twrk ldy #7 jsr screen JSR traceshow TRACE34 JSR kb_scan ;kijk of toets gedrukt is lsr a bcc TRACE34 cpx #'R' ;is het een 'R' of 'r' beq trace_run cpx #'r' beq trace_run CPX #$0D ;test op Enter BEQ TRACE37 CPX #$1B ;escape? BEQ TRACE38 CPX #$20 ;test op spatie BEQ TRACE35 cpx #'0' bmi TRACE34 cpx #'8' bpl TRACE34 txa ;schermnummer naar y register tay jsr screen jmp TRACE34 TRACE35 lda #2 ;zet subroutine no-trace sta twrk lda reg_sp ;laadt stackpointer sta eosr ;zet in eosr vlag TRACE37 ldy #runscrn jsr screen LDX reg_x LDY reg_y LDA reg_pc STA zp+4 LDA reg_pc+1 STA zp+5 TRACE37A LDA #$08 STA VIA+$4 LDA #$00 STA VIA+$5 TRACE37B LDA reg_a RTI TRACE38 ldy #7 jsr screen LDA #$40 STA VIA+$E jsr traceshow ldx #pijltje_weg jsr write JMP mainmenu trace_run lda #0 ;zet trace mode op run sta twrk beq TRACE37 ;trace verder traceshow jsr regshow ;toon register inhoud lda reg_pc ;toon disaslijst sta zp lda reg_pc+1 sta zp+1 jsr prtdisas lda mem_home ;update memory dump sta zp lda mem_home+1 sta zp+1 jsr memdump ldx #pijltje jsr write ldx #statustep jsr statusline rts ;einde subroutine