Amiga Dünyası sayı 21, sayfa 31

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 31

COP1LC $080 BU İKİ REGİSTER, İLK COPPER COP1LCH $080 LIST'İN ADRESİNİ İÇERİR. COP1LCL $082 BU İKİ REGİSTER, İKİNCİ COP- COP2LCH $084 PERLIST'İN ADRESİNİ İÇERİR. COP2LCL $086 COPJMP1 $088 COPPER PROGRAM SAYACINA, İLK COPPERLIST'in ADRESİNİ YÜKLER. COPJMP2 $08A COPPER PROGRAM SAYACINA, İKİNCİ COPPERLIST'in ADRESİNİ YÜKLER. COPCON $02E BU REGİSTER SADECE BİR BİT İÇERİR (BİT 0).

EĞER BU BİT SET OLURSA COP-PER $040 İLE $07E ARASINDAKİ BLİTTER REGİSTER'LARINA DA ULAŞABİLİR.

İki COPxLC register'ı CopperList'in adresini içerirler. Bu copperlist'in işleme başlayabilmesi için, ilgili COPJMPx register'ına herhangi bir değer yazılması yeterlidir. COPJMPx bir strop adresidir ve buraya herhangi bir değer yazılmak istenmesi copper'ı uyarır. Bu uyarı sonucu, copper program sayaçları sıfırlanır ve ilgili copperlist adresi bu sayaçlara yüklenerek copper işletime geçer. Aşağıda yeni copperlist'in, copper'a yüklenmesi için gerekli programı veriyorum.

LEA a5 ;BASE adresi a5 registerina yükle 'Copper DMA off MOVE.L #copperlist.COP1LCH(a5) ; Copperlist adresini belirle MOVE.W ;bu adresi copper program ; sayacına transfer et #$8080,DMACON(a5) DMA on

Program, Copper'ın nasıl yükleneceğini gösteren genel bir programdır. Şimdi bir de aşağıda verdiğimiz programı deneyiniz. Bunun konusu, ekrana siyah, kırmızı ve sarı barlar çıkarmasıdır. Copperlist'in kullanımını gösteren basit fakat çok iyi bir Copper programıdır. Basit bir CopperList için örnek

;Custom Chip Registerlar

IİNTENA —$9a ;İnterrupt-Enable-Register (write) DMACON $96 ;DMA -kontrol Register (write) COLOR00 —$180 ;Color palet register O

;Copper registerları

COPİLC adres registeri COP2LC .copperlistin adres registeri COPJMP1 atla COPJMP2 ;2.copperliste atla

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

CIAAPRA — $BFE001

;Exec Library Base Ofsetleri

OpenLibrary1 ;Libİsmi, Version/a1,dO Forbid Petmit AllocMem ;Byte uzunluğu,istek/dO,d1 FreeMem ;Hafıza adresi,byte

;Graphics Base

StartList —38 ;Diğer Labellar Ex&cbase s4 Chip —2 ;Chip Ramisteği

Programın Başlangıcı

için hafıza ayrılması isteği

Start: move.l ExecBase,a6 moveg #CLuzunluğu,d0 ;AllocMem için parametre düzenle moveg #chip,dl ;chip ram sor AllocMem(a6) ;hafıza isteği move.l d0,CLadr ;Bulunan hafızanın adresi beg.s Son ;hata-->Son

;CopperListi CLadr (copperlist adres) kopyala.

lea CLbaşla,a0 move.| CLadr,al moveg #CLsize-1,d0 CLcopy: move.b (a0)4,(al1)4 dbf d0,CLcopy

;Döngü değeri

;Copperlisti byte byte kopyala

Ana program

İsr forbid(a6) lea $dff0000,a5 move.w #$03a0,dmacon(a5) move.l CLadr,coplle(a5)

;Taskları kapat ;Base adresi a5'e koy ;DMA'yı kapa ;Copperlistin adresini ;COPİLC'ye yaz ;Copperlisti program sayacına ;yükle move.w #$8280,dmacon(a5) ;DMA'yı aç

clr.wcopjmp 1 (a5)

;sol mouse tuşu için bekle

Bekle: btst #6,ciaapra — ;Bit Test bne.s — bekle ;ok? devam et

Sonu

;Eski CopperListi yerine koy

move.l #GRisim ;OpenLibrary için parametreleri düzenle cir.l dO jsr OpenLibrary(a6) ;Graphics Libraryi aç move.l move.l Startlist(a4),coplle(a5) ;StartList adresini yükle cirw —

move.w #$83e0,dmacon(a5) jsr permit(a5)

;Bütün DMA kanallarını aç ;Taskları aç

;Copperlist için ayrılmış olan hafızayı serbest bırak

Klavyeyle gezinmek için ← ve → tuşları.