Makine Dilinin Püf Noktaları
Vedat Hallaç: Herkese merhaba. Hatırlayacağınız gibi geçen ay köşemizde uyduruk bir introya başlamıştım, ama programları döküm ekinde çıkmamıştı. Bu ayki derginin döküm ekinde geçen ayın programlarını bulabilirsiniz. Biliyorum, geçen ay bu sayıda introyu yapmaya devam edeceğimizi söylemiştim, ama Samsun'dan Bay Derya Kılıçlı'nın gönderdiği programları görünce bu isteğimden vazgeçtim. Derya Bey'in bana gönderdiği diskte dört adet introyla birlikte, tamamen intro teknikleriyle yapılmış bir oyun da bulunuyordu. Bu oyun oldukça ilgilimi çekti ve Derya Bey'in gönderdiği dokümanlarla birlikte incelendiğinde makine dilini geliştirmenizde oldukça yararı olacağını düşündüm. Program, yazarken canınızın çıkmasını engellemek için sıkıştırıldı. Bu sebeple incelemek için önce bir kez çalıştırmanız gerekli. Hiçbir koruma olmadığından dolayı RUN/STOP RESTORE tuşu kombinasyonuyla BASIC'e çıkıp, bir monitör programı aracılığıyla program üzerinde istediğiniz incelemeyi ve değişiklikleri yapabilirsiniz. Programı tekrar çalıştırmak için $2855
(10325) adresine sıçramanız yeterli. Oyunun asıl amacı, arabanızı 80 km boyunca engellerden kurtarabilmek. Bu yolla giderken karşınıza sizi öldürmek isteyen kayalar, zehirli bulutlar, zıplayan şeytanlar, kamyonlar ve ateş edebilen uçan daireler çıkacaktır. Ne yalan söyleyeyim, oldukça da zor bir oyun olmuş. Normal yollarla oyunu bitirmek hiç de kolay değil. Oyunun asıl adı “Springwood'dan Kaçış”. Bulunduğunuz yer, hepimizin yakından tanıdığı Freddy Krueger'in rüyalar alemi. Amacınız ise 80 km ilerde bulunan çıkışa, 1955 model Chevrolet'nizi kullanarak ulaşmak. Tabii Freddy'nin kabusları izin verirse...
Programından da Bahsedelim mi?
Oyun 7 adet interrupt rutininin birleşmesinden oluşmuş. Normal düzeyde ise program sonsuz döngüye giriyor. Yani tüm programın çalışması sadece interruptlarla yapılmış. Neden olduğunu anlamadıysam da, Derya Bey bunu özellikle yaptığını söylemiş. Sanırım iyi bir nedeni vardır bunun için. Programın kullandığı bellek bölgeleri ise şöyle: $0900-$1000: Tüm switchler, hesaplama ve zamanlama adresleri burada. Daha doğru bir tabirle değişkenler bölümü burası. Bazı önemli adresler ise şunlar: $09C8: Araba çarpışma açık/kapalı. $090B-$090C: Tüm zamanlama burada yapılıyor, 80 km burada sayılıyor. $090A: $D01E register bilgisi burada. $0908: Ateş açık/kapalı. $3800-$3C00: Arka kayan dağ manzaralarının resim dataları burada saklanıyor. $3D00-$4E00: Yaratıkların X 255 ($D010 bitleri) tablosu. Yaratıkların X sinüs tablosu. $0A00: Kamyon, uçan daire sinüs tablosu. $1220: Girişteki intronun renk şeritleri. $1270: Renk şeritlerinin zamanlama baytları tablosu. Şimdi de oyunu oluşturan 7 interrupt rutini hakkında daha detaylı bilgi verelim: 1. Interrupt: #$90 raster satırında başlıyor ve $1153 adresinde bulunuyor. Bu rutinin işi arkaplan görüntüsünü kaydırmak. 2. Interrupt: #$01 raster satırında başlıyor ve $1192 adresinde bulunuyor. Alt yolun kaydırılması ve müziğin çalınması işlerini hallediyor. 3. Interrupt: #$30 raster satırından başlıyor ve $1300 adresinde bulunuyor. Araba, kaya, bulut ve ateş hareketlerinin yapılmasını sağlıyor. 4. Interrupt: #$4A raster satırından başlıyor ve $15C4 adresinde bulunuyor. Zıplayan şeytana hayat veren rutin burada. 5. Interrupt: #$52 raster satırından başlıyor ve $16A8 adresinde bulunuyor. Uçan daire ve mermilerin hareketlerinden sorumlu rutin burada çalışıyor. 6. Interrupt: #$5B raster satırından başlıyor ve $2A8E adresinde bulunuyor. Kamyonun hareketleri burada ayarlanıyor. 7. Interrupt: #$62 raster satırından başlıyor ve $2568 adresinden başlıyor. Oyunun ana kontrol rutinleri burada toplanmış. Çarpışma kontrolleri, skorun yazılması, glow yapılması, GAME OVER ve HAPPY END sayfalarına geçilmesi tamamen bu rutin tarafından