Amiga'daki 64

Sevgili Commodore Dergisi, Derginizi 5-6 aydan beri okuyorum. Yakında AMIGA 500 almayı düşünüyorum. AMIGA 500'e 1541 bağlanıp C-64 programları işletildiğini biliyorum ve duyduğuma göre C-128 gibi C-64 moduna geçebiliyormuş. Eğer geçebiliyorsa C-64'ün kartuşlarını kullanabilir mi? Bir de pek sanmıyorum ama, dataset takılabilir mi? Fişimi değiştirmek gerekli mi? Laser printer takılabilir mi? Türkiye'de renkli laser printer var mı?

M. Oğuz Gölge

Sayın M. OĞUZGÖLGE,

AMIGA, C64 emülatör programları yardımı ile C64 programlarının bazılarını kullanabiliyor. Ancak bunu C128 bilgisayarının, C64 programlarını kullanması ile karşılaştırmayız. C128 içinde üç bilgisayar var denebilir ve bunlardan birisi C64. C64 modundayken bütün C64 programlarını ve ALET'lerini normal bir C64'teki gibi kullanabilirsiniz. Ancak AMIGA'da emülatör vasıtası ile C64'ün tüm programlarını kullanamazsınız. Kullanabildiğiniz programlar da normal bir C64'tekine nazaran çok ağır çalışır. Emülatör yardımı ile sadece 1541 ve printer aletlerini kullanmak mümkün olur. Kartuş ve teyp kullanmak mümkün değildir. AMIGA'ya laser printer takmak mümkündür. Daha doğrusu her türlü yazıcıyı bağlayabilirsiniz. Türkiye'de henüz renkli lazer yazıcı yok.

C64 için Püf Noktaları

Görüntü elde ederken ilginç efektler elde edilmesini sağlayan bir teknikten bahsedeceğiz. Tekniğimizin adı RASTER INTERRUPT. Bu tekniği anlatmadan evvel ekranda bir görüntünün nasıl elde edildiğini görelim. Ekranda görüntü, eğer yakından bakarsanız kolaylıkla görebileceğiniz çizgilerin birleşmesinden oluşuyor. Bildiğimiz gibi ekranda görünen karakterler sekiz çizgiden oluşur. Ekran kontrolünü sağlayan VIC chip'inin 18 numaralı yazmacında o anda gösterilen ekran satırının numarası yer alır. Bu yazmacın yer aldığı adres, 53248 numaralı adrestir.

PRİNT PEEK(53266)

