C128 İçin Püf Noktaları (8)

Otomatik olarak başlamasını istediğiniz disketinizin TRACK 1 SECTOR 0 kısmının boş olması gerekir. Bu kısım disketin ilk bloğunu oluşturur, otomatik başlama olması için disketin bu bölümünün sizin programlarınız tarafından kullanılmaması gerekir. Otomatik başlayacak bir disket hazırlamak istediğinizde mümkünse hiç kullanılmamış bir disket tercih edin. Kullanılmış disketlerin ilk bloğunu bir monitör aracılığı ile kontrol edin.

TRACK 1 SECTOR 0 sadece otomatik başlama rutini tarafından kullanılmıyor. Aynı zamanda CP/M işletim sistemi otomatik başlama rutinini kullanarak yükleme işlemini gerçekleştirip yeni işletim sistemini aktif hale getirir. Disketten okunan ilk üç byte sırası ile $E2C4-$E2C6 adreslerinin içerikleri karşılaştırılır. Eğer üç byte'ın birisi bile farklı olsa otomatik başlama gerçekleşmez. Disketten otomatik yükleme yapılıp yapılmayacağını yüklenen ilk üç byte'ın belirlediğini söyleyebiliriz. Otomatik yüklemenin yapılması için disketten okunacak ilk üç byte'ın $E2C4 - $E2C6 arasındaki adreslerin içeriği ile aynı olması gerektiğini söylemiştik. Bu adreslerin içerikleri şöyledir:

$E2C4 : $43 (67) “C” $E2C5 : $42 (66) “B” $E2C6 : $46 (77) “M”

Disketlerimizin otomatik yükleme mekanizmasına sahip olabilmeleri için ilk üç byte'ına “CBM” kelimesini yerleştirmemiz gerekiyor. Eğer karşılaştırılan üç byte eşitse ekrana,

BOOTING

mesajı çıkar.
Otomatik olarak başlayacak bir disket hazırlamak
için ufak bir program yazacağız.
10 OPEN 1.8,15
20 OPEN
25 PRİNT 1,“B-F O 4 0“
SOPRİNT 1,“B-P 43 0”
40 PRİNT 2.“CBM”
SOPRİNT 13 0 4 0“
4,“B-A O 4 0“
70 CLOSE 2
80 CLOSE 1
90 END

Programı yazdıktan sonra çalıştırmadan evvel bir diskete SAVE edin. Disket sürücüye formatlanmış yeni bir disket veya sizin için bir değeri olmayan eski bir disket yerleştirip programı çalıştırın. Programın çalışması bittiğinde otomatik olarak başlayacak bir diskete sahip oldunuz demektir.

Programda yer alan komutların kısa bir açıklamasını yapalım. İlk olarak disket sürücüsünün komut kanalına giriş sağlamak için bir veri dosyası açıyoruz. Daha sonra disket sürücüye tampon bölge hazırlıyoruz. 25 numa-

61

ralı satırda bir bloğu serbest olarak işaretliyoruz. Bu komut sayesinde o blokta herhangi bir bilgi varsa silinmiş oluyor. 30 numaralı satırda açmış olduğumuz tampon bölgeyi işaret eden bir belirteç tampon bölgenin ilk byte'ını gösterecek şekilde ayarlanıyor. Daha sonra gelen ilk üç byte'a CBM karakterleri yazılıyor. 50 numaralı satırdaki komut, veri tamponunun disketin TRACK 1 SECTOR 0 bölgesine yazılmasını sağlıyor. 60 numaralı satırda bu bloğu kullanılmış olarak gösterdikten sonra 70 ve 80 numaralı satırlarla dosyaları kapatıyoruz. Ufak programı yazıp çalıştırdıktan sonra,

SYS DEC(“FF53”),8.8
veya
SYS DEC(“F890”),8,8

ile programın etkisini görebilirsiniz. Bu komutlardan birisini uygulamanızla birlikte disket sürücünün çalışmaya başlamasından kısa bir süre sonra ekrana

BOOTING...

Mesajı çıkacak. Daha sonra büyük bir ihtimalle bilgisayar MONITOR'e girecek. Şimdilik bunu normal karşılamak gerek. Biz otomatik başlama mekanizmasının çalışmasını sağlayan ilk üç byte'ı diskete yazdık. Diskette yer alan bloğun geri kalan kısmı büyük ihtimalle sıfır değeri ile doludur. Bilgisayar başka bir mesaj alamadı ve başka blokları okuyamadı. Bundan sonra da bir makine dili programı çalıştırmak istedi ve sıfır değerli byte'larla karşılaştı. Makine dilinde sıfır değerli byte BRK komutunu temsil ettiğinden bilgisayarımız MONITOR'e girip kaldı.

OLD

Diyelim sizin için çok önemli bir program yazıyorsunuz ve programınızı yazmadan NEW komutunu verdiniz. Hemen üzülmeyin, kaybetmiş olduğunuz programınızı kurtarmanın yolları var. NEW komutunun verilmesi ile birlikte programın başında bulunan iki byte sıfırlanır. Programın başında sıfırlanmış olan ilk iki byte bir sonraki programın sıfır numarasının adresini belirtir. NEW komutunun gazabına uğramış bir programı kurtarmak için değişkenlerin başlangıcını da düzeltmek gerekir. Kaybetmiş olduğumuz programı üç aşamada kurtaracağız. 1. Programın ilk iki byte'ına sıfır hariç bir sayı verin. BASIC'in başlangıç adresinin high byte'ını vermeniz en iyi sonucu verir. 2. Genelde programa yeni satır ilavesinde kullanılan BASIC program satırlarını düzenleyen sistem rutinini çağırın. Bu rutin programın tüm satır bağlantı belirteçlerini değiştirip tekrar hesaplar. Böylece prog-

