THE MIRAGE TOOL
Retro bilgisayar-Tanımı: Assembler programlar için değişik sinüs tabloları yaratmayı sağlar. -Bulunduğu disketler: BNX Tools, Hyper Tools 2.0 Hemen programın menülerini açıklamaya başlıyorum. Programın üç menüsü var. Bunlardan ilki Project. Buradaki fonksiyonlar gayet basit; Preferences konfigürasyon ayarlamamızı sağlamakta. Memory ile o an ne kadar kullanılmamış hafıza olduğu ve programın kendisi için ayırdığı hafıza miktarı ile stack hafıza miktarını öğreniyoruz. Stack hafıza miktarını CLI üzerinden Stack komutu ile değiştirebiliriz. Bu sayı ne kadar büyük olursa program o kadar rahat ve hızlı çalışacaktır. About ile programı yazan hakkında bilgi alabilir ve Quit ile de programdan çıkabiliriz. Preferences fonksiyonunu çağırdığımızda karşımıza bir pencere çıkacaktır. Burada ilk satırda "Amount of steps to divide circle in : " yazar. Bunun anlamı, sinüs converter'da sinüs hesaplamasında daire'nin kaça bölüneceğidir. Eğer buraya 360 girersek, daire 360 dereceye bölünecektir. Şayet daha basit ve kaba bir sinüs tablosu istersek bu değeri azaltmalıyız. Aynı şekilde daha hassas bir tablo için buraya daha büyük değerler yazılmalıdır (örneğin 720, 1440 gibi).
Preferences penceresinin ikinci satırında "Recalculation maximum value : " yazısı bulunmaktadır. Bu, sinüs converter'da maksimum değere ulaşıldığı zaman tekrar hesabın ne şekilde yapılacağını belirlememize yarar. İlk kutucukta "0" yazar; bu maksimumdan bir sonraki değer, maksimum değerin olduğu bir önceki dataya eşitse her ikisinin de aynı kalacağını belirler. İkinci kutucukta ise "+ -" işaretleri vardır. Bu da maksimum değerini taşıyan data ve bir sonraki data da aynı değeri taşıyorsa tepe noktasını gösteren bir sonraki datanın tekrar hesaplanılmasını ve bir öncekine eşit olmayan, fakat çok yakın olan bir sayı bulunmasını sağlar.
İkinci menümüz Wavegen ismini taşımakta. İşte burası sinüs yaratıcı programımızın kalbi sayılmakta. Bütün sinüs tablosu yaratma işlemlerini buradaki 5 fonksiyon yardımıyla yapabilirsiniz: Sinus, Add n sinuses, Multiply n sinuses, Sinus Dec/Inc ve Triangle. Bunlardan her biri değişik tablolar yaratmakta. İlk fonksiyon salt bir sinüs tablosu yaratacaktır. İkinci ve üçüncü fonksiyonlar ise istediğimiz adetteki sinüs tablolarının birleşimini yaratır. Dördüncü fonksiyon olan Sinus Dec/Inc ise belli açılar arasında kalan değerlerin sinüs tablosunu yaratır. Son olarak da Triangle fonksiyonu sinüs tablosundaki maksimum ve minimum tepe noktaları arasında birer doğru çizerek testere dişi şeklinde artan veya azalan bir değer tablosu yaratır.

Şimdi bu beş fonksiyonun parametrelerini teker teker inceleyelim. İlk fonksiyon sinus, fakat triangle ile tüm parametreler aynı olduğundan ikisini beraber tanıtmakta fayda var. Her iki fonksiyonda da karşımıza çıkan pencere aynı; bizden üç parametre istenmekte. Bunların ilki Maximum value, yani maksimum değer. Bu, data tablosundaki değerler arasında en yüksek olanın değeridir. Amount of datas ise yaratılan data tablosundaki data adedini belirlememizi sağlar. Length one wave ise tabloda yer alacak bir sinüs dalgasının boyunu belirler. Eğer bu değer Amount of datas değerinden küçük olursa data tablosu verilen değer kadar yaratılır; sonuna da iki değer arasındaki fark kadar data daha eklenir. Bu datalar, sinüs fonksiyonunda tekrar başa, yani 0. açıya dönerek elde edilir. Hesaplamayı yapmak için Calculate wave kutucuğunu kliklememiz gerekmekte.
Menüdeki ikinci ve üçüncü fonksiyonların da parametre pencereleri aynı olduğundan bunları beraber açıklamak istiyorum. Fakat her ikisinin de ne iş yaptığını da belirtmem gerekir tabii ki. Add n sinuses, n adet sinüs tablosu yaratarak bunları birbirine ard arda ekler. Multiply n sinuses ise aynı ofsetteki değerleri birbiriyle çarparak karışık bir tablo yaratır.

Gelelim bu iki fonksiyonun parametrelerine. Her iki fonksiyonda da ilk başta bir parametre penceresi çıkacaktır. Burada kaç sinüs tablosunun kullanılacağı belirlenebilir. Ardından çıkacak olan pencereler her bir sinüs tablosu hakkındaki parametreleri ayarlamamızı sağlar. Ana penceredeki parametreler şöyle; Number of sinuses sinüs tablolarının adedini saptamamızı sağlar. Maximum value data tablolarında olabilecek en yüksek değeri tesbit etmemizi, Amount of datas ise data tablosunda yer alacak değerlerin adedini belirlememizi sağlar. Burada değerleri tesbit ettikten sonra Proceed kutucuğunu kullanarak her bir sinüs tablosu ile ilgili bir takım parametreleri ayarlayabileceğimiz pencereler çıkacaktır. Buradaki parametreler de şöyle: Maximum value, numarası belirtilen sinüs eğrisindeki maksimum değeri tesbit etmemizi sağlar. Length one wave ile numarası verilen sinüs eğrisinin uzunluğunu açı olarak belirleyebiliriz. Get next sinus ile de bir sonraki sinüs eğrisinin parametrelerini ayarlayabiliriz. En son sinüs eğrisinin de parametreleri belirtilmiş ise bu kutucukta Calculate Wave yazacaktır. Bununla da data tablosunu hesaplattırabiliriz.
Dördüncü fonksiyon da demin de belirttiğim gibi sinüs eğrisinin sadece belli bir kısmını tablo olarak kaydetmemizi sağlamakta. Start value ve End value parametreleri yardımıyla sinüs eğrisinin alınacak kısmının başlangıç ve bitiş değerlerini belirleyebiliriz. Start değeri End değerinden büyük olursa tablodaki değerler artan değerler olacaktır. Azalan değerler için End value parametresi Start value'daki sayıdan büyük olmalı. Amount of datas yine data tablosundaki değer adedini belirler. Length one wave de her zamanki gibi bir dalga boyunun açısal olarak uzunluğunu belirler. Maximum value at end ise tablo sonundaki maksimum değeri belirlememizi sağlar.
Calculate Wave kutucuğu yardımıyla data tablosunu çıkarttıktan sonra yaratmış olduğumuz tablodaki değerler bir sinüs eğrisi olarak ekranda görülebilir. Bunun hemen altındaki bir alanda değişik kutucuklar bulunmakta. Şimdi de bu kutucukları inceleyelim. Places to move, Move wave kutucuklarında her klik'te kaydırılacak adım sayısını belirler. Move wave yardımıyla sinüs eğrisini kendi içersinde sağa ya da sola doğru kaydırabiliriz (phase shifting). Bu şekilde sinüs eğrisinin başlangıcı da kayacağından değişik sinüs eğrisi görüntüleri elde edebiliriz. Info sinüs eğrimizin parametrelerini görmemizi sağlar; Quit ise o an yaratılan sinüs eğrisinden vazgeçip tekrar ana menüyü kullanarak yeni sinüs eğrileri yaratmamızı sağlar. Backwards yardımıyla sinüs eğrisini ters çevirebiliriz. Flip ise eğrideki negatif değerlerin pozitif olanlarla yer değiştirmesini sağlayarak eğriyi tam anlamıyla kafaüstü çevirir. Modulus kutucuğu eğrideki tüm negatif değerlerin de pozitif olmasını sağlar. Odd Even kutucuğu tabloda ve eğrideki her ikinci değerin işaretini değiştirir. Pozitif olan değerler negatif, negatif olanlar ise pozitif olurlar. Karışık sinüs eğrilerinde bu enteresan bir görüntü oluşturabilir; denemenizde fayda var. Bundan sonra inceleyeceğimiz üç kutucuk data tablosundaki değerlerin ekran koordinatı olarak görülmelerini sağlar. Bunun için ekranın alt kesiminde boş kalan yerde devamlı yukarı doğru kayan çubuklar belirecektir. Bu çubukların her birinin yatay eksendeki pozisyonu direkt data tablosundan okunur. All kutucuğu tablodaki her değerin x koordinatı olarak kullanılmasını sağlar. Odd kutucuğu ile ofseti tek sayı olan tüm değerler (1, 3, 5, 7, ...), Even ile de ofseti çift olan değerler yatay koordinat olarak okunacaktır. Son kutucuk olan Save ise isminden de anlaşılacağı gibi data tablosunun diskete kaydedilmesini sağlamakta. Karşımıza çıkacak olan pencerede yapabileceğimiz ayarlamalar da şöyle: Convert list in ile data tablosunun byte'lardan mı, yoksa word'lardan mı oluşacağını belirleyebiliriz (DC.B ya da DC.W). Convert wave in ise data tablosundaki değerlerin byte ya da word sınırları içinde olmasını sağlar. End list with ise data tablosunun sonuna eklenecek olan bitiş değerini belirlememizi sağlar. Assembler programınızda bu değeri kontrol ettirerek bitişe gelindiğinde tekrar tablonun başının okunmasını sağlayabilirsiniz. End data with ise sinüs eğrisinin sonuna gelecek olan bitiş kodunu belirlemeyi sağlamakta. Offset (before mul.) ile çarpım işleminden önce data tablosundaki her bir değere eklenecek olan sayı miktarını belirlemeyi sağlamakta. Offset (after mul.) ise çarpım işleminden sonra her bir değere eklenecek sayıyı belirlememizi sağlamakta. Multiply wave with ile tablodaki her bir değerin bir sayıyla çarpılması sağlanmakta. Bu sayı normalde 1'dir. Fakat tabloyu oluşturan sinüs eğrisinin genliğini artırmak istiyorsanız her bir değeri aynı sayıyla çarpmanızda fayda var. Lowest value to zero yardımıyla da en alçak değerin 0 olarak kaydedilip edilmeyeceğini belirleyebilirsiniz. En alçak değer 0 olacaksa burada YES kutucuğunu kliklemeniz gerekmekte. Filename ile tabloyu diskete kaydederken kullanılacak ismi belirleyebilirsiniz. Save wave kutucuğu da tablonun kaydedilmesini sağlar. Kayıt işlemi bittiğinde hafızadaki sinüs eğrisi ve tablo silinir ve sizden yine bir menü fonksiyonu seçmeniz beklenir.

Son olarak üçüncü menüde yer alan fonksiyonu tanıtmak istiyorum. Bu fonksiyonun sinüs tablo yaratmakla hiçbir ilişkisi yoktur. İsminden de anlaşılacağı gibi (TextConvert) herhangi bir text file'ını data tablosuna çevirmekte. Bu, programınızda kullanacağınız text'ler ya da bir intro/demoda kullanacağınız scroll text olabilir.
Input name disketteki ASCII text dosyasının ismini belirlemenizi sağlar. Çevirme işleminden sonra data tablosunu diskete kaydederken kullanılacak ismi de Output name ile tanımlayabiliyorsunuz. Convert text to yardımıyla text dosyasını ne tür bir data tablosuna çevrileceğini belirleyebilirsiniz. Source'u seçtiğinizde text dosyasının her satırının başına <DC.B '>, sonuna da sadece bir <'> işareti eklenecektir. Eğer Binary kutucuğunu seçerseniz text dosyasındaki her bir karakterin binary karşılığı tabloya yazılacaktır. Çevirme işlemi sırasında ekranın üst kesiminde dosyanın convert edilen miktarı yüzde olarak yazılacaktır.
Bence, bu programı assembler program yazan herkes kullanmalı. Zaten yapan kişi de bir assembler programcısı. Herhalde kendi ihtiyacı olduğundan böyle bir program yazmış ilgilenenlerin rahat bir utility'den faydalanmasını sağlamış.