Commodore 64 ile Grafik (5)

İşte geldik dizimizin en heyecanlı yerine. 320*200 tekrenkli ve 160*200 çokrenkli grafik kullanımına. Başlıyoruz...

Daha önce de hafifçe değindiğimiz gibi, bu tür grafikte 320*200 = 64000 nokta kullanılır. Her nokta bir BİT olduğuna göre, toplam 64000 bit'e, yani 8000 byte'a ihtiyacımız var. Bu da yaklaşık 8K hafıza demektir. Bu hafızanın, daha önce gördüğümüz adresleme bölgelerinin kaydırılması ile ilgili bilgilerin ışığı altında, bilgisayar içinde 8 değişik adresten başlayabileceğini biliyoruz. Bunların ilki kullanılmıyordu, çünkü $0000'dan başlayan bu bölge işletim sistemi için çok önemliydi. Biz de diğer 7 bölge ile yetineceğiz. Şimdi geldik işin en çetrefilli yerine. Bu grafik hafızasının organizasyonu oldukça karmaşık bir yapıya sahip. Anlamak için lütfen gayret edin. Önce yanda verdiğimiz tabloya bakın.

Bunlar ne demek? Tablodaki noktaların her biri, grafik ekranın bir noktasına karşılık geliyor. Örneğin (0,0) koordinatları en sol üst köşedeki noktayı gösterir, (0,1) ise onun altındakini. Gördüğünüz gibi noktalar 8*8'lik alanlara ayrılmış durumdalar. Bu si-

Tuna ERTEMALP size bir şey hatırlatıyor mu? Mesela, 8*8'lik karakter tanımlamalarını?.. Dolayısıyla yazı ekranın satır ve kolon yapısını... İşte tablomuzda o satır ve kolonları da görebiliyorsunuz. Gene tabloda gördüğünüz yanyana duran 8'er noktanın oluşturduğu her bir grup, bir byte'a karşılık geliyor. Her bir byte'ın içindeki bit'lerin numaralanmasına dikkat! En soldakine 7, en sağdakine de 0 adı veriliyor. Sıra geldi byte'ların dizilişine. Grafik ekranında her 8*8'lik grubun, yazı ekranındaki bir karakterlik bölge gibi düşünülebileceğini demin söyledik. İşte bu bölgelerin her biri, üstüste konmuş 8 byte'dan oluşur. Bu 8 byte'-

Yazıya ilişkin programları Döküm Eki'nde bulabilirsiniz.

ın hafıza içindeki adresleri arka arkaya gelir. Sonra gelen 8 byte, bir sonra gelen 8*8'lik alanı tanımlar. Böylece 40 kolon da bitince, sıra alt satıra gelir. Bu arada grafik ekranının ilk 8 satırı da tamamlanmıştır. 9-16 arası grafik satırları gene 8*8'lik bloklar halinde 8'er byte tarafından tanımlanır. Bunu bir örnekle görelim. Diyelim ki grafik ekranımızı $2000 (8192) adresinden başlattık. (0,0) koordinatı, 8192 + 0 = 8192 adresli byte'ın 7 numaralı bit'i olacaktır. (2,4) koordinatları, 8192 + 4 = 8196 adresli byte'ın 5 numaralı bit'i olacaktır. Peki, (15,15) koordinatı ne olacak?

! ! ! ! ıı RX 1912324567! 189012345! 167890123!... YI IKOLON IKOLON 1 |! IKOLON 2 ! 1 1BİT'ler !76543210! 176543210! 176543216! © © G8 IBYTE 16 ! 1 1 9 17 ! 8 !T!BYTE 8 10 18 ! 2 2 İl İ........!BYTE 19 ! 4 !R!BYTE 4 12 !........!BYTE 20 !........ ! 5S! 5 13 !........!BYTE 21 !........ ! 6& !8!BYTE & 14 22 ! 7 7? 15 !........ IBYTE 283 ! 8 !S!IBYTE 320!........!BYTE 321!........!BYTE 329!........ 1 9 !BYTE 330!........ ! | 10!T!BYTE 322!........!BYTE 223!........!BYTE 331!........! 323!........!BYTE 3241........ !BYTE 322!........ ! 12!R!BYTE 324!........!BYTE !BYTE ! 13! !BYTE 325!........!BYTE 326!........!BYTE 334!........ 1 14!1!BYTE 326!........ IBYTE 327!........!BYTE 1 15! !BYTE 227!........!RYTE 328!........!BYTE 336!........ ! 1 1

