Görüldüğü gibi yukarıda bayt sa- yılarının yanında ayrıca $2005'e olan uzaklıkları yer almaktadır. BEO ko- mutunda program sayacına toplana- cak değerin 05 olduğu belirtilmiştir. Dolayısıyla BEO komutuna uzaklığı 05 olan satır burada işleme konula- caktır. Kısaca şunu söyleyebiliriz: Eğer ile- ri yönde bir dallanma yapılacaksa Branch komutundan sonraki satırdan itibaren uygulanması istenilen komu- ta kadar olan baytlar sayılır ve bu sa- yı Offset'tir. Yukarıdaki yöntemle ters yönde de dallanma gerçekleşebilir. önce- ki programlarımızda bunu birçok de- fa kullandık. Şimdi bu gibi durum- larda Offset'in nasıl hesaplanacağı- nı görelim. Aşağıda makine dili bir programın sadece bir bölümünün As- sembler dökümü yer almaktadır. 1000 A2 00 LDX # $00 1002 E8 INX 1003 DO FD BNE $ 002 00 BRK 1005 Bu program daha önce sıfır yapı- lan X-registerinin değerini 255'i ge- çene (255'den sonra tekrar O gelmek- tedir) kadar bir arttırmaktan başka iş yapmamaktadır. X-Register'in değeri 0 olmadığı sürece 1002 satırındaki INX komutuna bir dallanma gerçek- leşmektedir. Bu register ancak O ol- duğunda BRK ile program durmak- tadır. Daha önce belirttiğimiz gibi prog- ram sayacı yukarıdaki BNE komutu- na sıra geldiğinde $1005'i göstermek- tedir. Yukarıdaki programı bu sefer bayt bayt inceleyelim: Bayt: Değer: Anlamı: 1000 A2 LDX#$ 1001 00 1002 3 E8 INX 1003 2 DO BNE 1004 l FD Offset 1005 00 BRK Yukarıda yine bayt numaralarının yanında o an program sayacında be- lirtilen adrese olan uzaklıklar yazıl- mıştır. İNX komutuna ulaşabilmemiz için sayaçtan 3 çıkartmalıyız. Daha önceki sayılarda belirttiğimiz gibi bil- gisayar bir sayıyı çıkartırken o sayı- nın ikinci dereceden karşılığını top- lamaktadır. Bu nedenle 03'ün ikinci dereceden karşılığını hesaplamalıyız: 3- Birinci dereceden karşılık: *I İkinci dereceden karşılık: Bu son sayı $FD'ye eşittir ve yu- karıdaki örnekteki Offset'e karşı gel- mektedir. Ters yöndeki dallanmalar için şu kural geçerlidir: Program sa- yacını gösterdiği adresten itibaren uy- gulanması istenen komuta dek olan bayt sayısı belirlenir. Bu sayının ikin- ci dereceden karşılığı ise Offset'in de- ğeridir. daki şema yukarıda anlatı- lanları özetlemektedir: Bayt: — İçeriği: Offset 1995 F9 1996 FA 1997 FB 1998 FC 1999 FD «000 BNE FE 2001 Offset FF 2002 Sayaç Durumu 2003 01 2004 02 2005 03 Bu anlatılanlardan sonra Branch komutlarında varolan sınırlamayı herhalde farketmişsinizdir. Özellikle ters yönde olan dallanmaların nega- tif sayılarla oldukça fazla benzerliği vardır: Her ikisinde de ikinci derece- den karşılıklar ile işlem yapılmakta- dır. Nitekim bir bayt ile gösterilebi- linen en büyük pozitif sayı OllD 1illi » 4-127-$7F ve en küçük negatif sayı 1000 0000 — -128 — ($80) olduğu için ancak bu sınırlar içinde bir dallanma gerçekleşebilir. Bu ne- denle örneğin aşağıdaki gibi bir satır 6510 makine dilinde mümkün değil- dir: 3000 BNE 1000 Birçok monitör programı böyle bir satır yazıldığında hata mesajı verir. Ex-Mon ise bu durumda 1000 yerine başlangıç adresini yazmaktadır. Zere Page: Relatif adresleme yöntemini de gördükten sonra şimdi başka bir ad- reslemeye geçiyoruz: Zero Page ad- resleme, Zero Page ne demektir? Bu terimin 0000 0011 1111 1100 * l 1111 1101 (İkilik sistemde) fa”dır. iyi anlayabilmek için ise adreslerin C- 64 Tarafından algılanı lini anım- samak gerekir. 16 Bit'lik bir sayı al- çak ve yüksek olmak üzere iki bayt haline gelmekteydi. Örneğin $1F04 sayısının alçak baytı $04 ve yüksek baytı $1F'dir. Bu şekilde C-64'ün tüm belleği yani 65535 bayt adresle- nebilir. $0000 - $O0FF arası ilk 256 adresin yüksek baytları sıfırdır. Böyle 256 baytlık bölgeler sayfa (— page) olarak adlandırılır. Yüksek baytları “0” olan bu sayfaya “Sıfırıncı Sayfa” denir. Eğer örneğin akümülatöre bir sıfı- rıncı sayfa adresi olan $00FA'nın de- ğerini yüklemek istersek şu satırı yaz- malıyız: 3000 LDA $00FA Fakat C-64'ümüzün mikroişlemcisi aşağıdaki satırı da anlayacaktır: 3000 LDA $FA İşte buna sıfırıncı sayfa adresleme yöntemi adı verilir. LUDA komutumuz bu şekilde hafızada 3 yerine sadece 2 bayt kaplar. Şu ana kadar öğrendi- ğimiz birçok komutta bu adresleme- yi kullanabiliriz: dilimizdeki karşılığı “Sıfırıncı say- İ dilindeki karşılığını LDA,LDX,LDY,STA,STX,STY, INC,DEC,ADC ve SBC Mutlak adreslenen tüm komutlar yukarıda gördüğünüz gibi sıfırıncı sayfayla da adreslenebilir. Resim 1'de komutlar ayrı ayrı ele alınmıştır. Şimdi gelelim hız farklarına: Mut- lak ve Sıfırıncı sayfa adresleme yön- temlerini gösteren tabelaları yanyana koyduğumuzda ikisi arasında her ko- mut için bir cycle (çevrim) fark oldu- ğunu görebiliriz. İlk bakışta bu ol- dukça önemsiz gibi gözükebilir, an- cak birkaç yüz defa tekrarlanan dön- gülerde bu fark büyük önem kazanır. Bu nedenle hız unsurunun ön plan- da olduğu programlarda muhakkak sıfırıncı sayfada adresleme yapılma- r. Yukarıda anlatılan durum C-64'ün işletim sistemini ve Basic yorumlayı- cısını geliştiren kimselerce de çok iyi biliniyordu. Bu nedenle hemen he- men tüm kernal (işletim sistemi) ve Basic rutinleri sıfırıncı sayfaya bir 45