Bu sayfadaki yazılar
Sayfanın metni
Sayfa 32
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-
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 33
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