Komutu çalıştığı anda ekranda gösterilmekte olan satırın numarasını elde ederiz. Ancak ekran bir saniyede 25 kere tarandığından bu değerler BASIC kullanılarak sağlıklı bir şekilde elde edilemez. Bu yüzden gerekli programı makine dilinde yapmamız gerekir. Ekranda gösterilen her satıra RASTER LINE adını veriyoruz. Bir RASTER ekranda gösterilmeden programı durdurmak mümkündür. Bu işleme RASTER INTERRUPT adı veriliyor. Bu işlem için Interrupt yazmacına gerekli değeri vererek merkezi işlemciyi durduruyoruz. Bundan sonra sıra istenilen satır numarasının belirtilmesine geliyor. Bunun için 18 numaralı yazmaca istediğimiz değeri veriyoruz. Interrupt işleminin makine dili kullanılarak gerçekleştirilmesi gerekir. Program döküm ekindeki ilk tam bu işlemi gerçekleştiriyor. Raster Interrupt işlemine örnek olarak program döküm ekindeki ikinci programa bakın. Bu program ekranın bir kısmının farklı bir fon rengiyle gösterilmesini sağlıyor. Böylece ekranda bir veya birden fazla satırı önemli olarak belirtebiliriz. Programın genel olması bakımından sadece farklı renkte gösterilen satırın rengini ve diğer kısımların renginin değiştirilebilmesi mümkün. Gerekli renk değişiklikleri POKE komutuyla yapılabilir. Örnek program renkli satırı standart raster satırı genişliğinde hareket ettirmenize izin veriyor. Bir raster satırı sekiz oluşuyor. Renkli satırı yukarı veya aşağı hareket ettirmek için kürsor tuşlarını kullanabilirsiniz. Fonksiyon tuşları ile satırın rengini, diğer tuşlarla geri kalan kısımların rengini değiştirebilirsiniz. İlk olarak birinci programı yükleyip çalıştırın. TAMAM yazısı çıktığında ikinci programı yükleyip çalıştırabilirsiniz. İkinci program renkli satırı kürsor tuşları ile istediğiniz şekilde kontrol etmenizi sağlayacaktır. Programı kendi amaçlarınıza uygun şekilde değiştirebilirsiniz. Raster satırı 251 ile 254 numaralı hafıza adreslerine POKE edildi. 251 ve 252 numaralı adreslere farklı rengin çıkacağı raster satırı, 253 ve 254 numaralı adreslere birinci ve ikinci karakterlerin renk kodları POKE ediliyor. Raster interrupt yapıldığında sadece arka plan renklerinin değiştirilmesinden başka işler de yapabiliriz. Mesela iki grafik ekranı birbirine karıştırılabilir. Veya ekranda hem yazı ekranı hem de grafik ekranı gösterilebilir. Hattâ bu yöntemle aynı anda iki ayrı karakter setini kullanmak bile mümkün olabilir. Bu yöntem kullanılarak normalde C64'de mevcut olmayan efektler elde edebiliriz. Normal olarak sekiz sprite'dan fazlası gösterilmezken raster interrupt ile bu mümkün oluyor. İlk olarak sekiz sprite'ı ekranın üst bölümünde gösteririz. Belirli bir raster satırına gelindiğinde sprite koordinatları ve belirteçleri ayarlanıp ekranın alt kısmında başka bir sekiz sprite daha gösterilir. İsterseniz ekranı ikiden fazla parçaya bölebilirsiniz.

OYUNLAR İÇİN KOLAYLIKLAR

Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. Whrirynd (Nurettin Ali BERKOL, İstanbul) Oyuna başladıktan sonra Joystick'i sola çekerek ve F1'e basarak diğer bölümlere geçebilirsiniz.

Commando, Punchy, Hunchback, Boulderdash, Falcon, Patrol, Miner 2049'er (Hakan KANTAŞ, İstanbul)

Commando : POKE 2225,X
Punechy 1: POKE 15458,X
Hunchback POKE 1647,X
Boulderdash : POKE 4044,X
Falcon Patrol : POKE 4140,X
Miner 2049'er : POKE 2685,65:POKE 2474,255
X: Almak istediğiniz hak sayısı.
Phantoms of The Asteroid, Pitfall, Bmx Simulator,
Orpehus and Undereworld, Ghostbusters (Ethem ELA
GÖZ, Merzifon)
Oyunları yükledikten sonra RESET edin ve POKE'ları
yazın. SYS adressi ile çalıştırın.
POKE 30475,173
POKE 31266,173
POKE 24729,3
POKE 22753.,96
SYS 30210
Pitfall
POKE 5393,255
BMX Simulator
POKE 4503,X
SYS 4096
X yerine O ile 6 arasında bir sayı yazın
Orpehus and underworld
POKE 10118,X
SYS 9728
X yerine 1 ile 255 arasında bir sayı yazın

Ghostbusters İsim yazdıktan sonra Banka Nosuna 0, 12, PITY yazın ESRO.4 turbosu ile kilitlenmiş programları açan POKE komutları Programı yüklemeden evvel POKE 2048, 173 yazın. Program yüklendikten sonra POKE 2048, 0 yazın. Program artık açık. Bu bilgileri gönderen arkadaşlarımıza teşekkür ediyoruz. Şimdi bazı arkadaşlarımızın oyunlar hakkında sordukları sorulara cevap verelim. İstanbul'dan Nurettin Ali Berkol bazı oyunlarda yapılmasını söylediğimiz RESET işlemini soruyor. SYS 64738 komutuyla reset edebilirsiniz. Bir başka yol da reset switch kullanmak olabilir. Bu parçayı taktığınızda istediğiniz bir oyunun herhangi bir yerinde bilgisayarı reset edip oyunun içine girmeniz mümkün olur. Ancak List komutuyla oyunu göremezsiniz. Programı incelemek için bir monitör programı kullanmanız gerekir. Bursa'dan Savaş Akyavaş The Last Ninja oyununda bir sonraki düzeye canavarı öldürdükten sonra nasıl geçeceğini soruyor. Kendisi kaset veya disket kullanıcısı olduğunu belirtmemiş. İlk bölümün sonunda canavar uyutulduktan sonra normal olarak bir sonraki bölümün yüklenmesi gerekiyor. Eğer kaset kullanıcısı iseniz büyük ihtimalle sadece oyunun ilk bölümüne sahipsiniz. Program bir sonraki bölümü yüklemeye çalışıp başaramayınca ekran kararıyor.

