1 Mayıs 1987 Tarihli Commodore Gazetesi Sayfa 27

1 Mayıs 1987 tarihli Commodore Gazetesi Sayfa 27
Metin içeriği (otomatik olarak oluşturulmuştur)

dık kalarak, renk kodüunu da oturta- biliriz: LDA $7 STA 55296 Eğer, bu komutları doğrudan bu şekilde verirsek, sadece “?SYNTAX ERROR' elde ederiz. Bunun nedeni ise Commodore 64'ün direkt olarak sadece BASIC komutlarının anlama- sıdır. Yani şu anda izlediğimiz yol yanlış olsa gerek. Hangi yolu izleye- lim peki?.. Hatırlayacak olursak, makine dili programlar hafızada peş- peşe dizilmiş emir kodlarından ibaret- ti. Önce, her bir komutun emir ko- dunu belirleyelim. Bu işlem için, kü- çük kitapçığımızı kullanacağız. Bura- dan, LDA komutunun direkt adres- leme tipi için SA9 kodunun kullanı- lacağını görürüz. Bunun hemen arka- sından operand byte'ı gelir. Yani $01. STA komutunda ise absolut adresle- me tipini kullanmışız. Küçük kitap- çığımız kullanacağımız kodun $8D olacağını söylüyor. Bunun da arka- sından, kendisine ait öoperand gelmek zorunda, Şimdi ise operand, bir ha- fıza elemanının adresi. Yani 16 bit- lik bir değer. Bu değeri temsil etmek için, iki adet 8 bitlik değere ayırma- mız gerekiyor. İlk önce düşük değerli byte, arkasından yüksek değerli byte takip etmek zorunda. Onaltı bitlik bir değeri iki adet sekiz bitlik değere ayır- ma işlemi hekzadesimal sayı sistemi kullanıldığında çok daha rahat yapı- labiliyor. O yüzden ilk önce onaltı bitlik değerleri hekzadesimale çevire- lim. 1024 sayısı hekzadesimal olarak $0400'a karşılık geliyor. 55296 sayı- sının karşılığı ise $D800. Programı- mızı bir kere daha, bu sefer hekzade- simal sayı sistemini kullanarak yaza- lım. LDAZ $01 STA $0400 LDA At $07 STA $D800 Onaltı bitlik değerlerimizden ilki olan $0400'ın düşük değerli byte'ının $00, yüksek değerli byte'ının $04 ol- duğunu görüyoruz. Yani STA $0400 satırı, byte karşılıkları kullanılarak yazıldığında $8D, $00, $04 byte'ları Commodore dizisi olduğunu çıkardık. Benzeri bir analizle, programın geri kalan kısmı- nın, yani LDA 4 $07, STA $D800 kısmını $A9, $07, $8D, $00, $D8 byte'larıyla temsil edebiliyormuşuz. Tüm programımız şu şekil almıştır: SA9, $01, $8D, $00, $04, SA9, $07, $8D, $00,. $D8 Elde ettiğimiz bu byte dizisini ha- fızaya yerleştirmemiz gerekiyor. Şim- di bir problemle karşılaşıyoruz. Ma- kine dili programımızı hafızanın ne- resine koyacağız? Bunun için en uy- gun yer olarak, $C000'dan $CFFF'e kadar uzanan bölge göze çarpıyor. Bu bölgenin en önemli özelliği, işle- tim sistemi ve BASIC yorumlayıcısı tarafından hiçbir zaman kullanılma- ması. Bu bölgenin genişliğinin 4 KByte olduğunu görüyoruz. Olduk- ça avantajlı bir bölge burası. Fakat, büyük ihtimalle, bu bölgede bir mo- nitor programı çalıştırmak isteyecek- siniz ve monitor programı için ise en ideal bölge burası. O yüzden, ilk baş- langıç programımız için daha değişik bir yer önereceğim. Burası, işletim sisteminin ve BASIC yorumlayıcısı- nın erişebileceği bir bölge olmasına karşın, diğer programlarınızla çakış- ma ihtimali daha az. Ayrıca, bu böl- genin BASIC yorumlayıcısı tarafın- dan bozulması ihtimali de çok uzak. Bunun için oldukça uzun bir BASIC programının oldukça çok işlem yap- ması gerekiyor ki bu bölgeye erişsin ve programınızı bozsun. Şu anda yaz- makta olduğumuz ilk deneme prog- ramımızda herhalde böyle bir durum sözkonusu olmayacağı için gönlümüz rahat etsin! Şimdi, hekzadesimal modda, baştan aşağı yazdığımız programımızı desimale (ondalığa) çe- virelim ki BASIC'ten bu kodları ra- hatça girebilelim. Çünkü BASIC yo- rumlayıcımız, sadece ondalık sayıla- rı anlıyor ve bunlarla işlem yapıyor. 169,1,141,0,4,169,7,141,0,216 Şimdi ufak bir BASIC programı- nın bu programı bizi için hafızaya yerleştirmesini isteyelim: 100 FOR 1-0TO9 110 READ A:POKE 6*409641,A 120 NEXT 130 DATA 169,1,141,0,4,169,7, 141,0,216 Bu programı yazıp RUN komutuy- la başlattığımızda, makine dilindeki programımız 6*4096 (— 56000 - 27

Bu sayıdan diğer sayfalar: