Bu sayfadaki yazılar
Sayfanın metni
Sayfa 13
Yeni bir konu ile herkese merhaba. Başlığa bakıp BASIC öğreteceğimizi düşünmeyin. Bildiğiniz gibi -bilmiyorsanız da öğrenmiş oluyorsunuz- C64 Guinness rekorlar kitabına giren bir ev bilgisayarıdır ve 20 senedir 2-3 revizyon dışında hiçbir değişikliğe uğramadı. Ama ne hikmetse 20 sene sonra bile hala deli gibi uğraşanlar var, ülkemizde BRONX'un 7D2, 7D3 gibi partileri haricinde hiçbir faaliyet olmasa da yurt dışında, Avrupa'da sürekli olarak partiler, yarışmalar düzenlenmektedir. (www.c64.sk adresinde haberleri bulabilirsiniz.)
Her neyse konuyu fazla dağıtmadan devam edelim. C64'ün çıktığı yıllarda ev bilgisayarları olarak birçok model vardı. Bazıları C64'ten gerçekten iyiydi. Ama 5-10 sene içinde çoğu piyasadan silindi. Kimisi pahalıydı, kimisi yeterince ilgi görmedi, kimisinin program desteği sorunu vardı vs. vs.. C64 aslında iyi bir makinaydı, zamanına göre çok güzel müzikleri ve grafikleri vardı. Bir düşünün, takvimler 1982'yi gösterirken bir bilgisayar piyasaya çıkıyor ve birkaç sene sonra o bilgisayar için yüzlerce oyun ve program üretilmiş durumda. Oyun müzikleri ve grafikleri insanı mest ediyordu. (O yıllarda PC -primitive calculator- ler siyah beyaz ekranda çalışan, EGA, CGA bilmemne modlu ekran seçen, iğrenç ötesi bip bip sesler çıkaran neredeyse sadece elektronik daktilo niyetine kullanılan makinalardı. Üstelik fiyatları da çok yüksekti.)
Konumuza geri dönersek C64'ün bu kadar tutulmasının sebebi neydi? Programlaması acaba çok mu kolaydı? Yoksa özel çipleri sayesinde birçok şeyin rahatça yapılabilir olması mıydı? Bence hem evet, hem hayır. Evet olan kısmı özel çipleri ve programlama teknikleri sayesinde bir zamanlar kimsenin -hatta C64'ü tasarlayan mühendislerin bile- aklına gelmeyen uçuk-kaçık demo efektlerinin yapılabilmesiydi. Hayır olan kısmı ise C64'te program yazmanın biraz zor olması daha doğrusu BASIC'in yetersiz olmasıdır. Bence programcılar C64 BASIC V2'yi yetersiz buldukları için assembler ile harikalar yarattılar. Gerçekten de C64'ün V2 BASIC'i çok yetersizdir. C64'ün BASIC'i Microsoft tarafından hazırlandığı için yetersizdir. Diğer ev bilgisayarlarında ekran rengini değiştirmek için BORDER, COLOR gibi komutlar varken C64'te bu iş için POKE 53280, renkkodu komutu kullanmanız gerekmektedir. Mesela C64'ün SPRITE dediğimiz grafik özelliğini kullanmanız için -yani ekranda sadece bir sprite göstermek için- en az 4 adet POKE komutu kullanmanız gerekiyor. Üstelik adresleri de bilmeniz gerekiyor. Önce sprite'ın şekil datalarını uygun adreslere POKE etmeniz gerekiyor. Yani istediğiniz adresleri kullanamazsınız. Sonra sprite'ın X ve Y koordinatları için 2 adet, sprite pointer'ı için 1 adet ve en son olarak sprite'ı görünür yapmak için 1 adet POKE komutuna ihtiyacınız vardır. C64'ün BASIC'i bu kadar yetersiz olmasına rağmen işletim sistemini tasarlayanlar o kadar esnek tasarlamışlar ki,
RAM'de bulunan VECTOR adresler sayesinde BASIC V2'nin yetersizliği sorun olmaktan çıkmıştır. Türkçe COMMODORE dergisinin MART 1986 tarihli ilk sayısında SIMONS' BASIC isimli bir programdan bahsediliyordu ve o programı yazan kişinin (DAVID SIMONS) henüz 14 yaşındayken yazmış olduğu bildiriliyordu. Bu program sayesinde C64'e 100'den fazla yeni BASIC komutu eklenmiş oluyordu.
Bu kadar edebiyattan sonra ne yapacağımızı anlatalım artık. SIMONS' BASIC kadar olmasa da C64'ümüze 3-5 tane komut ekleyeceğiz. Mümkün olduğu kadar basit bir şekilde anlatacağım. (Elimdeki 06-12-2000 tarihli bir dökümana göre -HADES' BASIC olarak isim vermişim- C64'e 20 adet yeni komut eklemişim)
C64'e komut eklemenin birkaç yolu vardır: 1 - SYS komutuna parametreler ekleyerek. Mesela ekran rengini değiştirmek için POKE 53280, renk yerine SYS 49152, renk kodu gibi geliştirilmiş bir SYS komutu kullanabilirsiniz. 2 - Bir zamanlar moda olan PINKY TURBO isimli teyp için turbo load / save programındaki gibi özel bir karakter tanımlayıp mesela renk değiştirme işlemi yapmak. (PINKY TURBO aktifken hafızaya turbosuz yüklenmiş fakat henüz çalıştırmamış olduğunuz bir programı "S" komutu ile kasete turbolu olarak kaydedebilir, "L" ile kasetten bilgisayara yükleyebilir, "V" ile de VERIFY işlemi yapabiliyordunuz. Burada "" karakteri yeni bir komut olarak işletim sistemine eklenmişti.) "C, renk kodu" gibi bir komutla renk değiştirme yapılabilir. 3 - Tamamen yeni bir komut ismi tanımlayıp işinizi yapmak. Mesele "POKE 53280, renk kodu" yerine "BORDER renk kodu" şeklinde bir komut tanımlamak. 4 - Benim bilmediğim başka bir şekilde komut eklemek :) Bu bölümde 3. maddedeki biçimde yeni komutlarımızı ekleyeceğiz.
3. yöntemde C64'e yeni BASIC eklemek için en basit yol $0308-$0309 adreslerinde bulunan IGONE olarak bilinen BASIC KARAKTER GÖNDERİMİ vektörünü değiştirmektir. Bu vektörü değiştirince işletim sistemi normalde gitmesi gereken $A7E4 adresi yerine sizin yeni komutları değerlendirecek rutininize gider. Eğer yeni komut varsa işletilir, yoksa işletim sistemi $A7E4 adresine sıçrayıp eski işine devam eder. Şimdi hep beraber ekran silme işini yapacak "CLS" yani CLear Screen ve birkaç tane komutu C64'e kazandıralım. Benim göstereceğim yöntemde komut sıkıştırma gibi bir özellik yoktur. Yani normal komutlarda olduğu gibi bir komut için tek bir bayt kullanılmıyor. Açıklamak gerekirse siz C64'te program yazarken PRINT komutunu kullandığınızda hafızaya P,R,I,N,T harfleri değil sadece $99 sayısı kaydedilir. Yani komutlar "TOKEN" olarak saklanır. Böylece hafızadan tasarruf edilir. RUN komutu ile program normal çalışır. LIST komutu verince hafızadaki her bayt tek tek değerlendirilir ve hangisinin komut kodu hangisinin normal text olduğu çözümlenir. Örnekte olduğu gibi $99 rakamı Basic yorumlayıcı tarafından PRINT şeklinde ekrana gönderilir. İşte bu sıkıştırma özelliği benim vereceğim komutlarda olmayacaktır. Fakat yeni komutlarımızda normal bir komutun harfleri geçiyorsa -mesela yeni komutlarımızdan olan BORDER komutunda OR komutu yer almaktadır- yeni komut B,O,R,D,E,R olarak değil B, OR komutunun kodu, D,E,R olarak hafızada tutulmaktadır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 12
farkli !!"
.byte 13 .text "girilen degerleri kontrol edin !!"
.byte 13,5,0 save_msg .byte 13,13 .text "save ? (e/h)" .byte 13,0 kas_dis .byte 13 .text "kaset/disket ? (k/d)"
.byte 13,0 main_text .byte $9f .text " check summer v1.0"
.byte 13,13 .text " (c)2003 hades/independent"
.byte $9e,0 ;--------------------------------------------; letter_cnt .byte 0 byte_cnt .byte 0 start_lo .byte 0 start_hi .byte 0 name_len .byte 0 name .text " " ;--------------------------------------------;
*=name+17 linechar1 .byte 32,45,32,5,0 oper .byte 0,0,0,0,0,0,0,0 temp .byte 0 multiple .byte 17,19,23,29,31,37,41,59 temp0 .byte 0 temp1 .byte 0 end_of_prg .byte 0 ;----------------------------------------;
.end
Ve bunlar da CHECKSUMMER'in ekran görüntüleri: