KLAVYEDEN HEX SİSTEM TUŞLARININ KONTROLÜ
Retro bilgisayar(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.
KLAVYEDEN HEX SİSTEM TUŞLARININ KONTROLÜ (2. YÖNTEM)
(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 ☺☺)