Bu sayfadaki yazılar
Sayfanın metni
Sayfa 12
$E544 -------- Ekranı siler. $FFD2 ------- Ekrana bir karakter yazar. $FFE4 ------- Klavyede basılan tuşu okur. Gördüğünüz gibi bazı hazır alt rutinler var. Bazı alt rutinler giriş parametreleri ister, bazıları ise yapılan işlemin sonucunu bir registerde veya adreste tutar. Hazır başlamışken adresleri inceleyelim.
$E544 : Aslında ekran silme alt rutini C64’ün ilk açılışta yerine getirdiği –INITIALIZE VIDEO CONTROLLER- işleminin bir bölümü. $E518 adresinden başlayan bu rutinde kursör yanıp sönme, zamanlama vs. gibi işlemlerinden başka yazı rengini belirleyen $0286 adresine #$0E değeri verilerek yazının açık mavi olması sağlanmaktadır. Eğer yazdığınız programlarda başlangıçta yazı rengini de değiştiriyorsanız mesela LDA #$01 - STA $0286 - JSR $E544 gibi komutlarınız varsa bu işi LDA #$01 - JSR $E536 yazarak da yapabilirsiniz. Böylece programınız 3 bayt kısalır. Belki önemli bir kısalma değildir ama PC’lerdeki gibi MegaBayt ile ifade edilen büyüklükte RAM’imiz olmadığı için RAM’i iyi kullanmak lazım ☺☺. Peki istediğiniz gibi hazır alt rutinler yoksa ne yapacaksınız ? Diyelim ki ekranın tamamını değil de ortadan 10 satır sileceksiniz. İki çözüm var. Ya ilgili ekran satırlarının adreslerini tek tek hesaplayıp ekrana BOŞLUK karakteri basacaksınız veya yine KERNAL ROM’da bulacağınız bir alt rutinle işinizi halledeceksiniz. Bu alt rutin, ekranı silen alt rutin tarafından kullanılan ve $E9FF adresinde bulunan CLEAR SCREEN-LINE isimli başka bir alt rutindir.
$FFD2 adresi ise aküde tutulan baytı o anki çıkış cihazına –Normalde ekrandır- gönderir. Mesela LDA #$41 – JSR $FFD2 komutları ile ekrana “A” harfini basarsınız.
Son olarak $FFE4 adresini görelim. Bu adres ile o anki giriş cihazından –Normalde klavyedir- bir bayt okur ve sonucu aküde tutar. Mesela JSR $FFE4 – CMP #$41 komutları ile klavyede “A” tuşuna basılıp basılmadığını kontrol edebilirsiniz. Gördüğünüz gibi $E544 parametresiz kullanılır. $FFD2 aküyle beslenir ☺☺ $FFE4 ise Aküyü besler. (Akü şarj cihazı yani ☺☺) Ana programınızda, alt rutinlerinizi ana programınızın bütünlüğünü bozmayacak şekilde istediğiniz yere yerleştirebilirsiniz ve ana programınızın çalışmasını etkilemeyecek herhangi bir yerden alt rutinlerinizi istediğiniz kadar çağırabilirsiniz. Sadece mutlak adreslemeli komutlarda dikkatli olun yeter.
Commodore 64'ün ROM'larındaki rutinleri, daha doğrusu romların içinde ne var ne yok öğrenmek istiyorsanız ANATOMY OF THE COMMODORE 64 isimli kitabı bulmalısınız. Kitabın orijinalini bulamazsanız bile internette TXT ve HTML uzantılı dosyalar halinde bulmanız mümkün. Yeter ki arayın. (Deniz’in notu: Millet, gördüğünüz gibi bu adamdan hayır yok. Neyse ben kitabın yazarlarını ve basımevini yazıyorum: Angerhausen/Becker/English/Gerits - Abacus Software – Data Becker GmbH. Kitap Amazon’da ikinci el olarak bulunuyor. Lemon64’te de kapağının resmi var. Ayrıca Centsible Software’de, Commodore Computer Center’da, Dr. Feelgood’s Crazy C= Sales’de (evet, kötü isim) ve Vintage Computer’da hâlâ bazı kitaplar (ikinci el veya yeni olarak) mevcut.)
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 13
HEX – DEC ÇEVİRİCİ
HEX – DEC ÇEVİRİCİ Assembler kursunun ilk bölümünde gördüğümüz HEX-DEC çevirme işlemini bırakalım C64 yapsın. HEX – DEC CONVERTER isimli programımızı çalıştırınca HEX sayı sisteminde kullanılan tuşlar bulunan bir görüntü karşınıza gelecektir. Tuşlara bastıkça ekrandaki ilgili karakter flaş yapacak ve sağ tarafta yazılacaktır. Dört kez basınca yazmış olduğunuz HEX sayının onaltılı karşılığı yazılacaktır. SPACE tuşuna basılırsa yeni sayıyı girebilirsiniz. Bir baytlık sayı girmek için – mesela $FA olsun – sayı 00FA olarak girilmelidir.
;------------------; ; hex-dec cevirici ; ;(c) 11/2002 hades; ;------------------; *= $0900 ;Programõn başlangõç adresi lda #$0f ;Açõk Gri renk kodu sta $d020 ;Çerçeve rengi olsun sta $d021 ;Ekran rengi olsun lda #$0b ;Koyu Gri renk kodu yazõ rengi jsr $e536 ;olsun ve ekran temizlensin. lda #<text ;Yazõnõn alçak baytõnõ yükle ldy #>text ;Yazõnõn yüksek baytõnõ yükle jsr $ab1e ;Yazõyõ yazdõr. yeni clc ;”Elde” bitini sõfõrla ldx #$07 ;Kursör pozisyonu satõr değeri ldy #$09 ; “ “ sütun “ jsr $fff0 ;Kursörü yerleştir lda #$24 ; “$” işaretini jsr $ffd2 ;Ekrana bas lda #$00 ;Kursör sta $cc ;gözüksün ve flaş yapsõn jsr bayt ;Klavyeden bir bayt gir sta $fc ;Yüksek bayt olarak sakla jsr bayt ;Klavyeden bir bayt gir sta $fb ;Alçak bayt olarak sakla lda #$3d ; “=” işaretini jsr $ffd2 ;Ekrana bas