Verdiğiniz bilgiler için çok teşekkürler.
Rica ederim.
Yazdığımız kodda herhangi bir firmware call olsun veya olmasın, kodumuzu yazmaya başlayabileceğimiz en küçük adres kaçtan başlıyor?
Normal koşullarda, 64K'lık hafızanın
&0170-&A600 adresleri arasında kalan bölümünü, BASIC + Assembly language ile kod yazmak amacıyla kullanabilirsiniz.
&C000-&FFFF arasındaki ekran hafızasına da her zaman erişebilirsiniz.
Amstrad CPC ailesinde hafızanın en kritik bölgesi,
&0000-&003F adresleri arasında kalan ve
'RST Area' olarak bilinen 64 byte'lık alandır. Interrupt'lar açık ve BASIC devrede olduğu sürece bu minik bölgeye dokunmamakta fayda var.
Ancak, şöyle bir istisna söz konusu; Eğer,
- Tüm interrupt'ları kapattıysanız,
- Lower/Upper ROM'ları disable ettiyseniz,
- BASIC kullanmayacaksanız,
- Hiçbir şekilde firmware call yapmayacaksanız,
o zaman, bu minik alanı kullanabilirsiniz.
Amstrad CPC ailesi, Assembly language ile
'low-level' kodlama yapmanız ve yukarıda sıralanan koşulları sağlamanız durumunda,
64K'nın tamamını (!) kullanmanıza izin verir. RST Area ve Firmware Adres Tablosu’na ait yerleri bile kullanabilirsiniz. Hatta, normalde
&BFFF adresinde bulunan
Stack'in yerini bile değiştirebilirsiniz.
Yıllar önce elo elektronik dergisinde amstrad ile ilgili bir yazıda "300 Hz interrupt" ifadesi geçiyordu. Böyle bir şey var mı?
Sözünü ettiğiniz makaleyi bilmiyorum, ama
"300 Hz interrupt" ifadesi ile ne kastedildiğini açıklayabilirim.
Amstrad CPC ailesinde saniyede 300 kez (her frame'de 6 kez X 50 frame)
FAST TICKER olarak bilinen bir interrupt oluşur. Bu interrupt'ın gerçekleşmesi durumunda, Z80 işlemci önce tüm interrupt'ları disable eder, ardından da
&0038 adresini CALL eder. Normal koşullarda bu adreste 3 byte'lık (C3, 41, B9)
jp &B941 kodu bulunur. Bu sebeple her interrupt'ta &B941 adresine jump edilir, o adresten sistemi idame ettirmek için gerekli birkaç firmware çağırısı yapılır, bu işlem bittikten sonra tüm interrupt'lar tekrar açılır ve hayat kaldığı yerden devam eder. Bu işlem her frame'de 6 kez tekrar edilir.
İşin en keyifli yanı, FAST TICKER interrupt oluşumunda gidilen &0038 adresinin içindeki 3 byte'lık kodu değiştirerek, kendi interrupt kodlarımızı yazabiliyor olmamız.
Örneğin;
- FAST TICKER interrupt'ının düzenli olarak gerçekleşmesini, ama kıymetli zamanımızı çalmaması için 'hiçbir iş yapmamasını' istiyorsanız, &0038 adresine EI (&FB), RET (&C9) yazmanız yeterli.
ld hl,&C9FB
ld (&0038),hl
- Her FAST TICKER interrupt sırasında 'içeriğini sizin belirleyeceğiniz' özel bir işin yapılmasını istiyorsanız, &0038 adresine jump etmek istediğiniz adresi (C3, ADDR_LOWBYTE, ADDR_HIGHBYTE) şeklinde yazabilirsiniz.
NOT: Yukarıdaki her iki durumda &0038 adresi üzerinde bir değişiklik yapmadan önce
DI komutu ile interrupt'ları kapatmanız, işiniz bittikten sonra da
EI komutu ile interrupt'ları tekrar açmanız gerekir.