Amiga Dünyası sayı 21, sayfa 30

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 30

CHIP REGISTER'LARI

Geçen ay eksik kalan küçücük bir bölümümüz var. Anlattıklarımız haricinde COPPER üzerinden de chip registerlara ulaşılır. Bu işlemi DMA halleder. Toplam olarak altı DMA kanalı vardır. Bunlar; Bitplane DMA: Bu DMA kanalı ekran datasını devamlı olarak hafızadan okur ve gerekli data register'larına yazar. Sprite DMA: Sprite datayı RAM'den sprite register'larına transfer eder. Disk DMA: Disk'ten RAM'a veya RAM'dan Disk'e data transferi yapar. Audio DMA: RAM'den dijital ton datayı okur ve bunu uygun audio register'lara yazar. Copper DMA: Coprocessor (COPPER) komutları bu kanal üzerinden alır. Blitter DMA: Blitter'e veya blitter'den RAM'a datayı bu DMA kanalı verir. Bu DMA kanalları DMACON, DMA Kontrol Register'ı vasıtasıyla enable veya disable yapılır.

adres $096(yaz) ve $002(oku)

BİT ADI İŞLEVİ (SET iken) 15 SET/CLR SET/CLEAR BİTİ 14 BBUSY BLİTTER MEŞGUL (SADECE OKU) 13 BZERO BLİTTER İŞLEVLERİNİN SONUCU 0 (SADECE OKU) 12 KULLANILMIYOR 11 KULLANILMIYOR 10 BLTPRI BLİTTER DMA, 68000'e GÖRE ÖNCELİKLİ 9 DMAEN BÜTÜN DMA'LARI ENABLE ET (BİT 0-8) 8 BPLEN BİTPLANE DMA ENABLE 7 COPEN COPPER DMA ENABLE 6 BLTEN BLİTTER DMA ENABLE 5 SPREN SPRİTE DMA ENABLE 4 DSKEN DİSK DMA ENABLE 3 AUD3EN 3 NO'LU SES KANALI İÇİN AUDİO DMA ENABLE 2 AUD2EN 2 NO'LU SES KANALI İÇİN AUDİO DMA ENABLE 1 AUD1EN 1 NO'LU SES KANALI İÇİN AUDİO DMA ENABLE 0 AUD0EN 0 NO'LU SES KANALI İÇİN AUDİO DMA ENABLE

DMA kontrol register'ı, normal bir register gibi yazılmaz. Yazılırken seçilen bitler set veya clear olur. Bu, yazılacak data içindeki 15 nolu bitin durumuna göre belirlenir. Eğer bu bit 1 ise, yazılacak datadaki SET bitler DMACON register'ında da SET olur. Eğer 15 nolu bit 0 ise yazılacak datadaki SET bitler DMACON register'ında CLEAR olur. Yazılacak datadaki CLEAR bitlerin bir işlevi yoktur. DMAEN olarak dizayn edilmiş olan 9 nolu bit, bir cins ana anahtardır. Eğer bu 0 ise, bütün DMA kanalları kapanır (0'dan 8'e). Eğer bu bit 1 ise 0'dan 8'e tüm DMA kanalları aktif olur. Herhangi bir DMA kanalının aktif olması durumunda bu bitin de aktif olması gerekmektedir. Bir örnek verelim: Varsayalım DMACON register'ımızda sadece Bitplane DMA aktif geri kalanlar CLEAR. DMACON'un değeri $0100. Biz disk DMA'yı aktif yapmak istiyoruz. Bunun için DSKEN ve DMAEN SET ve BPLEN CLEAR olacak.

MOVE.W #$0100,$DFFO96 ;BPLEN biti CLEAR MOVE.W #$8210,$DFFO96 ;DSKEN ve DMAEN SET olur.(SET/CLR<-1)

DMACON register'ı şimdi $0210 değerine sahiptir. 13 ve 14 nolu bitler sadece okunabilir. Bunlar blitter'in çeşitli bilgilerini içerirler. Bu ilerde blitter bölümünde incelenecek. 10 nolu bit blitter'in 68000'e göre önceliğini belirler. Eğer bit SET ise 68000, blitter chip RAM üzerindeki operasyonlarını bitirinceye kadar, chip RAM'a ulaşım yapamaz. Bit 0 ise, 68000, blitter'den her 14 çift bus cycle'ını alır. Şimdi biraz da Elektron ışınının yatay düşey konumunu ve önemini, Amiga'nın interrupt'larını ve Copper'ı inceleyelim. Ekrandaki elektron ışınının o andaki pozisyonu nasıl okunur? Amiga'da DMA işlevinin zamanlaması, elektron ışınının her ekran satırı başında bulunma pozisyonuyla, senkron olacak şekilde ayarlanmıştır. Bazı zamanlar bu ışının ekran üzerindeki yerini bilmeye ihtiyaç duyarız. Agnus, kendi içinde ekranın o andaki yatay ve düşey bilgilerini içeren iki sayıcı bulundurmaktadır. Bu sayıcılara iki adet register vasıtasıyla ulaşabiliriz.

VHPOS $006 (Read VHPOSR) $02c (write VHPOSW) Bitno: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Fonksiyonu: V7 V6 V5 V4 V3 V2 V1 V0 H8 H7 H6 H5 H4 H3 H2 H1

