Commodore sayı 59, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

VEDAT HALLAÇ Merhaba, | Bu ay makine dilinin püf noktaları köşemize oldukça ilginç ve ekran doldurucu özelliğe sahip olan bir rutinin açıklanmasıyla devam ediyoruz. Şu ana kadar verdiğimiz rutinlerin birleşmesiyle rahatlıkla bir intro yapabiliriz fakat rutinlerin hepsi aynı bellek alanında ve hepsi de interrupt'ı kendi amacı için kullanıyor. Bu problemleri nasıl halledeceğimizi ve açıkladığımız bütün programcılıkları nasıl birleştireceğimizi gelecek aya bırakıyorum. Bu ay açıklanacak olan rutin ekranın 2. satırından son satırına kadar olan bölgede onlarca yıldızı değişik derinliklerde kaydırıyor. İşin en ilginç tarafı 62 adet yıldızı sadece tek bir sprite kullanarak ve ekranı hiç etkilemeden kaydırması. Tabi ki bu rutin bir mucize yaratmıyor. Sadece C-64'ün sprite'ları konusunda ufak bir bilgiyi kullanıyor. Commodore sprite'larının en büyük özelliği, herhangi bir satırda gösterilmeye başladıktan sonra yirmibir raster satırı boyunca o sprite'ın y koordinatına ne yaparsanız yapın, sprite'ın tamamı gösterilmeden yeni bir yere geçemiyor. Bu sayede bir sprite'ı 20. raster satırına gösterip, 24. (mesela) raster satırında y koordinatını 41 yaparsanız ve 10. raster satırında bu değeri tekrar 20 yaparak bu işleme devam ederseniz, aynı sprite'tan alt alta iki tane elde edersiniz. Programımız da bu özelliği kullanarak 1. sprite'ı yaklaşık olarak 9 kere ekrana çıkarıyor. Gerekli her noktada x koordinatını da ayarlayınca 62 tane yıldız ekranda rahatça gösterilebiliyor. Eh, bu kadar masaldan sonra programın nasıl çalıştığına bir göz atalım. Programın en başında, sprite dataları (sadece belli yerlere birer nokta koyuluyor.) ve bilinen yöntemlerle interrupt'lar ayarlanıyor. Interruptlar tam 42 raster satırında (2. karakter satırı) başlıyor.

Başta Lda — $DO15. Ora #501 Sta $DO15

İlk iş olarak 1. sprite'ın gösterileceğinden emin oluyoruz. (Diğer sprite'ların durumu ne olursa olsun, 1. sprite'ı açıyoruz.)

ZA te'i açıyoruz.)

Ldx — # $00

Kaç tane yıldız basılmış olduğunu x registerinde saklıyoruz. Şu anda hiç yıldız yok...

Bekle Cpy $012 Bne Bekle

Yıldızların ilk görüneceği raster satırına kadar bekliyoruz.

Sty $DOO1

İşte onca yıldızın görünmesini sağlayan hile burada gizli. Eğer her üç satırda bir (sabredin, birazdan üç satırda bir olduğunu göreceksiniz) sprite'ın y koordinatına o raster satırının değerini verirsek, sprite'ın gösterilmesi biter bitmez aynı sprite tekrar gösterilmeye başlar. Bu sayede istediğimiz kadar sprite'ı alt alta dizebiliriz.

Lda — $SCOAA,X Sta $DO0OO Lda — $DO10 And —# $FE Ora — $CIGA,X Sta $DO10

$C0AA adresinde bulunan değerler, yıldızların anlık

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