MAKİNE DİLİ

C64'te işimize yarayabilecek önemli adresleri incelemeye devam ediyoruz. $0014-$0015: ON GOTO, ON GOSUB, LIST ve RUN komutları için hedef satırların numaraları tutulur. Bu bilgi için iki byte gerektiğinden iki adres kullanıyoruz. İstenilen satır numarası LOW/HI formatında bu iki adreste saklanıyor. Ayrıca PEEK, POKE, WAIT ve SYS komutlarındaki adreslerin belirtilmesinde de burası kullanılıyor. LIST komutu listelenmesi istenen en büyük satır numarasını burada saklar. Eğer bütün programın saklanması istenirse bu iki adreste $FFFF değeri saklanır. $002B-$002C: Bu iki adresteki değer BASIC programın başlangıç adresini taşır. Bu değerleri değiştirerek BASIC programların hafızada yer aldığı bölgeyi değiştirebiliriz. Bu tür uygulama bize ne kazandırabilir? (1) Normalde BASIC programa ayrılmamış bir hafıza bölgesini BASIC programlara aitmiş gibi göstererek bu kısmı diskete veya kasete çekebiliriz. $0045 adresindeki değerin saklanacak bölgenin en son adresinden bir fazlaya ayarlanması gerekir. (2) BASIC programın başlangıç adresi normalde $0801'dir. Bu adresi daha yukarı alarak aşağı RAM bölgesinde korunmuş bir alan elde edebiliriz. Bu alanı sprite için veya HİRES için kullanabiliriz. (3) Hafızaya aynı anda birden fazla BASIC program yükleyebiliriz. Başlangıç ve bitiş belirteçleri ayarlanarak istenilen program çalıştırılabilir. Programların nerede başlayıp nerede bittiğini $002B-2C ve adreslerindeki değerleri değiştirerek ayarlayacağız. Bu teknikle iki BASIC programını birleştirmek de mümkün olur. Bu işlemler sırasında yeni program başlangıç adresinden bir evvelki adresin değerini sıfır yapmak gerekir. Mesela normalde $0800 adresinin değerine bakarsanız 0 olduğunu görürsünüz. $002D-$002E: Bu adreslerde yer alan değer BASIC programın bittiği adresten (BASIC programın bittiği yer) itibaren saklanır. Diziler kendileri için ayrılmış başka bir bölgede tutulurlar. Her değişken yedi byte uzunluğundadır. Bunun iki byte'ı değişkenin ismi için geri kalan kısmı da değişkenin değeri için kullanılır. Değişkenler ilk kullanıldıkları sıra ile saklanırlar. Daha evvel de söylediğimiz gibi sık kullanılması gereken değişkenleri programın başında kullanarak programın hızını arttırabilirsiniz. Bir değişken bir kere açıldıktan sonra silinemez. Diziler değişkenlerden sonra saklandıkları için her yeni değişken kullanıldığında dizilerin yedi byte kaydırılması gerekir.

