Commodore sayı 71, sayfa 12

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 12

Eğer ASCII'leri kullanmaya üşeniyorsanız ilk satırınızda bulunacak PRINT içine gerekli mesajı yazın ve bu tablodaki gibi altı çizili bölgeyi istediğiniz yere kopyalayın. (İki $22 baytı arası kopyalanacaktır.)

Eğer Makine dilini kullanırken büyük boyutlarda datayı bir yerden bir yere taşımaya niyetlenirseniz, sıfırıncı sayfadan (zero page) yararlanarak dolaylı indeksleme (indirect indexed) metodunu kullanmalısınız. Bunun yanında datayı yukarıdan aşağı mı yoksa aşağıdan yukarı mı taşıyacağınız sorunu her zaman bulunmaktadır. Kaynak bölgesini kendi içinde bir yerlere taşırken bu sorunla karşılaşırsınız. Mesela $C000-$C100 arası $C001'e taşırken, $C000'dan başlarsanız, arasını $C000'da bulunan baytla doldurursunuz. Nedense gördüğüm tüm programcılarda da (ben dahil) bu ayrıntıyı unutmak gibi bir huy vardır. Ama gerekli bütün ayrıntıları bizim için düşünecek bir ROM rutini sayesinde büyük data bloklarını belleğin içinde oradan oraya taşıyabiliriz.

2. $A3BF; data bloğu taşıma: $A3BF'de yer alan rutin, ($5F-$60)'da başlayıp ($5A-$5B)'ye kadar olan bölgedeki baytları, ($58-$59)'da BİTEN bölgeye taşır. Parantez içinde yazılı olan sıfırıncı sayfa adres çiftleri, içinde alçak-yüksek bayt formatında bulunan sayıların saklandığı adresleri gösterir. En iyisi olayı bir örnekle açıklamak:

komuta gelene kadar buraya yazdığımız değer kayboluyor. Bu yüzden değerleri yerleştirmek ve ROM'a sıçramak için makine dili kullanmamız şart. Diyelim ki karakter setini $2000-$3000 arasına yerleştirmemiz gerekiyor. Yani: Başlangıç: $D000 Bitiş: $E000 Hedefin sonu: $3000

PROGRAM ADI - PROGRAM - 2

00000 R, A: NEXT 00010 00020 00030

SYS 49152

272,25 00040 END

01000

FOR R-O TO A: POKE 491524 POKE 56333,1:POKE 1,3

POKE 1,55: POKE 56333, 129: POKE 53

DATA

KAYNAK BASLANGIC 2. VE 6.

SAYIDA

01010 DATA

1:REM KAYNAK BITIS

SAYIDA 01020

SAYIDA 01030

Bir karakter editörü yapıyorsunuz diyelim. Bu iş için, karakter ROM'unu devreye soktuktan sonra $D000-$DFFF arasını çalışacağınız bölgeye taşımalısınız. Eğer bu işi BASIC'le yapmaya kalkarsanız "50 saniye" mesajını ekrana yazmanız şart olur. Oysa kısacık bir makine dili programı belleğe yerleştirmeyi göze alırsanız, bir saniye geçmeden karakter setini taşıma işini bitirmiş olursunuz. Makine dili programın yaptığı tek iş $58-$60 arasını ayarlayıp ROM'daki rutine sıçramak. Bu işi BASIC'ten yapabiliriz, diye düşünmüştüm ama $60 oldukça sık kullanılan bir adres olduğu için, ROM'u çağıran

DATA 76,191,163

169,0,133,90,169,224,133,9

2. VE 6.

DATA 169,0,133,88,169,48,133,89 :REM HEDEF BITIS

2. VE 86.

Bu taşımayı yaptırmak için ($5F-$60)'a $00-$D0, ($5A-$5B)'ye $00-$E0 ve ($58-$59)'a da $00-$30 verip $A3BF'ye sıçramamız gerekir. Sıçradıktan hemen sonra $2000-$3000 arasında karakter seti yer alacaktır. Program 2'de bu işi yaptıracak olan BASIC programı yer alıyor. Eğer 1000, 1010 ve 1020 numaralı data satırlarında 2. ve 6. baytların değerini ayarlarsanız bu programı genel amaçlı bir data taşıma programı olarak kullanabilirsiniz. Buradaki değerleri ayarlarken, ikinciye adresin alçak baytını, altıncıya ise yüksek baytını yazın. Mesela 49172 adresini yazmak istiyorsanız:

Klavyeyle gezinmek için ← ve → tuşları.