Kendi Işıklı Kalemini Kendin Yap: LIGHTPEN!

LIGHTPEN!

Bu yazımızda CONTROL-PORT ile ilgili

Ayhan KALAYLIOĞLU bir uygulama yapacağız. Bu giriş yalnızca JOYSTICK kabul etmiyor. Yapılabilecek başka uygulamalara örnek olarak biz burada size kendinizin yapıp çalıştırabileceği bir

LIGHTPEN'den bahsedeceğiz.

Commodore 64'ümüzün birinci CONTROL-PORT'unun pek çoğumuzun bilmediği bir fonksiyonu daha var. Gerçekten de pek fazla kullanım alanı bulamayan bu fonksiyon aslında oldukça ilginç özellikler taşıyor ve bilgisayar kullanımına yeni bir bakış açısı getirebilir. Bahsettiğimiz fonksiyonu gerçekleştiren 6 numaralı pin'den başkası değil. Bu pin'in iki değişik fonksiyonu var. Birincisi JOYSTICK'in ateş etme tuşu ile ilgili bilgiyi taşımak. İkincisine ve daha ilginç olanına aşağıda değineceğiz. Belki daha evvel duymuş veya görmüş olabileceğiniz bir uygulamadan söz edeceğiz. Bu uygulama bir YAZILIM + DONANIM ünitesi ve yaptığı iş ise monitör veya televizyon ekranını doğrudan bir bilgi giriş aracı olarak kullanabilmeyi mümkün kılmak. Bu uygulama yardımıyla ekranın üzerine kâğıda çizer gibi aynı rahatlıkla çizim yapmanızı veya ekrandan, doğrudan üzerine götürüp seçmek suretiyle bir programın menü veya değişik altfonksiyonlarının seçimini rahatça yapmanızı sağlıyor. Bu görevi gören aletlere LIGHTPEN denip aynı zamanda C-64 ve VIC 20'ye uygulanabilen modelleri de mevcut. Gerek donanım gerekse yazılım açısından incelendiğinde oldukça basit olduğu gözlenen bu uygulamayı kendimiz de yapabiliriz. Zaten yazımızın asıl konusu da bu. LIGHTPEN'in donanım kısmının en önemli parçası fototransistör veya fotodiyot diye adlandırılan elektronik bir ünite. Fototransistör görev itibarıyla gelen ışığın şiddetine göre elektriksel sinyaller üretiyor. Fototransistör'ü uyaran ışık ise ekrandan gelen elektron ışınlarından başkası değil. Ekranın önünde duran fototransistör ise elektron ışını önünden geçerken oluşan kısa süreli ışık darbesini algılar ve diğer elektronik ünitelere işlenmek üzere elektriksel sinyaller olarak gönderir. LIGHTPEN'in çalışması için ekranın belli bir ölçüde parlaklığa sahip olması gereği de bundandır. LIGHTPEN'den bilgisayara bir sinyal geldiğinde bilgisayar, elektron ışını hangi pozisyonda iken sinyalin gönderildiğini kaydeder. Böylece bilgisayar herhangi bir programın kullanabilmesi için LIGHTPEN'in ekran üzerindeki X- ve Y- koordinatlarını belirlemiş olur. Herhangi bir program yazmaya kalkışmadan önce kendimize bir LIGHTPEN bulup bilgisayarımıza bağlamalıyız. Yukarıda da dediğimiz gibi öncelikle bir ihtiyacımız olacak. Biz burada verdiğimiz devrede TIL78 model fototransistör'ü kullandık. Devremizde kullanılacak tüm parçalar şu anda piyasada elektronik malzeme satan mağazalardan rahatça temin edilebilecek biçimde seçilmiştir. Bu devrede fototransistör yerine LDR adlı elektronik malzeme tipini kullanmanızı önerenler olursa kesinlikle dinlemeyin. Her ne kadar bu iki tip elektronik elemanın görevleri ve fonksiyonları birbirine benzerse de karakteristikleri oldukça farklıdır. Şayet devremizde LDR kullanacak olursak bu parça oldukça yüksek hızda hareket eden elektron ışınını takip etmek için çok yavaş kalacak ve devremiz yüzde yüz çalışmayacaktır. Şayet şans eseri daha evvelden beri bir LIGHTPEN'e sahipseniz; buradaki devreyi yapmanıza gerek kalmadan aynı üniteyi kullanıp burada anlatacağımız denemeleri yapabilirsiniz.

