Bu sayfadaki yazılar
Sayfanın metni
Sayfa 16
180 DUN- TRUE 190 RETURN
Programınız GOSUB 100 ile altrutini çağırıyor. 100. satır DUN mantıksal değişkenine bakarak bu rutinin daha önce çağrılıp çağrılmadığını kontrol ediyor. Eğer DUN FALSE ise rutin çalıştırılır ve DUN TRUE yapılır. Böylece bu rutin bir daha çağrıldığında 100. satırdaki kontrole takılacaktır. 100. satırı şöylece kısaltabilirsiniz:
100 İF DUN THEN RETURN
Sonuç değişmez. Eğer rutin ilk çağrıldığında bir bölümünün diğer çağrılışlarında ise başka bir bölümünün çalışması isteniyorsa 100. satır şu şekilde değiştirilebilir.
100 DUN THEN ...(sadece ilk se- ferde)...:GOTO 180
NOT ayrıca sayısal değişkenlerde de kullanılabilir.
10 Az0 20B-NOTA 30 PRİNT B
sonuç olarak -1 alırsınız. NOT komutu gördüğü her 0 biti 1 yapar ve tam tersi. Eğer 0 ise 16 tane 0 bir var demektir. NOT ettiğinizde bu 16 bit şu hale gelir: 1111 1111 Bu da onluk düzende karşılık gelir. Buna “ikinin tamlayanı” sistemi denir. İkilik düzende 16 tane 1, 65535'e eşittir. Ancak bilgisayar normal ikilik düzeni kullanmaz, eski sayıların ifadesi için daha farklı bir yöntem izlenir. İkinin tamlayanı sistemi şöyle çalışır: 1. En soldaki hariç 15 biti al ve hepsini ters çevir (1'ler 0, 0'lar 1 yap). 2. Bu sonuca 1 ekle. 3. Sonuçtaki sayıya negatif de. En soldaki bite işaret biti diyebiliriz. İşaret bitinin 1 olması sayının negatif olduğunu ve işlemlerin yukarıdaki gibi işletilmesi gerektiğini gösterir. İşaret biti 0 ise sayı pozitiftir. Örneğin 1111 ... sayısını onluk düzene çevirelim. Yukarıdaki adımları takip edelim. Sayının her bitini ters çevirelim, elde edeceğimiz sayı 000 0000 0000 0000, Toplam 15 basamak aldığımıza dikkat edin.
2. Bu sayıya 1 eklenince elimizde 000 0000 0000 0001 sayısı olur. 3. Böylece 1111 1111 1111 1111 sayısının ikinin tamlayanı gösterimde onluk olarak “eksi bir” sayısına denk geldiğini görürüz. Sonuç olarak NOT 0'ın da nasıl ettiğini görüyoruz. 0000 sayısının onluk düzende kaç olduğunu hesaplamaya çalışın. En soldaki 1 sayısı onluk olarak bu sayının negatif olduğunu gösterecektir. Daha sonra anlatılan adımlar izlenerek -16 sayısı bulunur (16 sayısının bitlerini ters çevirip sonuca 1 eklemek 16 sayısını verir). Eğer sisteme PRINT NOT -16 komutunu verirseniz cevap olarak 15 sayısını alırsınız.
Ama Ne Bit açıklaması bize WAIT komutu için iyi bir ortam hazırladı. WAIT komutu genellikle normal programcılıkta sanılır ama bu doğru değildir. Her neyse, ilk önce bu komutun ne yaptığına bir bakalım. WAIT'in formatı şöyledir: WAIT HAF,A,X. Bilgisayar bellekte HAF (hafıza) adresindeki değeri A ve X değerleriyle karşılaştırır. Şimdi ise basit bir örnekle başlayalım. WAIT 211,1 yazın. C-128'de SHIFT tuşları ayrı ayrı bitlerde saklanırlar (C-64'teki hafıza adresi ise 653'tür. Yani yazacağınız şey 653,1'dir). Aşağıdaki program siz SHIFT tuşlarına basana kadar bekleyecektir.
05 HAF-211:1F FRE(0) THEN HAF-653 10 WAİT HAF,I 20 PRİNT “Şimdi 20,
5. satır hangi bilgisayar kullanılıyorsa ona göre hafıza adresini ayarlar (FRE komutundan hatırlıyorsanız. FRE(0) ile FRE(1) arasında bir fark vardı. Oysa C-64'te bu bir şey değiştirmiyordu. İşte 5. satırda FRE(0) ile FRE(1) ayrı değere sahipse hafıza adresi C-64'e göre ayarlanıyor. FRE(0) ile FRE(1)'in değeri farklıysa HAF değişkeninin değeri de değişmiyor). Şimdi size bazı tuşların onluk ve ikilik düzenlerdeki değerlerini veriyoruz.
Onluk — İkilik düzen — Her iki SHIFT tuşu 1 00001 COMMODORE tuşu 2 00010 CONTROL tuşu 4 00100 ALT tuşu 8 01000 CAPS LOCK 16 10000
Son iki tuş sadece C-128'de vardır. HAF adresinde 00000 değeri varsa bu tuşlardan hiçbirine basılmamıştır demektir. Eğer değer olursa tuşların hepsine birden basılıyor demektir. WAIT komutu AND ile kullanıldığında hangi HAF bitlerinin işlemi bilgilendirdiğini belirtir. Eğer SHIFT ve CONTROL tuşlarına basılıp basılmadığını kontrol etmek istiyorsanız WAIT HAF,5 yazmanız gerekir. Onluk düzendeki 5 sayısı ikilik düzende 1 ve 4. bitleri kapsar. Yani onluk düzende 1 ve 4. Bunlara 2, 4 veya 5. bitler dahil değildirler. Sadece SHIFT ve COMMODORE tuşları algılanır. İkisinden birine veya ikisine birden basılırsa program akışına devam eder. WAIT HAF,A,X komutu, diğerlerinden biraz daha karışıktır. Mesela WAIT HAF,5,1 yazdığınızda bilgisayar SHIFT tuşu bırakılıncaya veya CONTROL tuşuna basılıncaya kadar bekleyecektir. Şimdi 10. satırı şekildeki gibi değiştirin:
TO MEM,5,1
Şimdi RUN yazın ve hemen SHIFT tuşuna basın. Program siz SHIFT tuşunu bırakana veya CONTROL tuşuna basana kadar bekleyecektir. (FOR-NEXT döngüsü siz SHIFT'e basana kadar geçecek olan zaman için konmuştur). Programınız başka tuşların basılmasını da bekleyebilir, Daha önce verdiğimiz tabloya bakarak 10. satırı değiştirin. Sprite veya grafik için olan bazı özel komutları listeye katmadım çünkü bazıları gerçekten de çok seyrek olarak kullanılıyorlar. Eğer size hâlâ garip gelen bazı komutlar varsa bana bunlardan bahsetmeyin. Onları kendi hallerine bırakın...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 17
ketmeyenler. Bu ay da bir Commodore dergisi alıp tamamen özel bilgisayarımıza ayrılmış olduğunu görmek ne büyük zevk, değil mi? Atölyemizde iki ayrı program gösterdik şimdiye kadar, Ne yazık ki ayrı ayrı kullanılmaları gerekiyor. Ama acele etmeyin, onları birleştirmeyi de öğreneceğiz. Geçen ay bir joystick kontrollü ok programı yapmıştık hatırlarsanız. Bu okun nasıl olup da BASIC programlarını etkilemeden ekranda dolaştığını detaylı olarak anlatmıştım geçen ay. Bu ay da bu ok programının bir uygulamasını vermeye söz vermiştim. Ne yalan söyleyeyim, kullanmaya kullanmaya BASIC'in ne kadar problem çıkardığını unutmuşum. Basit bir hesap makinesi (evet, bu ayın kö-
Ss elam Commodore 64'ünü hâlâ terleten dört işlemi yapabilecek bir hesap makinesi) yapmak için bile tam iki günümü harcamam gerekti. Eminim programda hâlâ hatalar bulunuyor. Bu yüzden sizden istediğim programı iyice incelemeniz ve hataları bulmanız. İsterseniz programı geliştirebilirsiniz de. Eğer programı bana diskette (veya kasette) gönderirseniz, disketinizin (veya kasedinizin) sağ salim size ulaşacağını garanti ederim (pul da gönderirseniz çok makbule geçer...). İsterseniz programdaki hataları ayıklamak yerine baştan bir hesap makinesi de yazabilirsiniz, En çok hatayı bulanların ve en iyi hesap makinesini yollayanların burada teşhir edileceğini(!) de eklemeliyim. Kim bilir, birer paket cips bile kazanabilirler... Hesap makinesine girişmeden önce ok programımızı çalıştırdıktan sonra hangi adreslerde ne gibi bilgiler bulabileceğinizi söylemeliyim sanırım: 49579: Ateşe basıldığında 0'dan farklı bir değer alır. Eğer tuş, vb. yaptıysanız ve sık sık oku kontrol etme imkanınız varsa bu adresin değerine bakarak ateş tuşuna basıldığı anı yakalayabilirsiniz, 49580-49581: Bu iki adreste, ekranda dolaşan okun tam olarak hangi X koordinatında (nokta olarak) bulunduğunu öğrenebilirsiniz. Bu X koordinatı 0 ile 319 arasında bir değer alır. Şu formülle X koordinatı hesaplayabilirsiniz: PEEK(49581)*256 + PEEK(49580) 49582: Bu adreste de okun Y koordinatını görürsünüz. 0 ile 199 arası bir değer alır. 49583: Okun ekranda hangi X karesinde bulunduğunu öğrenebilirsiniz. BASIC programlar genelde karakter ekranında çalıştığı için bu adres deminki X koordinatından daha sık kullanılır sanırım. 0 ile 39 arasında bir değer alabilir. 49584: Okun hangi Y karesinde bulunduğunu bu adresten öğrenebilirsiniz. 0 ile 24 arası bir değer alabilir. 49585-49586: Son ateş tuşuna basıldığında okun hangi X koordinatında bulunduğunu tutan adreslerdir. 0 ile 319 arası değer alırlar, Şu formülle tuttukları değeri bulabilir-