AMIGA BASIC
Retro bilgisayar
Merhaba... Dergimizin birinci sayısından beri süregelen Amiga Basic dersleri, tüm eleştiri ve "yılan hikayesi" benzetmelerine aldırmadan sürüyor. Şaka bir yana, hep birlikte epeyce yol katettik değil mi? Hemen söze girelim ve SCROLL komutu ile başlayalım.
SCROLL KOMUTU: Kullanım Şekli: SCROLL (x1,y1)-(x2,y2),kayma-x,kayma-y
Şekilleri ekranda istenen yönlere kaydırarak hareket ettirmek için kullanılır. SCROLL, ekranda dört köşe bir alan tanımlayarak onu herhangi bir yöne kaydırmanıza izin verir.
(x1,y1)-(x2,y2), kaydırmak istenen alanı tanımlayan pixel koordinatlarıdır, kayma-x, yatay kayma; scroll-y dikey kayma için kullanılacak pixel sayısıdır. scroll-x için verilen pozitif değerler sağa doğru, negatif değerler sola doğru; scroll-y için verilen pozitif değerler ise aşağı, negatif değerler yukarı doğru kayma sağlar.
SCROLL yönergesi her çalıştırıldığında istenen kayma hareketini bir kez yapar. Sürekli bir kayma isteniyorsa, SCROLL yönergesi bir döngü içerisine yerleştirilebilir.
Aşağıdaki örneği yazıp çalıştırırsanız, komutun nasıl çalıştığını daha iyi anlayacaksınız:
X1=10:y1=10:x2=30:y2=20
d=1
DIM s% (6+ ((y2-y1+1) *2 *INT ((x2-x1
+ 16)/16)*d)/2)
SCREEN 1,320,200,d,1
WINDOW 1, "KAYAN YAZI", (0,0)-
(311,185),20,1
LINE (x1,y1)-(x2,y2),1,bf
GET (x1,y1)-(x2,y2),s%
PUT (x1,y1),s%
LOCATE 2,6:PRINT "Durdurmak için
mouse'u klikleyin"
LINE(0,100)-(311,150),1,b
WHILE MOUSE(0)=0
PUT (1,110),s%
FOR x=1 TO 20
SCROLL (1,101)-(310,149),5,0
NEXT x
WEND
SCREEN CLOSE 1
END
SCROLL, tüm bir ekranı ya da pencereyi kaydırmaz; sadece pencere içindeki küçük bir bölümü kaydırır. Büyük bir alanı kaydırmaya çalışırsanız, hız düşer. Komuttan en iyi sonuç, düşük çözünürlük ve az bit plane ile alınır.
SGN KOMUTU: Kullanım Şekli: Sonuç=SGN(değer)
Sayısal değerin sıfırdan küçük, sıfıra eşit ya da sıfırdan büyük olduğunu bildirir:
Sonuç -1 olursa, değer negatif; Sonuç 0 olursa, değer 0; Sonuç 1 olursa, değer pozitif olur. Bu fonksiyonu, aşağıdaki komutun değişkeni (a) yerine çeşitli değerler yazarak deneyebilirsiniz:
PRINT SGN(a)
SHARED KOMUTU: Kullanım Şekli: SHARED değişken-listesi
Bu komut altprograma ana program değişkenlerinden değişken-listesinde belirtilenlerin genel değişkenler olacağını bildirir. SHARED komutundan sonra verilen değişken isimleri, birbirlerinden virgül ile ayrılır. Birlikte kullanılacak değişkenlerden biri ya da bir kısmı dizi değişkeni ise, isminin sonuna boş bir parantez yerleştirilir.
SHARED komutu, sadece altprogram içinde kullanılabilir. Altprogram farklı değişkenleri listeleyen birden fazla SHARED yönergesi içerebilir.
SUB Test STATIC
SHARED TestNo,TastDizi(),Test$
SIN KOMUTU: Kullanım Şekli: SIN(değer)
SIN fonksiyonu, radyan olarak girilen açı değerinin sinüsünü hesaplar. Fonksiyon çeşitli açıların sinüs değerini bulmak için kullanılabileceği gibi, program içinde de çeşitli hesaplamalarda kullanılabilir:
PSET(0.90)
FOR x=0 TO 617
y=90+80*SIN(x/40)
LINE -(x,y)
NEXT x
programı, ekrana sürekli bir eğri çizer.
SLEEP KOMUTU: Kullanım Şekli: SLEEP
Bu komut, bir event trapping yaptığınız zaman çok faydalıdır. Komutu kesmek için bir şey yapılana kadar programın çalışmasını durdurur ve event trapping'i kontrol altına alabilir. Tabii bu her durumda gerekli değildir. Aşağıdaki işlemler SLEEP fonksiyonunun işlevini durdurur: . Klavyeden bir tuşa basmak . Sol mouse tuşunu kliklemek . Pulldown menülerden bir seçim yapmak . Objelerin çarpışması . Bir TIMER çalışmasının sona ermesi
SOUND KOMUTU: Kullanım Şekli: SOUND frekans, süre [ , [ses yüksekliği] [, ses kanalı]]
Bu komut, belirtilen özelliklerde bir ses üretir.
FOR x=0 TO 255:SOUND 880.1.x:
NEXT x
komutunu yazın ve çıkardığı sesi duyun. Aynı komutu stereo için aşağıdaki şekilde kullanabilirsiniz:
FOR x=0 TO 255
SOUND 440,l,x,0
SOUND 440,l,255-x,l
NEXT x
Evet sesi ürettik, ama melodik olmaktan çok uzak değil mi? Sesleri melodik yapmak için, frekans ve oktav bilgilerine ihtiyacımız var.
frekans, hertz cinsinden verilir ve bir tamsayı ya da ondalık sayı olarak verilebilir. Minimum frekans 20, maksimum frekans ise 15000 hertz'dir. Minimum frekans değerinden daha küçük bir değer girilirse, AmigaBasic 20 hertz'lik bir ses üretir. Aynı şekilde 15000'den daha yük-
AMIGA BASIC
sek hertz'de bir frekans değeri verilirse de, bu ses 15000 hertz olarak üretilir. Aşağıdaki tablo, 4 oktav için frekans değerlerini gösteriyor:
Nota, Oktav Frekans (hertz) Nota, Oktav Frekans (hertz)
c,1 130.82 c,3 523.28 d,1 146.83 d,3 587.28 e,1 164.82 e,3 659.28 f,1 174.62 f,3 698.48 g,1 196.00 g,3 784.00 a,1 220.00 a,3 880.00 b,1 246.94 b,3 987.76 c,2 261.63 c,4 1046.52 d,2 293.66 d,4 1174.52 e,2 329.63 e,4 1318.52 f,2 349.23 f,4 1396.92 g,2 392.00 g,4 1568.00 a,2 440.00 a,4 1760.00 b,2 493.88 b,4 1975.52 c,5 2093.00 süre, 0 ile 77 arasında bir sayısal değerdir. Sesin çalma süresinin uzunluğu burada tanımlanır. Bir saniye 18.2 değerine karşılık gelir. Maksimum değer olan 77, 4.25 saniye sürer. Aşağıdaki tabloyu, süre hesaplamalarında kullanabilirsiniz:
Saniye olarak SOUND Süre Saniye olarak SOUND Süre
Süre Birimi Süre Birimi 0.1 1.8 0.8 14.6 0.2 3.6 1.0 18.2 0.4 7.3 2.0 36.4 0.5 9.1 3.0 54.6 0.6 10.9 4.0 72.8
Diyelim ki 3.5 saniyelik bir sese ihtiyacınız var. 3.0 saniyelik değere bir saniyeliğin yarısını ekleyerek istediğiniz değeri bulursunuz:
54.6+9.1=63.7 ses yüksekliği, bildiğimiz volüm ayarı. En yüksek ses 255, en düşük ise 0 olarak kullanılıyor; tanımlı değer 127.
ses kanalı argümanı ise sesin 4 ses kanalının hangisinden verileceğini belirler. 0 ve 3 sol ses çıkışını, 1 ve 2 sağ ses çıkışını tanımlar; tanımlı değer 0'dır.
SOUND WAIT SOUND RESUME KOMUTLARI: Kullanım Şekli: SOUND WAIT SOUND RESUME
SOUND WAIT, SOUND yönergesinde verilen ses dizisinin çalmasını durdurur ve kalanını tutar. SOUND RESUME yönergesi verilene kadar da çalmaz. Yani birinci komut bekleme, ikinci komut kaldığı yerden devam sağlıyor.
Şimdi komutlarımızı kullanarak bir müzik çaldıralım. Bakalım tanıyabilecek misiniz?
SOUND WAIT
Bilgial:
READ frek,sur,vol,kan
IFfrek=-1 THEN Play
SOUND frek,sur,vol,kan
GOTO Bilgial
Play:
SOUND RESUME
DATA 523.23,15,127,0,659.28,15,96,1,784,15,96,2
DATA 784.15,15,222,0,987.76,15,180,1,1174.52,15,180,2
DATA 698.48,6,127,0,0,6,0,1,0,6,0,2
DATA 659.28,6,127,0,0,6,0,1,0,6,0,2
DATA 587.28,6,127,0,0,6,0,1,0,6,0,2
DATA 1046.52,15,225,0,1318.52,15,180,1,1568,15,180,2
DATA 784,24,180,0,987.76,24,160,1,1174.52,24,160,2
DATA-1,-1,-1,-1
SPACE$ KOMUTU: Kullanım Şekli: Dizi=SPACE$(uzunluk)
uzunluk ile belirtilen sayıda boşluk içeren bir yazısal dizi oluşturur, uzunluk 0 ile 32767 arasında bir tamsayıdır. Bu tür yazısal diziler ekran ve printer çıkışlarının formatını ayarlamak için çok kullanışlıdır. Aynı zamanda ekrandan bir satır silmek için de kullanılabilir.
SPACE$ komutu ile başlık çubuğu olarak kullanılabilecek renkli çubuklar da elde edilebilir. Aşağıdaki örnekte olduğu gibi:
COLOR 0,3
PRINTSPACE$(10)
LOCATE 1,3:PRINT"ADI:"
SPC KOMUTU: Kullanım Şekli: SPC(X)
Bir PRINT ya da LPRINT komutu içerisinde verilen x değeri kadar boşluk basar. x, atlanacak boş karakter sayısını verir ve 0 ile 255 arasında bir değer alabilir. Genel kullanımı aşağıdaki gibidir:
FOR x=1 TO 3
PRINT SPC(x)"AMIGA"
NEXT x
Bu küçücük program, AMIGA yazısını ekrana her seferinde bir karakter içeriden başlatarak yazar.
SQR KOMUTU: Kullanım Şekli: SQR(deger)
Verilen değerin karekökünü hesaplar, değer, sıfıra eşit ya da sıfırdan büyük olmalıdır. Çeşitli değerler vererek fonksiyonu deneyebilirsiniz.
STICK KOMUTU: Kullanım Şekli: STICK(n)
Bu komut, Amiga'ya bağlı joystick ile ilgili bilgi verir. Birinci mouse portundan takılan joystick A, ikinci porttan takılan joystick ise B olarak kabul edilir. x değeri, iki joystick'ten hangisinin ne yönde hareket ettiği hakkında bilgi verir:
Değer, Bilgi 0 Joystick 1'in x yönünde hareketi 1 Joystick 1'in y yönünde hareketi 2 Joystick 2'in x yönünde hareketi 3 Joystick 2'in y yönünde hareketi
STICK(x), joystick yukarı ya da sağa hareket etmişse 1 değerini; STICK(x), joystick'in hareketleri birbirine geçmişse 0 değerini; STICK(x), joystick aşağı ya da sola hareket etmişse -1 değerini alır.
STOP KOMUTU: Kullanım Şekli: STOP
Programın çalışmasını, açık dosyaları kapatmaksızın durdurur. STOP komutu ile çalışması durdurulan bir dosya, CONT komutu ile kaldığı yerden çalışmasını sürdürebilir.
Evet, bu aylık da bu kadar... Gelecek ay tekrar görüşmek üzere, hoşçakalın.