Bir Makinede Üç Bilgisayar: Commodore 128

Commodora 128'in piyasaya çıkması yalnızca 6510 programcılarını (C 64'le program yapanlar) sevindiren bir olay olmadı. Çünkü bu makinede ek olarak bir de Z80 mikro işlemci bulunuyor. Bu mikro işlemci, C 128'deki 8502 işlemcisinin de dahil edilebileceği 65xx-ailesininkinden çok daha kullanışlı. Üstelik 280, 128'de 4 MHz'lik bir hıza sahip. Bu sayede ve CP/M disketlerini de okuyabilen yeni 1571 disket sürücüsünün yardımıyla, Wordstar gibi CP/M programları nihayet ehven fiyatlı bir bilgisayarda kullanılabilir hale geldi. PC128'in Commodore 64'ten ayrıldığı “hız”a ilişkin noktalara bir göz atalım. PC128'in 8502-işlemcisi, seçime bağlı olarak iki farklı frekansa ayarlanabiliyor: 1 MHz ve 2 MHz. Bu frekanslardan birini seçmek için yapılması gereken şey, bir BASIC programı içinde, yalnızca SLOW (4 MHZ) veya FAST (2 MHZ) komutunu vermek,

SLOW ve FAST

SLOW modunda programlar, Commodore 64'tekinden (aslında o da MHZ) biraz daha yavaş işliyor. Bunun nedeni, PC128'in 128 KByte'lık belleğinin yönetiminin daha karmaşık olmasıdır. Ama bu yavaşlık, PC4128'i miskin bir bilgisayar olarak lanetlememize neden olmamalı, çünkü bunu telafi edecek çok etkin BASIC komuftları var. Bu komutlar, 128'i 64'ten çok daha hızlı hale getirebiliyor. Çünkü artık, programlama sırasında dünyanın zamanını “yiyen” bir sürü POKE-,PEEK- ve SYSkomutlarıyla uğraşmak gerekmiyor. Örneğin grafik modu tek bir makine programı yerine, POKE'- larla donatıldığında, işlemci çok daha fazla sayıda gerek duymakta. Çünkü her PO-KE komutu, yerine getirilmeden önce BASIC-çevirici tarafından ta- | nınmak ve kabul edilmek durumunda.

C128'den bir ekran görüntüsü (solda üs

C128 bilgisayarla

Müzik yapma konusunda da oldukça yetenekli (üstte sağda);

FAST modunda ise her program iki katı hızlı olabiliyor. Fakat bunun bir kısıtlılığı var, o da bir renkli ya da siyah-beyaz monitörün bulunmasının zorunluluğu.

C64'ün Video-İnterface-Chip'i (VİIC) SLOW modunda yeterli olabiliyorken, FAST modunda daha farklı, daha hızlı bir yapı taşının kullanılması gerekiyor. Çünkü C64'ün VİC'i en fazla 1 MHZz'lik bir frekans sağlayabiliyor. Yeni Video denetimcisinin adı 8563; üstlendiği görev ise, FAST modunda '

ve 80-kolon modunda resim üretimi. VİC'den farklı olarak (bu bir

Composite-Video sinyali üretir) 8563, yalnızca standart bir kırmızıyeşil:mavi (BM uyumlu) ve Luminance (parlaklık) sinyali üretmekte, Kırmızı-yeşil-mavi normu (RGB), her temel renk için kendine özgü bir parlaklık sinyali öngörür. Bu sayede, kompozit norma oranla çok daha iyi bir resim çözümlemesi mümkün olur. Kompozit normu, biri renk, diğeri ise parlaklık olmak üzere yalnızca iki sinyal tanır.

Kullanılan bu iki normun varlığı, kullanıcı açısından iki monitörün varlığını gerekli kılıyor. SLOW ve C 64 modları için bir kompozit monitör (zorunluluk durumunda bir televizyon da yeterli olabilir) ve FAST ve 80 karakter modları için de bir RGB (kırmızı-yeşil-mavi) veya (parlaklık girişi olan) siyah-beyaz monitör gerekiyor. Commodore 128 için geliştirilmiş olan 1904 monitör, bir düğmeyle RGB'den kompozite dönüştürülebiliyor ve böylece sorun tek bir monitörle hallediliyor.

40/80 Karakter Gösterimi ve Grafik

Bütün PC'lerde alışılmış olduğu gibi, 128 de 80 karakter gösterebiliyor. Fakat bunu ancak RGB monitörde -SLOW veya FAST modundan bağımsız olarak- gerçekleştirebiliyor.

Önemli sayılabilecek bir eksiklik, FAST modunda veya 80 karakter gösteriminde grafik modunun bulunmaması. Bu amaçla kullanılan Video-denetimcisi, 16 renkli olarak 640 x 200 noktalık çözümlemeyle yalnızca 80 karakterlik satır oluşturabiliyor. Bu durumda bir karakter 8 x8 noktadan oluşuyor, bu hesaba satır arası ve karakter araları da dahil. Bu çözümlemede (640x200), yüksek çözümlemeli grafikler, sprite'lar (bunlar, bildiğiniz gibi, sizin tanımlayabildiğiniz hareketli şekiller) ve iki renkli harfler olanaksız. Video denetimcisi, Video-İnterface- Chıp (VİC)'teki gibi kendine özgü bir grafik işlemciye sahip olmadığından, DRAW, CIRCLE ve BOX gibi komutlar da 80 karakter modunda kullanılamıyor. Yani 2 MHZ'- de bir grafik modu işlemiyor.

40 karakter ve SLOW modlarında, yönetimi C 64'ten tanıdığımız VİC ele alıyor. Commodore 128 için daha da geliştirilen bu çipin adı 8564 olmuş durumda. Test yapılırken aynı anda bağlı olan iki monitörle çalışıldı. Bunların biri RGB-renkli monitör, diğeri ise bir Commodore 1701. 80 karakterlik renkli monitörde grafik komutlarını programlamak ve İşletmek ile 1701'de (kompozit monitör) grafik yapıyı incelemek oldukça zor. 80 karakter modundan grafik moduna geçildiğinde, 80 karakterin gösterimi için kullanılan 8563 video-denetimcisi kapanıyor ve bu iş için 8564 VIC grafik işlemcisiyle birlikte devreye giriyor. Daha sonra tüm resim çıkışları kompozit çıkışına gidiyor. Fakat 8563 video denetimcisi artık işlemci tarafından yönetilmediğinden ve son gönderilmiş olan RGB resim de silinmemiş olduğundan, RGB monitörde 80 karakter metin görüntüsü hâlâ görülebiliyor.

C128'in sağ yandan görünümü. Akım girişi, açma/kapama düğmesi, reset tuşu, joystick porfları.

İkisi Birarada

Yazının başında da söylediğimiz gibi Commodore 128, iki, hatta üç bilgisayardan oluşuyor. Bir C 64, bir PC 128 ve CP/M bilgisayar. Bu üç işletim türünü iki işlemci sağlıyor: Bir 8502 ve bir 780. 8502, C 64'teki 6510 ile tümüyle uyumlu, ama 2 MHz ile çalışabiliyor. Z80 için ise fazla bir şey söylemek gereksiz. Uzun yıllardan beri birçok büyük ve küçük bilgisayarda, hatta ve büyük CP/M makinelerinde kullanılan bir işlemci bu. Commodore 128'i açtığımızda, Z80 kendini gösteriyor. Hemen CP/M sistemini disketten boot etmeye (yüklemeye ve başlatmaya) çalışıyor. Herhangi bir komut verilmesi gerekmeden disket sürücü çalışmaya başlıyor ve programı yüklemeyi deniyor. Eğer karşılık gelen bir program bulamazsa, Z80 8502 işlemcisini harekete geçiriyor ve 128 modu kendiliğinden açılıyor.

Ayrılmış Veri

Yolları

İşletim sisteminde de öngörülmüş olduğu gibi, her iki işlemci (Z80 ve 8502), birbiriyle haberleşebiliyor. Eğer belirli G/Ç işlemleri için CP/M'in BIOS-(İşletim sistemi-) komutları yeterli olmazsa, 8502, bu görevi üstleniyor. Yazının ileriki bölümlerinde Z80 ve CP/M işletim sistemi hakkında daha geniş bilgi bulabileceksiniz. Z80 ve 8502, 128'de adres ve veri hatlarına ayrılıyorlar. Diğer elemanlara göre daha süratli olduğundan, bir Interface Z80'in hızını sisteme uyduruyor; bu da tabii ki Z80'in süratini düşürüyor. Bu Interface, Z80'in veri yoluna erişiminde, aslında çalışabildiği 4

MHz yerine yalnızca 2 MHz ile çalışıyor. Bunun anlamı ise şu: CP/M programları, 128'de, 4 MHz'lik bir CP/M bilgisayarındakinden daha yavaş çalışıyor.

Daha Hızlı 8502

