Sorular ve Sorunlar

Vedat Hallaç geçenlerde okur mektuplarını karıştırırken araya sıkışmış birkaç mektup buldum. Bu mektuplarda sorulan sorular tam dişime göreydi. Ben de bu mektupların elimden geldiği kadar çoğunu cevaplamaya karar verdim. Bu kadar beklettiğimiz için mektup sahiplerinden çok özür dileriz. Gelelim soru(n)larınıza: Sayın editör, C64'ümü alalı bir ay olmasına rağmen bu konuya merakım ve diğer bilgisayarımdan tecrübelerim sayesinde fazla yabancılık çekmiyorum. İşten ve okuldan arta kalan zamanlarımda bilgisayarla uğraşmak beni rahatlatıyor. Benim sizlere birkaç sorum olacak:

Soru 1: Sprite üretebiliyorum, fakat bunlar 2 renk (zemin ve kalem) oluyor. Çok renk için POKE'ları girdiğim zaman şekil karışıyor. Bu işin sırrı nedir? Soru 2: Notasal ses üretebiliyorum, fakat daha nitelikli sesleri nasıl üretebileceğimi bilmiyorum. Amstrad'da bulunan Env-Ent komutlarının benzeri C64'de de yok mu? Soru 3: İyi bir sound digitizer (ses örnekleyicisi - ED.) yazılımı arıyorum. Birkaç isim verebilir misiniz? Soru 4: Teypten yüklediğim programın son kısmı bozuk. Bu kısmında zannedersem SYS adresini çağırıyordu. Bu programı nasıl çalıştırabilirim? Soru 5: Yazdığım programı nasıl koruyabilirim?

Sorunlarım bu kadar. Yardımlarınız için teşekkür eder, çalışmalarınızda başarılar dilerim. Metin Ertuğrul Cevap 1: Sprite'lar çok renk moduna geçtikleri zaman yanyana gelen iki nokta tek nokta olarak görünür ve bu iki noktanın birleşik değeri rengi belirler. Yani iki nokta da boşsa zemin; birinci boş, ikinci doluysa birinci renk, vb. bu iki noktanın birleşmesi yeni rengi oluşturduğu için, özellikle yuvarlak kısımlarda renk karışıklıkları ortaya çıkar. Sprite'larınızı yeni baştan çok renk moduna göre tasarlamalısınız. Cevap 2: Var. $D400'da yeralan SID çipi registerleri yardımıyla (tercüme POKE'lar yardımıyla) ADSR ayarı yapabilirsiniz. Fa-

