BASIC Mİ

Dizi 4 sayı sürecek. Birinci bölümde, yani bu bölümde, grafik komutlarını inceleyeceğiz. İkinci bölümü, müzik, sprite, karakter seti ve BASIC ile PASCAL arasındaki farkları ortadan kaldıran yapısal komutlara ayırdık. Üçüncü bölümde, özellikle programcıların çok işine yarayan yardımcı komutları ve matematiksel komutları söz konusu edeceğiz. Ve nihayet son bölümümüzün, ki en uzun bölüm olacak, konusu yazı ekranı, veri giriş çıkışı, yazı dizilerinin (string) kullanımı, hatalara (error) karşı önlemler ve COMMODORE 64 yan birimlerinin kullanılması olacak. Gerçi birinci sayımızda uzun uzun anlatmıştık, ama o sayımızı bulamayanlar için SIMON'S BASIC'in ne olduğunu kısaca anlatalım. Bu program, gerek kartuşta, gerek kasette, gerekse de diskette alabileceğiniz bir BASIC ilerleme programı. Yani, COMMODORE 64'ün kendi BASIC'i içinde olmayan bazı komutların kullanılmasını sağlayan bir program. Beraberinde getirdiği ve bizim tek tek inceleyeceğimiz 100'den fazla komut ile yukarıda da bahsettiğimiz grafik, ses vs. alanlarında programlar yazmak artık daha kolay ve hızlı hale geliyor. Ancak bazı okuyucularımızın düştüğü hataya lütfen siz de düşmeyin; SIMON'S BASIC'in emirleri kullanılarak yazılan programlar muhakkak SIMON'S BASIC'e gereksinim duyarlar. Bu programı bilgisayara yükleyip çalıştırmadan, bizim yayınladığımız ve SIMON'S BASIC kullanan programları yazmanızın hiçbir anlamı yok. Hatta kendi bilgisayarlarınızda SIMON'S BASIC kullanmadan yazmanız, sonra da arkadaşınızın bilgisayarında SIMON'S BASIC ile çalıştırmanız bile mümkün değil; daha yazma aşamasında bile bu programa ihtiyacınız var... Şimdi gelelim grafik emirlerine. Bildiğiniz gibi COMMODORE 64'ün iki tür ekranı var: Grafik ekranı ve yazı ekranı. Bu sayımızda grafik ekranına hükmeden komutları inceleyeceğiz. Yazı ekranı ile ilgili programlar son bölümümüzün konusu. Aşağıda açıkladığımız grafik komutlarının kullanım biçimlerini verirken, gönderilmesi gereken parametreler arasında MOD yazısını göreceksiniz. Öncelikle bunun ne olduğunu bilmeniz gerekiyor. Daha önceden de duymuş olabileceğiniz gibi, COMMODORE 64'ün iki tür grafik çözünürlüğü var. Biri az renkli 320 x 200, biri de çok renkli 160 x 200 çözünürlük. Bunlardan ilkini normal, ikincisini çok renkli olarak isimlendirmek mümkün. İşte MOD parametresi, çizimi yapan komutun ekrandaki etkisini bu iki tür ekrana göre belirleyecektir. Önce normal ekrandaki etkisini görelim. Eğer komutu kullanırken MOD yazan yere sıfır koyarsanız, komutun etkilediği alan silinir. Örneğin çizgi çizen bir komut ise, çizginin geçtiği yer silinir. Eğer MOD yerine 1 koyarsanız, bu kez normal çizim yapılacaktır. 2'nin anlamı, etkilediğin alanda nokta olan yerleri sil, olmayan yerlere de koy. Böylece etkilenen alanın negatifi çıkarılmış olur. Çok renkli ekranda, sıfırın anlamı aynıdır; geçtiği yeri siler. 1 ile çizim yapılan bölge 1 numaralı renge, 2 ile 2 numaralı renge, 3 ile de 3 numaralı renge boyanır. 4 numara, bir tür negatifleştirme özelliğine sahiptir. O numaralı rengi 3 numaralı renge, 1 numaralı rengi de 2 numaralı renge çevirir veya bunların tersini (3'ü 2'yi yapar). Eğer normal ekranda iseniz, kullanacağınız grafik komutlarının X koordinatları 0-319 arasında, Y koordinatları da 0-199 arasında olacaktır. Eğer çok renkli ekran kullanıyorsanız, bu sefer X koordinatları 0-159 arasında olacaktır. Y koordinatları aynen kalır. Şimdi gelelim komutlara. Öncelikle grafik ekranına nasıl geçeceğimizi görelim: HIRES a,b ile normal grafik ekranına geçilir. Burada 'a' ile çizgi rengini, 'b' ile de ekran rengini belirlemektesiniz. Bunlar 0-15 arası sayılar olmalı. Ayrıca bu komut, daha önceden var olabilecek bir grafik ekranını da silecektir. HIRES komutunu kullandıktan sonra MULTI a,b,c komutu da kullanılırsa, bilgisayar çok renkli grafik ekranına geçecektir. Bu durumda 'a', 'b', 'c' ile çizimde kullanılacak üç renk belirtilmektedir. Bu komuttan sonra gelen tüm grafik komutlarının X koordinat değerleri 0-159 arasında olmalıdır. Peki, yazı ekranına nasıl geri döneceğiz? Bu işlem için de CSET komutu var. CSET 0 ile her zaman için büyük harf kullanılan duruma geçebilirsiniz. CSET 1 ile de büyük/küçük harf kullanımı başlar. CSET 2'nin ise değişik bir kullanımı var. Tıpkı HI-

RES komutu gibi grafik ekranına geçer, ama bu kez grafik ekranı silinmez. Renk olarak eski renkler korunur. Eğer daha önceden çok renkli grafik kullanmışsanız, CSET 2'den sonra MULTI a,b,c komutunu kullanmalısınız.

Bir de renkleri çizim sırasında değiştirme sorunu var. Öyle ya, HIRES'i kullansak ekran silinecek. Bunun için de LOW COL a,b,c komutu var. 'a', 'b', 'c' ile kullanılan her üç renk de değiştirilir. Eğer normal ekranda iseniz, 'b' ve 'c'nin bir anlamı kalmayacaktır. Dikkat etmeniz gereken nokta, LOW ve COL kelimeleri arasında boşluk olduğu. Tekrar, grafik ekranını açarken HIRES veya MULTI ile tanımladığınız renklere dönmek isterseniz, HI COL emrini kullanmalısınız. Burada da HI ve COL arasında boşluk var. Artık çizim için kullanacağımız komutlara geçebiliriz. Öncelikle nasıl nokta koyacağımızı görelim. PLOT x, y, mod ile belirttiğimiz X ve Y koordinatları geçerli olan mod'a göre etkilenir. Eğer mod 1 ise o koordinata nokta konacaktır. Diğer durumları zaten biliyorsunuz. LINE x1, y1, x2, y2, mod ile de, belirtilen (x1,y1) ve (x2,y2) koordinatları arasında, mod'a göre çizgi çekilecektir. Bir diğer önemli geometrik şekil olan daireyi çizmek için, CIRCLE mx, my, xr, yr, mod komutunu kullanmalısınız. Burada 'mx' ve 'my' ile dairenin (daha doğrusu elipsin) merkezinin koordinatlarını belirliyorsunuz. 'xr' ve 'yr' ise, elipsin X ve Y doğrultusundaki yarıçaplarını gösterecektir. Eğer 'xr' ve 'yr' eşitse, sonuç daire olacaktır. Hazır söz daireden açılmışken, biraz da bununla ilgili diğer komutları tartışalım. Örneğin, ANGL komutu. Bu komut ile bir elipsi çizmeden, onun belli bir açıdan çıkan yarıçapını çizmeniz mümkün olacaktır. Komutun veriş biçimi, ANGL mx, my, açı, xr, yr, mod şeklinde olacaktır. 'mx', 'my', tıpkı CIRCLE'da olduğu gibi. 'açı' ile de çizilecek yarıçapın açısı belli edilmekte. Burada, saat 12 pozisyonu 0 dereceyi, saat 3 pozisyonu 90 dereceyi, saat 6 pozisyonu 180 dereceyi ve saat 9 da 270 dereceyi belirtecektir.

