DİKKATLİ BİR BİLGİSAYAR KULLANICISINA TAVSİYELER

NE YAPMALI:

- Talimatları okuyun. - Arkadaşlarınıza ve kullanıcı gruplara akıl danışın. - Disket verilerinizi sık sık yedekleyin. - Disketleri zarflar içinde tutun ve kapalı kutularda saklayın. - Aksamınızı kullanmadığınız zamanlarda tozlanmaması için örtülü tutun. - Disket sürücünüzü (özellikle sigara içiyorsanız) sık sık temizleyin. - Aksamınızın çevresinde mümkün olduğu kadar çok hava akışı olsun. - Aksamınıza ya da disketinize el sürmeden önce, özellikle nem oranının düşük olduğu günlerde, kendinizi topraklayın (metal bir şeye dokunun). - Aksamınızı hoş tutun. - Bilgisayarınızı ve bütün çevresel gereçleri anahtarlı bir power strip'e bağlayın. - Kullanılmadığı zaman özellikle de fırtınalı günlerde fişten çıkarın.

- Regülatör kullanın. - Sisteminizi şu sırayla teker teker açın: monitör, bilgisayar, disket sürücüsü ve printer. Kapatırken de tam tersi bir sırayı izleyin. - Herhangi bir çevresel gereci devreye sokarken veya devreden çıkarırken, bütün aksamınızı kapatın (mesela seri kabloları disket sürücüsünden diğerine taşırken). Özellikle de bir joystick ya da bir mouse'u devreye sokarken veya devreden çıkarırken bunu mutlaka yapmanız gerekir.

NE YAPMAMALI:

- Paniğe kapılmayın. Çoğu sorun ne ciddidir, ne de süreklidir. - Disket sürücünüzün yakınında sigara içmeyin, yemek pişirmeyin. - Sisteminizin yakınında yemek yemeyin, bir şeyler içmeyin ve kimyasal maddeler kullanmayın. - Cereyan varken kabloları ve kartuşları çıkarıp takmayın.

- Joystick'in, kartuşun, kasetin veya user port'un açık bağlantılarına el sürmeyin. - Cereyan varken bağlantılara herhangi bir şeyle dokunmayın. - Aksamınızın hava vantilatörlerini bloke etmeyin. - Kefe koruyucusunu takmadan disket sürücünüzü hareket ettirmeyin. - Disketlerinizdeki parlak maddeye el sürmeyin. - Disket kapaklarının üstüne sivri uçlu kalemlerle yazmayın. - Disketlerinizi eğip bükmeyin ya da basınç uygulamayın. - Disketlerinizi, televizyonun, elektrik motorunun ya da telefon zilinin yanında bırakmayın. - Disket sürücünüz ya da monitörünüz üzerine disket koymayın. - Disketleri mıknatısların ya da manyetik bir alan yaratabilecek demir nesnelerin çevresinde bırakmayın.

PROGRAM DIŞI HATA MESAJLARI

FİLE OPEN. Anlamı: Zaten açık olan bir dosya için, yeniden OPEN yazmışsınız. Mesela dosya 15 zaten açıkken, OPEN 15, 8, 15 yazmışsınız.

Yapılacak şey: CLOSE veya dosya numarasını yazın, mesela CLOSE 15 gibi. FİLE NOT OPEN. Anlamı: Daha dosyayı açmadan, o dosyaya bir şey yazmak istemişsiniz. Mesela OPEN 15, 8, 15 yazmadan önce PRINT #15, A$ yazmışsınız. Yapılacak şey: Dosyada herhangi bir şey yapmadan önce bir OPEN komutu yazın. FİLE NOT FOUND. Anlamı: Bilgisayar aradığınız program ya da veri dosyasını bulamıyor. Ya sürücüde yanlış disket var, ya da dosya adını yanlış yazmışsınız. Dosya adındaki her harf, boşluk ve özel karakterin fihristtekinin tamamen aynısı olması gerekir. Yapılacak şey: Fihriste bakın ve dosyanın tam adını not edin ve doğru bir biçimde yazın. Ayrıca özel işaret kestirmeleri de kullanabilirsiniz. Eğer dosya adını doğru yazdıysanız ve doğru disket takılıysa, sürücü kafasını yerleştirmek için ilk değerleme komutunu deneyin. DEVİCE NOT PRESENT. Anlamı: Bilgisayar disket sürücüsünü, kaset sürücüsünü veya printeri bulamıyor. Ya alet numarasını yanlış yazmışsınız, mesela disket sürücünüz 8 iken LOAD 9 yazmışsınız, ya da bilgisayarla çevresel gereçler arasında bir bağlantı kopukluğu var. Yapılacak şey: Komutu doğru yazın, sistem elektriğini kapatın ve bağlantıları kontrol edin; ya da çevresel gereci açın. SYNTAX ERROR. Anlamı: Bilgisayar ne dediğinizi anlamadı. Ya komutta bir imlâ hatası yaptınız ya da yanlış komut formatı (sentaks) kullandınız. Mesela LOAD “*” 8 yazacak yerde LOAD2 “*” 8 yazmış olabilirsiniz. TYPE MISMATCH. Anlamı: İşaretleri karıştırmışsınız. Bir harf yazmanız gerekirken bir numara yazmışsınız, ya da tam tersi. Yapılacak şey: Sentaksı kontrol edin. 0 yerine O harfi mi yazdınız? Ya da 1 yerine | mı yazdınız? LOAD ERROR. Anlamı: Bilgisayar yüklemeye çalıştığı verilerden hoşnut değil. İç hata kontrolü sonunda yanlış yanıt çıkmış.

Yapılacak şey: Önem sırasıyla 1) Bir daha deneyin 2) İlk değerleme komutunu yazın 3) Disket sürücünüzü kapatın, birkaç saniye bekleyip yeniden açın