Tablomuzun X satırının ve Y kolonunun yardımıyla o noktayı bulun. 8192 + 328 = 8520 adresinin 0 numaralı bit'i olduğunu göreceksiniz. Hemen yanındaki (16,15) koordinatı ise, 8192 + 336 = 8528 adresinin 7 numaralı bit'i oluyor. Kâğıt üzerinde bulunması pek de zor olmayan bu adres ve bit'lerin, hesap yoluyla bulunması oldukça karmaşık. Birazdan grafik rutinlerini geliştirirken bu konuya geleceğiz. Çokrenkli mod (multicolor) kullanıldığında byte'ların düzeni değişmiyor. Tek değişen, yanyana iki noktanın bir noktaymış gibi davranması. Örneğin (0,0) multicolor koordinatı 8192'nin 7. bit'i iken, (1,0) koordinatı 8192'nin 5. bit'i olacaktır. Çünkü 7. ve 6. bit'lerin ikisi de (0,0) koordinatları için kullanılacaktır. Bu iki bit'in içeriği 00, 01, 10 veya 11 olabileceğinden, o nokta dört değişik renkte olabilecektir. Böylelikle renk konusuna girdik. Her iki modda da renk kullanımının nasıl olduğunu görelim... 320*200'ü kullanıyorsak, grafik ekranındaki her 8*8'lik bölgede iki değişik renk olabilir. Biri çizgi rengi, diğeri arka plan rengi. Her bir 8*8'lik bölgenin bu iki rengi farklı farklı olabilir. Bu renklerle ilgili bilgi, VIDEORAM dediğimiz bölgede saklanır. Normalde yazı yazdığımız ekranı saklayan bu hafıza bölgesi, grafik ekranına geçtiğimizde bir renk deposu haline gelir. Bu hafızanın her byte'ındaki sayısal değer, karşılık geldiği 8*8'lik alanın rengini belirler. Bir alandaki çizgi rengini RC ile, arkaplan rengini de RE ile gösterirsek, VIDEORAM'da karşılık gelen byte'ın içeriğinin RC*16 + RE olması gerekir. Bir başka deyişle, o byte'ın üst 4 bit'i çizgi rengini, alt 4 bit'i de ekran rengini belirler. VIDEORAM'ın organizasyonu daha basittir:

kolaylıkla hesaplanabilir. Örneğin VIDEORAM'ın başlangıç adresi $0400 (1024) ise (7,18) koordinatının renk byte'ı 1024 + 80 = 1104 adresinde olacaktır.

Multicolor'da ise, demin de değindiğimiz gibi her iki bit'in oluşturduğu çift, o noktanın rengini belirleyecektir:

00 = VIC'ın 33 numaralı yazmacı 01 = Renk 1 = VIDEORAM'ın alt dört bit'i 10 = Renk 2 = VIDEORAM'ın üst dört bit'i 11 = Renk 3 = Renk RAM'ı

A-7 aa alı 02 !....
8-15 41 2 !....

Gördüğünüz gibi her 8*8'lik grafik noktası grubuna karşılık gelen byte

Renk RAM'ı 55296-56295 adresleri arasında yer alır ve yeri değiştirilemez. Organizasyonu VIDEORAM ile aynıdır. VIC'in 33 numaralı yazmacı ise normalde yazı ekranının rengini belirler. Şimdi ise 0 numaralı renk yerine geçiyor. Artık bu bilgileri değerlendirerek programlar yazmanın zamanı geldi. Nasıl grafik ekranı açılır / kapanır, renklendirilir, nokta çizilir / silinir, çizgi çizilir / silinir, elips çizilir / silinir? Tüm bu temel rutinleri birer alt-

program halinde yazarsak, artık grafik konusunda oldukça büyük bir adım atmış oluruz. Çünkü, tüm cisimlerin temelinde yatan şekiller bunlardır ve bunları kullanarak diğer tüm geometrik çizimleri yapabilen altprogramlar yazabiliriz.

Önce bir iki noktada anlaşalım. Kullanacağımız grafik sayfası, BANK0'ın ikinci yarısı, yani $2000'den (8192) başlıyor. Burayı seçmemizin nedeni, bilgisayarın açıldığı sırada BANK0'a ayarlı olması. Eğer CIA2'nin bit'leri ile oynayarak diğer BANK'lardan birini kullanırsak bir sürü kaydırma işlemi yapmamız gerekecek. İsteyenler, daha önceki bölümlerde gördüğümüz POKE komutlarını kullanarak başka bir grafik sayfası kullanabilirler. Ancak dikkat etmeniz gereken bir nokta var. BANK2 ve BANK3'ü BASIC ile kullanamazsınız. Makina dili programlaması gerekir. BANK0'ı kullanmamıza bağlı olarak, VIDEORAM da $400'den (1024) başlıyor.

