Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
Burada verilen program dökümü bilgisayarınızdaki ile aynı olmayabilir. Dizgi hataları olabileceğinden, siz monitör programıyla incelediğiniz döküme göre fikir yürütünüz.
Uzun zamandır dataset kullanan C-64 sahibi arkadaşlar kendileriyle ilgilenmediğimizi söylüyorlardı. Biz de bu şikayetleri göz önüne alarak, her kaset kullanıcısının hoşuna gidecek, bu arada programcıların ise sevinçten tavana çıkmasını sağlayacak bir program çeşidi bulduk. Bu yazıda, bir kaset turbosunun ne olduğunu, niye ve nasıl daha hızlı yükleme yaptığını, kasede çekilen programların nasıl korunduğunu sistematik olarak öğreneceğiz. Fakat yazının en önemli kısmı, MDE çıktısını Program Döküm Eki'nde bulabileceğiniz açık ekranla yükleme yapabilen IRO Turbo. Adından da anlaşılacağı gibi bu turbo, yükleme yaparken IRQ interruptları kullanıyor ve bir yandan da sizin programınızın çalışmasına fırsat tanıyor. Bu turbo, ekranı kapatmadan yükleme yapabildiği için bir grafik gösterebilir, yükleme yaparken bir programın çalışmasına izin verdiği için de bu grafiğe eşlik edecek bir müzik çaldırabilirsiniz. Tabi ki sadece müzikle yetinmeyenler ekranın altına bir kayan yazı ekleyebilir veya değişik programlar yardımıyla yüklemeyi daha zevkli hale getirebilir. Elinizin altında böyle bir turbo bulunduktan sonra, yapabilecekleriniz yalnızca kendinizle sınırlı kalacaktır. Aslında kaset turbolarının yaratılması, C-64'ün kaset rutinlerinin güvenliğe fazla önem vermesi, bu sebeple de çok yavaş program yüklemesi yüzünden olmuş. Daha hızlı yükleme yapabilen bir disk ünitesi almak çoğu kişinin bütçesini aştığı için, iyi programcılar, kaset yüklemesini yaklaşık 10 kat hızlandırmışlar ve neredeyse bir disk ünitesinin yükleme hızına eşit hale getirmişler. Genel olarak bir bilgisayar satıcısından aldığınız oyunlar normal olarak kaydedilmezler kasetlere. Hiç kimse saatlerce program yüklemek istemez çünkü. Onun yerine, herkes en çok hoşuna giden turboyu kullanır. Bu turboların bazıları aşırı hızlı, bazıları çok iyi korunmuş, bazıları da hızdan fedakarlık ederek göze ve kulağa hitap ederek yükleme olayını zevkli bir hale getirir. Dergimizin beş yıl önce çıkan ilk sayısında da ESRA TURBO adıyla oldukça hızlı bir turbo programı yayınlamıştık. Daha sonra ortaya çıkan turbolardan bazıları, hemen herkes tarafından bilinir: LOCKY JR I-II. Gördüğünüz gibi
bu turboların nasıl çalıştığını öğrenen herkes bir turbo yapmış. İyi de nasıl oluyor da bu turbolar program yükleme hızını değiştiriyor? Oldukça basit bir mantığı var aslında. Yalnızca bilgisayar kendi rutinleriyle kısa bir programcık yükledikten sonra -ki biz bu programcığa LOADER (yükleyici) diyoruz- bu programcık bilgisayar kontrolünü üzerine alır ve kasede daha değişik bir şekilde yazılan sinyalleri okur. Tabii ki bu sinyaller normal kayıt sırasında yazılan sinyallerden kat kat kısadır (Frekansları çok daha yüksektir).
Klavyeyle gezinmek için ← ve → tuşları.
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 İ