Bu sayfadaki yazılar
Sayfanın metni
Sayfa 27
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 26
Durant Harmon Ormond LeConte
Boalt releyriph
Superb
Tilden Purnam Bowditch kasına eklenir. Buna şöyle bir örnek verebiliriz:
İsr i-rectangele ; şu anki sistem motifiyle bir ; dikdörtgen çiz
by O ; üst y koordinatı (0-199) 199 ; alt y koordinatı (0-199) wo O ; sol kenar (0-319) wo 319 ; sağ kenar (0-319)
Program jrs komutundan döndüğünde 6 baytı atlar ve buradan işlemeye devam eder. In-line çağırımlarda daha sonra gelen byt sayısına dikkat etmezseniz programınız kilitlenebilir. Yukarıdaki programı çalıştırdığınızda tüm ekranı sistemin son kullandığı 8 x 8 ebatlarındaki motif ile doldurur. Bu tür çağırımların tek zararı normal çağırımlardan daha yavaş olmasıdır. Ama örnek programı incelersek toplam 9 bayt aldığını görürüz. Oysa aynı programı pseudo registerler yardımıyla yapsaydık 27 bayt uzunluğunda olacaktı. Sanırım bu kadar büyük bir bellek tasarrufu için birkaç mikrosaniye feda etmekten çekinmezsiniz. Bu arada ekleyeyim, bundan sonra rutin adlarından önce gelecek bir i- ifadesi bu rutinin bir inline sistemiyle çağrılması gerektiği manasına gelecek. Şimdiye kadarki kısımlarda yalnızca ana döngü ve Interrupt düzeyinden bahsettik. oysa bazan (pek tavsiye etmememe rağmen) ana döngü ve interrupt düzeyini değiştirmeniz gerekebilir. Bu gibi durumlar düzeltmesi çok zor olan senkronizasyon bozulukluklarına yol açabileceği için çoğu programcı bu yolu tercih etmez. Bu kod cinsine non-event kodu denir. Zorluğu ve gereksizliği yüzünden pek tercih edilmeyen bir yoldur. Eğer özel bir donanım eklemek için ana döngüden bağımsız bir interrupt rutuni çalıştırmak istiyorsanız, non-event kodu tercih etmeniz gerekecektir. Bunu yapabilmek için belerli bazı sistem değişkenlerinin değerleriyle oynamanız gerekmektedir. Bu sistem değişkenlerinin isimleri interrupt TopVector, interrupt Bottom Vector, ve application Main'dir. (Şu anda yeterli bilgiye sahip olmadığımız için bu değişkenlerin adreslerini yazmayacağım fakat ileride GEOS'un tüm sabit değerlerini, değişken adreslerini ve rutin adreslerini içeren tablolar yayınlayacağız). Eğer interruptTopVector'ün değeri değiştirilirse sizin kodunuz (tahmin ettiğiniz gibi) GEOS interrupt düzeyinden önce çağrılacaktır. Bu yolu seçtiyseniz önceden bu adreste saklanan InterruptMain adresine bir jump yaparak programınızı terketmelisiniz. Değiştirdiğiniz vektör interrupt Bottom Vector ise programınız normal interrupt düzeyinden sonra çağrılacaktır. GEOS bu vektörün değerinin O'dan farklı olması sayesinde sizin burayı kullandığınızı anlar. Burada dikkat etmeniz gereken en önemli husus ise programınızın sonunda RTS kullanmanız gerektiğidir. Eğer yanılıp da RTI kullanırsanız programınız ve GE-OS kilitlenir. Eğer applicationMain vektörünü değiştirirseniz ana döngü sonunda programınıza atlama yapılır. Burada da RTS ile ana döngüye dönebilirsiniz. Şimdiye kadar öğrendiklerinizle bir uygulama yazmanız mümkün olmasa bile, ileride devam edecek yazımız için çok önemli bir temel oluşturmaktadır. Bu yüzden 49. sayıda yazılanları ve bu yazıyı çok iyi anlamazsanız daha ileride büyük zorluklarla karşılaşırsınız. Gelecek.sayımızda bir uygulama yazmanın temel adımları konusunu işleyeceğiz ve bir de basit GEOS bellek haritası yayınlayacağız. Gelecek ay bu köşede buluşmak üzere...