(Not: Bu işlem bilgisayarınızı kapatabilir) 4) Sürücüyü temizleyin (Özellikle teyp ise) 5) Ayarını kontrol ettirin. Yükleme hatası bazen fazla ısınma ya da geçici bir elektrik probleminden doğabilir. Ayrıca, eğer sadece bir diskte ya da bir programda yükleme hataları ortaya çıkıyorsa yazılımda bir arıza olabilir. Yukarıda saydığımız 4. ve 5. adımlar ancak sorun sık sık ve birden fazla sayıda diskte çıkıyorsa atılmalıdır. Ayrıca: Sorun: Disketten okuyamıyorsanız. Yapılacak şey: Sürücüde bir disket olup olmadığına, disketin doğru yüzünün üstte olup olmadığına ve sürücü kapağının kapalı olup olmadığına bakın. Ayrıca, disketi çıkarıp sürücüye yeniden yerleştirmeyi deneyin. Sorun: Diskete yazamıyorsanız. Yapılacak şey: Disketin üstünde yazıma karşı korumak için bir şey olup olmadığına bakın, varsa koparın. Sorun: Programı yüklüyor ve RUN yazıyorsunuz, size gelen tek yanıt READY işareti. Yapılacak şey: Bu programın sürücü numarasından sonra, 1'le yüklenip yüklenmeyeceğine bakın. Makine dili programlarında hafızaya uygun bir biçimde yerleştirmek için LOAD “dosya adı”, 8, 1 biçimi geçerli olabilir.

İftah olmaz bir bilgisayar kurcalayıcısı mısınız? Bir oyun programını yazdıktan sonra, oynamaya başlamaktansa programı değiştirmeyi mi tercih edersiniz? Bilgisayarınızı yükledikten sonra tam istediğiniz konfigürasyonu sağlamak için bir sürü utility doldurma alışkanlığınız var mı? Programları tepeden tırnağa elden geçirmedikçe içinizin rahat etmediği olur mu? Eğer bu sorulardan herhangi birine evet cevabı veriyorsanız, sizde bir kurcalayıcılık var demektir. “Kurcalama” deyimi kimi iyi kimi kötü birkaç anlam birden taşıyor. Biz burada “yazılım deşen”, ya da “bit çevirenler”den bahsedeceğiz. Modemler aracılığıyla Stratejik Hava Kumandanlığı'nın Savunma İletişim Sistemi'ne nasıl girildiğini, veya en yeni telif koruma sistemlerini etkisiz bırakma yöntemlerini anlatmak niyetinde değiliz. Kendimize daha mütevazi hedefler koyuyoruz; fakat kurcalamacılık ruhuna da sadık kalıyoruz. Bu ay, hafızaya bir makine dili utility'si sokmaya yarayan bir BASIC “yükleme” programıyla başlıyoruz. Makine dili monitörü aracılığıyla bu utility'i hafızanın içinde inceleyeceğiz. Utility'i parçalayıp nasıl çalıştığına bakacağız. Ve son olarak da, utility'nin hafıza içindeki konumunun nasıl değiştirilebileceğini göreceğiz. Neden mi yapıyoruz bütün bunları? İçimizden geldiği için! YÜKLEYİCİ Bugüne kadar bir sürü makine dili yükleme programı görmüşsünüzdür. BASIC'le yazılırlar ve büyük ölçüde ondalık veya onaltılık sayılarla dolu DATA cümlelerinden oluşurlar. Bu sayıların ne anlama geldiğini hiç merak etmemiş miydiniz? Bunu tam olarak anlamanız için, assembly dili konusunda biraz da olsa bilgi sahibi olmanız gerekiyor. Ne yazık ki, bu makalede tek bir dersle assembly dilini öğretmemiz mümkün değil. Gene de, assembly dili uzmanı olmadan da bu tartışmayı izleyebilirsiniz. Burada assembly dilinde yazılmış bir programda nelere dikkat etmeniz gerektiğini ve bazı cevaplara nasıl ulaşacağınızı anlatacağım. (Başında $ olan sayılar onaltılık sayılar, geri kalanlar ise ondalık sayılardır.) 1040. satırdaki CK bütün verilerin toplamını hesaplayıp bir “kontrol-toplamı” (check sum) oluşturur. Son veri değeri okunduktan sonra,

1050. satır, bir byte B verisini hafızada M konumu- — kontrol-toplamı gerçek değerle karna getirir. Başlangıçta, M 1000. satırda 4892'dir. 1100. — şılaştırılarak DATA cümlelerinin yasatırdan okunan ilk byte'ı ise $4C'dir. (Başında $ olan — Zılması sırasında hata yapılıp yapıl-

DALE RUPERT madığı kontrol edilir. Eğer hata yoksa, 1090. satır işleme girer ve her şeyin yolunda olduğunu bildirir. Bu noktaya kadar, 4892'den başlayarak hafızaya 32 byte veri girmiş bulunmaktadır. Bu veriler, BASIC'den alabileceğiniz bir makine dili utility'sidir, belirli sayıda özdeş karakteri ekranda yazmaya yarar.

Makine dilindeki hizmet

SİCİM utility'si (hızı hariç) şu BASIC rutinine eşdeğerdir:

10 CH-65
20 FOR J-1 TON
30 PRİNT CHRS (CH);
40 NEXT J

CH, yazılacak karakterin ASCII

programlarını nasıl kırabiliriz?

değeri, N ise karakterin yazılma adedidir. Yazmayı FOR-NEXT döngüsü gerçekleştirir. Örneğimizde, ASCII değeri 65 olan “A” harfi ekranda 500 kere yazılacaktır. Sicim Yükleyici programı doğru bir şekilde işletildikten sonra, hafızada 4892'den başlayan bir makine dili programı bırakacaktır. C-128 BASIC

SİC programında makine dili pro: şu cümlelerle işleme koyabilirsiniz:

10 CH-65 :
20 INT (N/256)
30 LSB — N-256/MSB
40 SYS 4892, CH, LSB, MSB