Şimdi fototransistör'ü nasıl kullanıp, nasıl bağlayacağınızı anlatalım. TIL78 model fototransistör'ün iki bacağı vardır. Bunlar “Kollektör” ve “Emiter” diye adlandırılır. Bu bacaklardan hangisi hangisidir ve ne işe yarar? Bunu öğrenmek için üç yol var. Bunlardan birincisi acemi bir elektronikçiyseniz sizin için en uygun olanı: Fototransistör'ü satın aldığınız dükkandaki kimselere sorup anlattıracaksınız. Geriye kaldı iki çözüm: Fototransistör'ün üst kılıfının kollektör tarafı biraz düzleşmiş bir şekle sahiptir. Bundan başka kollektör bacağı ötekine göre daha kısadır. Gelelim üçüncü yönteme: Bu yöntemi daha evvel de duymuş olmalısınız. Adı deneme yanılma yöntemi. Devrenin fototransistör dışında geri kalan kısmı monte edilir ve fototransistör iki ihtimale tâbi tutulur. Şayet herhangi bir kısa devreye sebep olmazsanız devrenin hiçbir bölgesi gerek doğru gerek yanlış bağlantıdan zarar görmeyecektir. Fakat bu yönteme çok zorda kalmadıkça başvurmamanızı öneririz.

'nun üzerine çizim yapabiliyorsunuz. Programı yazın, bir yerde saklayın (SAVE edin); daha sonra da çalıştırın. Program çalışır çalışmaz ilk olarak size basılan noktaların kalıcı olup olmaması gerektiğini soracaktır. Orada belirtilen harflerle cevabınızı bilgisayara bildirin. Birkaç saniye sonra ekran tümüyle silinip beyaza bürünecektir. Ekranın rastgele bir yerinde ise küçük bir dörtgen belirecektir. Fototransistör'ü elinize alıp ekrana değdirin. Küçük dörtgenimiz LIGHTPEN'imizi takip edecektir. Dikkat edilmesi gereken bir husus da tuş takımı ve LIGHTPEN'in birbirlerini daimi rahatsız ettikleri (bunun nedeni joystick-port'un tuş takımı ile aynı chip'e bağlı olması). Rastgele birkaç tuşa dokunduğunuzda göreceksiniz ki küçük dörtgenimiz çılgın gibi oraya buraya zıplamakta. Benzer şekilde bilgisayar direkt mod'dayken LIGHTPEN'i takılı vaziyette ekran üzerinde gezdirirseniz ekrana bilumum saçmasapan karakterler çıkacaktır. VİC 20 kullanıcıları bu sorunla nun LIGHTPEN'inizi çalıştırabilmesi gerekir. Buna rağmen program çalışmıyorsa suçu devrede olabilecek küçük bir kısa devrede aramak gerekir. Şayet elektronikten pek anlamıyorsanız anlayan birine başvurmanız önerilir; bunun sizin probleminizin çözümünde faydalı olacağına inanıyorum. Parça listesinde tüm parçaların isimleri verilmiştir. Fakat bu yazı içindeki tüm açıklama ve anlatımlar öğreticilikten çok elektronikten anlayan kimseler seviyesindedir. Size tavsiyemiz şimdiden daha sorunlar çıkmadan böyle birini bulup yardım istemenizdir. Yoksa işi iyice çorba edip ortalığa zarar verip geri dönülmeyecek yerlere gelebilirsiniz. Gelelim devreye: NE555 tipinde bir IC (Integrated Circuit — Entegre devre) içermekte. NE555 devremizde monoflop görevi yapmakta. Monoflop'un 2 numaralı bacağına kısa bir negatif impuls geldiğinde, monoflop kısa bir süre çalışma durumunda kalır ve hemen peşinden (pasif) duruma geçer. 2 numaralı bacağa (trigger bacağı)