ramın ilk satırını gösteren belirteç yeniden hesaplanıp hafızaya yazılmış olur. 3. Kaybetmiş olduğunuz programın sonunda bulunan değişkenlerin başlangıcı yeniden ayarlanır. Bu işlemleri C128'de uygulamak çok daha kolay. 3 numaralı aşamayı C128'de iptal etmemiz mümkün, çünkü değişkenler BANK1'de saklanırlar. Kaybetmiş olduğunuz programı aşağıdaki komutu girerek kurtarabilirsiniz. Bu komut anlatmış olduğumuz aşamaları gerçekleştirecek:

POKE PEEK(45) 4 256*PEEK(46) 4

45/46 numaralı adresler BASIC başlangıcını işaret ederler. Bu rutin, belirteçleri eski haline getirir. Yaptığımızın makine dilinde karşılığı:

OBOO
0B02 BASIC ram
: başlangıcı
ıcın 28
OBO4 94 2D STA ($2D),Y
OBO6 20 4F JSR SAFAF; Bağları
belirler
0B0O9 60 RTS
Makine dilindeki programımızı S0BOO adresi yeri-
ne başka bir adrese de yerleştirebilirsiniz.

LİST

Bir program hazırlarken eninde sonunda programınızın dökümünü Printer'dan almak ihtiyacını duyarsınız. Ama bu iş için uzun uzun OPEN 4,4:CMD 4:LIST:CLOSE 4 komutlarını yazmanız gerekir.

Program Döküm Eki'ndeki yazıp, SYS komutu ile çalıştırdığınızda istediğiniz programın dökümünü yazıcıdan alabilirsiniz. Makine dili ile ilgilenen arkadaşlar için programımızı makine dilinde de yazdık:

A9 OOLDA  $00 ;Konfigirasyon
1A02 8D 00 FF STA SFFOO
A9 OOLDA  $00 ;Dosya ismi
4A07 20 BD FF JSR SFFBD :Dosya ısmını ayarla
YADA AŞ  $04 ;Logic dosya numarası
TAX ;Arac numarası
SO7 adres
1A0OF 20 BA FF JSR $FFBA ;Dosya parametre ayarı
4A42 20 CO FF JSR SFFCO ;OPEN Kernal rutini
YAS A2  $04 Logic dosya numarası
20 C9 FF JSR ;Çıkıs aracını ayarlama
SAYA A5 2D LDA $2D ;BASIC ram baslangıcı-low
85 61 STA $61
A5 2E LDA $2E ;BASIC ram baslama-hıgh
1A20 85 62 STA $62
41A22 20 E5 50 JSR $50E5 ;LIST rutini
1A25 A9
1A27 8D 00 FF STA SFFOO
YAZA AŞ
4A2C 20 C3 FF JSR SFFE7 :Kernal CLALL rutini
60 RTS Bitir

Geliştirilmiş INPUT

BASIC 7.0'da C-64'te alışmış olduğunuz GET ve INPUT komutlarından başka GET KEY komutu da bulunuyor. INPUT komutu diğer iki komut gibi kullanıcıdan veri almada kullanılıyor. Ancak bu komutun ekrana soru işareti çıkarması kimi zaman can sıkıcı bir durum yaratır. Ekranımızı bir dosya gibi düşünürsek soru işaretinden de kurtulabiliriz:

40 OPEN 1,0 :REM Ekran dosya olarak
20 REM tanımlandı.
1,AS
40 CLOSE 1

Diyelim ki, kullanıcının ekranın belirli bir bölgesinden veri girmesini istiyorsunuz, bu durumda aşağıdaki satırları yukarıdaki programa ekleyin:

415 CHAR.kolon.sıra
35 PRİNT “5:

CHAR komutu sayesinde PRINT AT komutunun işlevini kullandık.

Uyarı Sesi

Bildiğimiz daktilo alt satıra geçilmesi gerektiğini belirtmek için sağ tarafa yaklaşıldığında bir ses çıkarır. Bu şekilde bir ses bilgisayarda da faydalı olabilir. Program Döküm Eki'ndeki PROGRAM 2 satırın bitimine iki karakter kala ses çıkmasını sağlıyor. Programımızı makine dili olarak aşağıda bulabilirsiniz.

142D A9 FF LDA  SFF ;Muzik degerleri
142F 8D 06 DA STA $406
1432 8D 18 DA STA $418
1435 A9 09 LDA $09
78 kapatıldı
143B A9 47 LDA 847 ;İR© vektoru
4143D 8D 14 03 STA $314
1440 A0 14 LDA
1442 8D 03 STA $0315
1445 58 CLI ;İRE aktıf oldu.
1446 60 RTS ;BASIC'e don
1447 PHA
1448 A5 E7 LDA $E7 ;Sag marjını yukle
E5 EC SBC SEC
C9 02 CMP
4144E DO 11 BNE $1461
4450 CD 80 14 CMP $1480
1453 FO OF BEO $1464
1455 8D 80 14 STA $1480
1458 A9 A0 LDA ses cıkar
145A 8D 01 DA STA SD401
145D A9 21 LDA 821
145F DO 05 BNE $1466
1461 8D 80 14 STA $1480 ;Kolonu sakla
1464 A9 99 LDA  $00 ;Sesi kapat
1466 8D 01 D4 STA $D401
1469 8D 00 DA STA $D400
146C 8D 04 D4 STA SD404
146F 68 PLA
1470 4C 65 FA

JMP ;İRA'ya atla Son kolon hariç, zil sesini istediğiniz kolona

POKE 5197,N

komutu vererek çevirebilirsiniz. N, zil sesi için yeni kolonu verir.