Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
Bayt Etkilediği Komut: | Adresleme: Sayısı | Hex Dec | Süre: | Bayraklar LDA Sıfırıncı Sayfa 2 A5 165 3 NZ LDX Sıfırıncı Sayfa 2 AB 166 3 NZ LDY Sıfırıncı Sayfa 2 A4 164 3 NZ STA Sıfırıncı Sayfa 2 85 133 3 - STX Sıfırıncı Sayfa 2 86 134 3 - STY Sıfırıncı Sayfa 2 84 132 3 - INC | Sıfırıncı Sayfa 2 DE 222 5 | NZ DEC Sıfırıncı Sayfa 2 C6 198 5 NZ ADC Sıfırıncı Sayfa 2 65 101 3 SBC Sıfırıncı Sayfa 2 E5 229 3 CMP | Dolaysız 201 2 NZC Mutlak 3 CD 205 4 N.Z.C Sıfırıncı Sayfa 2 C5 197 3 N.Z.C CPX Dolaysız 2 E0 224 2 N.Z.C Mutlak 3 EC 236 4 Sıfırıncı Sayfa 2 E4 228 3 CPY Dolaysız 2 C0 192 2 NZ.C Mutlak 3 CC 204 4 Sıfırıncı Sayfa 2 C4 196 3 NZ.C, Resim 1:
şeyler not etmektedir. Böylece Assembler programcıları için sıfırıncı sayfayı kullanmak oldukça zor bir hal almıştır ve bazı sıfırıncı sayfa değerlerinin değiştirilmesi felaketlere yol açabilir. Bu nedenle kendiniz C-64'ün bellek haritasını inceleyip hangi adresleri kullanacağınıza karar vermelisiniz. Her Assembler programcısının kendine özgü sıfırıncı sayfa adresleme yöntemleri vardır. Yalnız $02 ve $FB-$FE baytlarında her an gönül rahatlığı ile adresleme yapabilirsiniz. Eğer programcılık bilginize güveniyorsanız Basic yorumlayıcıyı ve C-64'ün işletim sistemini tamamıyla devre dışı bırakma olanağına her zaman sahipsiniz. Böylelikle Sıfırıncı sayfanın tümünü rahatlıkla kullanabilirsiniz, yalnız bu durumda gerekli olacak tüm rutinleri kendi başınıza oluşturmak zorunda kalacağınızı kesinlikle unutmayın. Sonuçta kernal rutinleri kullanılarak yapılabilen en basit işlem bile içinden çıkılamayacak bir hal alacağı için bu yöntem çoğu zaman ihmal edilir. Kursumuzun bundan sonraki bölümünde sık sık sıfırıncı sayfa adresleme yöntemini kullanacağız ve bu sayfayı kullanan kernal ve Basic yorumlayıcı rutinlerini inceleyeceğiz. Sıfırıncı Sayfa'yı kullanan rutinlere en güzel örnek CHRGET rutinidir. Bu program sadece Sıfırıncı sayfayı kullanmaz, tamamıyla burada yeralır. Bu çok gerekli rutinin kullanılışına geçmeden önce karşılaştırma komutlarını ele almalıyız.
Kı Komutları:
X, CPY
Karşılaştırma kelimesinin İngilizce karşılığı “to compare”'dir ve bu kelimeden makine dilindeki CMP, CPY ve CPX komutları türetilmiştir. Burada karşılaştırılacak eleman akümülatör olduğu zaman CMP, X-Register'i olduğu zaman CPX ve de Y-Register'i olduğu zaman CPY kullanılır. Birkaç örnekle konuya daha açıklık kazandırabiliriz:
CMP $FF
Satırı akümülatörün değerini $FF sayısı ile karşılaştırır. Burada dolaysız adresleme kullanılmıştır ve komut bu haliyle 2 bayt'lıktır. Aynı adresleme CPX ve CPY komutları için de kullanılabilir.
CPX $3000
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
satırı ise X-Registeri'ni $3000 adresinin içeriği ile karşılaştırmaktadır. Burada kullanılan mutlak adresleme diğer karşılaştırma komutları içinde geçerlidir ve bu şekilde 3 bayt kaplarlar,
CPY $A8
satırı ise Y-Registeri'ni bir sıfırıncı sayfa adresi olan $A8'in değeri ile karşılaştırır ve 2 baytlıktır. CPX ve CPY için olan tüm adresleme çeşitleri yukarıda sayılanlardır. CMP için mevcut diğer yöntemlere ise daha sonra değineceğiz, fakat şimdi gelelim karşılaştırma sonuçlarını nereden öğreneceğimize. Sonuçların tekrar akümülatöre veya registerlerden herhangi birisine yazılması mantıksız olacağı için bu iş için yine statü registerindeki üç tanıdık bayrak (flag) kullanılır: N-Bayrağı (Negatif Flag), Z-Bayrağı (Zero Flag) ve Carry Bit. Sonuçların gösterimi şu şekilde olur: 1) Register değeri (X, Y veya akümülatör) karşılaştırılan değerden büyükse Carry Bit = 1, N- ve Z-Bayrağı = 0 olur. 2) Register değeri karşılaştırılan değere eşitse Carry ve Z-Bayrağı = 1, N-Bayrağı = 0 olur. 3) Register değeri karşılaştırılan değerden küçükse N-Bayrağı = 1, Z-Bayrağı ve Carry = 0 olur. Yukarıda anlatılanlar bir şema halinde Resim 2'de gösterilmiştir. Compare komutlarının en yaygın kullanım alanı dallanma operasyonlarıdır ve genellikle kernaldaki CHRGET rutiniyle bir bütün halinde kullanılırlar.
4990 PRINT "A LIVING "
5000 END
CHRGET kısaltması “get a character” veya “bir işaret al” anlamına gelmektedir. Tamamıyla Sıfırıncı Sayfada yer alan bu rutin makine dilinde oldukça sık kullanılır. Şimdi Ex-Mon'da aşağıdaki satırı yazın.
D 0073 008B
Böylelikle CHRGET rutinin tamamını ekranda görebilirsiniz:
0073 0075
E6 TA DO 02 0077. E6 7B 0079. AD 2502 C9 3A 007E BO OCA
INC $7A BNE $0079 INC $7A LDA $0225 CMP # $3A BCS
Akümülatör Akümülatör Akümülatör BAYRAK X Veriler X X Veriler Y Y N 0 veya 1 0 1 veya 0 Z 0 1 0 C 1 1 0 Resim 2: 0080 C9 20 CMP #$20 0082 F0 EF BEQ $0073 0084 38 SEC 0085 E9 30 SBC #$30 0087 38 SEC 0088 E9 D0 008A 60 RTS
Yukarıdaki dökümde 0079 no'lu satır sizde daha farklı olacaktır. Bu farklılık $7A ve $7B adreslerinden ileri gelmektedir. Bu baytlar bir gösterge gibi kullanılmaktadırlar (Alçak Bayt = $7A ve $7B = Yüksek Bayt) ve büyük bir ihtimalle bu değer sizde $0225'den farklıdır. Yukarıdaki CHRGET rutinini gelecek ay detaylı olarak ele alacağız. Şimdilik hoşçakalın!
TİCARET