20 ve 30 numaralı satırlar, maksimumu 65535 olan N değerini her biri 0 ile 255 (dahil) arasında değişen tek byte'lık bir niceliğe dönüştürür. CH değişkeni de N kere yazılacak karakterin ASCII kodunu depolar. SYS komutu bilgisayarın 4892'ye atlayıp, oradaki makine dili programını işleme koymasını sağlar. SYS komutunun ardından gelen ilk parametre, makine dili rutininin başlama adresini (4892'yi) temsil etmektedir. Onu izleyen üç parametre ise, makine dili rutini işleme konmadan önce işlemcinin A sicil, X sicil ve Y sicilinde depolanması gerekli değerlerdir. Bütün bu konulara yabancı olduğunuzu varsayarak, önce başlama adreslerinden ve sicillerden biraz söz edelim. BASIC'te, bir programın dizisel akışını değiştirmek için GOTO veya GOSUB komutlarını kullanırız. Hangi komutu kastettiğimizi ise satır numarasıyla belirtiriz. Yani, bilgisayar GOTO 100 cümlesini işleme koyduğunda, bir sonraki komutu almak için 100. satıra atlar. 100. satırın bilgisayar hafızasında nerede olduğunu bilmeyiz; zaten buna gerek de yoktur. Hafızada 100. satırın yerini bulmak BASIC'in görevleri arasındadır. Nitekim, BASIC'e “yüksek düzeyli dil” denmesinin nedeni de, programcıyı hafızada neyin nerede depolandığını takip etmek gibi basit şeylerden kurtarmasıdır. SYS komutu, düşük düzeyde bir dile inmemize olanak verir. BASIC SYS 4892'yi görünce bir sonraki komut için mikroişlemciyi hafızada 4892 adresine atlatır. İşlemci orada PRINT veya GOTO gibi BASIC cümleleri değil, BASIC çeviricisi programına başvurmadan, kendi başına işleme koyabileceği komutlar bulunacaktır. Birazdan, bu konuda örnekler göreceğiz. SYS komutunun bilgisayar 4892'ye sapmadan önce A, X ve Y sicillerine bazı değerler koyduğunu görmüştük. Siciller, tıpkı el kalkülatörlerindeki hafıza işlevi gibi, mikroişlemci içinde okuma-yazma depolarıdır. C-64'te, BASIC programının SYS komutunu işleme koymadan önce A, X ve Y sicillerinin değerlerini hafızada 780, 781 ve 782 konumlarına POKE etmesi gerekir (Bk. C-64 Programcısının Rehberi, s. 318). C-128'de, kayıt değerleri SYS komutuna dahildir.

MAKİNE DİLİ

Makine diline girmeden önce, size bir akıl verelim: C-64 veya C-128 Programcısının Rehberi'nde (kısaca, PRG'de) 5. bölümü bir okuyun. Bu bölüm assembly dilini ve bilgisayarın iç işleyişlerini gayet güzel özetlemektedir. PRG'ler kitap olarak pek net ve tertipli sayılmasalar da, bir sürü temel ve yararlı bilgi içerirler, bir PRG'nız yoksa, gerçek bir kurcalayıcı sayılmazsınız. Kısacası...

