C128 İçin Püf Noktaları (9)
Retro bilgisayarYazımıza disket sürücü ile çalışırken işimize yarayacak olan bilgilerle başlayacağız. Yazımızda Program Döküm Eki'nden bakmanız gereken programlar için 20. sayının Program Döküm Eki'ne bakmanız gerekiyor, Program Döküm Eki'ndeki PROGRAM 1'i yazarak işimize devam edelim. İlk programımızın etkisini görmek için kullandığımız SYS komutları bize ekranda sadece BOOTING... mesajını vermişti. Şimdi yazmış olduğumuz program sayesinde gireceğimiz mesaj, BOOT kelimesinden sonra yer alacaktır. Yazacağımız mesajın uzunluğu maksimum 246 karakter olabilir. Programımızı çalıştırmadan evvel diskete kayıt edin ve sizin için önemsiz bir disketi takarak programı çalıştırın.
BOOT komutu ile veya bilgisayarı açıp kapatarak programın etkisini görebilirsiniz. Şimdi yaptığımızı biraz daha ilerletmek için Program Döküm Eki'ndeki PROGRAM 2'yi yazıp çalıştırmadan evvel SAVE edin. Programın 10-110 satırları arası daha evvelki yazdığımız programlara benziyor. 1000-1070 arasında yer alan DATA satırlarını inceleyelim.
İlk DATA satırındaki yedi değer disketin TRACK 1 SECTOR 0 bölümüne yazılan yedi byte'ı oluşturuyor. BYTE 0-6: Otomatik başlama rutini için gerekli yedi byte BYTE 7-26: BOOTING kelimesinden sonra yazılacak olan mesaj BYTE 27: Bitimi bildiren sıfır değeri BYTE 28-32: Yüklenecek programın adı BYTE 33: Bitimi bildiren sıfır değeri BYTE 34-52: Çalıştırılacak makine dili programı
1060-1070 satırları arasında yer alan makine dili programı çalıştığında RUN komutu verilip yüklenen programın çalıştırılmasını amaçlıyor. Makine dili ile ilgilenenler için programı detaylı olarak veriyoruz.
LDX #
döngü LDA tablo,X al
STA tamponuna
DEX Başka karakter
mı?
BPL döngü ;evet
LDA 44 $03 mikfarı
STA $DO tamponuna
RTS sonu
tablo $52, SOD.
Şimdiye kadar otomatik başlama mekanizmasına sahip olacak bir disketi nasıl hazırlayacağımızı gördük. Program Döküm Eki'ndeki PROGRAM 3 kendiliğinden yüklenerek çalışmasını isteyeceğiniz programlara örnek olabilir. Bu programı yazdıktan sonra
SAVE”BASIC”,8
şeklinde kaydedin. Böyle yapmamızın sebebi PROGRAM 2'deki programın 1040 numaralı satırında program ismi olarak BASIC vermemizdir.
PROGRAM 3'ü diskete kayıt etmeden otomatik başlama yapılırsa FILE NOT FOUND hatası ile karşılaşırız. PROGRAM 2'nin 1040 numaralı satırına istediğiniz başka bir programın isminin harflerinin değerlerini yerleştirebilirsiniz. Yeni veri sayısına göre 40 numaralı satırdaki FOR döngüsünü tekrar ayarlamayı unutmayın. Disketten otomatik yükleme hakkındaki sözlerimizi tamamlamadan evvel SECTOR 0'da bulunan bloğun 256 byte'ının dökümünü yapalım.
BYTE : $43 (67) ASCIİ-C
BYTE : $42 (66) ASCIİI-B
BYTE : $AD (77) ASCIİ-M
BYTE : yüklenecek programın bulunduğu bloğu
bildiren adresin LOW-BYTE'ı
BYTE : HİGH-BYTE (üstteki adresin)
BYTE: Yüklenen blokların saklanacağı BANK numarası
Kartuşlar ile Otomatik Başlama
Bilgisayarımızın arkasında yer alan, EXPANSION PORT adı verilen yere takılan kartuşları bilirsiniz. Bilgisayara takmanızla birlikte kartuşta yer alan programın da karşınıza çıkması bir olur. Aslında kartuşlardaki programın otomatik olarak yüklenerek çalışması ile, programınızın disketten otomatik olarak yüklenerek çalışması birbirine benzer. Kartuş kullanmanın iki avantajı vardır: (1) SYS komutu veya RUN komutu vermenize gerek kalmadan program göz açıp kapayıncaya kadar yüklenip kendiliğinden çalışır. (2) Kartuşları kopyalamak daha zor olduğu için, sizin için önemli olan bir programı korumuş olursunuz. Peki bilgisayarımız kendisine bir kartuş takılmış olduğunu nasıl anlıyor? İlk olarak C64'te nasıl anladığını görelim: Bilgisayarımızı açtığımızda bilgisayar $8004-$8008 adreslerini kontrol eder. Eğer bu adreslerin değerleri sırası ile CBM80 yazısının ASCII değerlerine karşılık geliyorsa $8000-$8001 adreslerindeki değerlerin işaret ettiği yere kontrol iletilir. Yani $8000 LOW-BYTE, HIGH-BYTE değerlerini taşır. C128'de C64'teki gibi çalışır. Tek fark C128 için CBM yazısı yeterlidir. Aynı zamanda CBM yazısını disketten otomatik yüklemede de kullandığımızı hatırlayalım.
Fazladan Sekiz Fonksiyon Tuşu
Bilgisayarımızın sekiz tane fonksiyon tuşu bulunuyor. KEY komutu ile fonksiyon tuşlarına çeşitli komutlar tanımlayabiliyoruz. Bilgisayarımızı açtığımızda çok sık kullanılan komutlar fonksiyon tuşlarına tanımlı haldeler. Eğer sekiz fonksiyon tuşu karşılamazsa ne yapacağız? Yeni fonksiyon tuşlarımıza on altı karakter uzunluğunda yazı veya kontrol karakteri girmemiz mümkün. Yeni fonksiyon tuşlarını kullanmak için ALT tuşundan yararlanacağız. İlk fonksiyon tuşu için ALT ve F1 tuşuna, ikinci fonksiyon tuşu için ALT, SHIFT ve F1 tuşlarına basacağız. Program Döküm Eki'nde bulunan PROGRAM A sekiz fonksiyon tuşunu tanımlamamızı sağlayan program. Yeni tanımlanan fonksiyon tuşlarına KEY komutu ile ulaşamayız. Ancak programımız sayesinde sekiz tuşa birden istediğimiz komutları yüklememiz mümkün olur.
Tuş Sesi
Bazı bilgisayarlarda tuşlara basıldığında ses çıkar. Bilgisayarınızın böyle bir özelliğe sahip olmasını isterseniz Program Döküm Eki'ndeki PROGRAM 4'ü yazın. Kolaylık olması açısından RETURN tuşuna bastığınızda daha farklı bir tonda ses duyacaksınız. Program vektörünü değiştirdiğinden basılan her tuşa çok çabuk cevap verir.
Program Askıya Alma
Önemli bir programla çalışıyorsunuz, tam bu sırada telefon veya kapı çalındı. Programı bıraksanız bir türlü, bırakmasanız bir türlü. Artık böyle zor durumlarda kalmak istemiyorsanız Program Döküm Eki'ndeki programı yazın. C128'de NO SCROLL tuşu program akarken listeyi durdurmanızı sağlar. Programda NO SCROLL tuşunu kullanmak yerine başka bir tuş kullanmak istiyorsanız,
POKE 5134,N
POKE 5140,N
komutlarını programa eklemeniz gerekiyor. N değişkeni yerine istediğiniz tuşun değerini vermeniz lazım. Kesintiye uğrattığınız program siz tekrar tuşa bastığınızda kaldığı yerden devam edecektir. Makine dili ile ilgilenen arkadaşlar için programımızı makine dilinde de veriyoruz.
1400 LDA $0B
1402 STA $0308
1405 LDA # $14
1407 STA $0309
140A RIS
;Vektör değiştirme
sonraki BASİC
için
;BASIC'e geri dönüş
140B LDA $D4 değeri
440D CMP ;NO SCROLL tuşumu?
440F BNE 8141B
1414 LDA $DA4A
1413 CMP #$57
1415 $1411
1417 CMP # $58
1419 $ 1411
141B LDA $O0F
değeri :NO SCROLL tuşu mu? ;Evet, bekle
Bir sonraki BASIC
;komuUutu
141D STA $02 Çalıştır
LDA # $4A
1421 STA $03
1423 LDA # SA2
1425 STA $04
1427
1429 STA $05
142B JMP $02E3
HELP ve RUN/STOP tuşları
Bilgisayarımızın sekiz fonksiyon tuşu olduğunu söylemiştik. HELP ve RUN/STOP tuşlarını da saydığımızda bilgisayarımız on tane fonksiyon tuşuna sahip demektir. Ancak bu iki tuşa KEY komutu ile tanımlama yapamayız. Dokuz numaralı fonksiyonu kullanmak için SHIFT ve RUN/STOP tuşlarına basmamız yeterli olur. Bu fonksiyon
DLOAD”*
RUN
komutlarını taşır. Disket sürücüdeki ilk programı bulup yüklemek isterseniz kullanabilirsiniz. Dokuz ve on numaralı fonksiyonları istediğimiz şekilde tanımlamak için Program Döküm Eki'ndeki PROGRAMI 1'i yazın. Fonksiyon tuşuna RETURN tuşunu eklemek için '1' tuşuna basmanız gerekiyor.
Fonksiyon tuşlarına yazmış olduğumuz tanımlamalar 4096 ($1000) ile 4352 ($1100) adresleri arasında yer alır. İlk on byte fonksiyon tuşlarına tanımlanan yazıların uzunluğunu taşır. Bu değerlerden başlayarak fonksiyonların yazılarının başlama adreslerini bulabilirsiniz. On fonksiyon tuşuna toplam 245 harf kullanabilirsiniz.
Adres 24
24 numaralı adresle oldukça ilginç işler yapabiliriz. Mesela,
POKE 24,37:LIST
komutunu verdiğinizde programınızın satır numarası olmadan ekrana geldiğini göreceksiniz. Eğer FORMULA TOO COMPLEX ERROR ile karşılaşırsanız,
POKE 24,27
deneyin. 27'den başka değerler BASIC listelerine çeşitli değişiklikler yapar. Almış olduğunuz herhangi bir hata mesajı 24 numaralı adresin içeriğini değiştirir. POKE 24,37 komutu satır numaralarını yok etmesinden yararlanarak kendimize amatör bir kelime işlem programı yapabiliriz. Mesela,
10 Bu bir kelime işlem
20 programı olarak kullanıma
30 örnektir.
Yazdığımız programı normal bir program gibi kasete veya diskete kaydedebiliriz. Printer'a yazdırmak için, POKE 24,37:OPEN 4,4:CMD 4:LIST:PRINT# 4:CLOSE 4 komutunu yazın.
Program Hataları
C64'de çalışırken programınız bir hata yüzünden durursa hatanın nerede olduğunu ve neden kaynaklandığını sizin bulmanız gerekir. BASIC 7.0'daki HELP tuşu sayesinde hatanın programın hangi satırında neden kaynaklandığını anlamanız mümkün olur. TRAP komutu sayesinde de normalde hata mesajı vererek duracak olan programınızın çalışmaya devam etmesini sağlayabilirsiniz. Programınızda bir hata olduğunda program programınızda yer alan TRAP komutundan sonraki satırda yer alan kısma atlar. Sisteme ait olan ER değişkeni size iletilen hata mesajının numarasını verir.
PRİNT ERRS(ER)
komutu vererek hatanın ne olduğunu ekrana basabilirsiniz. EL değişkeni ise hatalı satır numarasını taşır.
10 FORİ-1 TO 41
20 PRİNT LERRS(İ)
30 NEXT |
programını çalıştırdığınızda mevcut olan hata mesajları ekrana yazılır. : Programınızda bir hata olduğunda kontrol TRAP'ten sonra gelen numaranın belirttiği satıra atlar ve burada durur. Bundan sonra RESUME komutunu üç ayrı şekilde kullanarak programın devamını sağlayabilirsiniz. Sadece RESUME yazarsanız bilgisayar programı hatalı satırın bulunduğu yerden devam etmek ister.
RESUME satır numarası şeklinde kullanırsanız program akışı verdiğiniz satır numarasından devam eder. Son olarak,
RESUME NEXT
komutu ile program akışı hataya neden olan satırdan sonra gelen satırdan devam eder. Eğer programınızın çalışmasını satır satır görmek isterseniz TRON ve TROFF komutlarını kullanabilirsiniz. RESUME komutunu satır numarasız kullanacak olursanız sonsuz döngüye girebilirsiniz. Aşağıdaki programı deneyin. Bu programda disket sürücü kapalı olduğu sürece disket sürücüyü açın mesajı ekrana yazılacak.
10 TRAP 1000
20 DİRECTORY
30 END
1000 İF ER—5 THEN PRİNT CHRS(19): “DİSKET
SURUCUYU ACIN”:RESUME
1010 END
Hoşça kalın. 59