Bu sayfadaki yazılar
Sayfanın metni
Sayfa 49
LDX > X'i sıfırla $4002 LDA $0400,X > $0400'den X uzaklıktaki de- ğeri A'ya yükle $1005 STA $1000,X > A'yı $4000'den X uzaklıktaki adrese koy INX > X'i bir $4009 BNE $4002 > X—0 olana kadar 1002'ye git $1400B RTS > Programı bitir ve geri dön
Bu açıklamayı da yaptıktan sonra şimdide asıl konumuza geçelim. Önce interrupt'ın ne olduğuna ve nerelerde işimize yarayabileceğine değinelim. Interrupt kesinti vektörüdür. Her 1/60 saniyede, işletim sistemi kontrolü, bu vektör tarafından belirlenen rutine devredilir. Inter-
” bulunduğu adres $EA31'de başlamaktadır.
Vektörün adresleri $0314-$0315'dir. Bu adresler yazdığınız programın başlangıç adresinin alt ve üst byte'larıdır. Interrupt vektörünün gösterdiği adresteki program “JMP $EA31” ile bitirilir. Program interrupt tarafından kesildiği anda tüm X, Y ve A registerları saklanır. Böylece interrupt normal çalışan programa hiçbir şekilde karışmamış olur. Interrupt'ı kullandığımız yerler oldukça fazladır. Örneğin; basic programımızda müzik çaldırmak için bu vektörü kullanırız. Demo ve introlarda kullanılan programlama tekniği de her zaman interrupt'tır. Kısacası interrupt C-64'ün en önemli özelliğidir. Şimdi gelelim bu özelliğin nasıl kullanıldığı meselesine. Interrupt'ı kurarken önce tüm kesintileri önlemek gerekir. Bunu komutu halletmektedir. Yani programdaki ilk komut “SEI” olmalıdır. Sonra interrupt ile çalıştıracağınız programın başlangıcının alt ve üst byte'larını $0314-$0315 adreslerine yerleştirmeniz gerekir. Alt ve üst byte hesabı şu şekilde yapılır. Programınız örneğin $C050 adresinden başlıyor olsun. Bu durumda siz $0314 adresine #$50, $0315 adresine de #$C0 koymalısınız (Vektörlerde daima ilk adrese alt byte, ikinci adrese de üst byte yerleştirilir.). Burada #$50, $C050'nin alt byte'ı, #$C0 ise $C050'nin üst byte'ı olmaktadır. Bu işlemlerde bittikten sonra “CLI” komutu ile kesinti önleme sıfırlanır. Yani interrupt'ta bulunan program çalışmaya başlar. Artık normal işletim sistemine dönmek için “RTS” veya “JMP” gibi komutlar kullanılmalıdır. Böylece interrupt çalışırken siz bir basic program çalıştırabilir veya ekrana yazılar yazabilirsiniz. Gelelim interrupt vektörünün gösterdiği programın nasıl olması gerektiğine; Öncelikle programınızda kesinlikle SEI ve CLI komutu kullanmayın. Programınızın işlemi bittiğinde “JMP $EA31” ile kontrolü sistem rutinine devretmelisiniz. Ayrıca interrupt saniyede 60 kez devreye girdiğinden yaptığınız programın fazla uzun olmaması ve fazla zaman harcamaması gerekir. Eğer çok zaman harcayan bir program yazdıysanız alet yavaş çalışmaya başlar ve ekranda istenmeyen saçmalamalar oluşur. Bunu önlemek için yani “ANAHTAR” sistemini kullanmak gerekir. Bu sistemi daha sonra göstereceğiz. Şimdi bu konuda kısa bir program yazalım
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 48
PUPNOKLAŞ
Murat Şenyüz & Uğur Özyılmazel
MAKİNE DİLİNİN PÜF NOKTALARI
Selam arkadaşlar, bu ay yine köşemizde sizlerle beraberiz. Geçen sayıda belirttiğimiz gibi Interrupt ve Interrupt ile kullanılabilen basit programlardan bahsedeceğiz. Ama bu konuya girmeden önce, geçen aydan eksik kalan bir kısmı yazalım. Hatırlayacaksınız makine dilinde ekrana yazı yazmayı sağlayan bir rutinden bahsetmiştik. Ve bu rutinde yazmak istediğiniz mesajı $1000 ile arasına yerleştirmenizi söylemiştik. Sanıyoruz birçok arkadaşımız (özellikle makine diline yeni başlayanlar) bu kısımda oldukça zorlanmışlardır. Hafızanın belli kısımlarına yazı yerleştirmenin iki yolu vardır: 1- Bu yol biraz sonra anlatacağınız yola göre daha zordur. Yani biraz daha profesyonel bir yoldur. Yazıyı yerleştirmek istediğiniz adresler arasına, mesajınızı kodlayarak yazmanız gerekir. Yani $1000 ile $4100 arasına mesaj yazmak istiyorsanız: .M 4100 43 4F 4D 4D 4F 44 4F 52: COMMODOR .M 4109 45 20 34 39 39 30 00 00: E 1990.. Bu işlemi yapmak için kullanacağınız monitör programı ya da kartuşunun “M” fonksiyonundan yararlanmanız gerekir. Yukarıdaki sayılar (Hexadecimal - 16'lık sistem) Commodore'un hafızasında bulunan karakterlerin sayısal karşılığıdır. 1000 no'lu satırdaki 43 4F 4D 4D 4F 44 4F 52 -COMMODOR harflerine karşılık gelir. 1009 nolu satırdaki 45 sayısı da COMMODORE sözcüğünün sonundaki “E” harfine karşılık gelir. Makine dilinde “A” harfine karşılık gelen sayı 41 sayısıdır. A-Z arasındaki harfler, 41'den yukarı doğru birer birer artarak (hexadecimal olarak) 5A sayısına kadar sürer. Ayrıca karakterlerin cinsine göre bu sayılar SHIFT, REVERSE ve SHIFT + REVERSE olmak üzere değiştirilebilir. Yani (küçük harf modu), (normal modda reverse A) şeklindedir. Ekrana normal sayı basmak için (yani 1, 2, 3 gibi) 3 sayısının yanına istediğiniz değeri yazmanız kafidir. 31=1 anlamına gelir. Ekrana 5 yazmak için, makine dilinde 35 yazmanız gerekir. 2- Bu yol ise daha basit ve daha pratiktir. Kullandığınız monitör programı ya da kartuş sayesinde ekranın bir yerine yazdığınız yazıları hafızanın istediğiniz bir bölgesine transfer edebilirsiniz. Bunu içinde yapmanız gereken işlemleri aşağıdaki sıraya göre takip edin: A- Monitöre girin. B- Ekranı SHIFT + CLR/HOME tuşuyla temizleyin. C- Ekranın sol üst köşesinden başlayarak yazmak istediğiniz mesajı girin. Ama bu mesaj 5 satırı geçmesin. D- Daha sonra SHIFT + RETURN tuşuna 5-6 kez basın. E- T 0400 0500 1000 yazıp RETURN tuşuna basın. F- yazıp RETURN tuşuna basın ve monitörden çıkın. Yukarıda anlattığımız şey, ekranın başlangıç adresi olan $0400 (1024)'den $0500 (1280)'e kadar olan bölgeyi hafızada (4096) transfer eder. Yani yazdığınız yazıyı $4000-$4100 arasına transfer eder. Aslında monitör programının yaptığı olayı basit bir programla biz de yapabiliriz. Bu verdiğimiz program ekranın en üst köşesinden itibaren 255 karakteri $1000 ile $1100 arasına koyar. Eğer yazıları koymak istediğiniz adres farklı ise siz programdaki $1000 değerini koymak istediğiniz adrese göre ayarlayabilirsiniz. Unutmayın ki yalnızca 255 karakterlik bir transfer yapmaktayız.