Makine dilinin herhalde en zor tarafları (gerek ikili, gerekse onaltılı sayı sistemi ile) adresleme tarzlarıdır. Assembler programı makine dili programlarını yazmanın içerdiği matematiksel yükü biraz hafifletir, ama tamamen ortadan kaldırmaz. Adresleme tarzlarına gelince, yalnız ve yalnız bol zaman ve pratikle tam olarak öğrenebilirsiniz onları. İsimlerini boş verin. Önemli olan işlevleridir. LDA ($3A,X)'e “endeksli dolaylı adresleme” dendiğini bilmek işinize yaramaz, ama bu komut sonucunda A sicilinin tam olarak nereden yüklendiğini bilmek her şeyi değiştirir. Eğer C-64 kullanıyorsanız, C-128'deki HEX komutunun bir benzerini oluşturmak için 1030. satırı GOSUB 2050 yapmanız gerekli. Ayrıca 64'te 2000'de başlayan satırların eklenmesi gerektiğini de unutmayın. 64'te işe başlamak için: 1. Sicim Yükleyici'yi yukarıda anlatıldığı gibi yükleyip uyarlayın. 2. RUN yazarak Sicim Yükleyici'yi işleme koyun. 3. Makine dili monitör programınızı yükleyip geçin. SİCİM utility'si C-64'te, şimdi bulunduğu adres olan 4892'de genellikle aksayabilir. Çünkü, BASIC programları bazen araya karışmaktadır. Bu tartışmada yalnızca programın hafıza içindeki durumuna bakacak, işleme koymaya çalışmayacağız. Programı C-64'te de kullanılabilecek biçimde harekete geçirme çarelerine ise daha ileride bir göz atarız. C-128'de, Sicim Yükle! yazıp sonra da girerek (eğer değişiklik yapmadıysanız, F8'e basmanız gerekli), SİCİM utility'sini incelemeye başlayabilirsiniz. Nereden başlayacağız? Rutinin hafızaya 4892'den ($131C) itibaren yüklendiğini biliyoruz. Bu konumdan disassemble işlemine başlayalım. Önce D 131C (ya da monitörünüzde geçerli olan disassemble komutunu) yazın. SİCİM rutinin ilk komutları

JMP $1324
EOR ($48,X)
91
EOR $E021, Y

O meçhul 299 komutu ilk bakışta aklınızı karıştırabilir. Bu program gerçekten işleme konabilir midir? Bu rutinin ne işe yarayacağı konusunda ilk ipucunu JMP komutundan alıyoruz. Bu komutla, işlemci koşulsuz olarak adres $1324'e atlamaktadır. Böylece EOR (dışlayıcı-OR) komutlarıyla meçhul komut açıklığa kavuşuyor. O bitler muhtemelen gerçekten komut değil de, yalnızca veri değerleridir. Bilgisayar onları işleme koymaz. Doğruca üzerlerinden atlar. Bu varsayımı doğrulamadan önce disassembly işlemine devam edelim. JMP komutu $1324'e gitmiş olduğu için, bu sefer parçalamaya oradan başlıyoruz. Şimdi karşımızdaki gerçek bir programa benziyor. Bunu nasıl anlayabiliriz? Tecrübeli olmak işe yarar tabii, ama her şeyden önce, burada meçhul bit yok. Ayrıca, adres $FFD2'ye yönelik bir takım JSR talimatları görülüyor. Bu adreste, programın içkin bir parçası olan Kernal rutinlerinden biri bulunuyor. Kernal rutinleri her an kullanıma hazır makine dili rutinlerinden oluşur ve makine dili programlarında sıkça geçer. Şimdi, önce 97. sayfadaki Ekran (Dump?) 1'e bir göz atın. Bu tabloda, adres $133B'de bir RTS komutu görüyoruz. RTS komutu, bir altrutinin sonundaki BASIC RETURN cümlesine eşdeğerdir. Bunun SİCİM programının en son komutu olması da mümkündür.

Programın gerçekten sonuna gelip gelmediğinizi anlamak için, BEQ ve BNE (eşitse sap ve eşit değilse sap) komutlarına bakın. Sapma komutları, koşullu atlama komutlarıdır. İşlemcinin statü sicilindeki flag'ların set ya da reset edilmiş olmasına bağlı olarak program sapar. Sapma komutlarından hiçbirisi RTS komutunun bulunduğu adresin ilerisindeki adreslere gitmemektedir. Demek ki, RTS gerçekten de programın sonudur. Ayrıca, Sicim Yükleyici'nin hafızaya 32 bit sokmuş olduğunu ve $133B'deki RTS'nin 32 bit olduğunu hatırlarsanız, programın sonuna vardığınızı anlamanız güç olmaz! Programı parçalamak mesele değildir. Ama parçalardan bir anlam çıkarmak zor olabilir. Burada da tecrübe işe yarar. Fakat şu küçük rutini yorumlamak o kadar zor olmasa gerek. $1324'ten başlayarak ilk iki komutu alın:

CPX # $00
BEO $132E

İlk komut X-sicilini sıfırla karşılaştırmaktadır. Eğer X-sicili sıfıra eşitse işlemcinin Sıfır flag'ı set, değilse reset olacaktır. Sıfır flag'ı set olursa, BEQ (sıfıra eşitse sap) komutu $132E'ye atlar.

BASIC çağrı programımızın ve Y sicillerine değerler yerleştirdiğini görmüştük. Eğer X sicili sıfırdan büyük bir değerle başlıyorsa, program $1328'de şu komutları yerine getirecektir:

XxX

JSR $FFD2
DEX
BNE $1328

Bu, BASIC'teki FOR-NEXT döngülerine denk düşmektedir. $FFD2'deki altrutin çağrılır, X sicili eksiltilir ve eğer sıfır değilse BNE (sıfıra eşit değilse sap) komutu programın tekrar $FFD2'ye dönmesini sağlar. Böylece, $FFD2 X kere, yani X sicilindeki ilk değer kadar çağrılır. X sıfıra eşitlendikten sonra, adres $132E'deki şu komutlar yerine getirilir:

CPY $00
BEO $133B

Eğer Y-sicili sıfırsa, rutin adres $133B'deki RTS'ye, yani programın sonuna atlar. Y sıfır değilse, $1332'den başlayan şu komutlar yerine getirilecektir:

JSR $FFD2
DEX
BNE $1332
DEY
BNE $1332

Bunlar içiçe FOR-NEXT döngülerine tekabül etmektedir.

FOR Y-? TO ? STEP -1
FOR X-255 TO O STEP -1
GOSUB $FFD2
NEXT X
NEXT Y

X-sicili maksimum değerinden (255) sıfıra indirilir, sonra da Y-sicili eksiltilir. X gene 255'ten dönerek sıfıra iner ve Y eksilmiş olur. Bu, Y sıfıra ininceye kadar sürer. Sonra, $1339'daki son BNE komutu atlanır ve son RTS komutuna varılır ki, bu da BASIC'e dönmektedir.

KERNAL RUTİNLERİ altrutin CHROUT ya da BSOUT diye adlandırılan bir Kernal rutinidir. Bu rutinin tanımını PRG'nizde bulacaksınız. Bu programda, CHROUT (akümülatör diye de adlandırılan) A sicilindeki hareketlerin değerini alıp ilk uygun konumda ekrana vermektedir. Yani CHROUT sizi cursor konumunu gelişmelere paralel olarak değiştirme ve karakteri ekranda hangi adrese vereceğinizi saptama sıkıntısından kurtarmaktadır. Hatırlayacağınız gibi, BASIC çağrı programımız print edilecek karakterin değerini A-siciline yüklemişti. Ayrıca, print edilecek sayıyı X ve Y sicillerine yüklediğini görmüştük. SİCİM utility'si önce $FFD2'yi X kere çağırmış, sonra da içiçe X-Y döngüsünü Y kere tekrarladı. İçiçe X-Y döngüsünün her geçişinde $FFD2 256 kez çağırılarak X 255'ten 0'a indi. Böylece, SİCİM utility'si belirlenmiş olan karakteri tam istediğimiz gibi (X * 256 Y) kez print etmektedir. Kernal rutinlerini öğrenmek başka programları parçalamakta da size yardımcı olabilir. Bu rutinler makine dilinin en yorucu işlemlerine kolay bir çözüm getirdikleri için yaygın olarak kullanılmaktadır. PRG'lerde Kernal rutinleri her yönüyle tanıtılmış ve örnekler verilmiştir. Sıra $131F ile $1323 arasında gördüğümüz veri karakterlerine geldi. Bunları yorumlamak için, M 131F 1323 yazın. Ekran Dump 1'de de gördüğünüz gibi, bunlar bu yazının alınmış olduğu derginin ismine tekabül ediyor. (Eğer C-64 monitörünüz ASCII display vermiyorsa, veri bitlerinizi kendiniz çevirmek zorundasınız) Bu veri bitleri SİCİM utility'sinde kullanılmamıştır, ama çoğu makine dili utility'si bu şekilde düzenlenir. Programın başında bir veri depolama alanı bırakıp, bir JMP komutuyla bu verileri atlamak sık rastlanan bir uygulamadır.

YENİDEN KONUMLANDIRMA

Aslında JMP komutu ve beş veri biti SİCİM programında gerekli değildir. Onları yalnızca herhangi bir makine dili rutinini uyarmak veya harekete geçirmek açısından çok önemli bir noktayı aydınlatmak için kullandık. Herhangi bir makine dili programını harekete geçirmeden önce, yeniden konumlandırmaya elverişli olup olmadığını tespit etmek zorundayız. Eğer yeniden konumlandırılamıyorsa, çalışması için onu uyarlamamız gerekir. JMP cümlesi tek bitliktir ($4C) ve arkasından iki bitlik bir adres gelmektedir. Eğer BEQ ve BNE (sap) komutlarının hexadecimal bitlerine bakarsanız, ikisinin de iki bitlik komutlar olduğunu göreceksiniz. Bir sapmanın ikinci biti adres değil, offset'tir. Örneğin, adres $1326'daki ilk BEQ komutu şu şekildedir:

01326 FO 06 $132E

Disassembler $F0'ın BEQ komutu olduğunu bilmektedir. $06 (komut yerine getirilmeden önce yenilenerek $1328'e çıkmış olan) mevcut hafıza adresine eklenerek $132E elde edilir. Öte yandan $131C'deki JMP komutu şöyledir:

