;**********************************************************************; ;* A T O M I C D E B U G G E R *; ;*--------------------------------------------------------------------*; ;* doel : subroutines voor Atomic Debugger *; ;*--------------------------------------------------------------------*; ;* filenaam : routines.inc *; ;* auteur : Roland Leurs *; ;* The Atomic Development Studio *; ;* ontwikkeld : feb 1996 *; ;* laatste update : *; ;*--------------------------------------------------------------------*; ;* assembleren : als include opnemen in debug.asm *; ;**********************************************************************; screen jsr setsem ;test en zet test semafoor jsr getvideo ;bepaal actieve monitor bcs clrsem ;niets doen bij mda screen1 lda #$4F ;geef pc-commando jsr pccom tya ;schakel pagina Y voor jsr zendbyte ;geef paginanummer aan pc lda #$50 ;geef pc-commando jsr pccom tya ;schakel pagina Y voor jsr zendbyte ;geef paginanummer aan pc jmp clrsem ;reset semafoor setsem lda #semset ;test semafoor jsr osbyte bcc setsem+2 ;spring indien geen toegang rts clrsem lda #semclr ;wis semafoor jmp osbyte pccom pha ;save commandonummer lda #0 ;geef commando aan pc jsr zendbyte pla ;haal commandonummer terug jmp zendbyte colour if versie=0 ;Atom versie pha ;save kleurcode lda #17 ;stel kleur in jsr wrch pla jmp wrch else ;BBC versie pha ;save kleurcode lda #17 ;laadt vdu code jsr wrch jsr getvideo ;bepaal actieve monitor bcc colour_vga ;spring bij vga pla ;haal kleurcode van stack jmp wrch ;stuur naar video driver en einde colour_vga pla ;haal kleurcode van stack pha and #$0F ;hoge nibble doet niet mee jsr wrch lda #17 ;stel achtergrondkleur in jsr wrch pla and #$70 ;alleen bit4...6 zijn geldig lsr a ;schuif naar lage nibble lsr a lsr a lsr a ora #$80 ;zet bit voor achtergrond jmp wrch ;stuur naar pc endif write stx zp+2 ;save adres sty zp+3 write1 ldy #0 ;reset pointer lda (zp+2),y ;lees karakter beq *+8 ;spring indien einde string jsr wrch ;druk karakter af iny ;verhoog pointer bne *-8 ;gedwongen sprong rts ;einde routine gotoxy lda #31 ;cursor naar x,y jsr wrch txa ;x positie naar pc jsr wrch tya ;y positie naar pc jmp wrch cursor_on jsr getvideo ;bepaal actieve monitor bcc cur_on_vga ;spring bij vga scherm jmp hcuron ;spring voor mda cursor cur_on_vga jsr setsem ;test semafoor lda #$09 ;geef pc commando 9 jsr pccom jmp clrsem ;clear semafoor en return cursor_off jsr getvideo ;bepaal actieve monitor bcc cur_off_vga ;spring bij vga scherm jmp hcuroff ;spring voor mda cursor cur_off_vga jsr setsem ;test semafoor lda #$0A ;geef pc commando 10 jsr pccom jmp clrsem ;clear semafoor en return cursor_def jsr setsem ;test semafoor lda #$51 ;geef pc commando #51 jsr pccom txa ;stuur bovenste lijn jsr zendbyte tya ;stuur onderste lijn jsr zendbyte jmp clrsem ;clear semafoor en return kb_scan jsr setsem ;test semafoor lda #$5D ;commando 5D naar pc sturen jsr pccom jsr leesbyte ;lees keyboard status pha ;bewaar dit op stack lsr a ;schuif testbit in carry bcc no_key ;spring indien geen toets gedrukt jsr leesbyte ;wel toets gedrukt: lees ascii code tax ;zet in x register jsr leesbyte ;en lees scan code tay ;zet in y register no_key jsr clrsem ;wis semafoor pla ;haal keyboard status terug kb_end rts ;return scrcopy jsr getvideo ;bepaal actieve monitor bcs kb_end ;spring in mda mode jsr setsem ;test en zet semafoor lda #$5C ;pc-commando 5C geven jsr pccom lda #$00 ;subfunctie 0: pagina's kopieren jsr zendbyte txa ;van pagina x jsr zendbyte tya ;naar pagina y jsr zendbyte jmp clrsem ;wis semafoor en return ;mdacopy ; ROUTINE BUITEN GEBRUIK GESTELD ! ; jsr setsem ;test en zet semafoor ; lda #$5B ;pc-commando 5B geven ; jsr pccom ; lda #2 ;subfunctie 2: data kopie ; jsr zendbyte ; ldy #5 ;aantal over te zenden bytes ; cpx #7 ;save screen? ; bne mdacopy1 ; ldx #0 ;laadt pointer van 7->6 ; beq mdacopy2 ;spring altijd ;mdacopy1 ldx #6 ;laadt pointer van 6->7 ;mdacopy2 lda mdacopy6,x ;laadt data ; jsr zendbyte ;stuur naar pc ; inx ;verhoog pointer ; dey ;verlaag teller ; bpl mdacopy2 ;spring als nog bytes volgen ; jmp clrsem ;wis semafoor en einde routine ; ;mdacopy6 .dw 0000h,1000h,0FFFh ;mdacopy7 .dw 1000h,0000h,0FFFh _kader ; parameters - work xlo (16) ; work+1 ylo (17) ; work+2 xrb (18) ; work+3 yrb (19) ; work+4 mode ; work+5 kleur lda work+5 jsr colour DEC work+2 LDA work+3 PHA ldx work ldy work+3 JSR gotoxy LDX work+4 LDA KARTAB,X JSR wrch LDY work LDA KARTAB+2,X KADERLUS1 JSR wrch INY CPY work+2 BNE KADERLUS1 LDA KARTAB+4,X JSR wrch KADERLUS2 INC work+3 LDA work+3 CMP work+1 BEQ BOTTOM txa ;save x pha ldx work ldy work+3 JSR gotoxy pla tax LDA KARTAB+6,X JSR wrch LDY work LDA #$20 KADERLUS3 JSR wrch INY CPY work+2 BNE KADERLUS3 LDA KARTAB+6,X JSR wrch JMP KADERLUS2 BOTTOM txa ;save x pha ldx work ldy work+3 JSR gotoxy pla tax LDA KARTAB+8,X JSR wrch LDY work LDA KARTAB+2,X KADERLUS4 JSR wrch INY CPY work+2 BNE KADERLUS4 LDA KARTAB+10,X JSR wrch INC work PLA STA work+3 INC work+3 ldx work tay Jmp gotoxy KARTAB db 201,218,205,196,187,191 db 186,179,200,192,188,217 kader macro xlo,ylo,xrb,yrb,mode,kleur lda #xlo sta work lda #ylo sta work+1 lda #xrb sta work+2 lda #yrb sta work+3 lda #mode sta work+4 lda #kleur sta work+5 jsr _kader endm showmenu stx zp+2 ;berg positie van tekststring op sty zp+3 ldy #2 ;wis help venster showmenu1 ldx #68 jsr gotoxy ldx #11 ;druk 11 spaties af lda #' ' showmenu2 jsr wrch ;print spatie dex ;verlaag teller bne showmenu2 iny ;verhoog regelteller cpy #14 ;laatste regel gehad? bne showmenu1 ;nee, dan volgende wissen lda menutxtkleur ;stel menukleur in jsr colour jmp write1 ;druk tekststring af PRADRSP lda $01,x ; laadt adres jsr prthex ; druk af inx ; verhoog x inx lda $FE,x ; laadt adres PRBYTSP jsr prthex ; druk af PRSPACE lda #' ' ; laadt spatie jmp wrch ; druk af en einde routine prthex pha ; save byte lsr a ; schuif 4 maal lsr a lsr a lsr a jsr prtnibble ; druk nibble af pla prtnibble and #$0F ; maskeer hoge nibble cmp #10 ; test op hex digit bcc prtnib1 ; spring indien geen hex digit adc #$06 ; optelling voor h8ex digit prtnib1 adc #$30 ; maak ascii teken jmp wrch ; druk af en einde routine INCADRCMP inc $00,x ; verhoog adres bne incadr1 inc $01,x incadr1 lda $00,x ; vergelijk adressen cmp $02,x bne incadr2 lda $01,x cmp $03,x incadr2 rts ; einde routine print pla ; haal adres van stack sta $E8 ; zet in print pointer pla sta $E9 print1 ldy #$00 ; reset indexregister inc $E8 ; verhoog pointer bne print2 ; spring bij pagina overschreiding inc $E9 print2 lda ($E8),y ; lees karakter bmi print3 ; spring indien einde string jsr wrch ; druk karakter af jmp print1 ; ga volgend karakter lezen print3 jmp ($E8) ; einde routine PRCHAR inc count ; verhoog count waarde jmp wrch statusline lda menukleur ; stel menukleur in jsr colour tya ; bewaar y register pha jsr print ; druk onderstaande regels af .db 30 .db " " .db " " .db 30,32,$EA pla ; herstel y register tay jsr write ; druk statusregel af lda tekstkleur ; herstel tekstkleur jmp colour ; en einde routine PRCHAR_NL cmp #13 ;test op newline karakter bne wrch ;nee, dan karakter printen crlf lda #10 ;cursor naar begin van de regel jsr wrch lda #13 ;cursor regel omlaag wrch jmp (iwrch) ; spring naar interne wrch routine PRSPACES jsr PRSPACE ;print spatie cpy #14 ;test op lengte bcs prspaces1 ;spring indien 14 spaties geprint iny ;verhoog teller bne PRSPACES ;spring altijd prspaces1 rts ;einde routine