NightNetwork - yazılım, yazın, verim vs.

Bölüm 4. DMA Satırları

İçindekiler

4.1. Bir raster satırı kaç cycle:
4.2. VIC ve 6510'un Cycle paylaşımı
4.3. DMA Satırları ile İlgili Geleceğe Bakış

İşte bunlar şu başımızın belası gibi görünen 8 satırda bir olan VIC'in 6510'u durdurduğu satırlar.

Bu satırlarda ne olup bittiğini anlamamız için biraz VIC çipinin içine girmemiz gerekiyor. VIC çipinin grafik üretme şekli karakter tabanlı bir sistem. Yani VIC ekranı çizerken aslında 40 x 25 adet karakter slotu cizmek üzere davranıyor. bu 40 x 25 karakter slotluk ekrandaki her bir karakter slotu da 8 x 8 pixelden oluşuyor.

VIC görüntüyü oluşturmak için belleği tararken aslında yaklaşık olarak şu adımlarda düşünmesi gerekir.

Fakat hatırlayacağınız gibi VIC görüntüyü satır satır oluşturduğundan yukarıdaki adımların her karakter için işlenmesinde ufak bir fark vardır. Şimdi detaylı şekilde bunu anlatalım.

Önce terimler hakkında bir uyarı. Şimdiye kadar "satır" kelimesini bir pixel kalınlığındaki raster satırı anlamında kullandık. Bu noktadan itibaren "karakter satırı" diyerek 8 pixel kalınlıktaki satırlardan da bahsetmeye başlayacağız.Bu ikisini karıştırmayın.

VIC'in içinde bizim dışarıdan erişemediğimiz 40 tane register vardır. VIC bir karakter satırının başındaki ilk raster satırına geldiğinde, bellekten Video Matrix adını verdiğimiz bölgeden (40 x 25 = 1000 baytlık bir bölge), o karakter satırını oluşturan 40 baytı alır ve bu içindeki registerlere saklar. Başka bir deyişle VIC, önümüzdeki 8 raster satırı boyunca oluşturacağı görüntüde gecen 40 karakter slotunu göndermek üzere kendini hazırlamış olur.

Daha sonra o kırk karakterin her birinin 8x1'lik ilk sıra pixelini bellekten okuyarak ilk raster satırının video sinyalini oluşturup monitöre gönderir. Ardından bir sonraki raster satırında bu aynı 40 karakter'in 8x1'lik ikinci sıra pixelini okur ve kullanır. Bu islem boylece 8 satır boyunca devam eder.

Bu tasarım sayesinde VIC 40 karakteri bir kere okuduktan sonraki 7 satırda donanım olarak çok basit ve hızlı şekilde (sadece 7'ye kadar sayan bir iç sayacı artırarak) bellekten okuması gereken baytları bulabilir.

Bunun bir sebebi de bellekte karakter pixelleri ve video matrisin ayrı ayrı organize edilmesidir.

Genel olarak bir karakter seti içinde 256 adet karakter bulunur. bu 256 karakterin her biri için bellekte 8 x 8 pixellik (yani 8 baytlık) olmak üzere toplam $800 baytlık yer ayrılır. bu $800 baytın ilk 8 baytı ilk karakterin pixelleridir. İkinci 8 bayt ikinci karakterin pixelleridir vs.

Dolayısıyla VIC bir karakter satırındaki slotlarda hangi karakterler olduğunu bir kere öğrendikten sonra (video matristen okuyarak) bu değerleri 3 bit kaydırıp (yani 8 ile çarpıp) alt 3 bite de 0 dan 7 ye kadar sayan ve her raster satırında bir artan bir iç sayactan gelen değerleri koyarak görüntüyü oluşturan asıl baytları yani karakter setinin içindeki adresleri bulabilir.

    +-----------------------------------------------------------------------+
    |             1.Slot            2.Slot                       40.slot    |
    |           +-------------+  +------------+               +----------+  |
    |           | 0000 0001   |  | 00000010   |   .........   |          |  |
    |           +-------------+  +------------+               +----------+  |
    |                   |                                                   |
    |                   |                                                   |
    |                   |                                                   |
    |                   |                                                   |
    |                   |                                      +--------+   |
    |                   |                                      | Sayac  |   |
    |                   |          ----------------------------|        |   |
    |           +----------------------+                       |  010   |   |
    |           |  00000001  |   010   |                       +--------+   |
    |           +----------------------+                                    |
    +-----------------------------------------------------------------------+
  

Biraz kafanız karışmış olabilir. Sakin olun... Durumu özetleyelim.

Mesela ekranın sol en üstünde A B ve C harfleri var diyelim. Ekrandaki ilk karakter satırının ilk raster satırı default olarak 50 satırdır.

50.satır: VIC en ust satırdaki 40 bayti VM'den okur. Sayacı %000 yapar. Her bir slottaki harflerin ilk baytlarının adresini, sayacı ve slotları kullanarak bulur. Sırayla bu adreslerdeki (yani karakter setine ait bölgedeki) baytları da okur ve görüntü sinyalini üretir.

51.satır: Sayacı %001 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

52.satır: Sayacı %010 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.(bkz sekil)

53.satır: Sayacı %011 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

54.satır: Sayacı %100 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

55.satır: Sayacı %101 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

56.satır: Sayacı %110 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

57.satır: Sayacı %111 yapar. Tekrar slotlarla sayacı tek tek yan yana getirerek ilgili karakter baytlarını okur ve görüntü sinyalini üretir.

Görüldüğü gibi VIC 8 satırda bir ekstradan Video matrise erişmek durumunda. İşte bu satırlar DMA Satırlarıdır.

DMA satırı olmayan satırlarda VIC bellege erişip oradan 40 tane bayt alır bunlar o an bulunduğumuz karakter satırındaki karakterlerin "karakter seti belleğindeki" 8x1 pixellik sıralardır. Yani mesela 52. raster satırında (ılk karakter sırasının 3. raster satırı) VIC'in gidip 1. karakter satırındaki o an bulunan harflerin her bırının karakter setı belleğindeki 3.baytlarını alması gibi.

Kafanız karışıyor ama buna izin vermeyin... olay aslında anlatıldığından daha basit. Her raster satırında VIC her karakter için bir bayt okuyor. Çünkü karakterin kalınlığı 8 pixel ve bir bayta sığıyor. 40 karakter oldugu için 40 bayt okuyor.

DMA satırlarında ise o satırda karakter setinden okuyacağı 40 bayta ilave olarak 40 bayt da Video Matristen okuyor. İcerideki slotları hazırlamak için

Yani DMA satırlarında VIC diger satırlarda olmadığı şekilde ekstradan 40 bayt için daha belleğe erişecek.

Bir nefes alın...

NightNetwork - 2009