Commodore sayı 63, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

Bir hızlı yükleyici yaratmak için iki programa ihtiyacınız vardır: Birincisi, demin de bahsettiğim, programların en başında yükleyip otomatik olarak çalışan ve bilgisayarın kontrolünü ele alan LOADER programı (bu program çabuk yüklenebilmesi için çok kısa olmak zorundadır), ikincisi ise bu loader'ı normal olarak kaydettikten sonra asıl programı hızlandırılmış sinyallerle kaydedecek olan FAST SAVE ya da HIZLI KAYDEDİCİ programdır. Bir turbo dizaynı sırasında başa çıkarılması gereken ilk problem, bitlerin kaset bantına nasıl yerleşecekleridir. Bant yüzeyindeki her bit, Şekil 1'de de görebileceğiniz şekilde yükselip alçalan bir dalga olarak yer alır. Dalganın iki ucu arasındaki uzaklık bize bu dalganın 0 mı yoksa 1 mi olduğunu açıklar. Uzun bir dalga 1'i, kısaları ise 0'ı temsil eder. (Bu tamamen size kalmış bir karardır. Canınız isterse kısaların 1'i, uzunların ise 0'ı temsil etmesini sağlayabilirsiniz.) Dalganın aşağı inen kısmında, interrupt registerlerinden birinin değeri değiştirilir ve siz de bu değerinden ve interrupt timer'larından (zamanlayıcılarından) aldığınız bilgisayara göre bu bitin değerini anlayabilirsiniz. Yükleyici, genelde interruptları kapatarak çalışan bir makine dili programıdır. İlk olarak CIA1 timer'larına gereken değeri verir ve onları çalıştırır. Bu zamanlayıcılar 0'landığı zaman da teypten sinyal gelmiş olup olmadığına bakar. Eğer zamanlayıcı 0'lanmadan önce bir teyp sinyali fark edilmişse, bu bitin değeri 0 olur. Aksi takdirde değer 1'dir. Daha sonra bu bitler bir bayta alınır ve 8 bit okunduktan sonra bellekte gereken yere yazılırlar. Tabii ki demin bahsettiğim normal hızın yükleme programları için geçerli olan mantıktır. Bizim loader'imiz ise daha değişik bir şekilde çalışır. İlk olarak bunda da timer'lar ayarlanır. Fakat teypten sinyal alınınca (dalganın aşağı inen kısmına gelinince) bir interrupt yaratılır. Bu interrupt'a girer girmez timerların değeri okunur ve yeniden çalıştırılır. Eğer okunan değer 0'dan farklıysa, kısa bir sinyal okunmuş demektir, yani bitin değeri 0'dır. Fakat asıl program, baytların okunmasından önce loader'ı sinyallerle senkronizasyona sokmaktır. Yani gelen bitin tam yerini saptamasını sağlamaktır. Bunu yapmak için, her baytta yalnızca bir bitin değeri 1 olan bir seri sıfır yazılır teybe. Loader rutini daha sonra bu bitin doğru yere gelmesini sağlamaya çalışarak kendini yazılı bitlere uydurur. Daha sonra güvenlik için yazılan bir baytlık bir değer de olması gerekenle aynı olarak saptanırsa, yüklemeye geçilir. Eğer bu baytın değeri tutmazsa, veya bitin yeri ayarlanamazsa, rutinin başına dönülür ve senkronize etme çalışmaları sürdürülür. Dergide yayınlanan ESRA TURBO ise bu konuda değişik bir yöntem uyguluyordu. Baştaki bir seri baytın değeri ayarlandıktan sonra dokuzdan sıfıra kadar olan tüm baytların orada bulunup bulunmadığı kontrol ediliyordu. Bu sayede ekstra güvenilirlik sağlanmıştı. Siz de kendi turbolarınızda güvenlik sağlamak için veya standartlara aykırılık olsun diye değişik bir giriş yapabilirsiniz. Demin bahsettiğim senkronizasyon baytının değeri 0/9 01000000 — $4A — 64 olabilir mesela (bizim turbomuzda da bu değer veriliyor). Bu değer birkaç kere ard arda (bizde 64 defa) yazılarak turbonun kendini bu bayta adapte etmesi sağlanır. Bu bayt ve güvenlik baytının değerleri olması gerekenle aynı olduğu zaman rahatlıkla programın datalarını yüklemeye girişebiliriz. Programın nasıl kaydedileceği tamamen size kalmıştır. Bizde, ilk olarak başlangıç ve bitiş adreslerini belirten dört bayt yazılır ve bu baytlardan alınan bilgiye dayanarak yükleme yapılır. Daha sonra, kaydedici rutin tarafından hesaplanan kontrol toplamı baytı alınır. Yükleme sırasında da yapılan kontrol toplamı baytıyla bu bayt karşılaştırılır. Eğer ikisi de aynıysa, yükleme başarıyla gerçekleşmiş demektir. Farklılarsa, istediğiniz şekilde yükleme hatası bildirebilirsiniz. Programın kaydedilmesi sırasında çok değişik bilgiler kaydedebilirsiniz. Mesela NOVALOAD'ların yaptığı gibi her parçanın ismi başa yazılabilir veya güvenlik için bir anahtar kelime sistemi kurup yüklenen kelimeyle verilenin aynı olup olmadığını karşılaştırabilirsiniz. İsterseniz programı sondan başa yükleyebilirsiniz veya belirlediğiniz bir düzenle yükleme yapabilirsiniz. Yani bir kere senkronizasyon baytını bulup da güvenlik baytıyla aynı değeri okuduysanız, yapacaklarınız tamamen sizin hayal gücünüze kalıyor. Teoride her şey çok kolay geliyor değil mi? Peki nasıl olacak da her şeyin çalışır hale gelmesini sağlayacağız? Aslında bu iş pek de zor değildir. C-64'ün ekran açıkken fark edebileceği sinyal uzunluğu herhangi bir formülle değil, deneme-yanılma metoduyla bulunmuştur. Elimizde bulunan tek şey, kısa olan dalganın boyunun uzun olan dalga boyunun yarısından biraz fazla olması gerektiğidir. Teyp donanımı sayesinde bu ufak fark hemen hemen sıfıra iner. Programımız 49152 adresinde yer alıyor ve SYS 49152 komutuyla aktif hale geçiyor. Turbo formatında kayıt yapabilmek için SAVE “isim”, 7 komutuyla kayıt yapmanız gereklidir. Yani 7. üniteyi hızlı teyp olarak tanımlıyor programımız. Hızları karşılaştırabilmeniz için 26,3K'lık bir BASIC programı değişik şekillerde kaydettik ve yükleme sürelerini ölçtük, hangisini kullanacağınıza siz karar verin:

Disk 1: 1 dakika 10 saniye TURBOLU: 1 dakika 25 saniye Turbosuz: 8 dakika 40 saniye

Eh artık gelenekleşmiş şekilde programın açıklamasına girişebiliriz:

Lda # < Savevec Sta $0332 Lda — # >Savevec Rts

Bu komutlarla SAVE komutu işleme sokulmadan önce bizim rutinimize sıçrama yapılmasını sağlıyoruz.

Savevec Pha Lda $BA Cmp — #507 Beg Tsave Pla Jmp —$FSED

Eğer ünite no'su ($B5'de tutulur) 7 değilse normal SAVE işlemine geçmesi sağlanır.

Tsave Ldy — # $8E Lda # $20 Loop | Sta Flnamet 4 1,Y Dey Bne Loop İ

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