Bu sayfadaki yazılar
Sayfanın metni
Sayfa 33
Program iki FOR-NEXT döngüsünden her geçişinde, yüksek byte kütüğündeki değer 1'le değişir, bu da tüm frekans değerini 256 ile değiştirmekle aynıdır. (Yüksek byte'ın 256 ile çarpıldığını unutmayın, bu rakam düşük byte'a eklenerek frekans sayısı bulunur.) Satır 210-280 sesi uzatmak için bir düşüş döngüsü kullanır. 1. dökümü yazdıktan sonra SAVE edin. Bu programdaki değişkenlerle oynayarak deneyler yapabilirsiniz. Satır 110'da değişik bir dalga biçimi Sirene bir iki ses2 ve ses3'deki ses kütükleri ayarlanabilir.
DOĞAYA DÖNÜŞ Döküm 4'de C-64 için cırcır böceği sesi çıkartan bir program var. Bu programı kurbağa sesi çıkartan bir programa dönüştürebilirsiniz. Bunun için dökümdeki 130 satırı POKE $D421,20 yapın. Şöyle bir 135. satır ekleyin: 135 :POKE $D424,X 2 ve 160 satırı değiştirin: 160 DT=20: GOSUB 200
Şimdi senaryoyu değiştirelim. Dalga sesine ne dersiniz? Döküm 5 size dalga sesi sunacak. Dalga sesinden sıkılıp havai fişek patlaması duymak istediğinizde 70. satırdaki ATAK değişkenini (A) 3 yapmanız yeterli. Makineli tüfek sesi duymak istiyorsanız 130. satırdaki DÜŞÜŞ döngüsünü kısaltın. Umarım sesler güzeldir. Ve yine umuyorum ki bu yetersiz yazının yardımıyla arkadaşlarınız ve programlarınız için birbirinden güzel sesler üretmeyi başarırsınız.
KUTUK RESET
Klavyeyle gezinmek için ← ve → tuşları.
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.