Deneme ve gösteri amacıyla | karşılaşmayacaklardır. Çünkü VIC | çer. 2 numaralı bacağa (trigger baca- LİGİ ill EN Tt O ma dökü CONTROLPORT NE 555 PN 6 ia KOLLEKTÖR KOLEKTÖR İZ. BŞ i ! Bc | EMİTER PIN 8 (GND) | EMER BASKILI DEVRE FOTOTRANSİSTÖR JOVSTİK GİRİŞİ

“LIGHTPEN DEMO” adlı bir program yazdım. Joystick Demo programlarına oldukça benzeyen bu program LIGHTPEN vasıtasıyla ekrana noktalar basmakta. LIGHTPEN'i ekranın neresine götürürseniz o koordinatta noktalar oluşmakta. Böylece doğrudan (dolaysız olarak) ekran sizin bilgi giriş aracı oluyor ve doğrudan o

20'de tuş takımı ve LIGHTPEN ayrı kanallarda çalışmaktadır. Şayet ilk çıkan dörtgeni hareket ettiremiyorsanız bunun birçok nedeni olabilir: Programı doğru yazmış ve LIGHTPEN'i kusursuz monte etmiş olsanız bile ekrandan LIGHTPEN'imize yeterli ışık gelmiyor olabilir. Ekranınızın parlaklık ayarını arttırın; buna gelecek darbeleri demin değindiğimiz fototransistör sağlar. Elektron ışını ekranda fototransistörün bulunduğu pozisyondan geçerken fototransistör kısa süreli bir negatif impuls gönderir, bu impuls monoflop tarafından bilgisayarın değerlendirebileceği sinyallere çevrilir, bu sinyal bir transistör tarafından kuvvetlendirilerek bilgisayara gönderilir. En sonda bulunan kuvvetlendirici kat sayesinde LIGHTPEN'imizin karanlık ekranlarda da çalışabilmesi sağlanmıştır. Fakat gene de değişik karakteristikteki ortamlarda devremizin hâlâ çalışmasını sağlamak için bir de ayar (kalibrasyon) noktası koyduk. Bir megaohm'luk trimpot tipi direncin sağladığı bir ayarla oynayıp optimal sonucu elde etmeye çalışın. Ayar yapmak oldukça basit: Trimpot'unuzu LIGHTPEN'inizin düzenli çalıştığı bir noktaya kadar çevirin. Bir kiloohm'luk direnç, kuvvetlendirici transistörümüz için bir öndirençtir. Devrede geri kalan elemanların görevi ise monoflop'un çalışma seviyesinde kalıp geriye (pasif seviyeye) düşmesi arasında geçecek zamanı ayarlamaktır. Şimdi de programımızı daha yakından görelim. 390 ve 400'üncü satırlarda renk hafızası sıfırlarla doldurulup boş ekranın siyah renk alması sağlanıyor. LIGHTPEN'in pozisyonu bilgisayar tarafından gerek X- gerek Y- koordinatları olarak dokuz bit hassasiyetle algılanmakta. X- koordinatının üst sekiz biti 53267 adresli hafızada bulunmaktadır (VIC 20'de 36871). X- değerinin sıfır numaralı bit'ine ulaşamıyoruz. Bu yüzden LIGHTPEN'le yapılan çizimin hassasiyeti hiçbir zaman iki bitişik noktanın altına inemiyor. Fakat bu hassasiyet düşük çözünürlüklü grafik (bir karakter — bir nokta) için yetip de artıyor bile. 440'tan 470'inci satıra kadar olan bölümde X- ve Y- koordinatları beşer kere okunup aritmetik olarak toplanıyor ve 480'inci satırda bu toplamlar beşe bölünüyor. Yani kısacası beş noktalık örnek okunup bunların ortalaması alınıyor. Bu işlem okunan değerleri stabil hale getirmek için kullanılıyor, çünkü yapılan denemeler göstermiştir ki bilhassa X- değeri aşırı derecede oynamaktadır. Bunun yanında Y- koordinatı daha sakin bir davranış örneği göstermektedir.

510 ve 520'inci satırlarda okunan değerler ekran koordinatlarına çevriliyor. Şayet kendiniz başka bir program yazıp, o programı LIGHTPEN'inizle çalıştırmak istiyorsanız bilhassa bu programın bu kısımlarını değiştirip bazı denemeler yapmanız gerekmektedir. 540'ıncı satırda ise okunan değerler kontrol edilmekte. Bu kontrolün yapılması bilhassa aşırı derecede oynayan X- değeri yüzünden ayrı bir önem kazanıyor. Geri kalan satırlar ise oldukça tanıdık tipte olduğu için açıklamaya gerek duymuyorum.