8502'nin C64'teki 6510'dan en önemli farkını, hızı oluşturuyor. 6510 ancak 1 MHz'e kadarki frekansları kaldırabiliyor; halbuki 8502'de bu sınır 2 MHz. Yani 8502, 6510'un iki katı hızlı çalışabiliyor. Dolayısıyla her program, ister BASIC'te, isterse Makine dilinde yazılmış olsun, 6510'dakinden iki kat hızlı işletilebiliyor.

Commodore 128- Grafik Hızlandırıcı mı?

Bu soruya “Hem evet, hem hayır” şeklinde cevap verilebilir. Bir yandan, daha önce de belirttiğimiz gibi, FAST modunda VIC kendini kapatıyor. Bu durumda ekran, aynen Datasette'den yükleme yapılıyormuş gibi oluyor. Diğer yandan tüm grafik komutları bellekte yerine getiriliyor ve SLOW moduna geri dönüldüğünde tamamlanmış grafik ekranda görülebiliyor. Bu olay, yalnızca bir televizyonunuz veya 1701/1702 kompozit monitörünüz varsa ve buna rağmen 2 MHz ile çalışmak istiyorsanız da geçerli. Her ekran çıkışından önce SLOW komutuyla 1 MHz moduna geçmeniz gerekiyor, çünkü VIC 2 MHz'de kendini kapatıyor. Ancak bu geçişten sonra VIC, yeniden televizyonunuzu veya 1701/1702 monitörünüzü yönetebilir hale geliyor. Çıkış gerçekleştikten sonra, FAST komutuyla yeniden 2 MHz'e geçebilirsiniz. Program yine iki kat hızlı çalışmaya başlayacaktır. Bunun için gereken bir diğer koşul, kompozit ekranın kapalı olmasıdır; çünkü 2 MHz'de “basit” RGB video denetleyicisi yine resmi üretecektir.

128'in platinine bir bakış.

Bellek Haritası

Şema 1, olası işletim türlerinin bellek organizasyonunu gösteriyor. C 64 modundaki bellek bölümlenmesi, C 64'ün bellek haritasıyla tamamen aynı: $A000'dan $BFFF'e kadar olan alanda BASIC ROM'u, $E000'dan $FFFF'e kadar olan alanda ise 40 karakter yazıcısı ile Kernal ROM bulunuyor. $D000'dan $DFFF'e kadar olan alan G/Ç elemanlarını (CIA ve

VIA) ve karakter ROM'u kapsıyor. Her iki ROM alanı, yani BASIC ve C 64 modunun işletim sistemi, 128'de 16 KByte'lık bir ROM elemanına yerleştirilmiş durumda. C 64'te ise durum bunun tam tersi. BASIC ve işletim sistemi, ayrı ayrı 8 KByte'lık ROM'larda bulunuyor. 128 modunda dağılım daha da karmaşık. Çünkü çok daha kapsamlı bir BASIC'in (7.0 versiyonu) ve ek bir 80 karakter üreticisinin varlığı söz konusu. BASIC ROM'u her biri 16 KByte'lık iki kısma ayrılıyor: Bellek haritasında BASIC 4. kısım ve 2. kısım (şema 1 ve 2). Birinci kısım $4000 ila $7FFF adresleri arasında, ikinci kısım ise $8000 ila $BFFF arasında yer alıyor. BASIC ROM, toplam olarak 32 KByte. Bir karşılaştırma yapılacak olursa, C 64'ün 2.0 BASIC versiyonu yalnızca 8 KByte uzunluğunda. 128'in işletim sistemi (Kernal), aynen C 64'te olduğu gibi, $E000 ve $FFFF adresleri arasında bulunuyor. İşletim sistemi bir monitör programı içeriyor. 40/80 karakter üreticisinin rutinleri, $C000'dan $CFFF'e kadar olan alanda bulunuyor.

BASIC programları için 128'de C 64'e göre 81.5 KByte daha fazla yer var. Bunu sağlayan, 64 KByte'lık iki RAM-Bank'ı arasında gerçekleştirilen Bank-Switching.

Bank-Switching

Nedir?

