Bu sayfadaki yazılar
Sayfanın metni
Sayfa 29
ebü00 cbf'7
ız 60 00 £7 cb ad 20 ea e& dd a9 15 ad eb 58 60 03
lığıyla kullanıcı programa alınabilirler. Her defasında bir bayt aküye geri verilir. Çember arabelleğin ve arabirim elemanının adlandırılması ve aynı zamanda sistem-Interrupt'unun etrafından dolaşılabilmesi için diğer rutinlerin kullanılmasından önce, INIT'in ($CB00, ondalık 51968) çağrılması gerekir. Kaynak kodlarının dökümünü bu sayımızın okuyucu servisi bölümünde bulabilirsiniz. Döküm 2, gönderme ve alma rutinlerinin denenmesi için kısa bir demo programı (lütfen Checksummer kullanın ve SAVE “MIDITEST”, 8 komutuyla saklayın). Kapalı durumdaki bilgisayarınızın expansion portuna
PROGRAM ADI :
TEST
REM *& MİDİ TEST 00915 TO & 90030 RENO E, : 5v5 Sise7, <134> 60860 FOR Izi TO & xB54; 2009076 5Y5 Siğar PRİNT HEXT 1 ©0100 DATA 2
MIDI arabirimini takın ve MIDI-Out çıkışından bir kabloyu MIDI-In girişine bağlayın. Şimdi C64'ünüzü açın ve önce assembler rutinini ve sonra demo programını yükleyin. Bunu yapmak için
LOAD“MIDI1.OBI”,8,8
ve LOAD “MIDITEST”,8,0
satırlarını yazmanız ve ardından RUN etmeniz gerekiyor. Bunu yaptığınızda arabirim, DATA satırındaki rastlantısal sayıları kendisine gönderir ve gönderilen ve alınan verileri ekranda görüntüler. Sayıların birbiriyle uyuşması durumunda MIDI arabirimi ve sürücü rutinleri uyumlu bir şekilde birlikte çalışırlar. Eğer ilginizi çekerse, rutinleri, C64'ten dairesel bir MIDI ağında anlamlı bir veri aktarımı oluşturacak şekilde geliştirebiliriz. Bunu yaparken kendinize özgü program çözümleri üretmenizi sağlamak için, ağ yazılımlarının oluşturulmasına ilişkin bazı temel bilgilere sahip olmanız gerekir. Çember biçimli bağlantı, bu sayımızdaki “Bilgisayar Bağlantı Arıyor” yazımızda açıklanıyor. Bu bağlantıda, çember içinde aktarılan bilgilerin istasyondan istasyona iletilmesi gerektiğini görüyorsunuz. Bu iş, ağ yazılımı tarafından olabildiğince gecikmesiz olarak yapılmalıdır. Bu sırada işlemciden oluşan ağır yükün yanı sıra, MIDI-Thru üzerinden yapılan donanımı destekli veri aktarımına oranla daha büyük bir zamansal gecikme ortaya çıkar. Ayrıca çember içinde yollanan tüm bilgilerin adres verileriyle donatılmış olması gerekir. Müzik enstrümanları için geçerli olan MIDI aktarım standardında, doğru alıcı istasyonunun bulunabilmesi için, her bilgi paketinin kendinden önce yollanan bir durum baytını takip etmesi gerekir. Bu durum baytının betimlenmesi için kullanılan en yüksek değerli bit, bu durum baytının diğer yüksek değerli üç biti komut modunu belirtir. Bilgiyi alan enstrümana, bir sesin başlamasını, sonunu veya ton değişikliği, ses yüksekliği (Pitch-Bend) vb. diğer MIDI fonksiyonlarını yerine getirmesini bildirir. Düşük değerli 4. bitle olası 16 aktarım kanalından biri seçilir. Bilgisayarlar arasında veri aktarımında bu yolla birbirinden farklı 16 adresin oluşturulması mümkün. Ayrıca üç komut biti aracılığıyla sekiz farklı işletim türü tanımlamak da mümkün. Fakat bu bitleri kullanarak yapılacak en yararlı iş, daha sonra gelen veri baytlarının sayısını bildirmek. Bu bilginin iletilmesinden kaçınılacak olursa, bir veri baytının en yüksek değerli bitinde 1 bulunmaması gerekir, aksi takdirde bunu bir durum bitinden ayırmak olanaksızdır. Böylece aktarılacak verilerin 8 bitlik bir yapıdan 7 bitlik bir yapıya dönüştürülmesi gerekiyor. Bunun yapılması hesaplama ve program kullanımını oldukça hızlandırıyor.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 28
Veri aktarımında herhangi bir hatanın olup olmadığının denetimini arabirim bizzat üstlenmiş durumdadır. Bozuk byte'ların değiş tokuşu (ya da tekrarlanması), üreticinin (gönderen bilgisayarın) yazılımı tarafından gerçekleştirilmek durumundadır. 5. ve 6. bitlerin anlamı, Tablo 3'te görülüyor. Bir MIDI bağlantısının varlığında burada yalnızca A ve B bir anlam taşımaktadır (68B50, başka türde seri bağlantı kullanımlarında da yararlı olmaktadır). 6. bit, MIDI bağlantısında daima sıfırdır, 5. bit ise gönderim Interrupt'unu açar. Eğer bir bayt kablo üzerinden başarılı bir biçimde gönderilmişse ve gönderilen veriler sicili yeni baytları bekliyorsa, gönderim Interrupt'unun açık olması (B) durumunda bir IRQ gerçekleşir. 7. bit, aynı şekilde alıcı Interrupt'unu açar. Bu durumda ise bir IRQ'nun gerçekleşmesi, bir baytın tümüyle varmasıyla olur. Kaliteli MIDI programlarında bu mutlaka “1” olmalıdır, böylece gelen baytlar derhal alınan veriler sici-
Yönetim sicili: Bölümleme oranı — Aktarım hızı Bit 1 Bit 0 1:1 2 MBaud 0 0 1:16 125 KBaud 1 0 1:64 31,25 KBaud 1 1 Arabirim elemanını başlangıç durumuna getirir (Master Reset) Tablo 1. Bu bitler aktarım hızını belirler Yönetim sicili bit Veri biti Stop-bit — Format 4 3 2 0 0 0 7 2 Çift A 0 0 1 7 2 Tek B 0 1 0 7 1 Çift C 0 1 1 7 Tek D 1 0 0 7 1 Tek D 1 0 0 8 2 Yok E 1 0 1 8 1 Yok F 1 1 0 8 Çift G 1 1 1 8 Tek H Tablo 2. UART 6850'nin aktarım formatları Gönderme kontrol bitleri ta Send Format 0 0 Engellenmiş 0 A 0 1 Serbest 0 B 1 0 Engellenmiş 1 C 1 1 Engellenmiş/ 0 D kesme sinyali gönderiyor linden güvenli bir bellek alanına aktarılabilir. Aksi takdirde gelen baytın bir sonraki tarafından silinmesi olasılığı vardır. Durum sicili, aktarma işlemine ilişkin bilgileri içerir. Alınan veriler sicili dolu olduğunda, yani bir bayt alındığında, 0. bit “1” olur. Arabirim elemanı gönderilen veriler siciline yerleşmiş olan bayttan kurtulduğunda, durum sicilinin 1. biti dolu olur. 2.-4. bitlerin MIDI programlanması açısından özel bir önemleri yoktur. Tabloda bu bitlerin verilmesi, eksik sanılmamaları içindir. Eğer yazılım, alınan bir baytı alınan veriler sicilinden zamanında okuyamamışsa, 5. bit “1” olur. İyi programlanmış MIDI yazılımlarında, yukarıda da belirtildiği gibi, böyle bir durumun ortaya çıkmaması gerekir. Bu kuralın pek istenmeyen istisnaları, Interrupt'larla yönetilen her veri aktarım işleminde meydana gelebilir. Bu durum, bilgisayarın işletim hızının ayarlanmış veri aktarım hızına (örneğin 2 Mbaud) yetmediğini ya da veri alım rutininin yeterli hıza erişmediğini ortaya koyan bir göstergedir. Durum sicilinin 6. biti, pariteli bir aktarım formatı kullanıldığında önem kazanır. Eğer bu bit doluysa, son olarak alınan bayta dikkat edilmelidir, çünkü UART bir parite hatası buldu demektir. Arabirim elemanı, durum sicilinin son defa kullanılmasından sonra bir Interrupt gerçekleştirdiyse, 7. bit “1” değerini alır. Böylece bir Interrupt-servis rutini, MIDI arabiriminin bir IRQ verip vermediğini denetlemiş olur. Döküm 1 adıyla yayınladığımız Assembler programı, MIDI standart formatındaki verilerin Interrupt'larla yönetilen alınmasını ve gönderilmesini sağlayan rutinleri içeriyor. Alınan ya da gönderilmek üzere belirlenen baytlar her defasında 256 baytlık bir ara belleğe depolanır. Böylece bu rutinlere dayalı kullanımlar, aktarımdan bağımsız olarak çalışabilirler. Aktarılacak baytlar kullanıcı program tarafından 51987 adresinden (BASIC, Assembler'de $CB60) başlayan rutinler üzerinden çıkış çember arabelleğine iletilir. Esas çıkış ise Interrupt sırasında gerçekleşir. Alınan baytlar aynı şekilde bir Interrupt gerçekleştirirler ve IRQ servis rutini tarafından giriş çember arabelleğine iletilirler. Oradan BYTEGET ($CB1D, ondalık 51997) rutini aracı-
Tablo 3. Yönetim sicilinin gönderme kontrol bitleri