CLR, NEW, RUN ve LOAD komutları çalıştığında $2D-$2E adreslerinde yer alan belirteç BASIC programın bittiği adresin bir sonrasını gösterecek şekilde ayarlanır. Bir programda yapılan değişiklik bu belirtecin değişmesine sebep olur. Bir program içinde LOAD komutu çalıştığında bu belirteç değiştirilmez. Böylece yeni yüklenen program ilk programdan daha kısa olmak şartı ile ilk programın değişkenlerini ve değerlerini kullanabilir. $0037-$0038: Bu adreslerde BASIC yorumlayıcısına açık RAM bölgesinin en son adresi yer alır. Normalde bu değer $9FFF'dir. Ancak bilgisayara bir kartuş takılı ise bu değer çevrilir. BASIC programa açık RAM bölgesini bu adresi değiştirerek azaltıp hafızada güvenli bir bölge açabilirsiniz. BASIC'in kullandığı hafızanın küçültülmesinden sonra CLR komutunu kullanmak gerekir. Böylece açmış olduğumuz hafıza alanı karakter dizilerinden korunmuş olur. RS-232 kullanıldığında BASIC için ayrılmış olan hafıza bilgisayar tarafından otomatik olarak 512 byte azaltılır. Bu kısımda yer alan değişken varsa kaybolur. $0039-$003A: Bu iki adreste en son işlenen BASIC komutun satır numarası saklanır. Eğer program çalışmıyorsa adresinin değeri $FFFF olur. BASIC program çalışırken bu adreslerin değeri o an işlenen satırın numarasını içerir. Satır numaraları 0 ile 63999 arasında olabilir. $003B-$003C: STOP, END komutları çalıştırıldığında veya BREAK tuşu ile program durdurulduğunda $39-$3A adreslerinin içeriği bu adreslere kopyalanır. Ve $3A adresinin değeri $FF olur. Eğer CONT komutu çalıştırılırsa $3B-$3C adreslerinin değeri tekrar $39-$3A adreslerine kopyalanır. Böylece program kaldığı yerde çalışmasına devam edebilir. $00BA: Bu adreste kullanılmakta olan alet numarası saklanır. Alet numaraları $00'dan $1F'e kadar olabilir. Ancak bu numaraların hepsi aletler için kullanılmaz. 3 numaradan büyük alet numaraları seri kabul edilir. Standart durumda mevcut olan alet numaraları şöyledir:

0 — Klavye 1 — Teyp 2 — RS-232 3 — Ekran 4 — Yazıcı 5 — Yazıcı

6 — Yazıcı/Plotter 8 — Disket sürücü 9 — Disket sürücü

Bu adresin içeriği $00 olursa ekranda karakterler normal olarak basılır. Eğer adresin değeri $12 olursa karakterler ekrana yazılırken fon rengi karaktere, karakterin rengi ise fona kullanılır. Bunun için karakter kodlarına $80 eklenir. Ekranda karakterlerin bu şekilde yazılmasını sağlamak için CTRL-RVS tuşlarına birlikte basmak gerekir. Tekrar normale dönmek için CTRL-OFF tuşlarına birlikte basılır.

$00CC: Adreslerin değeri $00 iken kürsor yanıp söner. Eğer adresin değeri sıfırdan farklı bir değerse kürsor blok halde gösterilir. $00FB-$00FE: Bu adresler BASIC tarafından kesinlikle değiştirilmediklerinden makine dili programlarında kullanabilirsiniz. $0286: Bu adresin değeri, karakterlerin ekrana hangi renkte yazılacaklarını belirler. Yazılım işlemi sırasında karakterler ekran RAM'inde saklanır. Aynı zamanda renk RAM'ında bunların karşılığı saklanır. Ekrana yazılan karakterlerin renklerini üç şekilde değiştirebilirsiniz. (1) CTRL veya CBM tuşlarından birini basılı tutup 1 ile 8 arasındaki tuşlara basarak 16 renkten birini seçebilirsiniz. (2) Ekrana istenen renk kodu basılır. (3) Bu adrese istenen renk kodu POKE edilir. Her renk için POKE, CHR$ ve klavyedeki karşılığını bir tablo halinde görelim:

Renk POKE CHR$ KLAVYE Siyah 0 144 CTRL 1 Beyaz 1 5 CTRL 2 Kırmızı 2 28 CTRL 3 Cyan 3 159 CTRL 4 Mor 4 156 CTRL 5 Yeşil 5 30 CTRL 6 Mavi 6 31 CTRL 7 Sarı 7 158 CTRL 8 Oranj 8 129 CBM 1 Kahverengi 9 149 CBM 2 Pembe 10 150 CBM 3 Koyu gri 14 151 CBM 4 Normal gri 12 152 CBM 5 Açık yeşil 13 153 CBM 6 Açık mavi 14 154 CBM 7 Açık gri 15 155 CBM 8