İkinci programımız LIGHTPEN ile yapılan başka bir uygulamayı gösteriyor. Burada LIGHTPEN çizmek için değil de bir programın menülerini seçmekte kullanılıyor. Y- değerimiz daha bir güvenilir olduğundan burada yalnızca onu kullanacağız; yani bizim için önemli olan yalnızca vertikal pozisyon. Bu programın yaptığı iş ise C64/VIC 20'nin üç ses kanalından birini seçmenizi sağlıyor. Her kanal değişik frekansa ayarlanmış durumda olduğu için seçiminizi aynı zamanda kulağınızla da hissedebilirsiniz. İstediğiniz kanalı ekranda o kanala ait alanı LIGHTPEN'inizle işaretleyip belirtebilirsiniz. 470'inci satırda LIGHTPEN'in Y- pozisyonu okunuyor. 490'ıncı satır ve devamında seçilen kanal ve ona ait frekans belirleniyor. Şayet aynı kanalı bir kere daha seçerseniz 550'inci satır sayesinde o kanalın bir kere daha çalışması engelleniyor. Böylece kanalın susup yeniden çalışmasından oluşabilecek gürültüler engelleniyor. Şayet LIGHTPEN'inizi kendi yazdığınız programlarda da bol miktarda kullanmak istiyorsanız, fototransistör kısmını düzgün bir kılıf içine yerleştirmeniz gerekiyor. Bunun için eski bir tükenmezkalem veya dolmakalem kılıfını kullanmak en rahatı olacaktır. Kılıfın içini boşaltın (yani kalemi katledin), fototransistörünüzün bacaklarına uzatma amacıyla çift hatlı bir kablo lehimleyin; lehimlenen uçları ve çevresini izole edin ki herhangi bir kısa devreye sebep vermesin. Kısa devre herhangi bir zarar vermeyecektir. Fakat böyle bir durum fototransistörü devre dışı bırakacağından devremiz çalışmayacaktır. Fototransistörü kılıfa sokun ve nazikçe arka tarafından itin. İtme işlemini fototransistör diğer uçtan görününceye kadar sürdürün. Bu arada fototransistörün ve bağlantılarının zarar görmemesine dikkat edin. Dikkat etmeniz gereken başka bir husus da fototransistörün “gören” yüzünün dışarı doğru dönük olmasıdır. Fototransistörü bu pozisyona getirdikten sonra sabitleyin (yapıştırmak veya sıkıştırmak vasıtasıyla). Gelelim kalemimizin ışık alacak ağzının büyüklüğüne: Bu delik ne kadar küçük olursa LIGHTPEN'imiz koordinatları o kadar doğru algılar. Fakat bu delik gene de LIGHTPEN'imize çalışması için gerekli ışığı geçirmelidir. Gerek bu deliği büyüterek gerek monitörümüzün veya televizyonumuzun parlaklık ayarıyla oynayıp uygun bir çalışma noktası bulun. Böylece gerçek bir LIGHTPEN'e sahip olunuz.