K mod şeklinde olacaktır. 'mx', 'my', 'xr' ve 'yr' tıpkı CIRCLE'da olduğu gibi. 'açı' ile de çizilecek yarıçapın açısı belli edilmekte. Burada, saat 12 pozisyonu 0 dereceyi, saat 3 pozisyonu 90 dereceyi, saat 6 pozisyonu 180 dereceyi ve saat 9 da 270 dereceyi belirtecektir. 0 derece ile 360 derece arasında bir fark yoktur. Diğer komut olan ARC ile de, istenilen sayıda kenara sahip çokgenler çizilebilir. Komutun şekli, ARC mx, my, açı1, açı2, açı3, xr, yr, mod biçimindedir. Burada bize yabancı olan 'açı1', 'açı2' ve 'açı3' parametreleri şu işlere yararlar: 'açı1' ve 'açı2' değerleri, çokgenin çiziminin yapılacağı başlangıç ve bitiş açılarını verir. Örneğin 0 ve 180 verildiğinde, çizilen çokgenin sadece sağ yarısı görünecektir. Açı yönleri, ANGL komutu ile aynıdır. 'açı3' ile de çizilecek iki nokta arasında kaçar derece fark olacağı belirtilmektedir. Bir diğer deyişle, (360/köşe sayısı) formülüyle bulunan derecedir. Yalnız, ARC komutu ile istediğiniz gibi bir dikdörtgen çizemediğinizi göreceksiniz. Bu durumda, REC x1, y1, x2, y2, mod komutu gerekecek size. x1 ve y1 ile, dikdörtgenin sol üst köşesinin koordinatlarını belirtiyorsunuz. 'x2' ve 'y2' ise dikdörtgenin X ve Y yönlerindeki kenar uzunluklarını belirtmekte. Ancak bir dikdörtgen çizmek yeri-

- ne, içi dolu dikdörtgen biçiminde bir blok yaratmak isterseniz ne olacak? Bunun için de, BLOCK x1, y1, x2, y2, mod kullanmalısınız. Burada 'x1' ve 'y1' deminki gibi. Ancak 'x2' ve 'y2' ile dikdörtgenin sağ alt köşesinin koordinatlarını belirtiyorsunuz. Ya dikdörtgen olmayan cisimlerin içinin doldurulması gerekirse?.. İşte o zaman PAINT komutu yetişiyor imdadımıza. PAINT x, y, mod ile verdiğimiz X ve Y koordinatının içinde kaldığı kapalı alan belirtilen mod'a göre doldurulacaktır.