0131C 4C 24 13 JMP $1324

$4C JMP anlamındadır. $24 $13 ise gerçek adres $1324'ün “düşük bit-yüksek bit” formatındaki halidir. Bu programı hafızaya $131C'den başka bir adreste, mesela $C000'de yüklediğinizi varsayalım. Bilgisayara bu programı $C000'de işleme geçirmesini söylediğinizde, programın ilk komutuyla bilgisayar adres $1324'e atlayacaktır. Programınız $C000'deyken $1324'te ne bulunduğunu Allah bilir. Büyük ihtimalle, bilgisayarı kapatıp yeniden başlamanız gerekecektir. Öte yandan, diyelim ki programın yerini değiştirip yukarıda tanımlanan BEQ komutu gayet güzel çalışacaktır. Neden mi? Çünkü komutun iki biti $F0 $06 sabit değil göreli bir sapma adresi vermektedir. Bilgisayar adres $2000'e vardığında $F0'ı görür ve onu izleyen biti bir sonraki komut adresine eklenecek bir nicelik olarak ele alması gerektiğini anlar. BEQ komutu $2000 ve $2001'de yer aldığına göre, bir sonraki komut adresi $2002'dir. İşlemci $06'yı $2002'ye ekleyip, (eğer sıfır flag'ı setse) $2008'deki komuta sapar. BEQ, BNE ve tüm diğer sapma komutları göreli adresler taşır ve program hafızanın neresinde bulunursa bulunsun kusursuz iş görürler.

Eğer bir programın yerini değiştirip hafızanın başka bir yerinden başlamak istiyorsanız, mutlaka adres kullanan tüm komutları “ayarlama”nız lazımdır. Buna örnek olarak JMP ve JSR'yi (altrutine atla) gösterebiliriz. Mutlak adres (örneğimizdeki $FFD2 gibi) programın dışındaki bir sabit konumdaysa, değiştirilmemelidir. Ama (örneğimizdeki JMP $1324 gibi) yeri değiştirilen programın dahilinde bir mutlak adres söz konusuysa, düzeltilmesi gerekir.

C-64 sahipleri bu programı adres $C000 (49152)'de başlayacak şekilde yeniden konumlandırmalılar. $1324 özgün programda dokuzuncu bit olduğuna göre, yeri değiştirilmiş programda JMP gene dokuzuncu bite, yani $C008'e gidecek. Bu yüzden, JMP $1324 komutu JMP şeklinde değiştirilmeli. Bunun için de, Sicim Yükleyici'ndeki ikinci ve üçüncü veri maddeleri 08 C0 yapılmalı (adres bitlerinin tersten depolandığını unutmayın). BEQ ve BNE ayarlanmadan yerleri değiştirilebildiği için, bunlara “yeniden konumlandırılabilir” komutlar denmektedir. Bir programın “yeniden konumlandırılabilir” olması için yalnızca göreli sapma veya sabit adreslere sapmalar içermesi ve verileri doğrudan adreslememesi gerekirdi. Verilerin dolaylı adreslenmesini başka bir tartışmada ele alacağız. SİCİM Programını yeniden konumlandırılabilir hale getirmek için yalnızca ilk sekiz biti atmakla yetinebiliriz. (Zaten onlar örnek niyetineydi.) Ama başka programlar bu kadar kolay dönüştürülemeyebilir. Bütün atlama komutlarının yanısıra, yükleme, depolama ve hafıza değerleri üzerinde işlem yapmaya ilişkin bütün komutları incelemeniz gerekir. Genel olarak, programın yeri değiştirildiğinde bütün bu adresleri de değiştirmek lazımdır.

1970'lerdeki kişisel bilgisayar devriminin neredeyse hemen ardından, piyasada iki farklı bilgisayar kategorisi standartlaştı: (Daha dar anlamıyla 'kişisel' diye de anılan) iş bilgisayarlarıyla ev bilgisayarları. Kuşkusuz bu alandaki en önemli gelişmelerden biri IBM'in kendi iş bilgisayarını piyasaya sunmasıydı. IBM'in itibarı ve piyasada tuttuğu pay, bundan böyle iş bilgisayarları için yazılacak programların çoğunun IBM için yazılmasını kaçınılmaz hale getirdi. Bu ise diğer firmaların üreteceği iş bilgisayarlarına, donanım düzeyinde bir kısıtlama getiriyordu. Artık iş bilgisayarı alanında rekabet edebilecek her makinanın, IBM için yazılmış programları da çalıştırabilmesi gerekiyordu. Bu gelişme neredeyse, iş bilgisayarı terimiyle IBM-uyarlı (IBM compatible) terimlerini eş anlamlı hale getirdi. İşin şaşırtıcı yanlarından biri, bilgisayar teknolojisi alanındaki başdöndürücü hızdaki gelişmelerin, bu iki temel kategoriye bunca uzun zaman hiç dokunmamış olması. Başka bir deyişle, teknolojik gelişmelerin ticari uygulamaları, ya ev bilgisayarları alanında yenilenmeler (Plus 4'ten C-16'ya, oradan 64'e ve son olarak C-128) ya iş bilgisayarı alanında daha güçlü modeller (sırasıyla PC-10, PC-20 ve PC-40 ya da PC-AT) şeklini alıyor fakat iki kategori arasında geçişlere ya da yeni bilgi kategorilerinin doğmasına yolaçmıyordu.

İŞ BİLGİSAYARLARININ

ÖNEMLİ BİR KISITI: GRAFİK İlk yıllarda ev bilgisayarları özellikle oyun makineleri olarak düşünülüyordu. Oyunlar içinse makinenin grafik yeteneğinin tayin edici bir öneme sahip olduğu konusunda kimsenin kuşkusu yoktu. Dolayısıyla ev bilgisayarlarının grafik yeteneklerinin geliştirilmesi yolunda hatırı sayılır bir emek harcandı. Oysa iş bilgisayarlarından beklenen daha farklıydı: İlk ağızda, muhasebe, stok kontrol gibi daha çok aritmetik işlemler ve çok sayıda verinin depolanmasını gerektiren uygulamalar... Ekrandaki grafik görüntüyle ilgili bilgilerin depolanması çok fazla bellek hacmi harcadığından, iş bilgisayarlarında hep ilk fedakarlık yapılan alan makinanın grafik yetenekleri oldu. Ama iş bilgisayarlarının kullanım alanları arttıkça, yüksek çözünürlüğe (resolution) sahip bir görüntünün, genel bilgilerin sunumu gibi temel alanlarda dahi önemi daha iyi anlaşılmaya başlandı. Hele “bilgisayarlı yayıncılığın” (desktop publishing) gelişmesi, hassas ve yüksek çözünürlüğe sahip bir görüntüyü olmazsa olmaz bir özellik haline getirdi. Gerçi IBM uyarlı makinelerin bu konudaki yeteneklerini genişletecek araçlar da yok değildi. Örneğin, EGA-Standart (Enhanced Graphic Adaptor) adı verilen araç, iki yılı aşkın bir süredir bu amaçla kullanılmaktadır. Bu adaptör 640 x 350 ekran noktasından (Pixel) oluşan ve 16 renkli bir resmin IBM uyarlı makinalarda görüntülenebilmesini sağlıyor.

IBM'in profesyonel grafik kontrolörü denilen aracı ise EGA'nın başardıklarının da ötesine geçebiliyor. Dahası AT türü makineler için geliştirilmiş ve -oldukça yavaş bir tempoyla da olsa- animasyon hazırlama olanağı sağlayan uygulamalar bile mevcuttur. Ama bütün bu çözümlerde ortak bir özellik göze çarpmaktadır: Görüntünün hızı ve çözünürlüğü arttıkça masraflar daha da başdöndürücü bir hızda artmaktadır.

YENİ BİR BİLGİSAYAR KATEGORİSİ PEŞİNDE

İşte bu noktada 1970'lerin başında ilk Apple'ı tasarlayarak ticari kişisel bilgisayarlar çağını başlatan Steven Jobs ve Steven Wozniak bir kere daha ortalığı alt üst etti. Tasarladıkları yeni bilgisayar Macintosh, Macintosh'un en önemli özelliği ise kullandığı çok güçlü merkezi işlem birimi, Motorola 68000 idi. Piyasaya sürüldüğü 1984 yılında yılın bilgisayarı seçildi. Bu ilk Macintosh'ta, daha sonra grafik bilgisayarları diye anılacak kategorinin kimi özelliklerine rastlıyoruz. İşletim sisteminin ROM'da değil disket üzerinde saklanması, programcıların kullanabilecekleri bellek hacmini arttırıyor. Ama daha önemlisi, Macintosh'un sabit bir karakter seti içermemesi, programa bağlı olarak, klavyeye her basılışında istenen karakteri ekran üzerine 'çizmesi'. Başka bir deyişle Macintosh, ilk kez grafik bilgi kavramı ile metin bilgisi kavramı arasındaki farkı ortadan kaldırmış oluyordu. 1985 yılında Macintosh'unkine benzer bir teknolojiyle üretilmiş olan ATARI ST dizisinin de yılın bilgisayarı seçilmesi, piyasanın bu yeni bilgisayar türüne hazır olduğunu gösteriyordu. Ama yine de bu bilgisayarların önünde önemli handikaplar vardı. Bir kere güçlü merkezi işlem birimlerine karşın fazla yavaştılar. Grafik bilginin işlenmesi çok fazla bellek hacmi gerektiriyor, veri saklama için gereksinilen bellek hacmini azaltıyordu. Son olarak yazılımcıların bu yeni tür makina ile henüz yeni tanışmakta olmaları, yazılım desteği yönünde önemli bir sorun oluşturuyordu. Bütün bu kısıtlar, bu yeni grafik bilgisayarlarının iş bilgisayarları ile rekabet etmesini güçleştiriyordu. Fiyatları ise bir ev bilgisayarı satın almak isteyen olası müşterilerin bu makinalardan uzak durmasına yolaçıyordu. İşte bu noktada devreye AMİGA girdi. Gerçi Amiga da merkezi işlem birimi olarak Motorola'nın MC 68000 işlemcisini kullanıyordu. Ama Amiga'nın asıl önemli özelliği, bundan sonra bütün grafik bilgisayarlar için standart haline gelecek olan bilgisayar mimarisi ve kavramlarını keşfetmiş olmasıydı. Bu bağlamda özellikle önemli olan yardımcı işlemciler (co-processor) kavramı... Amiga'nın üç yardımcı işlemcisinden ikisi, DENISE ve AGNUS, özellikle grafik bilgilerin işlenmesi ve ekran kontrolü alanlarında uzmanlaşmış. Bu ise hem daha önceki grafik bilgisayarlarda rastlanan hız sorununu çözüyor hem de Amiga'nın çok görevlilik (multi-tasking) yeteneğine sahip olmasını mümkün kılıyor. Ancak şu anda Amiga'nın yeni bir bilgisayar türünü mü yaratmış olduğunu, yoksa hem ev hem iş bilgisayarlarına yepyeni olanaklar sunarken aralarındaki farkı yine de koruduğunu mu söylemek için vakit erken. Amiga 1000'den vazgeçilip, piyasaya 500 ve 2000 diye iki ayrı model sunul-