Tüm 65xx'lerde ve 8502'de olduğu gibi, 16 adres hattına sahip bir işlemciyle, 2 üzeri 16=65536 bellek hücresinden daha fazla belleği (64 KByte) doğrudan adreslemek mümkün değildir. Eğer 64 KByte'dan daha çok belleğe sahip olmak istenirse, tek bir olasılık vardır. O da, Bank-Switching adı verilen farklı bellek yönetim sistemini kullanmaktır. Bank-Switching, çalışılan bellek alanını değiştirme gibi bir anlam taşır. Commodore 128'in 128 KByte'lık belleği, bu amaçla her biri 64 KByte'lık iki kısma ayrılır. Bellek yönetim birimi (Memory Management Unit-MMU) olarak adlandırılan birim, işlemcinin 64 KByte'lık bellek bankalarını dönüşlü olarak “görmesini” sağlar. Adından da anlaşıldığı gibi, bu devre bellek adreslenmesini yönetir. MMU, işlemcinin hangi RAM-Bank'a bakması gerektiğini, yani okuma/yazma erişimlerinin belleğin neresinde gerçekleşmesi gerektiğini belirler. Aslında görevi bununla sınırlı değildir. MMU, ROM konfigürasyonunu da belirler, yani işlemciye komutları hangi ROM'dan -Kernal'dan veya bir ek kartın EPROM'undan- alacağını bildirir. MMU, üzerinde hiçbir değişiklik yapılamayacak ölü bir eleman değildir. Aksine, bu elemanla gerçekleştirilebilecek bir sürü fikir akla gelmektedir. Örneğin, birden fazla Bank'a, farklı Bank'larda bulunan birden çok program bölünen, Interrupt tarafından yönetilen bir kilit, MMU ile gerçekleştirilebilir. Commodore 128'de BASIC belleği ikiye bölünmüş olarak yönetilir. 0 RAM-Bank'ı (64 KByte) BASIC programlarına, 1 RAM-Bank'ı BASIC değişkenlerine ayrılmıştır. BASIC programcısı açısından bunun anlamı, program ve değişkenler için her biri yaklaşık 60'ar KByte'lık belleğin bulunmasıdır.

bir RGB ve bir kompozit monitörle. Solda program, sağda ise bununla üretilen grafik.

(DEVAM EDECEK)

55 000
OPEN ENİ“
B$t
VA

Bİ Aİ

Başlangıç Adresini

Bulmak:

Aşağıdaki yordam herhangi bir programın başlangıç adresini bulmada kullanılır. Bu genellikle makine dilindeki bir programın SYS kodunu bulmak için çok kullanışlıdır.

55000 INPUT
55001
8,A3,B3:CLOSE8
- 55002 A-ASC(AŞ 4
B- ASC(B34
55003 PRINT “BAŞLANGIÇ
ADRESİ: ”; A*2564B

PRINT PEEK(43)+256*PEEK(44) ile BASIC programınızın hangi adresten başladığını öğrenebilirsiniz.

PRINT 4 size değişkenlerin saklanmaya başlandığı ilk adresi verecektir.

PRINT CHR$(PEEK(69)AND 127); CHR$(PEEK(70)AND 127) verdiğinizde, bilgisayarın en son kullandığı değişkenin adını öğrenirsiniz.

PRINT PEEK(55)+256*PEEK(56) ile, BASIC programı ve değişkenler için ayrılan boş içbellek kısmından sonra gelen ilk byte'ın adresini öğrenirsiniz.

Metinlere yazı düzeni vermek: Çoğu zaman metinleri ortalamak veya sağa dayalı yazmak konusunda sorunlarla karşılaşırız. Aşağıdaki kısa BASIC satırları bu sorunu halletmekte size yardımcı olacak: Ortalama: FOR I=1 TO (40-LEN(A$))/2:PRINT " ";:NEXT:PRINT A$ Sağa dayalı yazma: FOR I=1 TO 40-LEN(A$):PRINT " ";:NEXT:PRINT A$

A$ değişkeni, her defasında yazı düzeni verilecek satırı içermelidir.

Başlangıç adresini bulmanın diğer bir yolu ise şu:

10 A$- “program adı”
20 OPEN 1,8,0,A$4 “,P,R”
30 GET 1,B$:CLOSE |
40 PRINT ASC(AŞ 4 CHR$(0)) 4 4
Eğer bitiş adresini merak ederseniz, LOAD “prog-
ram adı”, 8,1 ile yükleyin ve PRINT PEEK(176) *
256*PEEK(177) ile programın son byte'ından sonra
gelen adresi öğrenin.

Eğer bir READ komutunun hemen arkasına PRINT PEEK(63)+256*PEEK(64) yazarsanız, en son okunan verinin okunduğu DATA satırının numarasını görürsünüz.

Eğer herhangi bir BASIC programı satırında PRINT PEEK(57)+256*PEEK(58) olursa, o satırın numarasını ekranda görürsünüz.

POKE 775,200 yaptıktan sonra programınızı LIST edemezsiniz. POKE 775,167 ile tekrar normale dönülür.