ETAPLAR KURALI:

Bir programın tüm görevlerini “bir hamlede” çözmeye çalışmayın. Bunun yerine tek tek blokları ardarda girin ve herbirini olabildiğince denemeden geçirin. Böylece olası hataları daha doğmadan ortadan kaldırabilirsiniz.

APAÇIK KURALI:

Değişken adlarını daima kullanım amaçlarına karşılık gelecek şekilde belirleyin. Yani sadece A, B, C vb. şeklinde değil, örneğin Noktalar için NO, Yatay Konum için YK, Dikey Konum için DK, (ses komutlarında) Frekans için FR vb. Gereksiz fazla yükler oluşturmak zorunda değilsiniz; yani değişken adı olarak en fazla iki ya da üç harften fazlasını kullanmanıza gerek yoktur. Uzun adlar, programın süratinin büyük ölçüde düşmesine neden olur.

SIRALAMA (KATAR) KURALI:

Bir program yapmak istiyorsanız, hemen bilgisayarınıza saldırmayın. Önce bir kâğıda programdan yapmasını istediğiniz işleri alt alta tek tek yazın. Örneğin bir labirent programı için bu işler şöyle sıralanabilir: 1) Ekran rengi, labirent duvarları ve metin; 2) Labirentin ekranda çizilmesi; 3) Rastlantısal sayılarla bir figür için pozisyon belirlenmesi; 4) Joystick'in kullanılması ve figürün hareket ettirilmesi; 5) Nokta sayacının konulması vb. Bu tür bir ayrıştırma sayesinde, program dökümünü incelemenizi çok kolaylaştıracak mantıksal program blokları elde edersiniz. Profesyonel programcılar, programın tüm akışının büyük hamleler halinde gösteril-

Bir ev bilgisayarı alan ve kendisi program yazmak isteyen kişi, birtakım başlangıç zorluklarını göze almalıdır. Bu zorluklar karşısında yılgınlığa kapılmadan önce birkaç basit temel kuralı öğrenmekte yarar var.

diği akış diyagramları çizerler. Bu diyagramlarda farklı fonksiyonlar için farklı semboller kullanılır; örneğin giriş, çıkış, start, stop vb. için veya program bir IF...THEN koşuluyla dallanıyorsa. Ama hobi düzeyinde yapılan programlama çalışmasında, bu sembolleri bilmeden de, akış diyagramına benzer bir şema yapmanız yararlıdır.

ARALIK KURALI: Programı yazarken satır numaraları arasında büyük aralıklar bırakın. Acemiler için kitaplarda önerilen onarlı aralık miktarı çoğu zaman yetersiz kalır, çünkü gerekli bazı komutlar ancak belli bir süre sonra öğrenilir ve araya sokulmaya çalışılır. Ellili adımlarla program yazmaktan çekinmeyin, çünkü satır numaralarının yüksek olması ne programın akışını yavaşlatır, ne de bellekte küçük aralıklı programlardan daha fazla yer kaplamasına neden olur.

TÜRKÇE BASIC KURALI:

Bildiğiniz gibi BASIC komutları İngilizce'dir. Bilgisayara yeni başlayanlar için kendi fikirlerini, bir programı ya da tek tek görevler halinde verimli bir BASIC satırı içinde toplayabilmek zor ve sıkıcı gelebilir. Bu durumda, istenen görevi önce kendi anadili olan Türkçe'de formüle edip, daha sonra bunu BASIC'e çevirmesi çok daha verimli olacaktır. Örnek: “Eğer figürün yatay pozisyonu = 100 ise, “harika, vurdum' yaz, oyuncuya bir sayı ekle ve 350 satırına geri dön.” BASIC'te: IF YK = 100 THEN PRINT “HARIKA, VURDUN”: NO = NO + 1: GOTO 350.