Şimdi sıra geldi grafik ekranına yazı yazmaya. Bunun için iki komutumuz var. CHAR x, y, kod, mod, ölçek ile istediğimiz karakteri, ekranın istediğimiz bir yerine istediğimiz büyüklükte yerleştirebileceğiz. X ve Y koordinatları, karakterin sol üst köşesinin geleceği koordinatlar olacak. Burada, her karakterin bilgisayar için 8 x 8'lik bir kare olduğunu unutmayın. 'kod' ile de, basılacak olan karakterin ekran kodunu gösterirsiniz. Bu ekran kodlarını COMMODORE 64 el kitabından öğrenebilirsiniz (A=1, C=3... gibi). 0-511 arasında olmalıdır. 'ölçek' ise karakterin uzunluğunu göstermektedir. Karakterin genişliği daima 8 nokta olacaktır, ancak uzunluğu ölçek*8 formülüne göre değişecektir. TEXT x, y, yazı, mod, ölçek-y, ölçek-x şeklinde kullanılan daha genel emir ise daha değişik. 'yazı' yerine yerleştirdiğiniz karakter dizisi (ki bu ya tırnak işaretleri arasında bir yazı olmalı ya da bir karakter değişkeni), belirttiğiniz X ve Y koordinatlarından itibaren ekrana basılır. 'ölçek-y' tıpkı CHAR komutundaki gibidir. 'ölçek-x' ile de arka arkaya gelen iki karakterin sol üst köşeleri arasında kaçar nokta kalacağı belirtilmekte. Normalde 8 olması gerekir. Ayrıca 'yazı' yerine kullanılan karakter dizisinin de bazı etkileri olacaktır. Örneğin CTRL-A işareti varsa, bundan sonra gelecek yazı büyük harflerle yazılacaktır. CTRL-B ise geri kalan yazıyı küçük harflere dönüştürecektir. RVSON yazıyı negatif yaparken, RVSOFF tekrar normale döndürecektir. Eğer birkaç karakter değişkeninden oluşuyorsa, bunların arasına + konmalı, A$+B$+"vvv"+STR$(T) gibi. Ve son dikkat edilmesi gereken nokta, + ve sonra gelen tüm sayıları gerçekten sayı olarak yazmanız gerektiği. Eğer bir değişken kullanırsanız, komut garip şeyler yapacaktır. Ekranda belli bir koordinatta nokta olup olmadığını TEST(x,y) ile öğrenebilirsiniz. A=TEST(100,100) komutu sonucunda, eğer 100/100 koordinatında nokta varsa A'nın değeri 1 olacaktır. Aksi takdirde sıfır değerini alacaktır.

Artık yavaş yavaş sonuna geliyoruz. Sırada çok ilginç bir komut ikilisi var. Bu komutlarla, istediğiniz bir şekli, göstereceğimiz yöntemlerle tanımlayıp ekranda istediğiniz büyüklükte ve döndürerek göstermeniz mümkün olacak. Şimdi, elimizde küçük bir kalem olduğunu düşünelim. Bu kaleme ne yapması gerektiğini söyleyerek istediğimiz şekli çizebiliriz. Önce DRAW komutunu görelim. DRAW tanım, x, y, mod şeklinde kullanılan bu komutta en önemli kısım, tabii ki tanım kısmı. Aslında burası bir karakter değişkeni, A$ gibi. Dolayısıyla, bir cismi tanımlarken en fazla 255 karakter kullanabiliyoruz. Bu karakterler 0-9 arası rakamlardan oluşuyor. Her biri kalemimize bir komut gönderiyor. Anlamlarını görelim:

Sağa git, Yukarı çık, Aşağı in, Sola git, Anlamı yok, Sağa git ve bir nokta koy, Yukarı çık ve nokta koy, Aşağı in ve nokta koy, Sola git ve nokta koy, Dur

Örneğin A$="1515" ile iki yatay noktadan oluşan bir şekil tanımlamış oluruz. Ancak DRAW komutundan önce, cismin ekrandaki büyüklüğünü ve

PROGRAM ADI : S.CIRCLE açısını belirtmemiz gerekir. Bunu da, ROT açı, ölçek ile yapabiliriz. 'açı' yerine 0-7 arası bir değer verilebilir. Her bir değer 45 ile çarpıldığında elde edilecek açıyı temsil eder. Ölçek için herhangi bir sınırlama yok. Ancak çok büyük olursa ekrana sığmayabilir. Eğer hazırladığınız ekranı MPS801 veya MPS803'de bastırmak isterseniz COPY komutunu kullanacaksınız. Diğer yazıcı markaları, eğer uygun bir arabirim taşımıyorlarsa bu komutla işlemezler. Ve son emir de geldi artık. Bu pek önemli bir emir değil. Eğer A=GRAPHICS komutunda olduğu gibi

PROGRAM ADI bir değişkene GRAPHICS'i eşitlerseniz, sonuçta o değişkenin içeriği 53248 olacaktır. Bu, "Video Interface Chip" (VIC) adı verilen ve COMMODORE 64'ün tüm grafik işlemlerini gerçekleştiren ünitesinin yazmaçlarının (register) başlangıç adresidir. Örneğin POKE 53281,2 diyerek ekran kırmızı yapılabilmekteyken, POKE GRAPHICS+332,2 ile de aynı şey yapılabilir, çünkü ekran rengi 33 numaralı sicile bağlıdır. Sicil numaralarını COMMODORE 64 el kitabında bulabilirsiniz. Grafikle işimiz bu kadar. Gelecek sayıda görüşürüz... O