33 kat bu şekilde tatmin edici sonuçlar alma- — zim dergi) bir baskı hatası olmuş. Cümlenin STA nız pek mümkün değil. En iyisi makine dili. — doğrusu büyük ihtimalle ““$2000 ile $20FF Li: DEC nin hızından yararlanarak sesin nitelikleriyle — (ya da $2FFF, bunu tahmin etmek zor) ara- BNE Li oynamak. Bunun için de Future Composer — sını bir yere kaydedin.” olacaktır. Bu işi yap- DEC gibi bir şarkı editörü elde etmeniz yeterli olar — mak için bir monitör programına ihtiyacı- BNE Lİ caktır. Bu programların müzik çalma rutin- — nız var. Monitör programında şu komutu DEC $FD lerini diske kaydetmesi sayesinde, yaptığınız — girmelisiniz (disket için): BNE Li üzikleri programlarınızda ilirrutinle len geriye sayıyoruz. Cevap 3: Ne yazık ki örnekleyicinizin mar- iş Tabii ki $EFFFFF'den ger saymakiçin aykasını Veya sistemini billirmediğiniz için öne- — değerini ekrana yazar. nı rutini kullanabilirsiniz. Ama biraz daha ride bulunamıyorum. Ama genel olarak kul- Dikkat edilmesi gereken nokta, A'ya yük- — Yavaşlatmak isterseniz şu rutini kullanmayı lanılan yazılım, fi tarihinde dergimizde açık- deneyin (raster interrupt yoksa bu işlem işe lamış olduğumuz örnekleyicinin yazılımı (SPEECH BASIC). Bunu kolayca bulabilirsiniz sanırım. Cevap 4: Çalıştıramazsınız. Özellikle program sıkıştırıldıysa, eksik olan bir bayt bile olsa program çıkmaz. Programı yeniden satın almalısınız. Cevap 5: Geçtiğimiz sayılarda bu sorunlara da değinmiştik. Ama programınızı korTumanın en kolay yolu LOCKY JR. gibi bir turbo kullanarak programı kasede kaydetmek, koruma işini turboya bırakmaktır.

Sayın Vedat Hallaç, Selamlar. Size vakit geçirmek için ROM'u incelerken bulduğum bir adresin nasıl kullanıldığını yazıyorum. Bu adres A ve X register'larında yeralan değerlerin oluşturduğu sayıyı onlu biçimde ekrana yazdırıyor. Aslında bu adres rutinin başlangıcı değil. Sadece bizim işimize yarayan kısmı. Bu adresteki rutine HEX-DEC çevirici adını taktım. İşte rutin: HEX-DEC çevirici: Kullanım şekilleri 1. LDA $Adres1 LDX $Adres2 JSR $BDCD RTS Örnek: LDA $2B JSR $BDCD RTS BASIC'in başlangıç adresini ekrana yazar. 2. LDA # $HI LDX # $LO JSR $BDCD RTS Örnek: LDA # $FC

Cevap 1: Yapılamaz. Sanırım bu cümleyi okuduğunuz kaynakta (büyük ihtimalle bisek, X'e alçak değerlikli baytın yazılması z0runluluğudur. Gereksiz olsa da BASIC'den POKE 780,HI:POKE 781,LO:SYS 48589 ile de kullanılabilir. Gereksiz diyorum, çünkü PRINT LO 4 256xHI aynı işi daha kolaydır. Umarım makine diliyle uğraşanların işine yarar. İsmail Şahin Cevap: Sanırım birçok arkadaşımızın işine yarayacak bir rutin bulmuşsunuz. Bu sayede ROM rutinlerini açıklarken kırdığım kısa rutin rekorunu kırdınız. Kutlarım. Sayın Editör, Size birkaç sorum olacak: Soru I: Ben bir yıllık bilgisayar kullanıcısıyım. Az da olsa makine dili biliyorum. Fakat makine dili çok hızlı. Ne yaparsam yapayım bir saniyeden fazla bekleyemiyorum. Makine dilinde bir bekleme döngüsünü nasıl yapmalıyım? Soru 2: $0073 adresinde yeralan CHRGET rutininden nasıl yararlanabilirim? Soru 3: Programlarımda RESET koruma; yı nasıl yapabilirim? Soru 4: Bazen bilgisayarımı açtığımda ekran sağa-sola kayıyor. Acaba bilgisayarımda arıza mı var? (Televizyonumun sağlam olduğuna eminim). Soru 5: Bana SAVE ve LOAD bölümleri çalışan bir çizim programı önerebilir misiniz? Şemsettin Moldibi Cevap 1: Aslında çok az kişinin aklına gelebilecek bir soruna parmak bastınız. Makine dili gerçekten de çok hızlı. 65535'den geriye saymak bile ancak bir saniye tutar. Peki ne yapmalıyız bu durumda? Tabii ki daha yüksek bir sayıdan geri saymak bir çözüm olabilir. Aşağıdaki rutine bakın bir: Bekle: LDA $10 STA $FB LDA # $FF STA $FC yarar sadece): Bekle: $IF LDY # $FF Lü: LDA # $90 Li: CMP BNE LI DEY BNE LO DEX BNE LO RTS “Her döngüde bir kez Raster satırı $90'a gelmeyi beklediğimiz için yukarıdaki rutin $1FFF ekran taraması kadar bekler.” diye düşünmüştüm başlangıçta. Ama her taramada yaklaşık sekiz-oniki arası geriye sayıldığı için, tam hesaplandığı kadar çok beklemiyoruz. Ama daha ilginç ve sabit bir sonuca ulaştık. Rutin, X'e yerleştirilen değer kadar saniye beklemenizi sağlıyor. Cevap 2: Aslında bu rutinden ne amaçla yararlanmak istediğinizi söylememişsiniz. Bu yüzden en genel kullanım şeklini anlatmaya çalışacağım. JSR $0073 komutunu verdiğiniz zaman, SYS komutunun arkasından gelen parametreleri harf harf alabilirsiniz (A registerinde). Cevap 3: $8000-$8001 adreslerine RESET denendiğinde sıçranacak rutinin adresini, $8002-$8003 adreslerine de RESTORE tuşuna basıldığında sıçranacak rutinin adresini girin (alçak-yüksek bayt formatında tabii ki- $8100 için $00 $81 değerlerini girmelisiniz). Daha sonra $8004-$8008 arasına ““CMB80” yazın, ve “CBM” karakterlerinin değerlerini $C3 $C2 $CD olarak değiştirin. Artık RESET'”e basıldığında $8000-$8001 adresinde yeralan rutine sıçranacaktır. Cevap 4: En kısa sürede bilgisayarınızı kontrol ettirin. Çok ciddi bir problem gibi görünmese de daha sonra büyük zararlara yolaçabilecek bir arızanız olabilir. Cevap 5: Her zaman söylediğimiz gibi,

S “Dosya Adı”',08,2000,20FF

Eğer kaset kullanıyorsanız 08 yerine 01 yazmanız yeterli olacaktır. Cevap 2: Go ve Disassemble komutları monitörün en sık kullanılan komutlarıdır sanırım. D1000 komutu ile, $1000'den başlayan makine dili programının listesini alabilirsiniz. G1000 komutu ise bu bölgede bulunan programı çalıştırmak için kullanılır. AMICA PAINT'i bulun, tüm problemlerinizden kurtulun. Gerçekten de piyasada bulunabilecek en iyi çizim programı olarak AMICA PAINT'i gösterebilirim. Koala uyumu sayesinde, diğer programlarla grafik alışverişi de oldukça iyi bu programın.

Sayın Commodore Dergisi, Bizim sorunumuz GEOS'la ilgili, Elimizde bir adet MPS 1230 printer mevcut. Bununla, GEOS'la hazırladığımız sayfaları parça parça veya bütün basmanın imkânı var mı? Biz hiçbir şekilde printer çıktısı alamadık. Hardcopy ile basmak istediğimizde de printerdan saçma sapan karakterler çıkıyor. Denemedik yol bırakmadık. Uygun printer seçimi yapmak için gerekli işlemleri de uyguladık. Fakat MPS 1230 menüde mevcut değil. Bunun yerine COMM compatible kısmından da denedik, sonuç yine başarısız. Yardımlarınıza şimdiden çok teşekkürler. Olgun Duyar, İlker Par, Kamil Turan

Cevap: Probleminiz, printer alan herkesin karşılaştığı türden. GEOS'un printer'ınızı destekleyen bir driver'ını bulmanız oldukça zor olabilir bazı durumlarda. Neyse ki siz şanslı insanlardansınız. Çünkü MPS 1230, EPSON FX80 ve IBM ProPrinter dahil 4 printer'ı emüle (taklit) edebiliyor. Bu sayede aşağıda anlatacağım yolu kullanarak printer'ınızdan yararlanabilirsiniz:

Printer'ınıza yeni kâğıt takın ve kapatın. Form FEED ve Line FEED tuşlarına birlikte basın ve parmaklarınızı çekmeden printer'ı açın. Printer size sorular sormaya başlayacaktır. Bu sorulara EVET cevabını vermek için Line FEED tuşuna basın. Seçeneği değiştirmek için ise Form FEED'i kullanın. Bu şekilde printer'ınızın kendisini EPSON FX80 moduna sokmasını sağlayın. SERIAL Commodore interface'ini seçin ve PC.COMMANDS moduna geçin. LOCAL'ı kullanarak değişiklikleri kabul ettirin (en iyisi printer'ınızın manual'unu okuyun bu işlem için). Artık printer'ınız seri porttan çalışan bir EPSON FX80 sanacaktır kendini. Şimdi GEOS'u çalıştırın ve printer olarak EPSON FX80'i seçin (standart GEOS disklerinde bu printer driver mutlaka bulunur). Şimdi garip karakterlerle karşılaşma olasılığınız yoktur. Artık üç şey başınıza gelebilir: a) Printer'iniz tam olarak çalışır (MURPHY'ye göre bu seçenek olanak dışıdır). b) Satırlar arasında bir karakter boş kalır. c) Tüm karakterler aynı satıra basılır. Eğer b) durumuyla karşılaştıysanız, printer'ınızın sorularına tekrar cevap verin ve CR - CR ile ve LF-LF modlarını seçin. Probleminiz c) ile aynıysa bu sefer de LF ve LF-LF CR modlarını seçin. Artık printer'ınızı rahatlıkla kullanabilirsiniz. Hepinize geçmiş olsun. Sevgili Sinan abi, (Mektubunuzun GEOS kopyalama kısmını kesiyorum. Bu konuda yardımcı olamayız). Disk driver'ım hakkında bazı sorularım olacak. Cevaplarsanız sevinirim: Soru 1: 202 blok üzerindeki programları nasıl yüklerim? Soru 2: Disk driver'ın hızını nasıl artırırım? Soru 3: Disketteki bir programı nasıl autoboot yaptırabilirim? Alper Tugay Cevap 1: Ya çok iyi makine dili öğrenip kendi rutinlerinizi yazın, ya da (daha basiti) bu işi yapabilecek bir turbo programı elde etmeye bakın (SWAT 3 gibi). Cevap 2: Bu işi kendi başınıza yapmak için oldukça iyi makine dili bilgisine ve The Anatomy of 1541 türünden 1541 ROM'unu açıklayan bir kitaba ihtiyacınız var. En iyisi siz demin bahsettiğim disk turbolarından birini alın. Ya da biraz bütçenizi aşıp bir Dolphin DOS satın alın. Bu sayede yükleme ve kaydetme işlemleriniz 25 kat hızlanacaktır. Cevap 3: Eğer AutoBoot'tan kastınız, bilgisayarınızı açar açmaz programın yüklenmesiyse, bu işi C64'le yapamazsınız. En azından bir Commodore 128 bulmalısınız. Bunun dışında autostart programlar yaratmak gerekli programı bulunca oldukça kolay olacaktır.

Sayın Commodore Dergisi yetkilileri, Size birkaç sorum var: Soru 1: “$2000 ile $FF arasını bir yere kaydedin” nasıl yapılır. Soru 2: G1000, D1000 gibi komutlar monitör programının neresinde kullanılır? Soru 3: Amica Paint gibi bir programla yaptığım resmi programıma nasıl ekleyebilirim?

Cevap 3: Bu makine dili bilmiyorsanız sizi oldukça zorlar. İlk olarak Koala formatını öğrenmelisiniz. Daha sonra da grafik moduna nasıl geçeceğinizi öğrenin. Şimdi Koala formatında kayıtlı dosyadan grafik datasını ayırabilirsiniz.

Her ay Atölye'ye konu bulmak daha zor oluyor. Ne olur biraz yardım edin. Yaptığınız programları ve açıklamalarını, ya da yapamadığınız programların fikirlerini memnuniyetle kabul ederim. Eğer bu da işe yaramazsa her ay bu sayıda olduğu gibi komik komik programlarla idare etmek zorunda kalırsınız. Uyarması benden. Yukarıdaki kötümser uyarıya pek kulak asmayın. Bu ayki program o kadar da kötü değil. BASIC kullanıcılarının çerçevenin üst kısmına ait alt kısmına 24'er karakterlik mesajlar yazmalarını sağlayan bir rutin tanıtacağım bu ay. Bu mesajlar normal karakter setinde olacaklar ve istediğiniz renkte görünebilecekler. Ama sistemi biraz zorladığımız için diskten yükleme yapılırken bilgisayarınızı kilitliyor ve BASIC'i oldukça yavaşlatıyor. Bunun yanında iyi yanları da var programın, Mesela üst ve altta 8'er sprite kullanılmasına rağmen ekran sınırları içinde kullanılan SPRITE'ları hiç etkilemiyor. Yani toplam 24 sprite'ı bir anda ekranda tutuyor. Tabii ki sprite'ları gerekli şekilde MULTIPLEX etmiyor. Yani SPRITE'ınızı BORDER sınırlarının altına ya da üstüne çıkarmaya çalışırsanız ortalığı karıştırırsınız. Bu yazıda ilk olarak BASIC'cilerin programı nasıl kullanabileceklerini anlatacağım. Eğer yeterince yerim kalırsa bir de makine dili kullanıcıları için rutinleri açıklamak niyetindeyim. Eğer bu sayıda yerim kalmazsa bile gelecek sayıda mutlaka rutinleri açıklayacağım (çok değerli oldukları için değil, makine dili meraklılarını üzmemek için). Programın yapabildikleri o kadar fazla değil. İsterseniz SYS ile çağırabileceğiniz adreslerin ve yaptıkları işlerin listesini vereyim önce: $C000 — 49152: Border'ları açan ve sprite'ları...