1 Eylül 1987 Tarihli Commodore Gazetesi Sayfa 19

1 Eylül 1987 tarihli Commodore Gazetesi Sayfa 19
Metin içeriği (otomatik olarak oluşturulmuştur)

çek bir programa benziyor. Bunu na- sıl anlayabiliriz? Tecrübeli olmak işe yarar tabii, ama herşeyden önce, bu- rada meçhul bit yok. Ayrıca, adres $FFD?'ye yönelik bir takım JSR ta- limatları görülüyor. Bu adreste, programın içkin bir parçası olan Ker- nal rutinlerinden biri bulunuyor. Ker- nal rutinleri her an kullanıma hazır makine dili rutinlerinden oluşur ve makine dili programlarında sıkça ge- çer. Şimdi, önce 97. sayfadaki Ekran (Dump?) Ve bir göz atın. Bu tablo- da, adres $133B'de bir RTS komutu görüyoruz. RTS komutu, bir alı- rutinin sonundaki BASIC RETURN cümlesine eşdeğerdir. Bunun SİCİM programının en son komutu olması da mümkündür. Programın gerçekten sonuna gelip gelmediğinizi anlamak için, BEO ve BNE (eşitse sap ve eşit değilse sap) komutlarına bakın. Sapma komutla- rı, koşullu atlama komutlarıdır. İş- lemcinin statü sicilindeki flag'ların set ya da reset edilmiş olmasına bağlı olarak program sapar. Sapma ko- mutlarından hiçbirisi RTS komutun bulunduğu adresin ilerisindeki adres- lere gitmemektedir. Demek ki, RTS gerçekten de programın sonudur. Ayrıca, Sicim Yükleyici'nin hafı- zaya 32 bit sokmuş olduğunu ve $133B'deki RTS'nin 32 bit olduğunu hatırlarsanız, programın sonuna var- dığınızı anlamanız güç olmaz! Programı parçalamak mesele de- gildir. Ama parçalardan bir anlam çı- karmak zor olabilir. Burada da tec- rübe işe yarar. Fakat şu küçük rutini yorumlamak o kadar zor olmasa ge- rek. $1324'ten başlayarak ilk iki ko- mutu alın: CPX # $00 BEO $132E İlk komut X-sicilini sıfırla karşılaş- tırmaktadır. Eğer X-sicili sıfıra eşit- se işlemcinin Sıfır flagı set,, değilse reset olacaktır. Sıfır flagı set olursa, BEO (sıfıra eşitse sap) komutu $132E'ye atlar. BASIC çağrı programımızın A, X ve Y sicillerine değerler yerleştirdiği- ni görmüştük. Eğer X sicili sıfırdan büyük bir değerle başlıyorsa, prog- ram $1328'de şu komutları yerine ge- tirecektir: JSR $FFD2 DEX BNE $1328 Bu, BASIC'deki FOR-NEXT dön- gülerine denk — düşmektedir. $FFD?'deki altrutin çağrılır, X sicili eksiltilir ve eğer sıfır değilse BNE (sı- fıra eşit değilse sap) komutu progra- mın tekrar $FFD2'ye dönmesini sağ- lar. Böylece, $FFD2 X kere, yani X- sicilindeki ilk değer kadar çağrılır. X sıfıra eşitlendikten sonra, adres $132E'deki şu komutlar yerine geti- rilir: CPY * $00 BEO $133B Eğer Y-sicili sıfırsa, rutin adres $133B'deki RTS'ye, yani proğramın sonuna atlar. Y sıfır değilse, $1332'den başlayan şu komutlar ye- rine getirilecektir: JSR $FFD2 DEX BNE $1332 DEY BNE $1332 Commodore Bunlar içiçe FOR-NEXT döngüle- rine tekabül etmektedir. FOR Y-? TO:-? STEP-İ FOR X-255 TO O STEP -| GOSUB $FFD2 NEXT X NEXT Y X-sicili maksimum değerinden (255) sıfıra indirilir, sonra da Y-sicili eksiltilir. X gene 255'den dönerek sı- fıra iner ve Y eksilmiş olur. Bu, Y sı- fıra ininceye kadar sürer. Sonra, $1339'daki son BNE komutu atlanır ve son RTS komutuna varılır ki, bu da BASIC çağrı programına dön- mektedir. KERNAL RUTİNLERİ $FFD2'deki altrutin CHROUT ya da BSOUT diye adlandırılan bir Ker- nal rutinidir. Bu rutinin tanımını PRG'nizde bulacaksınız. Bu prog- ramda, CHROUT (akümülatör diye de adlandırılan) A sicilindeki hareket- lerin değerini alıp ilk uygun konum- da ekrana vermektedir. Yani CHRO- UT sizi cursor konumunu gelişmele- re paralel olarak değiştirme ve karak- teri ekranda hangi adrese vereceğinizi

Bu sayıdan diğer sayfalar: