Bu sayfadaki yazılar
Sayfanın metni
Sayfa 23
Vedat Hallaç herkese merhaba. Geçen ay bitirdiğim yazıya, yaptığım testin cevaplarını vererek abonelik kazanan arkadaşların adlarını açıklayarak devam ediyorum. Ama büyük bir ihtimalle bu aydan sonra bu köşeyi göremeyeceksiniz. Bugün Eylül'ün ikisi ve bu günden sonra elime geçen cevapları değerlendirmeye alamayacağım. Cevapları geç yollayan arkadaşlara, gelecekte olabilecek yarışmalarda başarılar dilemekten başka yapabileceğim bir şey yok. Neyse, sözü fazla uzatmadan (oldukça zor olan) soruların cevaplarına geçelim: 1. İlk iş olarak 0 ile 1 bitlerine karşılık gelebilecek sinyaller bulmalısınız. Bu sinyaller, birbirinden ayırt edilebilecek kadar farklı uzunluklara sahip olmalılar. Daha sonra, bir dizi sıfır arasına sadece bir adet bir biti yerleştirilmiş bir bayt kullanarak teypten gelen sinyallerin bayt senkronizasyonunu yaparsınız. Bu senkronizasyon baytlarının hemen arasına bir kontrol baytı koyarak tam senkronizasyonun tutup tutmadığını kontrol edersiniz. Bundan sonra teypten okuduğunuz her sekiz biti bir bayta yerleştirip belleğe yazabilirsiniz. Ne yalan söyleyeyim bu soruda tam olarak ne istemiş olduğumu ben de anlayamadım. Bu sebepten, bayt okunabilecek herhangi bir cevabı doğru saydım. 2. Esra Turbo, demin anlattığım senkronizasyondan hemen sonra dokuzdan geri sayarak her baytı kasettekiyle kontrol ediyordu. Eğer burada herhangi bir hata çıkarsa, programın geri kalanı yüklenmiyordu. 3. D şıkkı. Bu soruyu sorarken bir hata yapmışım: “Aşağıdakilerden hangileri” yerine “Aşağıdakilerden hangisi” demem gerekirdi. Burada affınıza sığınıyorum ve konuya yeterince hakim olanların bu hatayı hemen yakalamış olduğuna inanıyorum. Doğru cevap tabii ki D şıkkı olan $08'dir. Çünkü yalnızca bu baytın içinde bir tek 1 biti bulunur. 4. Programın başlangıç ve bitiş adresleri yazıldıktan sonra yazılan her bayt, başlangıçta $00 değerini taşıyan $FB adresinin değeriyle EOR'lanıyor. Yani $02, $02, $05 yazmaya kalkarsanız $FB'nin değeri, $01, $03, $06 olarak değişir ve kontrol toplamımız $06 olarak yazılır teybe. 5. $BA: device (ünite) numarası. $B7: dosya adının uzunluğu. $BB,$BC: dosya adının bulunduğu adresler (alçak-yüksek bayt formatında). 6. Eğer kasede kaydedilecek dosyanın adının uzunluğunu 16 değil de 116 olarak verirsek, 16 harflik isimden sonra yüz baytlık program da dosya adıyla birlikte kasede kaydedilir. Böylece $0351'de başlayan bir programı dosya adıyla birlikte kaydedip, $02A7'deki programı da dosya olarak $0300'den $0351'e kadar olan bölgeyi kaydetmemize gerek kalmaz. Fakat bu soruda bir baskı hatası yüzünden “Loader'ın yükleneceği” kısmı “Loader'in yükleyeceği” şeklinde çıkmış. Bu yüzden bu soruyu iptal ediyorum. 7. D ve B. Voltajın yönünü değiştirmek için $01 adresli baytın 3. bitini (ilk bite 0. bit dersek) ters çevirmek gerekir diye düşünmüştüm soruyu sorarken, ama ifade hatası yüzünden sorunun cevabının B şıkkı da olabilir. Bu yüzden her iki cevap da doğru sayılıyor. 8. $EFFA,$FFFB: NMI interrupt vektörü. $FFFE,$FFFF: IRQ interrupt vektörü. 9. $DC04,$DC05: CIA 1 Timer A, alçak-yüksek bayt formatında. 10. RUN komutunu makine dilinden yapabilmek için ilk olarak $A659 adresine sıçrayıp (Jsr) ortalığı temizleyip BASIC'i sevindirmek, sonra da $A7AF'ye gidip (Jmp) RUN komutunu gerçekleştirmek gerekir. Ya da ANKARA'lı Onur Malkoç'un önerdiği gibi Keyboard Buffer'a R, U, N, RETURN kodlarını yerleştirip Buffer'da bulunan karakter sayısını 4 yaparsak, BASIC'e döner dönmez ekrana RUN yazılır ve komut işletilir. 11. C şıkkı. Doğal olarak, yüklenen BASIC programı $0801 — 2049 adresinden başlayacak ve sizin verdiğiniz değeri silecektir. 12. Kernal klavyeden girilen veya programda bulunan sıradaki baytı alabilmek için $0073 adresine sıçrar. Bu konuda değişik cevaplar geldi ama bu adreslerden hiçbiri BASIC programında bulunan karakteri okumaz. $FFE4, klavyede basılı olan tuşun kodunu (tuşa basılmıyorsa 0 değerini) A'ya koyarak geri döner. $FFCF ise INPUT komutu gibi davranır (Bu iş biraz program gerektirir tabii ki).
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 22
BAYRAK -0
BAYRAĞI 1 YAPABİLEN TARAMAYI ÇALIŞTIR
BAYRAK 0 OLANA KADAR
Şekil 6: Sıralama işlem basamağının ilk detayı. Program iç işlemleri bayrak 0 olana kadar tekrarlar,
HER ÇİFT DEĞER İÇİN
DEĞERLERİN YERİNİ DEĞİŞTİR
BAYRAK = 0 tarama daha yapmalıyım.” Şekil 6 bunu gösteriyor. Tarama sırasında yer değiştirme olup olmadığını kontrol etmek için bir “bayrak” kullanırız. Eğer bayrağı kaldırmışsak, geri indirir ve taramaya yeniden başlarız. Şekil 7 “Tarama” işlemini anlatan diyagramı içerir. Ardışık elemanları kontrol ederiz. Dikkatinizi çekeceği gibi, N tane elemanın N-1 tane ardışık çifti olacaktır. Eğer herhangi ikisi doğru sırada değilse, yerlerini değiştirir ve bayrağı kaldırırız.
Şekil 7: Tarama işlem basamağının detayı. E altındaki işlem basamağı boştur. Yani değerler doğru sıradaysa hiçbir işlem yapılmaz.
Programı Yazalım Artık Bütün diyagramları inceledikten sonra programı yazmak şaşırtıcı derecede kolay gelecektir size. Programı yazıp bitirip çalıştırdığınızda ise, hiçbir hata olmadığını ve programın ilk denemede hatasız çalıştığını dehşet içinde fark edeceksiniz!!! Liste 1'de burada çizdiğimiz diyagramların, C64 BASIC'de yapılmış olan programını görebilirsiniz. Programlama diğer dillerde de kolaylıkla yapılabilir. AMIGA BASIC, C, Pascal, Assembler... Mantığını bir kez kağıda döktükten sonra programını yazmak hiçbir şey değil.
Her eleman için (1 to N)
Elemanı al
Eleman sayısını sor N=?
programlama adı verilir. Sanırım çoğunuz tüm programın bir diyagramını çıkarmadığımızı, aksine “Sırala” ve “tara” gibi modülleri teker teker diyagramlara döktüğümüzü fark etmişsinizdir. Aslında tüm programın detaylı olarak diyagramının çıkarılmasına gerek yok, ama böyle basit bir program için bir ayrıcalık yapıp her şeyi bir arada görmenizi sağlayabilirim. Şekil 8'de her şeyi aynı yerde görebilirsiniz. Tekrarlıyorum, basit bir program olduğu için bunu yapabildik.
GİRİŞ
Bütün çiftler için (1 to (n-1))
Bayrak 0 olana kadar
Yer değiştir
Bayrak -1
SIRALA
TARAMA
Her eleman için (İ to N)
Hepsi Birlikte
Dikkat ettiyseniz programı tasarlarken her şeye en baştan başladık. Önce tüm programın akışını kabaca tasarladık ve gittikçe detaya inerek tüm programın çalışma mantığını yarattık. Bu tür planlamalara genel top-down (yukarıdan aşağı) 22
Şekil 8: Tüm program. Her şeyin bir arada olması ortalığı karıştırıyor.
ÇIKIŞ yapıyorum. Bu tabloya hiçbir zaman ihtiyacınız olmayacaktır. Bu programda bile katılmanız gerekli: Tek diyagramda bulunan fazla teyp mantığı çok karmaşık gösterir.