Bu sayfadaki yazılar
Sayfanın metni
Sayfa 8
lsr ; sağa kaydır lsr ; sağa kaydır lsr ; sağa kaydır lsr ; sağa kaydır jsr convert ; çevirme rutinine uğra pla ; yığındaki değeri geri al and #$0f ; üst 4 biti sıfırla alt 4 biti kullan convert tax ; aküdeki değeri x registerine kopyala lda tablo,x ; tablodan X registerinin gösterdiği byte’ı al jsr $ffd2 ; ekrana yazdır rts ; geri dön.
tablo .text “0123456789ABCDEF” adres .byte 179
Bu arada 1. yöntemdeki rutin 29 byte, 2. yöntemdeki rutin 39 byte uzunluğundadır. Anlaşılabilirlik yönünden 2. yöntem daha iyidir. Bazı durumlarda tablo kullanmak kısa ve karışık bir program yazmaktan daha avantajlı olabilir.
(SADECE “0-9” VE “A-F” TUŞLARI)
*=$0801
.word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0
key_read jsr $ffe4 ; klavyeyi kontrol et cmp #$30 ; “0” tuşundan bcc key_read ; küçükse tekrar dene cmp #$3a ; “:” tuşundan bcc print ; küçükse yazdır. cmp #$41 ; “A” tuşundan bcc key_read ; küçükse tekrar dene cmp #$47 ; “G” tuşuna bcs key_read ; eşitse veya büyükse tekrar dene print jsr $ffd2 ; basılan tuşu ekrana yazdır. rts
Yukarıdaki kısa rutin ile klavyeden sadece hex sistemde kullanılan tuşlara basılıp basılmadığı kontrol edilmektedir. Önce JSR $FFE4 komutu ile klavyeyi kontrol ediyoruz. Sonra CMP #$30 BCC KEY_READ komutlarıyla ASCII kodu 0 ile $30 arasında olup olmadığına bakıyoruz. Eğer bu tuşlardan birine basıldıysa yani “boşluk ! “ # $ % & ‘ ( ) * + , - . /” tuşlarından birine bastıysak hiçbir işlem yapmadan klavyeyi tekrar kontrol ediyoruz. Daha sonra CMP #$3A BCC PRINT komutlarıyla basılan tuşların “0 1 2 3 4 5 6 7 8 9” tuşlarından biri olduğunu anlıyoruz ve ekrana yazdırarak programdan çıkıyoruz. Burada $3A sayısı “:” tuşunun kodu olup “9” tuşunun kodundan sonra gelmektedir. Matematiksel bir anlatımla $2F < TUŞ < $3A şartını kontrol ediyoruz. Yani “/” < TUŞ < “:”. Devam ediyoruz ve eğer yukarıdaki şart sağlanmadıysa bu sefer CMP #$41 BCC KEY_READ komutlarıyla “: ; < = > ? @” tuşlarından birine basıldığını anlıyoruz ve işimize yaramadığı için tekrar klavyeyi kontrol ediyoruz. Eğer bu tuşlara da basılmadıysa son kez CMP #$47 BCS KEY_READ komutları ile $40 < TUŞ ≥ $47 (“@” < TUŞ ≥ “G”) arasındaki tuşlar kontrol ediliyor. Eğer bu şart gerçekleşmişse basılan tuşu ekrana yazdırıp programdan çıkıyoruz. Değilse klavye bir daha kontrol ediliyor.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 9
(SADECE “0-9” VE “A-F” TUŞLARI)
*=$0801
.word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0
key_read jsr $ffe4 ; klavyeyi kontrol et ldx #$00 ; tablo sayacını sıfırla control cmp tablo,x ; aküdeki değeri tablodaki değerle karşılaştır. bne next ; aynı değilse sonraki iş için git jsr $ffd2 ; aynı ise basılan tuşu ekrana yazdır. rts ; programdan çık
next inx ; tablo sayacını 1 arttır cpx #$10 ; tablonun uzunluğu ile karşılaştır. bne control ; eşit değilse karşılaştırmayı tekrarla jmp key_read ; Tablodaki olmayan bir tuşa basıldığı için tekrarla.
tablo .text “0123456789ABCDEF”
Tuşların kontrolünü isterseniz her tuş için ayrı ayrı CMP #$TUSKODU yazarak da yapabilirsiniz.
key_read jsr $ffe4 cmp #$30 beq print cmp #$31 beq print .............. .............. jmp key_read print jsr $ffd2 rts
Yukarıdaki rutin, daha anlaşılır olması avantajına rağmen daha uzundur. Bir tuş için 4 byte kullanılmaktadır ve sadece tuşlar için 64 byte harcanmaktadır. Geri kalan komutlar ise 10 byte tutmakta ve 74 byte ile işimiz görülmektedir. Bu rutinin bir avantajı daha vardır. Mesela programdan çıkış için “space” tuşunu kullanmak istiyorsunuz diyelim. Bunun için yapmanız gereken CMP #$20 BEQ ÇIKIŞ komutlarını diğer tuş kontrollerinin olduğu yere eklemek ve program içindeki bir RTS komutunu ÇIKIŞ etiketi ile göstermek. Daha genel bir ifadeyle yukarıdaki rutin istediğiniz tuşların kontrolü için kullanılabilir.
(NOT: EVLİLİK BİLGİSAYAR BAĞIMLILARI İÇİN TAVSİYE EDİLMEZ ☺☺)