;**********************************************************************; ;* 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 : disas.inc *; ;* auteur : J. Jobse *; ;* Aangepast voor Debugger door Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : apr 1996 *; ;* laatste update : augustus 1998 *; ;*--------------------------------------------------------------------*; ;* assembleren : als include opnemen in debug.asm *; ;**********************************************************************; N=23 ;REM TABEL-LENGTE DWRK EQU work+$20 dishist equ work+$80 ptr EQU zp right EQU DWRK+0 left EQU DWRK+1 byt1 EQU DWRK+2 byt2 EQU DWRK+3 byt3 EQU DWRK+4 len EQU DWRK+5 adrmode EQU DWRK+6 lines EQU DWRK+7 histptr EQU work+$3F len1 EQU right mne_index EQU left PRBYTE EQU prthex PRNIBL EQU prtnibble dismenu .db 31,68,10,"Esc = Quit" .db 31,68,11,"Ins = Addr" .db 31,68,12,"PgDn = Next" .db 31,68,13,"PgUp = Prev" .db 0 disedit_text .db 31,35,8,"Enter address" .db 31,35,9,'?',0 statusdis .db "Disassembler",0 disas ldx #dismenu jsr showmenu ldx #statusdis jsr statusline lda tekstkleur ;herstel tekstkleur jsr colour dis_test_key jsr kb_scan ;lees toetsenbord lsr a ;test of toets gedrukt is bcc dis_test_key ;spring indien geen toets cpx #27 ;escape gedrukt? beq disas_exit ;ja, dan naar einde van routine cpy #82 ;insert gedrukt? beq dis_addr ;ja, spring cpy #81 ;toets PGDN? beq disas_pgdn ;ja, spring cpy #73 ;toets PGUP bne dis_test_key ;nee, dan ongeldige toets disas_pgup dec histptr ;verlaag history pointer dec histptr ldy histptr lda dishist,y ;zet vorig beginadres sta zp sta disas_home lda dishist+1,y sta zp+1 sta disas_home+1 jsr prtdisas1 ;druk disaslijst af jmp dis_test_key ;wacht op volgende toets disas_pgdn jsr prtdisas ;druk disaslijst af jmp dis_test_key ;wacht op volgende toets disas_exit jmp mainmenu dis_addr ldx #7 ;bewaar scherm ldy #6 jsr scrcopy kader 34,10,48,7,1,$30 ;teken kader ldx #disedit_text jsr write jsr cursor_on ;cursor aan jsr input ;lees input jsr cursor_off ldx #6 ;herstel scherm ldy #7 jsr scrcopy lda tekstkleur ;herstel kleur jsr colour lda iwrk ;zet nieuw adres sta zp lda iwrk+1 sta zp+1 jsr prtdisas ;zet disaslijst op scherm jmp dis_test_key ;ga wachten op volgende toets prtdisas inc histptr ;verhoog history pointer inc histptr ldy histptr ;laadt history pointer LDA zp STA disas_home ;zet als beginadres sta dishist,y ;zet tevens in history lijst LDA zp+1 STA disas_home+1 sta dishist+1,y prtdisas1 ldx #2 ldy #2 jsr gotoxy LDA #11 STA lines START JSR DISASS BNE START DISASS JSR SEARCH JSR CLRLINE LDX #zp JSR PRADRSP LDX #zp LDY #0 NXTBYT jsr test_io_range bcc DISAS2 LDA #$B8 BNE *+4 DISAS2 LDA (zp),Y JSR PRBYTSP INC count INC count INC count JSR INCADRCMP BNE SKIPEND PLA PLA SKIPEND DEC len1 BPL NXTBYT LDY count \ cursor_horz ; JSR PRSPACES prspaces lda #' ' jsr PRCHAR lda count cmp #15 bne prspaces LDX mne_index BPL SKIPNEW LDA MNEMR-$80,X LDY MNEML-$80,X BNE SKIPOLD SKIPNEW LDA TAB_F194,X LDY TAB_F154,X SKIPOLD STA right STY left LDY #3 NXTCHAR LDX #5 LDA #0 NXTROL ROL right ROL left ROL A DEX BNE NXTROL ADC #$3F JSR PRCHAR DEY BNE NXTCHAR JSR PRSPACE LDX adrmode BPL NORMAL LDA byt1 AND #$70 LSR A LSR A LSR A LSR A JSR PRNIBL LDA #',' JSR PRCHAR LDA #hexteken JSR PRCHAR LDA byt2 JSR PRBYTE CPX #$85 BEQ READY LDA #',' JSR PRCHAR LDA byt3 STA byt2 LDX #2 NORMAL LDY #8 LDA admflags,X STA len1 NXTBIT CPY #6 BNE NXTASL TXA BNE SKIPREL LDA byt2 BPL SKIPDEX DEX SKIPDEX CLC ADC zp STA byt2 TXA ADC zp+1 STA byt3 LDX #2 BNE PRHEX SKIPREL LDX len BEQ NXTASL PRHEX LDA #hexteken JSR PRCHAR NXTHEX LDA byt1,X JSR PRBYTE DEX BNE NXTHEX NXTASL ASL len1 BCS SKIPCHAR READY LDA admchar,Y JSR PRCHAR_NL SKIPCHAR DEX DEY BPL NXTBIT DEC lines RTS SEARCH LDY #2 NXTFETCH JSR test_io_range BCC DISAS1 LDA #$B8 BNE *+4 DISAS1 LDA (zp),Y STA byt1,Y DEY BPL NXTFETCH TAX AND #$1F CMP #$12 BNE NOTIND DEC byt1 JSR OLDSEARCH INC byt1 LDY #$0D STY adrmode RTS NOTIND AND #$07 CMP #$07 BNE NOTSPECIAL TXA AND #$8F TAX NOTSPECIAL TXA LDY #22 \ N-1 NXTCMP CMP OPCODE,Y BEQ NEW DEY BPL NXTCMP OLDSEARCH CMP #$D4 BEQ ILLEGAL NXTSEARCH INY STY adrmode LDX #$40 NXTSBC SEC LDA byt1 SBC TAB_F1F3,Y SEC SBC TAB_F210,X BNE SKIP1 STA left LDY TAB_F250,X NXTROR ROR A ROR left DEY BNE NXTROR LDY adrmode AND TAB_F1D5,Y BNE SKIP2 LDA TAB_F1E4,Y AND left BNE SKIP2 SKIP1 DEX BNE NXTSBC CPY #$0E BNE NXTSEARCH ILLEGAL LDX #$11 LDY #$0F STY adrmode SKIP2 LDA TAB_F202,Y CMP #$0F BNE STORDATA LDA #1 STORDATA AND #$03 STA len1 STA len STX mne_index RTS NEW TYA ORA #$80 TAX LDA len_adm,Y PHA AND #$8F STA adrmode PLA LSR A LSR A LSR A LSR A BPL STORDATA admchar .db 13,"AY,)X,(",immteken admflags .db $FF,$FE,$FF,$F9,$CF,$FF,$7F,$7F,$F9 .db $CF,$B1,$87,$FF,$B7,$F9,$FF OPCODE .db $34,$3C,$89,$7C,$1A,$3A,$80,$04,$0C .db $14,$1C,$5A,$7A,$DA,$FA,$64,$74,$9C .db $9E,$07,$87,$0F,$8F len_adm .db $14,$29,$16,$2B,$01,$01,$12,$15,$2C .db $15,$2C,$00,$00,$00,$00,$15,$14,$2C .db $29,$95,$95,$A2,$A2 MNEML .db $1A,$1A,$1A,$5B,$53,$29,$1C,$AD,$AD .db $AC,$AC,$8A,$8B,$8A,$8B,$A5,$A5,$A5 .db $A5,$9B,$A3,$18,$18 MNEMR .db $AA,$AA,$AA,$A2,$C8,$88,$C4,$06,$06 .db $C6,$C6,$74,$74,$72,$72,$76,$76,$76 .db $76,$86,$86,$E6,$E8 CLRLINE LDA #9 JSR PRCHAR JSR PRCHAR LDA #' ' LDX #51 CLRLINE1 JSR PRCHAR DEX BNE CLRLINE1 LDA #0 STA count LDA #13 JSR PRCHAR LDA #9 JSR PRCHAR JSR PRCHAR JSR PRCHAR LDA tekstkleur JSR colour LDX #0 ;RESET INDEX lda zp ora zp+1 beq TESTBP3 TESTBP LDA zp ;LAADT ADRES CMP brkpnts,X ;TEST LAGE BYTE BNE TESTBP1 ;SPRING INDIEN NIET GELIJK LDA zp+1 ;IDEM VOOR HOGE BYTE CMP brkpnts+1,X BEQ TESTBP2 ;SPRING INDIEN GELIJK TESTBP1 INX ;VERHOOG INDEX INX CPX #16 ;ALLE BP'S GEHAD BNE TESTBP JMP TESTBP3 ;NAAR EINDE ROUTINE TESTBP2 LDA #13 ;LAADT BREAKPOINT KLEURTJE JSR colour TESTBP3 RTS ;EINDE ROUTINE clrhist ldy #0 ;reset index tya ;reset accu clrhis1 sta dishist,y ;clear history data iny ;verhoog index bne clrhis1 ;spring indien nog adressen volgen rts ;einde routine TAB_F154 .DB $C5,$1C,$8A,$1C,$23,$5D,$8B,$1B,$A1,$9D,$8A,$1D,$23,$9D,$8B,$1D .DB $A1,$00,$29,$19,$AE,$69,$A8,$19,$23,$24,$53,$1B,$23,$24,$53,$19 .DB $A1,$00,$1A,$5B,$5B,$A5,$69,$24,$24,$AE,$AE,$A8,$AD,$29,$00,$7C .DB $00,$15,$9C,$6D,$9C,$A5,$69,$29,$53,$84,$13,$34,$11,$A5,$69,$23 TAB_F194 .DB $A0,$D8,$62,$5A,$48,$26,$62,$94,$88,$54,$44,$C8,$54,$68,$44,$E8 .DB $94,$00,$B4,$08,$84,$74,$B4,$28,$6E,$74,$F4,$CC,$4A,$72,$F2,$A4 .DB $8A,$00,$AA,$A2,$A2,$74,$74,$74,$72,$44,$68,$B2,$32,$B2,$00,$22 .DB $00,$1A,$1A,$26,$26,$72,$72,$88,$C8,$C4,$CA,$26,$48,$44,$44,$A2 .DB $C8 TAB_F1D5 .DB $00,$02,$00,$08,$F2,$FF,$80,$01,$C0,$E2,$C0,$C0,$FF,$00,$00 TAB_F1E4 .DB $08,$00,$10,$80,$40,$C0,$00,$C0,$00,$40,$00,$00,$E4,$20,$80 TAB_F1F3 .DB $00,$FC,$00,$08,$08,$F8,$FC,$F4,$0C,$10,$04,$F4,$00,$20,$10 TAB_F202 .DB $00,$00,$0F,$01,$01,$01,$11,$11,$02,$02,$11,$11,$02,$12 TAB_F210 .DB $02,$00,$08,$10 .DB $18,$20,$28,$30,$38,$40,$48,$50,$58,$60,$68,$70,$78,$80,$88,$90 .DB $98,$A0,$A8,$B0,$B8,$C0,$C8,$D0,$D8,$E0,$E8,$F0,$F8,$0C,$2C,$4C .DB $4C,$8C,$AC,$CC,$EC,$8A,$9A,$AA,$BA,$CA,$DA,$EA,$FA,$0E,$2E,$4E .DB $6E,$8E,$AE,$CE,$EE,$0D,$2D,$4D,$6D,$8D,$AD,$CD TAB_F250 .DB $ED,$0D,$0D,$0C .DB $0D,$0E,$0D,$0C,$0D,$0D,$0D,$0C,$0D,$0D,$0D,$0C,$0D,$0F,$0D,$0C .DB $0D,$09,$0D,$0C,$0D,$08,$0D,$0C,$0D,$08,$0D,$0C,$0D,$0F,$06,$0B .DB $0B,$04,$0A,$08,$08,$0D,$0D,$0D,$0D,$0D,$0F,$0D,$0F,$07,$07,$07 .DB $07,$05,$09,$03,$03,$01,$01,$01,$01,$02,$01,$01,$01,$A4,$03,$B1