C64 Türkiye sayı 4, sayfa 15

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 15

next0 inx cpx commax bne loop1 lda $fb ldx $fc sta $7a stx $7b jmp $a7e4 ;--------------------------------------------;

Bu bölümde ise komut tablosundaki bir sonraki yeni komutun adının adresi hesaplanarak bütün kontrol işlemine geri dönülüyor. Bunun için bir önceki komutun adının uzunluğu komut tablosunun başlangıç adresinin tutulduğu $fd adresindeki değerle toplanıyor ve geri yazılıyor. Sonra ise komut sayıcısı olan X registeri 1 arttırılıyor ve yeni komutların toplam sayısı olup olmadığı kontrol ediliyor. Eğer eşit değilse "LOOP1" etiketli yere geri dönüp karşılaştırma işlemlerini tekrar yapıyoruz.

Komut sayıcısı maximum komut sayısına eşit olduğu halde yeni komut bulunamadıysa artık kontrolü eski komut yorumlayıcısına bırakmak üzere daha önceden kopyalamış olduğumuz ve $fb ve $fc adreslerindeki değerleri $7a ve $7b adreslerine geri yazıyoruz. En son olarak JMP $A7E4 ile komut yorumlayıcısına benim işim bitti sıra sende diyoruz. Eğer standart komut değilse "SYNTAX ERROR" mesajı ekrana çıkar ve programın çalışması durur.

;--------------------------------------------; ; YENİ KOMUTLAR BURADAN BAŞLIYOR ; ;--------------------------------------------;

CLS komutunu normalde ekran silme için düşünmüştük. Fakat birkaç komut eklemeyle CLS komutunu hem ekran silme hem de ekrandan istediğimiz satırı silmek için kullanacağız. Sadece CLS yazarsak ekran tamamen silinir. Eğer CLS ekran satır numarası şeklinde verirsek sadece o satır silinir.

;--------------------------------------------; cls jsr $73 ; Komuttan sonra sayı var mı ?

beq all ; Yoksa ekran tamamen silinsin

jsr $b79e ; Evet var ve sayıyı al

cpx #$01 ; Sayı "1" den

bcc ilerr ; küçükse hata mesajı yazdır.

cpx #$1b ; "26" dan büyük veya eşitse

bcs ilerr ; hata mesajı yazdır.

dex ; x registerini 1 azalt.

jsr $e9ff ; ROM'daki satır silme rutinini çağır.

jmp $a7ae ; Bir başka komut için devam et all jsr $e544 ; ROM'daki ekran silme rutinini çağır.

jmp $a7ae ; Bir başka komut için devam et

ilerr jmp $b248 ; "ILLEGAL QUANTITY ERROR" mesajı yazdır. ;--------------------------------------------; border jsr $b79b ; Komuttan sonraki ifadeyi değerlendir.

stx $d020 ; Sonucu VIC'in kenar rengi adresine yaz.

jmp $a7ae ; Bir başka komut için devam et. ;--------------------------------------------; ink jsr $b79b ; Komuttan sonraki ifadeyi değerlendir.

stx $0286 ; Sonucu karakter rengi adresine yaz.

jmp $a7ae ; Bir başka komut için devam et. ;--------------------------------------------; paper jsr $b79b ; Komuttan sonraki ifadeyi değerlendir.

stx $d021 ; Sonucu VIC'in sayfa rengi adresine yaz.

jmp $a7ae ; Başka bir komut için devam et. comexe .word cls-1 .word border-1 .word ink-1 .word paper-1 ;--------------------------------------------; cls .text "cls" ; "CLS" ;--------------------------------------------; border .text "b" ; "B" .byte $b0 ; "OR" komutunun kodu

.text "der" ; "DER" ;--------------------------------------------; ink .text "ink" ; "INK" ;--------------------------------------------; paper .text "paper" ; "PAPER" ;--------------------------------------------; commax .byte 4 ; max komut sayısı comlen .byte 3,5,3,5 ; komut uzunlukları ;=============================================

ÖNEMLİ NOT 2: Programa yeni bir komut eklediğinizde komutlar "comexe" bölümündeki sıra nasılsa "comset" bölümündeki sıra da aynı olmalıdır. Aynı şekilde "comlen" değerleri de doğru sırada olmalıdır.

ÖNEMLİ NOT 3: Yeni komutları SYS 49152 komutuyla aktif hale getirdikten sonra NEW komutu vermeniz gerekmektedir.

İşte yeni komutlar kulla- narak yazılan ilk pro- gramımız ve ekran görün- tüsü. 10 CLS : REM "PRINT CHR$(147)" YERİNE 20 FOR F=0 TO 15 30 BORDER F : REM "POKE 53280,F" YERİNE 40 NEXT : GOTO 20

Klavyeyle gezinmek için ← ve → tuşları.