Programlama dili olarak, herkesin anlayabilmesi için, BASIC kullanacağız. Bunun yaratacağı en büyük sorun programların yavaşlığı olacak. Ancak makina dili kullanmak isteyenler ve programlamasını bilenler, bizim verdiğimiz rutinleri kolayca makina diline çevirebileceklerdir. Ayhan Kalaylıoğlu'nun makina dili dizisini okumaya devam edin. İlerde, grafik rutinleri de vermeye başlayabilir. Grafik rutinlerimizi geliştirdikçe onları birleştirip bir program haline getireceğiz. Vereceğimiz satır numaraları 50000'den büyük olacak ve her bir parçası GOSUB ile çağrılabilecek. Gerekli olduğu zaman, bazı değişkenler parametre gibi kullanılacak. Örneğin XN=100:YN=20 verip nokta koyma rutinini GOSUB ile çağırdığımızda, 320*200 ekranının (100,20) koordinatına bir nokta konacak. Bir başka gereklilik de, grafik işlemlerine geçmeden önce POKE 56,32 vererek BASIC kullanım alanının tavanını $2000 olarak belirlemeniz. Yoksa, BASIC programınız ile değişkenleriniz grafik sayfasının bilgileri ile silinebilir. Artık başlayalım. İlk işimiz grafik sayfasını açmak.

320*200'lük ekrana geçmek için üç işlem yapmamız gerekiyor:

1) Yüksek çözünürlü grafiği aktif yapmak. 2) Multicolor'ı kapatmak.

3) Grafik sayfasının $2000'den başladığını belirtmek.

İlk işlemi yapmak için, VIC'in 17 numaralı yazmaçının 5. bit'ini yakmak gerekiyor. Multicolor'u kapatmak içinse 22. yazmaçın 4. bit'ini sıfırlamak lazım. Bir numaralı grafik sayfasını kullanmak için vereceğimiz POKE komutunu da evvelki sayımızda görmüştük. 160*200'lük ekrana geçmek içinse, birinci ve üçüncü işlemlerin yanında ikinci işlemin tam tersini yapmak, yani 22. yazmaçın 4. bit'ini yakmak gerekiyor.

Programımızın 50000-50060 arası satırları, 320*200'e geçmek için kullanılan komutları kapsar. 52000-52060 arası ise multicolor'a geçer. Sadece

GOSUB ile çağrılmaları yeterlidir. Parametreye gerek yok. Sıra geldi grafik sayfamızı silmeye. Grafik sayfasını açar açmaz fark edeceksiniz, daha önceden hafızada kalan bir sürü garip byte değeri, ekranı bir nokta karmaşasına döndürecek. Bunları silmek için 8192'den başlayan bölgeye 8000 byte boyunca sıfır POKE etmemiz gerekiyor. Bu işlemi de, 50100-50140 arasındaki altprogram yapıyor. Parametresi yok. Çizim yaptığımız renkleri belirlemek, kullandığımız çizim moduna göre değişiyor. Bu nedenle iki rutinimiz var. 320*200'de renklendirme işlemi bir tek FOR... NEXT içinde bitiyor. 1024'ten başlayıp 1000 byte boyunca devam eden çizgi ve ekran renginden hesaplayacağımız sayıyı POKE edince işimiz bitiyor. Bunu 50200-50240 arası satırlarda görüyorsunuz. Parametre olarak, RC içinde çizgi rengi, RE içinde de ekran rengi olması gerekiyor. Ekran, bu iki değişkene göre renklendiriliyor. 160*200'de ise, hem VİDEORAM doldurulacak, hem de 55296-56295 arasındaki renk RAM'ı. Bir de VIC'in 33. yazmaçı. Bu rutini de 52200-52250 arasında görüyorsunuz. Parametre olarak, R0, R1, R2 ve R3 içinde kullanılacak renkleri gönderiyorsunuz.