00100 REM <CİTE> 00100 REM
REM * * REM *
REM * * <e26> REM * LİGHTPEN *
00130 REM * - - * 00130 REM * > - *
00148 REM * * 00140 REM * *
00150 REM * DEMO * ©0150 REM * SOUND *
00160 REM * * 00160 REM * - * <e08>
00170 REM * * 00170 REM * *
00186 REM * BY AYHAN — <209> ©0180 REM * BY AYHAN —
00180 REM * * <a38> ©0180 REM * *
REM * — 26.10.1886 SUNDAY * <138> REM * 26.10.1886 SUNDAY * <i38>
60210 REM * * REM *
REM * FOR MAGAZİNE 'COMMODORE' * REM * FOR MAGAZİNE 'COMMODORE' «
REM * * ©0230 REM * * <e23>
00240 REM 00240 REM
: <100> : <ese>
00260 REM İNFORMATİON 00260 REM ORAL SCREEN
00270 PRİNT NOKTALA ©0270 POKE 53281,1 : POKE 53280,3
R HER" 00280 PRİNT S
00282 PRİNT SILINSIN MI ECİNİZ <a18>
cese> ©0280 PRİNT
#0280 PRİNT VEYA <R <ara>
<esa> FOR | s1 TO 3 <145>
60300 GET AS 1 İF AS 4 ** THEN 300 <238)> 00310
00310 IF TKEN L 00320 PRİNT “<2SPACE)B B SES KANALI <086>
00330 PRİNT
00330 REM İNİTİRLİZİNG 60348 NEXT | <17e>
60340 POKE 53280,0 : POKE S3281,1 60350 <esı>
00356 PRİNT "<CLR>" 1 A 1824 1 40 <238) 00360 REM İNİTİALİZE
00360 C 1 D * 53267 00370 TI * 4 1 Sİ « Sda72 <a38>
00370 <018> 60380 FOR | 1 TO 16 <816>
00380 REM FİLL COLOR MEMORY 00390 READ ALE
©0380 FOR | « TO 56285 00400 POKE SİYA B <ea7>
80400 POKE 1,6 1 NEXT 1 <o26> NEXT
00410 DATA 24,15, 0,207, 1,50, 7.207 <ara>
00420 REM READİNG THE VALUES 00430 DATA 8,100, 14,207, 15,150, 6,240 <138>
00430 REM ANO STABILİZİNG ©0440 DATA 13,240, 20,240 <173>
00440 FOR | 1 TO 5S 00450
00450 X * X * PEEK 00460 REM *** ASK LİGHTPEN POSİTİON <186>
60460 Y Y * PEEK ©0470 Y « PEEK (53268)
00470 NEXT | <asa>
X İNT 1 YS İNT 00490 REM CHECK POSİTİON
IF Y > 78 AND Y< Si THEN Ta
00500 REM * CONVERTİON TO COORDİNATES « <osa>
00510 KX * INT <ısa> 00516 IF Y > 118 AND Y< 131 THEN TE
KY * INT (<Y-45)/189040) bu
00530 : IF Y > 188 AND Y< İZİ THEN Ta
00540 REM CHECK COORDİNATES 18 <ıza>
80550 IF KK < O THEN KX © <a18>
IF O THEN KY s8 <ase> 00540 REM ** CHANGE THE SOUND CHANEL
00578 IF KX > THEN KX <e7a> 00550 IF Ta Tİ THEN 468 <136>
08588 IF KY THEN KY <e31> 00560 POKE
: <a37> 00570 POKE Sİ*TE İZ
00600 REM CLEAR/SET POİNT 00580 <aes>
08610 IF L © THEN POKE <078> 00580 REM VALUES & RETURN <037>
POKE 160 <ısa> TI « Ta
00630 : <ası> GOTO 460 <1se>
00640 REM NED VALUES & RETURN <087>
KA * KK 1 YA X YS O
GOTO 428 <ise> 00640
60670 <ass> 00650 REM
60680 <ass> ©0660 REM CHANGES FOR VİC 80 <238)>
* <108> 00670 REM
00700 REM REM
00710 REM CHANGES FOR VIC 80 <033)> 60680 REM DELETE 370-440!
00720 REM 88708 REM İn
80730 REM <155> REM NOW TYPEt
©0740 REM REPLACE THESE LİNES REM
00750 REM 00730 REM 270 POKE 36878,27 <ısa>
00760 REM 340 POKE 36879,24 ©0740 REM 370 T2 * 36874 : POKE 36878,15 <153>
00770 REM 358 PRİNT B 00750 REM 478 Y « PEEK 36871)
<185> 00760 REM 508 IİFY<
00780 REM 360 : <a17> ©
00798 REM 390 FOR | TO 38905 60770 REM IİFY<CLOSE
60800 REM KX İNT
B0810 REM 526 KY * INT <ısa> 00780 REM 520
REM 8
00830 REM IF YOU WANT TO SAVE <814> 00780 REM 568 POKE Ti ,© <ise>
REM THİS PROGRAM YOU SHOULD ©0800 REM 570 POKE <ese>
<056>
00850 REM REFORMAT LİNES 270-290