Bu sayfadaki yazılar
Sayfanın metni
Sayfa 53
Üçüncü altprogram zaman bitimini belirten gong sesini çalar. Bu sesi istediğiniz bir ses efekti ile değiştirebilirsiniz. Eğer gong sesini istemezseniz 5200 numaralı satırı RETURN komutuyla bitirin.
5200 S-54272 5210 FOR L—0 TO 24 : POKE S4 : NEXT 5220 POKE S4 1,130 : POKE S4- 5,9 5230 POKE 15,30 : POKE S4 24,SES 5240 POKE S4 4,21 5250 FOR T— 1 TO 300 : NEXT 5260 POKE S4 4,20 5270 FOR T— 1 TO 500 : NEXT 5280 FOR L—0 TO 24 : POKE : NEXT 5290 RETURN
Yeni INPUT komutunu kullanmak istediğiniz programlara bu üç altprogramı eklemeyi unutmayın. Yeni INPUT komutunu kullanan program şu şekilde olabilir: 100 POKE 53280,6:POKE 53281,6:PRINT” BLK “:PRINT CHR$(447) 1410 : : ZA=10 200 PRINT “SORUYA 10 SANİYE İÇİNDE CEVAP VERİN” 210 PRINT “ÇALIŞTIĞINIZ BİLGİSAYAR NEDİR” 220 GOSUB 5000 : INPUT A$ : GOSUB 5100 230 IF FLG THEN 250 240 PRINT “ÜZGÜNÜM SÜRE BİTTİ.“:GOSUB 5200: GOTO 270 250 IF A$=“COMMODORE” THEN PRINT “SANİYENİZ KALMIŞTI”:GOTO 270 260 PRINT “CEVAP YANLIŞ” 270 END
Bu programda 100 numaralı satırda ekran renklerini belirliyoruz. 410 numaralı satırda geri sayımda kullanılan üç değişken ayarlanıyor. 200 ve 210 numaralı satırda kullanıcıya soru soruluyor. 220 numaralı satırdaki GOSUB komutuyla geri sayım başlatılıyor. Her GOSUB 5000 çağrısını GOSUB 5100 çağrısı izlemeli, aksi takdirde geri sayım hep devam eder. Eğer GOSUB 5100 komutu işlenmeden programı RUN/STOP ile durdurursanız geri sayım devam eder. Saati durdurmak için SYS 65418 komutunu kullanabilirsiniz. 230 numaralı satırda FLG değişkeni kontrol ediliyor. Bu değişken, kullanıcının zamanında RETURN tuşuna basıp basmadığını belirliyor. Eğer değişkenin değeri sıfır ise zaman bittiğinden gong sesi çalar. Eğer zaman bittiğinde doğru cevap yazılmış, ama RETURN tuşuna basılmamışsa cevap yanlış kabul edilir. Bu durumu belirlemek için programa şu satırı ekleyin:
235 IF A$-“COMMODORE” THEN PRİNT “CEVAP DOĞRU, ANCAK RETURN TUŞUNA BASMAYI UNUTTUNUZ.”:GOTO 270
Makine Dili Makine dili programı yaparken ekranı yüksek çözünürlüğe nasıl geçiririz? 53265 numaralı adresin beşinci biti yüksek çözünürlük modunu kontrol eder. Bu biti yakmak için BASIC'te POKE 53265,PEEK(53265) OR 32 komutunu vermek yeterli olur. Makine dilinde de aynı tekniği kullanacağız.
LDA 53265 ORA 32 STA 53265
Aşağıda makine dilinde yazılmış olan program yüksek çözünürlük ekranını 24576 numaralı adreste açar.
LDA 56578 ORA 3 STA 56578 LDA 56576 ;VİC çipi bu adrese AND 252 ;dikkat et. ORA 2 STA 56576 LDA 53272 ;VİIC bu adrese bak AND 15 ve bitmap için ORA 120 ;hafıza STA 53272 LDA 53265 ;53265 numaralı adresin ORA 32 beşinci bitini yak STA 53265 RTS
Tekrar normale dönmek için aşağıdaki programı kullanabilirsiniz.
LDA 56578 ORA 3 STA 56578 LDA 56576 AND 252 ORA, 3 STA 56576 LDA 21 STA 53272 LDA 27 STA 53265 RTS
Şimdilik hoşçakalın.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 52
Basıc Programlar Kürsoru ekranın istenilen bir yerine göndermenin çeşitli yolları var. Daha evvelki yazılarımızda bu işlem için çeşitli POKE Komutları vermiştik. Ancak kürsorun devamlı olarak yerinin değiştirilmesi gereken bir programda bu kadar çok POKE Komutu, programın okunabilirliğini azaltır. POKE komutu yerine kontrol karakterleri kullanmak da programın okunurluğunu azaltır. Bu kullanıma bir örnek verelim:
DOWN DOWN RİGHT RİGHT RISHT “
Bu satır kontrol karakteri içeren bir satırın BDE ile alınmiş çıkışıdır. Ancak bu satırı BDE olmadan yazdırırsak, anlaşılması güç karakterlerle uğraşmak zorunda kalacaktık. Yeni vereceğimiz yöntem diğerlerine göre daha hızlı bir yöntem değil, hatta diğer yöntemlere göre daha fazla hafıza harcamayı gerektiriyor. Ancak bu yöntemle programın anlaşılması çok daha kolay. Mesela onikinci kolon, onuncu satıra MERHABA yazmak için bütün yapmamız gereken:
40 PRİNT “MERHABA”
Bu şekilde bir kullanımdan evvel dizileri tanımlamak gerekiyor. SAS ve KLS dizilerini tanımlamak için programınıza şu satırları ekleyin:
1 GOSUB 60000 END 60000 Fzx0 : : 39 600410 DIM SAS(LS), KLS(CS)
60050 SAS(X)- SAS(X-1)4 CHRS(47) 60060 NEXT 60070 FOR 1 TO CS 60080 KLS(X-1) 4 CHRS(29) 60090 NEXT 60400 RETURN
Artık SA$ ve KLS dizilerini kullanarak kürsoru istediğiniz yere yerleştirebilirsiniz. Ekrandaki yirmibeş satırı 0-24 şeklinde sıraladık. Kolonlar 0-39 şeklinde sıralanıyor. Eğer sıfırdan başlamak istemezseniz 60000 numaralı satırdaki F değişkenini F=1 yapın. Bu değişiklikten sonra kolonlar 1-40, satırlar 1-25 olarak sıralanır.
Yeni INPUT Komutu INPUT komutu, kullanıcının verileri girip RETURN tuşuna basması için bekler. Eğer kullanıcı hiçbir şey yapmazsa, program bu noktada sonsuza kadar bekler. Eğer bazı durumlarda INPUT komutuna ne kadar beklemesi gerektiğini söyleyebilirsek daha iyi olur. Mesela bir test programı, soruların cevabı için belirli bir süre bekleyip kullanıcının sürenin sonunda bir sonraki soruya otomatik olarak geçmesini sağlayabilir. Program Döküm Eki'ndeki ikinci program, zaman kontrollü INPUT komutunu devreye sokuyor. Yeni INPUT komutu kullanıldığında cevap için kalan süreyi ekranın üst sağ köşesinde izleyebilirsiniz. Saat sesli olarak geriye doğru sayacaktır. Süre bitiminde veri girişi yapılmamışsa, bir gong sesi çıkar. Programı yazdıktan sonra çalıştırmadan evvel muhakkak SAVE edin. Çünkü makine dilini hafızaya geçiren BASIC yükleyici, işini bitirdiğinde kendini siler. Makine dili program hafızada sadece 160 Byte yer kaplar ve BASIC programınız tarafından çağrılana kadar bekler. Yeni INPUT komutunu kullanabilmek için aşağıdaki üç altprogramı, programınıza eklemeniz gerekir. İlk alt program SYS komutuyla makine dili programı çalıştırıp geriye sayımı başlatır. İlk alt program:
5000 REM GERİ SAYIM BAŞLADI 5010 POKE 254,RENK : POKE 252,SES : POKE 253.ZA 5020 SYS 1020 : RETURN
RENK değişkeninde saatin rengi belirleniyor. Eğer saatin görünmesini istemezseniz renk olarak arka plan rengini seçin. SES değişkeninde saat sesinin yüksekliği saklanıyor. 0 değeri sesin duyulmasını engeller. 15 değeri en yüksek sesi verir. ZA değişkeni izin verilen süreyi taşır. Bu süre 1 ile 99 saniye arasında olabilir. Bu üç değişkeni programın başında hazırlamanız gerekir. İkinci altprogram saati kapatır. Bu altprogramı her zaman INPUT komutundan sonra çağırmanız gerekir. Altprogramdan dönüşte iki değişken önem taşır. FLG değişkeni 1 değerini taşırsa, kullanıcı RETURN tuşuna basmış demektir. Aksi takdirde bu değişkenin değeri sıfır olur. TR değişkeni kalan zamanı verir. Eğer zaman bitiminde bir cevap verilmemişse, bu değişkenin değeri
5100 REM ALT PROGRAM - 2 5110 SYS 65418 5120 POKE 1062,32 : POKE 1063,32 5130 TR- 6 5140 IF TR— 100 THEN TR-O 5150 FLG -PEEK(254) : RETURN