VPOS $004 (Read VPOSR) $02a (Write VPOSW) Bit no: 15 1413 121110987 6543210 Fonksiyonu:LOF - - - - - 2 v8

H1'den H8'e kadar sıralanmış olan bitler, yatay elektron ışınının o anki yerini içerirler. Aynı zamanda bu bitler Amiga'nın bus'ını tayin ederler. Vertikal pozisyon için geçerli olan satır, iki register'a bölünmüştür. Bunlardan V0-V7 bitleri VHPOS register'ında, V8 biti ise VPOS register'ında bulunmaktadır. LOF biti (LOng Frame) o sırada ekranda bulunan resmin, uzun veya kısa frame'li olup olmadığını belirtir. Bu bit sadece Interlace mod için lazımdır. Normal konumda değeri 1'dir. Elektron ışınının ekran üzerindeki yeri istendiği takdirde, kullanıcı tarafından da yazılabilir. Ancak bu çok nadir kullanılan bir yöntemdir. POS pozisyon register'ları, ayrıca başka bir fonksiyon olarak Lightpen'le çalışılmasına da olanak sağlar. Agnus'un lightpen girişi aktif olduğunda ve lightpen ekran üzerinde bir noktaya pozisyonlandığında, Agnus'a lightpen'le ilgili bilgi gelir. Gelen bilgi bu register'lara iletilir ve işlem tekrarlanır. Interruptlar... Genelde giriş ve çıkışa sahip tüm Custom chipler ve iki adet CIA entegresi interrupt kaynağıdır. Paula içindeki özel bir devre, bunlardan gelen kaynak interrupt sinyallerini toplar, değerlendirir ve uygun olacak şekilde 68000 için interrupt sinyalleri üretir. İşlemcinin kullanılan otovektör dereceleri LEVEL 0-6'dır. LEVEL 7, Non Maskable Interrupt kullanılmaz. Interrupt'la ilgili istek ve maskeleme işlemlerini iki register üstlenmiştir. Bunlar Interrupt Request Register (INTREQ) ve Interrupt Mask Register'larıdır (INTENA, INTerrupt ENAble). Bu iki register'ın da bit dizilişleri ve anlamları birbirinin aynıdır.

$01E HNTENA $09A (WRITE) $01C(READ) İT İSİ İL FONKSİYONU WRİTE/READ (DMACON REGİSTER'INA BAKINIZ) TÜM İNTERRUPTLARI ENABLE ET CİA-B VEYA EXPANSION PORTTAN İNTERRUPT

12 DSKSYN DİSK SENKRON DEĞERİ BELİRLENMESİ 11 RBF SERİAL RECEİVE BUFFER'İ DOLU 10 AUD3 SES ÇIKIŞ BİLGİ KANALI 3 9 AUD2 SES ÇIKIŞ BİLGİ KANALI 2 8 AUD1 SES ÇIKIŞ BİLGİ KANALI 1 7 AUD0 SES ÇIKIŞ BİLGİ KANALI 0 6 BLIT BLİTTER HAZIR 5 VERTB VERTİKAL BLANKING GAP BAŞINA ULAŞILDI 4 COPER COPPER İNTERRUPT İÇİN REZERVEDİR 3 PORTS CIA-A VEYA EXPANSION PORTTAN İNTERRUPT 2 SOFT SOFTWARE İNTERRUPTLARI İÇİN REZERVEDİR 1 DSKSYNC TRANSFERİ TAMAM 0 TBE SERİAL TRANSMİT BUFFER'İ DOLU

İlk 0-13 bitleri çeşitli interrupt bilgilerini işlemek için kullanılırlar. CIA interruptları, tek interrupt olacak şekilde birleştirilmiştir. INTREQ register'ı içindeki bitler, hangi interrupt isteğinin oluştuğunu içerirler. Eğer herhangi bir interrupt oluşursa, bununla ilgili bit high olur. Bir işlemci interrupt'ı yaratmak için, DMAENA ve INTENA register'ı içindeki ilgili bit SET olmalıdır. INTEN biti, ana interrupt bitidir. Bunun sayesinde 14 interrupt kaynağı da on veya off yapılabilir. COPPER Coprocessor... Copper, basit bir yardımcı işlemcidir. Bir task olarak çalışır ve bazı değerleri, bazı custom register'lara yazar. Daha başka bir işlev olarak belirli ekran pozisyonlarındaki bazı register'ların içeriklerini değiştirir. Ekranı çeşitli parçalara bölebilir. Bu bölgeleri değişik renklerde ve değişik çözünürlüklerde gösterebilir. Bu özellik, birçok ekranın aynı anda açılmasını sağlayabilir. Copper, bir coprocessor olarak dizayn edilmiştir. Hafızadaki bir program vasıtasıyla onu programlayabilir ve bu programı komut-komut işletebilirsiniz. Copper üç ayrı komut içermektedir. Bunlar; WAIT, MOVE ve SKIP'tir. Bu komutlar bundan iki sayı önce dergimizde açıklandığı için bunlar üzerinde durmayacağım. CopperList, tek başına copper'ı işletemez; bunun için Copper register'larını incelememiz lazımdır.

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