;**********************************************************************; ;* 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 : regedit.inc *; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : okt 1996 *; ;* laatste update : *; ;*--------------------------------------------------------------------*; ;* assembleren : als include opnemen in debug.asm *; ;**********************************************************************; rwrk equ work+$28 reg_a equ rwrk+0 ;accu reg_x equ rwrk+1 ;x-register reg_y equ rwrk+2 ;y-register reg_pc equ rwrk+3 ;program counter reg_sp equ rwrk+5 ;stack pointer reg_sr equ rwrk+6 ;statusregister (vlaggen) reg_wrk equ zp ;werkruimte tijdens edit reglist .db 31,58,02,"A = ",hexteken .db 31,58,03,"X = ",hexteken .db 31,58,04,"Y = ",hexteken .db 31,57,05,"PC = ",hexteken .db 31,57,06,"SP = ",hexteken,"01" .db 31,58,07,"N = " .db 31,58,08,"V = " .db 31,58,09,"B = " .db 31,58,10,"D = " .db 31,58,11,"I = " .db 31,58,12,"Z = " .db 31,58,13,"C = " .db 0 regmenu .db 31,68,12,"Esc = Quit" .db 31,68,13,"Ins = Edit" .db 0 statusreg .db "Register Editor",0 regedit_text .db 31,36,8,"Enter value" .db 31,36,9,'?',0 ; Regpull haalt registers van stack en zet ze in de registeropslag. De stack- ; pointer dient al gezet te zijn in de variabele reg_sp. regpull ldx reg_sp ;stack pointer naar x register lda $100,x ;lees y-register van stack sta reg_y lda $101,x ;lees x-register van stack sta reg_x lda $102,x ;lees accu van stack sta reg_a lda $103,x ;lees vlaggen van stack sta reg_sr lda $104,x ;lees program counter high byte sta reg_pc+1 lda $105,x ;lees program counter low byte sta reg_pc rts ;registers staan in geheugen, einde ; Regpush zet registers vanuit de registeropslag op stack. De stackpointer ; dient al gezet te zijn in de variabele reg_sp. De registers PC en SR kunnen ; niet gewijzigd worden en hoeven dus niet terug naar stack. regpush ldx reg_sp ;stack pointer naar x register lda reg_a ;zet accu in stack sta $102,x lda reg_x ;zet x-reg in stack sta $101,x lda reg_y ;zet y-reg in stack rts ;einde routine ; Regshow toont de registerwaarden op het scherm. regshow ldx #reglist jsr write ldx #statusreg jsr statusline ldx #63 ;cursor naar "accuwaarde" ldy #2 jsr gotoxy lda reg_a ;print accu inhoud jsr prthex lda #' ' ;print spatie jsr wrch lda reg_a ;indien ascii dan teken afdrukken cmp #' ' ;test op spatie bcs regshow1 ;indien groter dan teken behouden lda #' ' ;waarde is kleiner, print spatie regshow1 jsr wrch iny ;cursor naar volgende regel jsr gotoxy lda reg_x ;druk waarde van x register af jsr prthex iny ;cursor naar volgende regel jsr gotoxy lda reg_y ;druk waarde van y register af jsr prthex iny ;cursor naar volgende regel jsr gotoxy lda reg_pc+1 ;druk waarde van PCh af jsr prthex lda reg_pc ;druk waarde van PCl af jsr prthex iny ;cursor naar volgende regel ldx #65 jsr gotoxy lda reg_sp ;druk waarde van stackpointer af jsr prthex ldx #63 ;cursor naar vlaggenveld iny jsr gotoxy lda reg_sr ;laadt statusregister sta rwrk+7 ;zet in werkruimte ldy #8 ;laadt teller regflag1 cpy #6 ;sr bit 5 overslaan bne regflag2 asl rwrk+7 ;niet afdrukken, wel schuiven jmp regflag3 regflag2 lda #'0' ;laadt digit asl rwrk+7 ;schuif vlagwaarde in carry adc #0 ;tel carry op bij digit jsr wrch ;druk karakter af lda #10 ;cursor omlaag en naar links jsr wrch lda #8 jsr wrch regflag3 dey ;verlaag teller bne regflag1 ;spring indien nog bits volgen rts ;einde reg_cur_up ldy reg_wrk ;lees oude waarde cpy #2 ;indien cursor op bovenste regel beq reg_cur_up1 ; spring naar einde routine dey ;anders cursor een positie omhoog reg_cur_up1 jmp regedit1 ;zet cursor op nieuwe positie reg_cur_down ldy reg_wrk ;lees oude waarde cpy #5 ;indien cursor op onderste regel beq reg_cur_down1 ; sprinn naar einde routine iny ;anders cursor een positie omlaag reg_cur_down1 jmp regedit1 regedit jsr cursor_on ;cursor aan ldx #regmenu jsr showmenu lda tekstkleur ;zet kleur jsr colour ldy #2 ;cursor naar accu positie regedit1 ldx #63 sty reg_wrk jsr gotoxy regedit2 jsr kb_scan ;scan keyboard lsr a ;test op toetsdruk bcc regedit2 cpx #27 ;escape? beq regedit3 ;ja, dan naar einde routine cpy #82 ;insert gedrukt? beq regedit4 ;ja, spring cpy #72 ;cursor up? beq reg_cur_up cpy #80 ;cursor down? beq reg_cur_down bne regedit2 ;geen geldige toets gedrukt regedit3 jsr cursor_off ;cursor uit jmp mainmenu ;naar hoofdmenu regedit4 ldx #7 ;bewaar scherm ldy #6 jsr scrcopy kader 35,10,47,7,1,$30 ;teken kader ldx #regedit_text jsr write jsr input ;lees input lda zp pha lda zp+1 pha lda tekstkleur ;herstel kleur jsr colour lda disas_home ;refresh disas lijst op scherm sta zp lda disas_home+1 sta zp+1 jsr prtdisas pla sta zp+1 pla sta zp ldx #6 ;herstel scherm ldy #7 jsr scrcopy ldx reg_wrk ;laadt register pointer lda iwrk ;lees ingevoerde waarde sta reg_a-2,x ;zet nieuwe registerwaarde cpx #5 ;pc (3e register) is 16 bits bne regedit5 lda iwrk+1 sta reg_a-1,x regedit5 jsr regshow ;display registers ldx #63 ldy reg_wrk ;laadt pointer voor y register jmp regedit1