Grafik ekranıyla ilgili son işlem, işimiz bittiğinde yazı ekranına geri dönmek. Grafik sayfasını kapatmak için yapılacak işlem, açmak için yaptığımız işlemin tam tersi. Önce VIC'in 17. yazmaçının 5. bit'ini söndüreceğiz. Sonra 22. yazmaçta multicolor kapatılacak. Ve nihayet, ekranı $2000'e yerleştirirken değişen karakter üreteci adresini düzeltip $1000'e getiriyoruz. Grafik ekranı ile karakter üreteci adresi arasındaki bu ilişkiye geçen sayımızda dikkatinizi çekmiştik. Tüm bu işlemler, 50300-50360 arası satırlarda yapılmaktadır. Parametre gerekmiyor. Hem multicolor hem de normal ekran için bu altprogram kullanılabilir. Bu altprogram GOSUB ile çağrıldıktan sonra yazı ekranının silinmesinde fayda var. Tüm ekran, kullanılan çizim renklerine göre baştan aşağı karakterlerle dolmuş olacaktır. Şimdi nokta, çizgi ve elips gibi temel şekilleri çizmeye başlıyoruz. Önce nokta...

Grafik sayfamız soldan sağa 320, yukarıdan aşağı 200 noktadan oluşuyor. Multicolor da kullansak, soldan sağa 320 tane bit'i kontrol etmemiz gerekiyor. Tek fark, bu sefer onları ikişer ikişer kontrol etmemiz gerektiği. Sağdan sola noktalar, 0-319 olarak, yukarıdan aşağıya da 0-199 olarak numaralandırılırlar. Bizim yazacağımız rutin, bu koordinatlar verildiğinde, hangi byte'ın hangi bit'inin yakılması gerektiğini bulmalı. Peki, bu iş nasıl olacak? 50400-50460 arasındaki rutin, (XN, YN) değişkenleri ile gönderilen noktayı basmakta. Şimdi bu işi nasıl yaptığını görelim. Öncelikle basılmak istenen koordinatın ekranda olup olmadığını kontrol ediyoruz. Eğer değilse, ana programa doğrudan geri dönülüyor. Aksi durumda byte ve bit hesabı yapılıyor. Y-koordinatından başlayalım. Her ekran satırında 8 grafik satırı olduğuna göre (grafik ekranının organizasyonunu hatırlayın), INT (YN/8) ile hangi ekran satırında olduğumuzu bulabiliriz. Her ekran satırı 320 byte'dan oluştuğuna göre, 320*INT (YN/8) ile noktamızın yer aldığı ekran satırının ilk byte'ının grafik ekranının başlangıç adresinden uzaklığını buluruz. Sıra geldi, noktayı bulunduran grafik satırının ilk byte'ının adresini bulmaya. Demin bulduğumuz sayıya (YN AND 7) ile bulacağımız YN/8 işleminin kalanını eklersek, grafik satırının başını buluruz.

Şimdi de XN koordinatını kullanarak, noktanın sol taraftan kaç byte ve kaç bit uzakta olduğunu bulalım. INT (XN/8) ile sola olan uzaklığı byte cinsinden buluruz. Adres olarak hesabı yapmak için, bu sayıyı 8 ile çarparız. Hatırlarsanız, yatay bir çizgi üstünde byte'ların adresleri sekizer sekizer artıyordu. Daha önce YN değerini kullanarak bulduğumuz byte değerine son bulduğumuz değeri de eklersek, noktamızın kaç numaralı byte içinde olduğunu saptamış oluruz. Sıra geldi bit numarasına. YN ile yaptığımız gibi (XN AND 7) yaparak XN'in byte içindeki yerini soldan itibaren buluruz. Bunu 7'den çıkarırsak, bit'in sağdan itibaren olan numarasını hesaplamış oluruz. İki üssü bit numarası ile, bulduğumuz adresin eski içeriğini OR'larsak, hedeflediğimiz nokta yanık duruma geçer. Tüm bu işlem 320*200 için geçerli. Yanan noktanın rengi de, daha önce ekranı renklendirirken verdiğiniz çizgi rengi olacaktır. Multicolor ekranda da buna benzer bir işlem yapılır. 52400-52460 arası satırlarda görmektesiniz. Parametreler gene XN ve YN'dir. Bir de hangi renk ile çizim yapılacağını belirleyen RR değişkenini göndermelisiniz. İçeriği 0-3 arası bir sayı olmalıdır. Böylece, ekranı renklendirirken belirlediğiniz 4 renkten hangisinin nokta konurken kullanılacağı belirlenir. Bu kez, tüm hesaplamalarda XN yerine XN*2 kullanıyoruz. Diyelim ki XN = 20. Multicolor'da bu X değeri, soldan 40 ve 41 numaralı bit'lere hitap eder. Biz de hesaplamalarımızda bunu göz önüne alıyoruz. Tüm işlemler sonucunda byte'ın adresini bulduktan sonra, o noktamızı oluşturan iki bit'in hangileri olduğunu hesaplıyor, sonra bunları AND ile sıfırlayıp, RR'nin gösterdiği değer ile OR'luyoruz. Tabii bunu yapmak için de bazı ufak hesaplamalar gerekiyor. Bir de nokta silme işlemi var. Bu işlemi sadece 320*200 için düşünebiliriz. Multicolor'da nokta silmek anlamsızdır. Dört renkten herhangi biriyle çizim yapılınca eski nokta ortadan kalkar, yerine yeni bir nokta gelir. Nokta silmenin nokta koymaktan pek bir farkı yok. Tek farkı, OR işlemi için kullandığımız sayının tam tersini (yani 255'ten çıkarılmış halini) byte'ın eski içeriği ile AND'liyoruz. Böylece hedeflediğimiz nokta sönüyor. Bu işlemi de, 50500-50560 arası yapıyor ve (XN, YN) parametrelerini kullanılıyor. Geriye çizgi ve elips kaldı. Çizgi ile devam edelim. Programımızın 50800-51040 arası, 320*200'lük ekrana, başlangıç ve bitiş koordinatları X1, Y1, X2, Y2 ile belirlenmiş bir çizgi çizer. Bu koordinatlar ekranın dışında da yer alabilir. O zaman çizginin ekranda kalan kısmı çizilecektir. Ortaokulda geometri dersini görenlerin hatırlayacağı meşhur bir düz çizgi formülü vardır: Y=MX+T. M ve T harfleri değişik de olsa, formül budur. Şimdi bu formülü nasıl kullanacağımızı görelim. X1 ve Y1 değerlerini yerlerine koyar ve denklemi T'ye göre ayarlarsak şu formülü elde ederiz: T=Y1-M*X1. Aynı işlemi X2 ve Y2 ile de yapalım:

T=Y2-M*X2. Her iki denklem de T'ye eşit olduğuna göre, Y1-M*X1 = Y2-M*X2 diyebiliriz. Ve bu denklemi de M'ye göre çözersek, M=(Y2-Y1) / (X2-X1) elde ederiz. Bu bize doğrumuzun eğimini verir. Sıra geldi T'yi bulmaya. T = Y2-M*X2 olduğuna göre, M'yi yerine oturtarak T = Y2 - (Y2-Y1) / (X2-X1)*X2 de diyebiliriz. Bu T ve M değerlerini Y=MX+T denklemine yerleştirir ve Y'ye göre çözersek aradığımız formülü buluruz: Y = (Y2-Y1)/(X2-X1) * X + Y2 - (Y2-Y1)/(X2-X1) * X2. Tüm çizimimiz bu formüle dayalı. Tek sorun, çizgimiz aşağı doğru olduğu zaman çıkacaktır. O zaman X1 = X2 olacağından, X2-X1'in sonucu sıfır olacaktır. Hiçbir sayı sıfıra bölünemeyeceği için, bilgisayar hata mesajı verip duracaktır. Bunu da bir iki IF ile çözümlüyoruz. Programa bir göz atalım. Önce X ve Y koordinatları en yakın tamsayılara yuvarlanıyor. Sonra da, çizginin tamamen ekran dışında olup olmadığı kontrol ediliyor. Eğer öyleyse geri dönülüyor. Değilse gerekli X ve Y farkları hesaplanıyor. Eğer X1-X2 sıfırsa normal çizgi çizme kısmına atlanıyor. Eğer sıfırsa, çizgimiz bir dik çizgi demektir. Bu durumda önce çizginin ekran içine sığıp sığmadığı kontrol ediliyor ve eğer sığmıyorsa başlangıç ve bitiş koordinatları ekran içinde kalacak şekilde yeniden hesaplanıyor. Ardından da çizgi çiziliyor. Eğer dik çizgi değilse, gene çizginin ekran içine sığıp sığmadığı kontrol ediliyor, sığmıyorsa başlangıç ve bitiş koordinatları ekran içinde kalacak şekilde yeniden hesaplanıyor ve çizgi çiziliyor. Bu arada çizgi çizmek için hep nokta koyma rutini çağrılıyor.

51100-51340 arasındaki çizgi silmenin, çizgi çizmekten hiçbir farkı yok. Sadece nokta koyma yerine nokta silme rutini çağrılıyor. Multicolor'da çizgi çizmek de aynı işlemleri gerektiriyor. Farkı, maksimum X değeri olarak 159'u kabul ediyor ve çok renkli nokta koyma rutinini çağırıyor. Bu altprogramı da, 52800-53040 arasında bulabilirsiniz. (X1, Y1) ve (X2, Y2) koordinatlarının yanısıra RR içinde de 0-3 arası bir sayı ile hangi numaralı rengi kullanacağınızı belirtmelisiniz. Son şeklimiz elips. Neden daire değil de elips? Daire, X ve Y yönündeki yarıçapları eşit olan bir elipstir. Dolayısıyla elips için bir rutin yazdığınızda, otomatik olarak daire çizmeniz de sağlanmış olur. Elips içinde üç altprogramımız var. Elips çizmek, silmek ve multicolor'da elips çizmek için. Elipsin geometrik denklemi şu şekildedir: Y = B*SQR (1-X^2/A^2). Eğer dikkat ederseniz, bir elipsin sağ üst, sağ alt, sol üst ve sol alt parçalarının birbirlerine simetrik olduğunu görürsünüz. Yani biz elipsin sadece bir çeyreğini hesaplayarak tüm elipsi çizebiliriz. Zaten yavaş olan BASIC programı için önemli bir kazanç. 50600-50670 arasında, XR ve YR ile iki doğrultudaki yarıçap uzunlukları belirlenmiş ve (XM, YM) ile merkezinin koordinatı verilmiş elipsi 320*200 ekranında çizen rutini görmektesiniz. Bu rutinde elipsin bir çeyreği hesaplanmakta ve yeni hesaplanan nokta ile eski nokta arasına çizgi çizilerek kapalı bir elips çizilmektedir. Eğer elips tamamen ekrana sığmıyorsa, sığan kısmı çizilecektir. 50700-50770 arasında aynı işlemler elips silmek için yapılıyor. Çizgi çizmek yerine çizgi silmek için kullanılan rutin çağrılmakta. 52600-52670 arası ise multicolor ekranda RR ile belirtilen renkte bir elips çizmekte. Tek farkı, çok renkli çizgi çizme rutinini çağırması. İşte bu kadar. Artık bu rutinleri kullanarak, hatta onları daha iyi bir hale getirerek kendi grafik programlarınızı yaratabilirsiniz. Gene de BASIC'in yavaş kalacağını, makina dilinin veya SIMONS' BASIC'in daha kullanışlı olacağını unutmayın. Gelecek aya kadar hoşçakalın...

Bilgisayarın bilgisayar olmasını sağlayan en önemli faktör bilgilerin eksiksiz ve sorunsuz bir program olarak çalışmasını sağlayan yazılımıdır. İşletim sistemleri bilgisayar adı verilen elektronik kütlenin ne yapması, nasıl yapması gerektiğini, o kütlenin anlayacağı dilde anlatan programlardır. İşletim sistemlerinin gelişmesini ve yaygınlaşmasını sağlayan mikro işlemcilerin en büyük özelliği, kendilerine özgü dilin kolay anlaşılabilir ve programlanabilir olmasıdır. C-64'ün kullandığı 6502 uyumlu 6510 bu alanda en popüler olanıdır. C-64 işletim sistemi aslında yeni bir sistem değildir. Yeni C-64'ten önce tasarlanmış, denenmiş bir sistemdir. Commodore firmasının C-64'ten önce çıkardığı ve C-64'ten oldukça basit bir yapıya sahip VIC-20 tasarlanırken KERNAL adı verilen sistem kullanıldı. C-64 gelişmiş bir model olmasına karşılık bu sistemi olduğu gibi kullandı. Bu nasıl gerçekleşti? Kernal sisteminde bir işletim sisteminin en önemli rutinleri, sıçrama tablosu (JUMP TABLE) olarak adlandırılan tabloyla adreslendirildi. Bu tablo $FF81'den $FFF6 adresine kadar uzanır. Böylece yeni bir model tasarlanırken gelişme sadece bu işlevleri yerine getiren rutinde ve tablodaki adreslerde olmakta, tablonun konumu aynı kalmakta, bu da yeni bir tasarımı oldukça kolaylaştırmaktadır. Bunun örneğini C-16 ve Plus-4 Kernal sisteminde de görebiliriz. Buna ilginç bir örnek VIC-20, C-64, C-16 ve Plus-4 program-