HER TÜRLÜ DURUM RESET BUTONU
Tolga Kale Alışılagelmiş şekilde yapılan bir RESET Butonu her zaman için istenilen sonucu vermez. Yardımınıza bu ucuz, hemen hemen her programı kıran RESET Butonu geliyor. Artık bir programı sona erdirmek için bilgisayarınızı açıp kapatmanız gerekmeyecek. Alışılagelmiş bir RESET Butonu birçok programı durdurmaz. Bunun nedeni bu programlarda Modulstart bulunmasıdır.
Modulstart nasıl çalışır?
Modulstart'ın ne olduğunu anlamak için C-64'ün çalışma sistemini yakından incelememiz gerekir. Software ile, yani SYS 64738 ile yapılan RESET'te bilgisayar $8004 ile $8008 arasındaki adreslere bakar. Eğer orada Commodore-ASCII- Kodu şeklinde “cbm80” yazıyorsa C-64, $8000 ve $8001'deki adrese atlar. Bu adreste RESET- Vektörünün alçak ve yüksek baytları bulunur. ($8000'de alçak, $8001'de yüksek bayt). $8002 ve $8003'te Sıcak RESET-Vektörü bulunur. Yani RESTORE tuşuna basıldığında bu adreste bulunan Vektöre gidilir. Eğer $8000 ve $8001'de programın başlangıç adresi bulunuyorsa bir RESET sırasında program tekrardan başlar. Gördüğünüz gibi eski bir RESET Butonunun başarısı $8000-$8008 arasında bulunan değerlere bağlı. Bir RESET-Butonla bu Modülü kapatamayacağımız ortada. Bunun için Expansion Port'taki bazı ayakları birleştiriyoruz ve C-64'e hangi hafıza bölümlerinin açık olduğunu söylüyoruz. EXROM-hattını (extern ROM) GND ile bağlanınca C-64, $8000 ile $A000 arasını kapatır ve burayı EPROM'a bağlar. Bize bir programın Software- Modülünden kurtulmayı da bu bölüm sağlıyor. Bundan sonra C-64 normal olarak olmayan bir “cbm80” işareti arar. Bulamayınca da normal bir RESET gerçekleşir. Sonra kapatılmış bulunan $8000 ile $A000 arası tekrardan açılır. RESET'ten sonra programı tekrar çalıştırmak isterseniz SYS 64738 kullanabilirsiniz ama bu yolla program yine de çalışmayabilir. Daha önce de söylediğimiz gibi RESET sırasında EXROM-hattı GND ile bağlanmalıdır. Bu iş en iyi olarak iki hattı birden bağlayan butonlar yaparlar (2*Bir). EXROM'-un RESET sırasında alçak potansiyale sahip olması gerektiği için bir Kondansatör Reset süresini sınırlar. Bunun için RESET-Kontağından (Pin C, Expansion Portu) Butona 16V/47 uf'lik bir elektrolitik Kondansatör konur. Çalışma prensibi oldukça basittir. Butona basıldığında Kondansatör yüklenir ve RESET'e başlar. Kondansatör kısa zamanda yüklendiği için EXROM buton bırakılıncaya kadar alçak potansiyale sahip olur. Buton bırakıldığında direnç sayesinde Kondansatör tekrar boşalır. RESET çok kısa sürdüğü için Commodore Disket sürücü 1541'in bu işten haberi olmaz ve kendini RESET etmez. Bu devreyi bilgisayarınızın içine de kurabilirsiniz. Ama eğer garanti süreniz geçmemişse bunu yapmanızı tavsiye etmem, çünkü bilgisayarınızın içini açtığınız anda garanti süreniz dolar. Eğer garanti süreniz dolmuş ve bu işlerden anlıyorsanız Expansion Port'taki lehim yerlerini kullanabilirsiniz. Eğer garanti süreniz dolmamışsa Expansion Port'a uygun bir giriş kullanarak da bu işi halledebilirsiniz.
İÇİN
ti süreniz geçmemişse bunu yapmanızı tavsiye etmem, çünkü bilgisayarınızın içini açtığınız anda garanti süreniz dolar. Eğer garanti süreniz dolmuş ve bu işlerden anlıyorsanız Expansion Port'taki lehim yerlerini kullanabilirsiniz. Eğer garanti süreniz dolmamışsa Expansion Port'a uygun bir giriş kullanarak da bu işi halledebilirsiniz.
USER PORT'UN ÖNDEN GÖRÜNÜŞÜ
© 0 A
A B C D E F H J K L M N P R S T U M W X Y Z
Parça Listesi:
Buton 2*Bir Elko 16V/47uf Direnç 10 kOhm, 1/8 Watt Çeşitli renkte tel 58*50 mm iki tarafı bakırlı tabaka
Murat Gezer mutlu BASIC kullanıcıları için birçok olanaklar doğuruyor. Eğer bu komutu tam anlamıyla kullanmak isterseniz ilk önce rastlantısal sayının ne olduğunu bilmeniz gerekir. İşte bu yazımızda rastlantısal sayının ne olduğunu ve nasıl çalıştığını anlatma-
Bir bulunan RND ko-
.ya çalışacağız.
Rastlantısal sayıların en önemli özelliği olarak gelecek olan sayının önceden bilinmemesidir. Örneğin bir zarı ele alalım. Zarı her attığımızda 1 ila 6 arası sayı gelir. Ve zarı atmadan önce kaç geleceğini bilemeyiz. Ancak tahmin edebiliriz. İşte bilgisayarınızda aynen zar örneğindeki gibi RND komutundan sonra sizce bilinmeyen bir sayı verir. Acaba gerçekten bu sayı bir rastlantısal sayı mı? Hayır değil. Peki diyeceksiniz ki bu sayı devamlı farklı ve biz önceden ne geleceğini bilemiyoruz. Eğer bu yazıyı okumaya devam ederseniz, neden bilgisayarınızın gerçek rastlantısal sayı üretmediğini anlamaya başlayacaksınız. Zarda sayıların devamlı farklı gelmesinin sebebi zarın yapılmış olduğu malzeme, atılmış olduğu zemin, atılma hızı, atılış yönü gibi belli başlı koşullara bağlıdır. Eğer bu koşulları sabit tutmayı başarabilirsek attığımız zar devamlı olarak aynı gelirdi. İşte bilgisayarınızda bu koşullar yine belli bir ondalıklı sayı alıp bu sayıyı 5 parçaya bölüyor. Daha sonra bilgisayarınız içinde RND komutu için ayrılmış olan birbirine komşu 5 bellek bölgesine yazılıyor. Bu başlangıç sayısına biz çekirdek sayı diyeceğiz. Bu işlemler siz bilgisayarınızı açtıktan sonra otomatikman yapılıyor. Eğer siz RND komutunu vermişseniz bu çekirdek sayı bilgisayarınız tarafından alınıp 11879546,4 sayısı ile çarpılıyor. Bu çarpımdan çıkan sonuç 0.0000000392767778 sayısı toplanır. Ve bilgisayar bu hesabın sonucunu tekrar 5 parçaya bölüp bellek bölgelerine yazar. Bu bellek bölgeleri kendi aralarında belli bir kural ile karşılaştırılır ve tekrar bir ondalıklı sayıya çevrilerek ekranınıza yazar. Neyse bu kadar işlemden sonra eğer kafanız karışmadı ise incelememizi daha da derine indirerek deminden beri bahsetmiş olduğum 5 bellek bölgesinin neresi olduğunu birlikte inceleyelim. Bu bellek bölgeleri 64'ünüzde 139 ila 143 arasında bulunmaktadır. Şimdi aşağıda vermiş olduğum satırları bilgisayarınıza girin. 10 X=139:Y=143 20 FOR A=X TO Y 30 PRINT PEEK(A) 40 NEXT A 50 PRINT RND(1) Bu ufak program sayesinde 5 bellek bölgenin değerini ve bu değerlerden oluşan rastlantısal sayıyı görürsünüz. Eğer 60 GOTO 10 satırını eklerseniz devamlı olarak sayıların değiştiğini görürsünüz. Yukarıda anlatmış olduğum işlem ne kadar karmaşık görünse de bu işlem aslında rastlantısal sayının devamlı değişik olmasının sebebi değildir. Çünkü yapılan işlem aynı kalmıştır. Peki rastlantısal sayının devamlı değişik olmasının sebebi nedir? İşte sıra şimdi orayı açıklamaya geldi. Rastlantısal sayı aslında RND(X) komutunun X değerine bağlıdır. Eğer X değeri herhangi bir pozitif sayı ise o zaman bilgisayarınız çekirdek sayı olarak 0.811635157 sayısını alacak ve 139 ila 143 arasına 128,79,199,82,88 sayılarını yazacaktır. Tabi ki bu böyle olunca bilgisayarınız açıldıktan sonra devamlı olarak aynı sayıları size verecektir. İsterseniz daha ayrıntılı olarak inceleyelim.
Şimdi bilgisayarı kapayıp açın ve aşağıdaki sayıları girin. 10 FOR A=1 TO 5 20 PRINT RND(1) 30 NEXT Evet bu satırları girdikten sonra elinize bir kağıt, kalem alın ve RUN yazın. Şimdi ekranda gördüğünüz sayıları sırasıyla kağıda yazın ve bilgisayarınızı tekrar kapayıp açın. Yukarıdaki programı tekrar yazın ve çalıştırın ve ekrandaki sayılar ile kağıdınızda bulunan sayıları kontrol edin hepsi aynı ve sırasıyla değil mi? Evet sizin de gördüğünüz gibi pozitif değerli bir RND komutu size tam anlamıyla bir rastlantısal sayı vermiyor. Çünkü bilgisayarınız ilk açıldığı anda aynı başlangıç sayısını aldığından dolayı aynı sayılar tekrarlanıyor ve burada sayısal değerin hiç bir önemi yok. Ancak bu başlangıç sayısını devamlı olarak değiştirmeyi başarabilirsek o zaman rastlantısal sayılara ulaşabiliriz. Peki bunu nasıl başaracağız? Bunun çözümünü hep birlikte birazdan göreceğiz. Neyse şimdi gelelim negatif değerli RND komutuna. Negatif değerli RND komutunda ise sonuç devamlı olarak aynı kalır. Bu sonuç ancak sayısal değer değiştirildiği zaman değişir. Örneğin PRINT RND(-55) komutunu bilgisayara direkt olarak girin ekranınızda belirecek sayı devamlı olarak 5.13446139E-08 olacaktır ve PRINT RND (-33) dersek o zaman sonuç 3.08555173E-08 olacaktır. Böylelikle yine gerçek bir rastlantısal sayı bulamadık. Ancak negatif değerli RND komutunda bizim önceden bilmediğimiz bir değer alırsak o zaman rastlantısal sayıya çok yaklaşırız. Bunu ise RND(-TI) komutlarını vererek yapabiliriz. Burada TI bilgisayarın içinde bulunan sistem saatinin değerini okuduğundan devamlı olarak değişmektedir ve bunun sonucu olarak bizi rastlantısal sayıya yaklaştırır. En son olarak da gelelim 0 değerli RND komutuna. Bu komuta ise bilgisayarınız RND(-TI)'a benzer şekilde sistemin saatinden yararlanır ancak belli bir süreden sonra sayı dizisi kendini tekrarlamaya başlar. Bu da herhalde hiç bir programcının istediği bir durum değildir. Bu kadar anlatımdan sonra size son bir tavsiye vermek istiyorum. RND komutu kullanan bir program yazmak isterseniz programınızın ilk başına RND(-TI) komutunu verdikten sonra RND(1) komutunu kullanmanız size en gerçekçi rastlantısal sayıyı verir. Burada RND(-TI) ile başlangıç sayısını değiştirdikten sonra RND(1) ile rastlantısal sayıyı çağırıyorsunuz. Bir de her INPUT, WAIT komutlarından sonra bu sistemi kullanırsanız rastlantısal sayılarınız daha gerçekçi olur.
Bir daha ki yazılarımda görüşmek üzere hepinize bol RND'li günler diliyorum.