S.REC & PAINT

00100 HIRES 2,15
FOR Izi TO 188 STEP 3
00120 CIRCLE 168,100,100,1,1
00130 NEXT :PAUSE 3

PROGRAM ADI : S.CHAR

00100 HIRES
©0116 FOR Izi TO 315 STEP 8
20120 CHAR AYI
00130 NEXT :PAUSE 3 *1:1F K<256 THEN i
Ba

PROGRAM ADI : S.PLOT

00010 HIRES 2,15:MULTİ 2,3,4
FOR Izi TO COL RNDC8)*16,R
PLOT
PAUSE 3:RUN

PROGRAM ADI : S.BLOCK

©0100 HIRES 2,15
FOR TO 128
08120 BLOCK 32864RNDC1) 1)
B0200 5:60TO 100
PROGRAM ADI

3

HIRES 2,15
A$z"5555555578888888757855555788888
75785555555788888889"
FOR TO AS,
I*x30,1*20,1:NEXT
3:K-K*7:GOTO 20

PROGRAM ADI : S.LINE

HIRES 2,15
DEF 8041100
080025 K15-71YLERN
FOR TO 300 STEP 3
68040 LİNE AYI, KAKA,
1)4Y2,1
NEXT
PAUSE 4:60T0 18
©0010 HIRES 2,15
FOR 1-1 TO
00025 YERNDC8)
«200
IF X4X1>319 OR Y*Y1)199 THEN 25
60028 REC
FOR 1-1 TÜ 15:PAİNT RNDCB)
NDC8)x160420,1:NEXT
20040 PAUSE 3:RUN

PROGRAM ADI : S.MULTI

©0010 HIRES 2,15
MULTİ
FOR 1-5 TO 80 STEP 5
00040 CIRCLE
00040 PAUSE 3:RUN

PROGRAM ADI

HIRES 2,15
MULTİ *16
FOR 1-5 TO 80 STEP 5
00040 CIRCLE
©0050 PAİNT
NEXT
20065 FOR Izi TO 100:MULTİ RNDC8B)*16,RNDC
8)*16,RNDC8S)*16:FOR TO 200:NEX
T :NEXT
©0070 RUN

1 S.MULTI

PROGRAM ADI: S.ANGL

00010 HIRES 2,15
FOR Isi TO 18
(8) 4320 :MYZERND (8 ) #200
THEN
RNDC8)
IF THEN 38
RYZERND (8) THEN
RNDC8)
IF RYZ<5 THEN 30
Sİ
THEN 30
FOR TO 360 STEP SPZ:ANGL MXZ,M
YATI LENEKT
NEXT
PAUSE 3:6G0TO 10
GER)
PROGRAM ADI : S.LON COL
00010 HIRES 0,15
c-a
©0030 FOR Yz0 TO 192 STEP 8
00040 LOW COL
FOR TO 7:LİNE
C>1İS THEN
680070 NEXT
PAUSE 3
c-a
©0100 FOR Xz0 TO 312 STEP 8
00110 LOW COL
FOR Xis0 TO 7ELİNE X4*Xİ,0,X4X1,199,
00130 THEN Czü
00140 NEXT
060150 PAUSE 3
PROGRAM ADI : S.ARC
60081 PRİNT DEMOC2S
PACE)2) COKGEN CIZIMI"

TEMMUZ-AĞUSTOS RUPERT TOY PARTY

SÜPER OYUN SOULS OF DARKON LİSTEMİZ: SCARABEUS ACTION BIKER ON A SPRINT BACK TO THE FUTURE RIVER RAID II BOMB JACK II GREEN BERET STRIP-POKER II DİSKET PROGRAMLARIMIZ THE HUMAN RACE RACING DESET SABOTEUR RALLY AND RACING BREAK STREET HOT WHEELS