ter satırının 255'ten büyük olduğudur. Bir bayttâ en faz- la 255 sayısını tutabildiğimize göre ekranın altında bu- lunan elektronun yerini nasıl saptayacağız peki? Bu: sorunu çözmek İçin C-64'ün tasarımcıları $DO11 ad- resinin 8..bitini RASTER satırının 9. biti olarak ayırmış- lar. Bu sayede $DO11 ve $DO12 adreslerini kullana- rak S$OAFF (512) satırı adresleyebiliriz. Bu sayı da ekra- nınızda görünen raster satırların hepsini tanımlama- ya yeterlidir. Bir RASTER İNTERRUPT oluşmasını sağla- mak için $DO12 adresine ve $DO1 / adresinin 8. biti- ne iİnterrupt oluşması İstenen satırın numarasını yaz- mak ve $DOYA adresinin 1. bitinin değerini 1 yapmak yeterlidir. ($DOYA— $01) Bu işlemlerden sonra elektro- nün belirlenen satıra her gellşlnde bir interrupt oluş- turulacaktır. G, ss—— n 4U 28077 “Tablo I: İşte bir ekranın raster numaraları. Görünen ekran 5Ü, satırdan başlıyor ve 250, satırda sona eriyor. En alt satırın numarası belirli değildir ve TV ekranının dışında sona erer. b) Light Pen (ışıklı kalem) interrupt'ı: C-64'ümüz as- lında elektronun yalnızca hangi satırda olduğunu de- gil hangi x koordinatında olduğunu da bilmektedir ama elektronun ekranı tarama hızi çok yüksek oldu- ğundan x koordinatını herhangi bir bellek alanına yazmaya vakti r. Ama lightpen kullanmacının te- meli elektronu belirli bir x,y koordinatında yakalamak 46 olduğundan C-ö4'ün herhangi bir yolla bize x koor- dinatını da bildirebilmesi gerekir. Lightpen elektronu yakaladığı anda bilgisayara bunu bildirir ve bilgisa- yar da o andaki x koordinatını $DO13, y koordinatını da $DO14 adreslerine yerleştirir. Lightpen yalnızca her taramada bir kez elektronu yakalayacağı İçin x ko- ordinatını yazmak fazla bir zaman kaybına yol açma- yacaktır. Bu arada eğer $DÜYA adresinde 4. bitin de- ğerini 1 yaparsanız ($DO1A — $08) x ve y koordinatları yazılır yazılmaz bir interrupt oluşturulacaktır. Bu saye- de lightpen üzerinde etkin bir kontrolae sahip olcıblllr sİniz. C) Sprite-Sprite çarpışması: Eğer C-öd'ün sekiz spri- te'ından herhangi ikisi birbirine değerse ve SDO1A ad- resinin 3. biti 4 (SDO1A-$04) değerindeyse bir inter- rupt oluşturulur. <d) Sprite-karakter çarpışması: Eğer bir sprite herhan- gi bir ekran karakterine değeme ve $DOMA'nın 2. biti 1 ise ($DOYA—$02) bir interrupt oluşur. Tabi ki bu interruptların birkaçını veya hepsini bir- den kullanabilirsiniz. Bunu yapmak için $DOYA adre- , YO istediğiniz interrupt'ların değerlerini OR'- lqycıfcık vermelisiniz. Mesela $DOYA—$05 verirseniz RASTER ve LİGHTPEN interruptlarını aktive etmiş olursu- nuz. Bu durumda interrupt'un hangi sebepten dolayı oluştuğunu anlamak için interrupt rutininizin başında $DO19 registerinin değerini incelemeniz gereklidir. Bu adresin bit anlamları $DOYA'dakiyle aynıdır fakat İn- terrupt hangi sebepten oluştuysa yalnızca o bitin de- geri 1'dir. 23 NMI (maskelenemez interruptlar): Aslında bu tür iİnterruptlar konumuzun oldukça dışındadır. çünkü NMI'lar genelde hardware (donanım) olaylarını kont- rol etmek için yapılır. (Diskle iletişim vb.) Eğer bilgisa- yarınız bu für bir İ istiyorsa sizin prog- ramcı olarak yapabileceğiniz hiçbir şey yoktur. NMI kesinlikle gerçeklaşir ve programa geri dönülür. İnterrupt olayının mantığını kavradıktan sonra bir İn- terrupt'un sizin rutininize atlamasını nasıl sağlayaca- ğımızı tartışalım. C-b64 ROM'unun en sonunda (yani SFFFE-SFFFF ad- reslerinde) IR& rutini vektörleri bulunur. Bir interrupt oluşluğu anda Işienmekfe olan komu'I bl'HrllIr ve prog- ı'!ıınllll mnm