Bu sayfadaki yazılar
Sayfanın metni
Sayfa 50
Hata yoksa programımız SYS304 ile çalışır durumda demektir. Şimdi aşağıdaki örnek programa bakalım.
10 SAT 20 SATIRI 2" ZO SATIRI 2"
Amacımız 20 numaralı satırı 40 numaralı satıra eklemek olsun. Bunun için 20 numaralı satıra aşağıdaki gibi (:) iki nokta üstüste koyalım.
10 PRİNT"DENEME SATIRI 1" 20 FRİNT"DENEME 2" Şimdi satırı birleştirmek için SYS304 yapalım. Listeye baktığınızda aşağıdaki programı göreceksiniz.
GFRİNT"DENEME SO FRIİNT"DENEME
SATIRI 1" SATIRI £"
SATIRI £" - Programın diğer bir özelliği:
Bu prgoramın yardımı ile Basic İnput Buffer uzunluğundan daha uzun satır yazabilme özelliği olduğunu söylemiştik. Eğer siz 88 karakterden daha uzun bir satır elde ederseniz, o satırın dışarıdan (Basic ile) düzeltilmesi imkansızdır. Böylece değiştirilmesini istemediğiniz programlar için bu altperogramı kullanabilirsiniz. Ayrıca program istenilen herhangi bir bellek bölgesine yerleşebilir. Örneğin 10 satırı
10 FOR N-—49152 TO 49268
şeklinde yazıp SYS49152 ile de programı çalıştırabilirsiniz.
Makine Dili İle İlgilenenler İçin
Sizin için programın Assembler listesini veriyoruz. Biraz açıklama yapalım. İsterseniz üzerinde değişiklik yapıp kendiniz için uygun duruma getirebilirsiniz.
$FB,$FC belleklerin işlemin yapılacağı adresi,
$FD,$FE de işlemin bitiş adresini göstermekte.
JSR satırları yeniden düzenlemek için kullanılan bir altprogram
JMP SAZAE READY programı.
Program 256 karakterden fazla satırlar için çalışmaz. Bunun için herhan-
SATIRI 2"
gi bir önlem olmadığından, en fazla maksimum uzunluktaki 3 satırı birleştirebilirsiniz. Satırlar kisaysa bu sayı artabilir.
Açıklamalar
Soldan Sağa:
1. KARAKIŞ (Kışın ortasına karakış denir. Ortasındaki harflerle KAR ve AK sözcükleri yapılabilir). 2. ALİ (ALİBABA, Öksüz -yani, BABA'sız- kalınca ALİ olur). 3. (RASRA) “im”'dir).
4. ISPARTA (Harfleri karıştırılır ve M eklenirse, pastırma; T çıkarılırsa, pırasa sözcükleri elde edilebilir). 5. NA (Ne a acele — NaCl, tuzun formülüdür.) - ER (KEK çıkınca ER kalır, o da erkek demektir). 6. ECE (GECE'nin son üç harfidir). 7. ALMANAK (“ANLAMAK”'ın anagramıdır).
Yukarıdan Aşağıya:
1. KARINCA (“Kocanca”'nın dişisi “karınca”'dır. “Karınca ezmez”, merhametli anlamına gelen bir deyimdir).
2. ASA (Hasan'ın orta harfleri). 3. RA (Burada - bu RA'da.) - EM (Cem'in son iki harfi). 4. ALMANCA (“Al manca” ya da Almanca). 5. Kİ (Zaten “Kİ” olduğu söyleniyor). - EN (YENGen - ENİŞten: dört kez EN, yani genişlik var). 6. İTE (Ata ot, ite et vermek”, bir işi ters yapmak anlamına gelen bir deyimdir). 7. ŞIMARIK (“Şarkımı” sözcüğünün anagramıdır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 51
Sevgili Commodore'cular, İstanbul, 1. Levent'ten Ali Başel adlı okurumuz, birçok Commodore'cunun ortak merakına ışık tutmamızı istiyor. Yayına başladığımızdan bugüne kadar “Alet Edevat” köşemize gelen mektuplar, bu köşenin nasıl ilgi gördüğünün delili. Bu ve buna benzer mektuplara örnek olarak Ali Başel'in mektubunu aynen yayınlıyoruz:
“Sayın Commodore Dergisi Yetkilileri; Öncelikle derginizde bizleri düşünerek hazırladığınız bu bölüm için sizlere teşekkür ederim. Benim bilgi almak istediğim bölüm User Port. Daha kesin olarak şöyle anlatabilirim: User Port'a bir devre bağlayacağım, bu devre bilgisayardan 5 Volt aldığında bir işlem, 0 Volt aldığında başka bir işlem yapacak. Öğrenmek istediğim, Basic dilinde bir programla — User Port'un, istediğim zaman 5 Volt, istediğim zaman 0 Volt vermesi. Zannediyorum bu olay POKE komutu ile yapılabilir. Ama hangi adresin kullanılabileceğini bilmiyorum. Şimdiden teşekkürler.”
Bu mektubun cevabı User Port'un yapısına ilişkin başlı başına bir konu. Ancak bu soruya kısmen cevap olabilecek 2 yazı daha önceki sayılarımızda yayınlandı; C-64 ile aydınlanma (Sayı 3) ve 6526 üzerine notlar (Sayı 4). Fakat her iki yazı da, Çernobil'deki nükleer santral kazasını duyunca Everest tepesinde yaşamak için Çince öğrenmeye çalışan teknik editörümüzün gazabına uğramış, kendisine yapılan uyarılara rağmen düzeltilen yazılar yine yanlış basılmış. Burada yanlışlar için sizlerden özür dileyerek yine o iki yazıya değineceğiz. Reference Guide'da da gösterildiği gibi User Port, bir konnektör gerektiriyor. Commodore 64'e arkadan bakılınca üst sıradaki bağlantılar soldan sağa, 1'den 12'ye kadar numaralandırılıyor. Alt sırada ise soldan sağa doğru A'dan N'ye harflendirilmiş (Bkz. Reference Guide, s.397).
Bu bağlantılardan 6526 ile ilgili
REGİSTER MAP
RS3 RS2 RS1 RSO REG NAME 0 0 0 0 0 PRA PERIPHERAL DATA REG A 0 0 0 1 1 PRB PERIPHERAL DATA REG B 0 0 1 0 2 DDRA DATA DIRECTION REG A 0 0 1 1 3 DDRB DATA DIRECTION REG B 0 1 0 0 4 TIMER A LOW REGISTER 0 1 0 1 5 TIMER A HIGH REGISTER 0 1 1 0 6 TBLO TIMER B LOW REGISTER 0 1 1 1 7 TBHI TIMER B HIGH REGISTER 1 0 0 0 8 10THS OF SECONDS REGISTER 1 0 0 1 9 TODSEC SECONDS REGISTER 1 0 1 0 A TODMIN MINUTES REGISTER 1 0 1 1 B TODHR HOURS-AM/PM REGISTER 1 1 0 0 C SDR SERIAL DATA REGISTER 1 1 0 1 D INTERRUPT CONTROL REGISTER 1 1 1 0 E CRA CONTROL REG A 1 1 1 1 F CRB CONTROL REG B ile olanlarının fonksiyonlarına “6526 Üzerine Notlar” yazımızda değinmiştik. Şimdi soruya dönersek; User Port'ta bağlanan 6526 U2 adını taşıyor.
Bu liste Reference Guide'ın 428. sayfasından alındı. Yukarıdaki sicil ya da saklayıcı (register) listesini inceleyelim. 6526'nın içinde 0'dan F(15)'e kadar numaralandırılmış 16 adet saklayıcı olduğunu görüyoruz. Tabloda üst satırda ilk 4 sütun başlığına RS3, RS2, RS1, RSO adları verilmiş. RS kısaltması (Register Select), saklayıcı seçme anlamına geliyor. Commodore 64'te de kullanılan 6500 adresli mikroişlemciler, “memory mapped” giriş-çıkış adreslemesi kullanıyorlar. Yani, tüm giriş-çıkış ana birim entegreleri ve içerisindeki saklayıcılar, mikroişlemciye bellek gözü gibi görünüyorlar. Mikroişlemci bu saklayıcıları herhangi bir bellek gözünden ayırt etmiyor. İş böyle olunca da adres yolunun en alt 4 bit'ini (A3, A2, A1, A0), 6526'nın 4 adet saklayıcı seçme girişine (RS3, RS2, RS1, RSO) bağlamak kalıyor. Şimdi de bu saklayıcıların fonksiyonlarını inceleyelim: DDRA (Data Direction Register A) ve DDRB (Data Direction Register B) ya da veri yönü saklayıcıları. Bu saklayıcılara yazılan sayıya göre saklayıcının ait olduğu portun bazı pinleri giriş, bazı pinleri ise çıkış moduna geçiyor. Şöyle ki; ikili sistemde 8 bit'lik saklayıcının 0 yapılan bit'i ilişkili olduğu port'un karşılık gelen pinini giriş durumuna alıyor. Eğer bu bit 1 yapılırsa, ilgili pin çıkış durumuna geçiyor. Örnek olarak DDRA saklayıcısına; 01011010 yazılırsa (onlu sistem-
İn sakı sane Çıkış mmm 0 sa Giriş PAD Çıkış PAA Çıkış Giriş Çıkış PAN vin Çıkış Öle mt Giriş durumuna geçiyor. Saklayıcıya bu değeri Basic'ten yüklemek istersek, 10'lu sistemdeki karşılığı olan 182'yi bu saklayıcıya POKE etmek gerekiyor. PRA ve PRB ise peripheral data register'in kısaltılmış adıdır. Port pinlerinin yönleri DDRA ve DDRB'ye yapılan müdahalelerle belirlendikten sonra tüm okuma ve yazma işlemleri PRA ve PRB'ye yapılıyor. Bu saklayıcılara yazma yapıldığında sadece çıkış haline getirilen port pinleri yazma işleminden etkilenir, okuma yapıldığı zaman ise hem çıkış tamponlarındaki sayılar, hem de giriş pinlerinde görülen lojik seviyeler okunur. CRA ve CRB olarak belirtilen (Control Register A, Control Register B) kontrol saklayıcıları ise 6526'nın içindeki zamanlayıcı (Timer) ve zaman saatini kontrol etmek için kullanılır. Bizi şimdilik ilgilendiren saklayıcılar DDRA, DDRB, PRA ve PRB. Aşağıdaki tablolar yine Reference Guide'dan alınmıştır ve giriş/çıkış ara birimlerin saklayıcı adreslerini vermektedir.