7300/7301 HD63484 82786 TMS34010 | | Yapımcı NCR Hitachi Intel Texas Instruments | Maks Çözünürlük 1024 x 1024 4096 x 4096 8192x4096 32768 Renk Sayısı 65536 256 66536 Ekran Penceresi 1, Donanım İstenildiği kadar, İstenildiği kadar,

Donanım

Yazılım

MİKRO-BİLGİSAYARIN GRAFİK ÇÖZÜNÜRLÜĞÜ ve DEPO GEREKSİNİMLERİ

Normal renk “Hercules”

EGA grafikli Commodore

Bilgisayar — grafikliPC grafikliPC Atari ST Apple PC Amiga, Çözünürlük — 320x200 — 720x348 — 300x200 — 640x200 — 640x350 — 640x200 Sayısı 4 Tekrenkli 16119512 4096 16 32 ila 4096 Ekran Deposu16 — 32 KByte — 32 KByte 1 — 48 KByte — 128 KByte — 160 KByte muş olması daha ziyade ikinci yorumu destekliyor gibi görünüyor.

GELİŞMELER

Amiga'nın başarısı ve özellikle de yardımcı işlemcilerin grafik bilgisayarlar için önemini kanıtlamış olması, elektronik devre üretimi alanındaki yeni araştırmaların yönünü de belirledi. Araştırmaların çoğu grafik alanında uzmanlaşacak yeni işlemci ya da yardımcı işlemci yongaları tasarlamaya yöneldi. Bu alanda kısaca üç örnekten sözedebiliriz: İlk kez 1984 yılında tanıtımı yapılmış Hitachi'nin HD 63484'ü, 4096* 4096 ekran noktalık gibi başdöndürücü bir çözünürlüğe ulaşırken 65536 değişik rengi de aynı zamanda ekrana getirebilmektedir. Yeni bir grafik-işlemci denemekte olan ikinci firma ise Intel'dir. Intel'in 82786'sı 8192*4096 nokta ölçeğinde görüntüler oluşturabilmekte ve 256 değişik renkle çalışabilmektedir. Texas Instruments'in TMS 34010'ı 32768 nokta ve azami 65536 renk ile mevcut en yüksek verim düzeyine ulaşmaktadır. Bu noktada andığımız bu yongalar arasında, işlem yapabilme yeteneği bakımından da önemli farklar olduğunu söylemek gerekiyor. Hitachi HD 63484 kendi başına, yani merkezi işlem birimi olarak görev yapmakta olan yonganın hiçbir yönlendirmesi olmaksızın, çizgi ve figürler çizebilmekte, kopya yapabilmekte, şekillerin içini doldurabilmekte, ekran görüntüsünü yatay ve dikey doğrultuda kaydırabilmekte ve daha pek çok şeyi gerçekleştirebilmektedir. Intel 82786 yüksek düzeyde grafik komutu içeren pek çok listeyi ana işlemciden bağımsız olarak işleyebilmektedir. Bu arada kendi donanımı sayesinde istenilen sayıda ekran penceresini de yönetebilir. Üçü arasında en gelişkini olan TMS 34010'ın hesaplama kapasitesinin, hızlı bir aritmetik işlemcisi olarak kabul edilen Intel 80287'den bile yüksek olduğunu ifade ediyorlar. Yonganın yapı taşı normal bir işlemcinin komple komut takımıyla donatılmış olup ayrıca grafik fonksiyonlarını da içermektedir. O kadar ki, C dili için bir derleyici bile bu yonga mevcut. Yonga böylece pek grafik programını bilgisayarın diğer bileşenlerinden bağımsız olarak işleyebiliyor. Ancak bu noktada yongaların sağladığı bu yüksek verimin, başka bir

Gerçekliğe böylesine yakın mekân tasarımları geliştirmek artık PC'lerde mümkündür.

Böyle bir grafik için gereken olağanüstü işlem hacmi, modern grafik chip'ler için bir sorun çıkarmamaktadır.

DAHA İYİ EKRAN GRAFİĞİ NE YARAR

Daha güçlü ekran grafiği bilgisayar grafiğinin geleneksel alanları için ilgi çekici değildi yalnızca. Pratik olarak her tür kullanımda bundan yararlanma imkânı mevcuttur.

CAD/CAM

