25.11.2014 Views

Amiga Dunyasi - Sayi 21 (Subat 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 21 (Subat 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 21 (Subat 1992).pdf - Retro Dergi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

lev olarak belirli ekran pozisyonlarındaki bazı registerlar'ın içeriklerini<br />

değiştirir. Ekranı çeşitli parçalara bölebilir. Bu bölgeleri<br />

değişik renklerde ve değişik çözünürlüklerde gösterebilir. Bu<br />

özellik, birçok ekranın aynı anda açılmasını sağlayabilir.<br />

Copper, bir coprocessor olarak dizayn edilmiştir. Hafızadaki<br />

bir program vasıtasıyla onu programlayabilir ve bu programı<br />

komut-komut işletebilirsiniz. Copper üç ayrı komut içermektedir.<br />

Bunlar; WAIT, MOVE ve SKIP'tir. Bu komutlar bundan iki sayı<br />

önce dergimizde açıklandığı için bunlar üzerinde durmayacağım.<br />

CopperList, tek başına copper'ı işletemez; bunun için Copper<br />

register'larını incelememiz lazımdır.<br />

COPİLCH $080<br />

COPİLCL $082<br />

COPİLCH $080<br />

COPİLCL $082<br />

COPJMP1 $088<br />

COPJMP2 $08A<br />

BU İKİ REGISTER, İLK COPPER<br />

LIST'İN ADRESİNIİÇERİR.<br />

BU İKİ REGISTER, İKİNCİ COP-<br />

PERLIST'İN ADRESİNİ İÇERİR.<br />

COPPER PROGRAM SAYACINA,<br />

İLK COPPERLIST'in ADRESİNİ<br />

YÜKLER.<br />

COPPER PROGRAM SAYACINA,<br />

İKİNCİ COPPERLIST'in ADRESİNİ<br />

YÜKLER.<br />

COPCON $02E BU REGISTER SADECE BİR BİT<br />

İÇERİR (BİT 0).<br />

EĞER BU BİT SET OLURSA COP-<br />

PER $040 İLE $07E ARASINDAKİ<br />

BLİTTER REGISTER'LARINA DA<br />

ULAŞABİLİR.<br />

İki COPxLC register'ı CopperListin adresini içerirler. Bu copperlistin<br />

işleme başlayabilmesi için, ilgili COPJMPx register'ına<br />

herhangi bir değer yazılması yeterlidir. COPJMPx bir strop adresidir<br />

ve buraya herhangi bir değer yazılmak istenmesi coppen<br />

uyarır. Bu uyarı sonucu, copper program sayaçları sıfırlanır ve ilgili<br />

copperlist adresi bu sayaçlara yüklenerek copper işletime geçer.<br />

Aşağıda yeni copperlistin, copper'a yüklenmesi için gerekli<br />

programı veriyorum.<br />

LEA $dff000,a5 ;BASE adresi a5 registerına yükle<br />

MOVE.W #$0080,DMACON(a5) ;Copper DMA off<br />

MOVE.L #copperlist,COP1LCH(a5) ; Copperlist adresini belirle<br />

MOVE.W #0,COPJMP1 (a5) ;bu adresi copper program<br />

; sayacına transfer et<br />

MOWE.W #$8080,DMACON(a5) ;CopperDMAon<br />

Bu program, copper'ın nasıl yükleneceğini gösteren genel bir<br />

programdır. Şimdi bir de aşağıda verdiğimiz programı deneyiniz.<br />

Bunun konusu, ekrana siyah, kırmızı ve san barlar çıkarmasıdır.<br />

Copperlistin kullanımını gösteren basit fakat çok iyi bir copper<br />

programıdır.<br />

Basit bir CopperList için örnek<br />

;Custom Chip Registerlar<br />

INTENA = $9a ;Interrupt-Enable-Register (write)<br />

DMACON = $96 ;DMA-kontrol Register (write)<br />

COLOR00 = $ 180 ;Color palet register 0<br />

;Copper registerlan<br />

COP 1LC = $80 ; 1 .copperlistin adres registen<br />

COP2LC = $84 ;2.copperlistin adres registen<br />

COPJMP1 =$88 ;l.copperlisteatla<br />

COPJMP2 = $8a ;2.copperliste atla<br />

;CIA-A port register'ı (Mouse tuşu için)<br />

CIAAPRA<br />

=$BFE001<br />

;Exec Library Base Ofsetleri<br />

OpçnLibraryl =-552 • ;Libİsmi,Ve&sion/al,dO<br />

Fqfbid =-132<br />

Permit =-138<br />

AllocMem =-198 ;Byte uzunluğu,istek/dO,dl<br />

FreeMem =-<strong>21</strong>0 ;Hafıza adresi,byte uzunluğu/al,d0<br />

;Graphics Base<br />

StartList = 38<br />

;Diğer Labellar<br />

Execbase = 4<br />

Chip = 2 :Chip Ram isteği<br />

•_+***** Programın Başlangıcı *****+.<br />

;CopperList için hafıza ayrılması isteği<br />

Start:<br />

move.l ExecBase,a6<br />

moveq #CLuzunluğu,d0 ;AllocMem için parametre düzenle<br />

moveq #chip,dl ;chip ram sor<br />

jsr AllocMem(a6) ;hafıza isteği<br />

move.l d0,CLadr ;Bulunan hafızanın adresi<br />

beq.s Son ;hata~>Son<br />

•<br />

;CopperListi CLadr (copperlist adres) kopyala.<br />

lea CLbaşla,a0<br />

move.l CLadr,al<br />

moveq #CLsize-l,d0<br />

CLcopy:<br />

move.b (a0)+,(al)+<br />

dbf d0,CLcopy<br />

;-+***** Ana program *****+.<br />

;Döngü değeri<br />

;Copperlisti byte byte kopyala<br />

jsr forbid(a6) ;Taskları kapat<br />

lea $dff0000,a5 ;Base adresi a5'e koy<br />

move.w #$03a0,dmacon(a5) ;DMAyı kapa<br />

move.l CLadr,copllc(a5) ;Copperlistin adresini<br />

;COPlLC'yeyaz<br />

clr.wcopjmpl(a5)<br />

;Copperlisti program sayacına<br />

;yükle<br />

move.w #$8280,dmacon(a5) ;DMAyı aç<br />

;sol mouse tuşu için bekle<br />

Bekle:<br />

btst #6,ciaapra ;Bit Test<br />

bne.s bekle ;ok? devam et<br />

;-+***** Programın Sonu *****+.<br />

;Eski CopperListi yerine koy<br />

move.l #GRisim ;OpenLibrary için parametreleri düzenle<br />

clr.l d0<br />

jsr OpenLibrary(a6) ;Graphics Libraryi aç<br />

move.l d0,a4<br />

move.l Startlist(a4),copllc(a5) ;StartList adresini yükle<br />

clr.vv Copjmpl(a5)<br />

move.w #$83e0,dmacon(a5) ;Bütün DMA kanallarını aç<br />

jsr permit(a5) ;Taskları aç<br />

;Copperlist için ayrılmış olan hafızayı serbest bırak<br />

AMIGA DÜNYASI 36

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!