Commodore sayı 42, sayfa 32

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 32

lamlı gelmiyorsa sayıların ikilik eşdeğerlerini kâğıda yazıp yeniden deneyin.)

OYUN ZAMANI

Bunların bazılarına aklınız ermediyse endişelenmeyin; başka insanların ses rutinlerindeki değişken değerleriyle oynarken, teoriyi de yavaş yavaş öğrenebilirsiniz. Döküm 3 başlangıç için bir rutin sunmaktadır.

$

HE İ

Yü

Siren sesi üreten bir C-64 programı olan döküm üçteki her işlemin anlamını açıklayacağım. Satır 30 tüm SID kütüklerinin, $D424'teki volüm kontrol byte'ı dışındaki her kütük yerine 0 değerini POKE eden bir subrutini çağırarak temizlenmesini garantiler. ($D424'e yapılan POKE'ların BASIC ses programlarındaki bazı can sıkıcı klik seslerinin kökeni olduğunu keşfettim.) Satır 40 ve 50 $D422 ve $D423'e kare dalga biçimini kullanmak için değerler POKE eder. 0 ile 255 arasındaki her değeri $D422'ye; 0 ile 15 arasındaki her değeri de $D423'e POKE edebilirsiniz. Hoşuma giden bir kombinasyon bulana kadar bu sayılarla epeyce oynadım. Satır 60, volümü maksimuma (15)

çıkartır. 15'in ikilik sistemde karşılığı olan 00001111'deki geri kalan sıfırlar istemediğiniz tüm filtre seçeneklerini kapatır. Bu tür POKE'ları doğrudan ve eğer bütün byte'ın tam olarak nasıl olması gerektiğini biliyorsanız, AND ya da OR işlemlerini kütükte olan değerlerle yapabilirsiniz. Satır 80 ses için atak ve düşüşü başlatır. $D425'deki byte'ın üst dört biti ataklarınızı ayarlar (xxxx....) (düşük sayılar daha hızlıdır) ve alttaki dört bit düşüş zamanınızı ayarlar (yine düşük sayılar daha hızlıdır). Bu arada hatırlatalım yarım byte'a nibble denir. Atağı yüksek nibble'a ayarlamak için 0-15 arasında bir değeri alıp, 16 ile çarpmak ve sonucu 0-15 arasındaki düşüş değerinize POKE etmek durumundasınız. Gördüğünüz gibi uzun ve sıkıcı bir işlem. Satır 100'de aynı şeyi $D424 ile süreklilik ve dağılma için yapıyoruz. 110, satır kontrol kütüğünün bit 6'sını $D424'e yerleştirerek kare dalga biçimini seçer. Ben değeri $D424'e OR'lamakla uğraşmadım, çünkü bitlerin geriye kalanlarının sıfıra ayarlı olmasını istiyordum. Not: Sesi açmadan önce dalga biçimi kütüğünü ($D424) ayarlamayı unutmayın. SID çipindeki bir şey onun bu kütüğün içindekilerini

“unutmasına” neden oluyor. Neden bilmiyorum ama bunun olduğunu gördüm. Satır 150 işleri düzenler. SID, kontrol kütüğünün bit 1'i açılıncaya kadar hiç ses çıkartmaz. Bu atak/düşüş/süreklilik devrini başlatmak içindir. Burada $D424'e sadece bir 1 POKE etmemeye dikkat etmem gerekiyordu. Çünkü 110. satırla bit 6'ya bir 0 yerleştirilmişti. Onun için $D424'e 1 POKE ederek elde ettiğim değerle bir OR işlemi gerçekleştirip, sonucu yeniden $D424'e yerleştirdim. (Düzgün çıkması için çözülmesi gereken

Şekil 9- Örnek Byte'ın Dağılımı.

Bit 7 Bit 6 Bit 5 Bit 4 (128) — (64) (32) (16) 1 0 0 1

Bit 3 Bit 2 Bit 1 Bit 0 (8) (4) (2) (1) 0 0 1 1

Bit Kontrolü

Eğer 1 ise 1. sesi açar Eğer 0 ise 1. sesi kapar

Tablo 2- SID'in 1. Sesindeki Kontrol Kütük Değerleri.

0 Eğer 1 ise Atak/Düşüş/Süreklilik devri Eğer 0 ise Dağılma'nın başlaması Eğer 1 ise 1. sesi ve 3. sesi senkronize eder Eğer 1 ise 1. sesi ve 3. sesi modüler olarak bağlar sava

Eğer 1 ise üçgen dalga biçimini seçer Eğer 1 ise testere dişi dalga biçimini seçer Eğer 1 ise kare dalga biçimini seçer Eğer 1 ise parazit dalga biçimini seçer sesler için, bit 1'i POKE $D424, PEEK($D424) AND 254 işlemi ile kapatmak gerekiyor. Programdaki siren sesinin çözülmesi gerekmediğinden bu işleme gerek duymadım.) Kontrol kütüğünün bit 1'i şimdi ayarlanmış olsa bile hâlâ ses yoktur. Çünkü $D422 ve $D423 frekans kütüğündeki değerler hâlâ 0'dır. (0 frekans oldukça sessizdir.) Bu siren rutininde değişir, ses yükselir ve sesi kapat rutininde ses dalar ve durur. Satır 190, frekans düşük byte'ına 1 ve satır 200 frekans yüksek byte'ına değişken bir değer (x) yerleştirir.

Klavyeyle gezinmek için ← ve → tuşları.