Yeni grafik yongaları mikrobilgisayarların konstrüksiyonunda ve hazırlanmasında büyük bir canlılık vaat ediyor. Bunlardan beklenen hizmetler bugünkü profesyonel aygıtların el attıkları alanların daha derin katmanlarına yönelik işlerdir. Özellikle üç boyutlu görüntüleme çalışmalarında büyük ilerlemeler kaydedilmesi bekleniyor.

İş Grafiği

Rakamların çekici bir tarzda takdimi için ayrıntılı, renkli görüntüler önem taşıyor. Bugün bu türden ve gerçekten profesyonel grafiklerin gerçekleştirilebilmesinde pahalı özel tesislere gerek duyulmaktadır. Bu tesisler daha iyi grafik kapasitesiyle donatılmış kişisel bilgisayarlar tarafından ikame edilebileceklerdir.

Desktop Publishing

Basıma hazır metinlerin oluşturulmasında da ekrandaki grafik görüntüsünün daha iyi olmasının büyük yararı vardır. Bugünkü mikrobilgisayarların bu konuda zorunlu kıldığı ödünlere artık gerek kalmayacaktır. Örneğin hazır olarak monte edilen sayfalar profesyonel redaksiyon sistemlerine benzer bir tarzda ele alınabileceklerdir.

Metin İşlem Hızlı ve zarif bir ekran grafiğinin

Yeni chip'lerin teknik olanakları bu tür çekici grafiklerin oluşturulmasını da mümkün kılmaktadır.

Ancak modern grafik chip'ler sayesindedir ki, PC'lerde de gelişkin grafik uygulamalar yapılabilmektedir.

AĞLIYOR?

Metin işleme etkinliğine büyük yararı dokunabilir. Böylelikle, her büyüklükteki ve tüm değişik işaretleriyle birlikte simge cümlelerinin orantılı yazı türünde olmak suretiyle monitörde gerçek bir görüntüye kavuşturulmaları sağlanmış olur. Ayrıca, metnin ve grafiğinin iç içe girmesi de söz konusu olabilir.

Hesaplama

Verim düzeyi yüksek bir grafik ekranı bir yandan geniş kapsamlı sayısal tabloları belli bir bağlam içinde sunabilirken, öte yandan da hesaplama sonuçlarının grafik olarak dönüştürülmesini ayrıntılı bir tarzda gerçekleştirebilir.

Bilgisayar Oyunları

Profesyonel bilgisayar kullanıcıları arasında da pek çok kişinin ilginç bir bilgisayar oyunuyla sinirlerini rahatlatmaktan hoşlandığı bir gerçektir. Bu tür programların daha iyi bir ekran grafiği sayesinde çekiciliklerinin artacağı bellidir. Ayrıntılar ne denli çok görüntülenebilirse ve görüntüler ne denli çabuk oluşturulabilir ve değiştirilebilirse, oyun sahneleri de o denli gerçekçi bir etkiye sahip olurlar.

Kullanım

Ve nihayet Macintosh'un ya da GEM ve Windows olarak bilinen kullanım sisteminin çekiciliği de artmış olur. Kullanılan simgeler ayrıntı yönünden daha zengindirler ve sistem daha hızlı çalışır. Yavaş çalışan bir bilgisayarın kullanımında gerekli olan zaman süresi kişinin bu konuda deneyimi arttıkça giderek sıkıntı verici olmaya başlar.

çevresel gerecin, ekranın kısıtlılıklarından ötürü pratikte gerçekleşemediğini vurgulamak gerekiyor. Bunun nedeni görüntünün saniyede en az 50 kez yeniden kurulması zorunluluğudur; oysa monitörlerin hiçbiri böylesi hızlı bir tepkiyi verememektedir. Benzer bir kısıtlılık bilgisayarın iş belleğinin ekran görüntüsü ile ilgili bilgileri içeren kısmı için de söz konusudur. Bu durumda ulaşılabilecek görüntü kalitesinin sınırlarını belirleyen ana yongalar değil ekran olmaktadır. GRAFİK İŞLEMCİ: LAZER YAZICILAR Bir grafik işlemci için belki biraz beklenmeyen bir görev de, son günlerde büyük bir güncellik kazanmış olan lazer yazıcılar tarafından dile getirilmiştir. Bunlar bir görüntüyü, daha görüntü kendileri tarafından kâğıda geçirilmezden önce, kendi iş depolarında tam olarak oluşturmak zorundadırlar. Bundan ötürü bu aygıtlar, eğer grafik de basabilecek şekilde tasarlanmışlarsa, 1 ya da daha çok Megabyte'lık RAM'la donatılmışlardır, çoğunlukla da Motorola'nın MC 68000 işlemcisini kullanırlar. Ama aslında bir grafik işlemcinin bu işe daha uygun olacağı akla yatkın geliyor. Gerçekten de Intel ve Texas Instruments sözünü ettiğimiz işlemcilerini bu kullanım için de salık vermektedirler. Üstelik lazer yazıcılar, ekranlara kıyasla görüntü üretmek için daha çok zamana sahiptirler ve dolayısıyla grafik işlemcilerin yüksek kapasitelerinden daha verimli bir biçimde yararlanabilirler.

SONUÇ OLARAK.

Başlangıçta sormuş olduğumuz soruyu bir kez daha soralım: Grafik bilgisayarlar ev ve iş bilgisayarlarından farklı yeni bir bilgisayar kategorisini mi temsil ediyor? Geçen üç yıl boyunca Macintosh, Atari ST, Amiga bilgisayar alanında grafiğin avant-garde'ini temsil ediyor ve yeni bir donanım mimarisi anlayışı öneriyorlardı. Yeni grafik yongaları (işlemci ve yardımcı işlemcileri) ise IBM uyarlı bilgisayarlara bundan böyle adı geçen bilgisayarları kendi sahalarında yenebilme şansını vermiştir. Ama gelişme hangi yönde olursa olsun, grafiğin artık bilgisayar yarışının kıyısında kalmayacağı, aksine tayin edici faktörlerden biri olduğu açıkça görülebiliyor.