REM KURALI:

Eğer bir BASIC satırı REM ile başlıyorsa, makine tarafından komut olarak yorumlanmaz ve program akışı sırasında atlanır. Bu nedenle REM satırlarına, programcı açısından gerekli olan uyarılar yazılır. Bu satırlar, doğal olarak bir miktar bellek alanına mal olur ve programın akış hızını düşürür. Bu nedenle her komut satırını birtakım REMarkables (uyarılar) ile doldurmaya kalkmayın. Anlamlı olan, her program bloğunun bir REM satırıyla başlamasıdır. Böylece kolayca anlaşılabilecek bir program yapısı elde edersiniz.

DEDEKTİF KURALI:

Hata uyarılarında bazen şüpheyle kafa sallayarak bağırabilirsiniz: “Çalışmalıydı! Mutlaka çalışmalıydı!!” Aslında kendinizden bu kadar emin olmamalısınız, çünkü bilgisayar hata yapmaz. Bu nedenle hata uyarılarıyla karşılaştığınızda soğukkanlılığınızı koruyun ve program dökümünü satır satır tarayın. Önünüze gelen görevleri aklınızdan yapın, tüm atlama ve geri dönme komutlarını yerine getirin. Mutlaka bir noktada hatayı bulacak ve kendinize şöyle diyeceksiniz: “Tabii ya, bu satırın çalışmaması normal.”

DEĞİŞİKLİK KURALI

Çoğu zaman satır numaralarının değiştirilmesi zorunluluğuyla karşılaşırsınız. Ancak çoğu ev bilgisayarında bu işi yapmanıza yardımcı olacak RENUMBER komutu yoktur. Görünürde “açıklanamayan” nedenlerden, numara değişikliğinden önce her şey iyi giderken, değişiklikten sonra program çalışmaz hale gelebilir. Böyle bir durumla karşılaştığınızda, tüm atlama komutlarında (GOTO, GOSUB) yeni karşılık gelen satır numaralarını yazıp yazmadığınızı kontrol edin. Hata, çoğunlukla bunu yapmamış olmanızdan kaynaklanacaktır. (Böylece bu uğraşınız sırasında REM satırlarını program bloklarını bölmekte kullanmanın yararını kesin olarak anlayacaksınız.)

Programlarınızı geliştirirken başlangıçta son derece tutumlu davranın ve gereksiz özel ses efektleri ya da tüm ekranı kaplayan PRINT komutları gibi lükslere kendinizi kaptırmayın. Ancak programınız tam ve doğru olarak çalışır hale geldikten sonra, bu tür şıklıkları programın içine teker teker katabilirsiniz. Böyle davranmanız, örneğin blokların yerini değiştirmek için satır numaralarını değiştirmek zorunda kaldığınızda, zamandan tasarruf etmenizi sağlayacaktır.

“GÜVENLİ GÜVENLİDİR” KURALI:

Eğer bilgisayarınızı kapatırsanız, programınız kaybolur. Bir program dökümünün güvenceye alınması için gerekli aletler, Datasette veya disket sürücüdür. Bazı durumlarda ise makine birdenbire “uçar”; bunun anlamı, makinenin artık verilen komutları kabul etmemesi ve bellekteki programın kaybolmasıdır. Böyle bir olay, doğal olarak çok sinirlenmenize neden olur. Bu nedenle programınızı, çalıştığınız bölüm tamamlanmamış bile olsa, sık sık kaydedin. Makine arada uçsa bile, emeğinizin bir bölümünü kurtarmış olursunuz. Bu bağlamda, bir bilgisayarın gerekliliğini de söylemeden geçmeyelim. Bu gereç sayesinde programınızı henüz geliştirilme aşamasındayken bile, kâğıda dökebilirsiniz. Böylece bir taşla iki kuş vurmuş olursunuz: Diskette veya kasette saklamamış olduğunuz bir program aniden uçarsa, program satırlarınızı basılı dökümden yararlanarak yazabilirsiniz. Biraz sıkıcı bir iş olmasına rağmen, tüm programı baştan oluşturmaktan iyidir.

MAS

Şekil, sağa, sola v.b.

Ele)