Amiga İşletim Sistemi Amiga OS
Retro bilgisayar2. Bölüm
AMIGA Dergisi'nin ikinci sayısıyla başladığım AMISGA OS yazısına teknik aksaklıklar nedeniyle kısa bir ara vermek zorunda kaldık. Fakat bu ay bunları telafi edebileceğimi zannediyorum. Geçen seferki yazımı bitirirken, bu bölümde 'resident library'lerin kullanımını anlatacağımı söylemiştim. Ama önce bunların ne oldukları sorusuna açıklık getirmek istiyorum. Her ne kadar geçen yazıda bunu anlatmış olsam da, hem o sayıyı okuyamamış olanlar, hem de oradaki açıklamayı yetersiz bulmuş olanlar için baştan başlamak daha iyi olur diye düşündüm. Ayrıca sizden bir ricam olacak. LÜTFEN yazılarımda anlayamadığınız veya eksik bulduğunuz yerler olursa bana bildirin. Bunu dergiye yazarak yapabilirsiniz. Bu isteğimin sebebi, konunun geniş kapsamlı olması nedeni ile yazılarda bütünlük ve bilgi yönünden eksikler oluşabileceğinden endişe- Her ne kadar gayret etsem de kendi yazılarımı tarafsız bir şekilde okumam zor oluyor. Bu yüzden sizden gelecek eleştiri ve uyarılar hem yazılırımın daha kolay anlaşılır hale gelmesini sağlar, hem de kafanıza takılan sorulara cevap bulabilirsiniz. Ayrıca bana sadece yazılarımda geçen konular hakkında değil aklınıza gelen her konuda soru sorabilirsiniz. Bu sorularınıza elimden geldiği kadar doyurucu cevaplar vermeye çalışmak inanın bana büyük zevk verecek. Bu yüzden tekrar rica ediyorum, LÜTFEN AKLINIZA TAKILAN SORULARI SORUN! Neyse, gelelim konumuza. “Resident library' (kalıcı kütüphane) nedir, ne değildir? Önce basit cevap: Bu bir çeşit alt-programcıklar (Fonksiyonlar) grubudur. AMIGSA işletim sisteminin kendine özgü özelliklerini tam anlamıyla kullanabilmek için, sadece kullandığınız bilgisayar dilinin emirlerini kullanmanız genellikle yeterli olmaz. Bu yüzden nın işletim sistemini yazanlar, kullanılan bilgisayar diline bağlı kalmadan çağrılabilecek bu fonksiyon grublarını yaratmışlar. Peki bu Tibrary'ler neye benzer? Birkaç örneğin görmek istersiniz, açılış disketinizin adlı directory'sine bir göz atabilirsiniz. Burada 'diskfont.library', gibi bazı dosyalar göreceksiniz. Bunlar, daha az ihtiyaç duyuldukları için gerektiğinde diskten yüklenmek üzere buraya konmuş bazı library'lerdir. Asıl önemli olanlar ise KickStart'ın bir parçası olarak ROM'a, yani silinmez hafızaya konulmuşlardır. Bunların arasında 'exec.library', 'graphics.library', “dos.library' sayılabilir. Monitor veya debugger cinsinden bazı programlar (Örneğin Xoper) hafızadaki bazı bilgilerin (ve bu arada resident library'lerin de) listesini görme imkanı sunarlar. ROM'daki ve o anda disketten RAM'a yüklenmiş bulunan library'leri böylece görebilirsiniz. Library bilgisayar terminolojisinde sık kullanılan bir sözcüktür. Bu yüzden bazı yanlış anlamaları engellemek için burada bir ekleme yapmak istiyorum. Pek çok bilgisayar dili, örneğin C, Pascal ve Assembler, programcıya kendisi veya başkası tarafından yazılan altprogramları birleştirip saklama ve gerekirse bunları yeni programlarda kullanma imkanı tanır. Bu şekilde birleştirip saklanan altprogramlara da genellikle library” adı verilir. Ancak bunlar ile bu yazıda sözünü ettiğim library'ler arasında büyük fark vardır. Bu altprogramlar, sonunda oluşturulan makine kodu çalıştırılabilir (Executable) programın yaratılmasının son aşamasında (link-time) programın içine katılırlar, halbuki 'resident library'ler programın içine katılmaz, program çalışırken (Runtime) bu library'leri 'açar' ve içlerindeki fonksiyonları kullandıktan sonra tekrar 'kapatır'. Bu iki tür library'yi diskette ayırt etmek zor olmaz, çünkü library'lerin isimleri, yukarıdaki örneklerde örneklerde de görebileceğiniz gibi “library” diye biter ve kendilerinin adlı bir directory'de durması gereklidir. Halbuki link-time library'lerin isimleri genellikle diye biter ve bunlar genellikle mpiler disketlerinden falan bulunurlar. Peki bu library'ler nasıl kullanılırlar? Bu konuda birkaç dilde birden örnekler vermeye çalışacağım. İlk örnek C'de olacak, Daha sonra da sıra Assembler ve AmigaBASIC'e gelecek. İşte ilk örnek programımız. Bu C programı intuition ve graphics library'leri açıyor ve bu İibrary'lerin içindeki fonksiyonları kullanarak bir 'Window' (pencere) açıyor. Bu pencereye bir yazı yazdıktan sonra 5 saniye bekliyor ve pencereyi kapatıp çıkıyor.
*
* LİIBRARY.C library örnekleri
: (C) Berktan Bestel, Şubat 1992
* Aztec C compile info:
* cc libary
* In library-lc
#include intuition/intuition.h
#include intuition/intuitionbase.h
#include functions.h
struct İntuitionBase *İntuitionBase;
struct GfgBase — *GfxBase;
100,100, /* sol üst köşe x,y */
280,50, /* başlık çubuğu yazı */
2, 1* başlık çubuğu yazı */
1,1* başlık çubuğu arka */
NULL, /* IDCMP-flags */
| SMART - REFRESH
| ACTIVATE | WİNDOWDRAG | WIN-
DOWDEPTH, NULL, NULL,
Window”,NULL,NULL,
100,20,640,256,/* geniş.ve yüksek-
lik max-min */
WBENCHSCREEN
end(char” err)
if (win) — CloseWindow (win):
if (GfxBase! NULL) Closelibrary
(GfxBase);
if (İntuitionBase! —- NULL.) CloselLib-
rary(IntuitionBase):
if (eri) — putslerr):
exit(0):
main )
IntuittonBase —
ition library”,33L);
if (IntuitonBase — NULL)Jend(“Can't
open intuiton
GfxBase — Openlibrary("grap-
hics.library”,33L);
if (GfxBase— -NULL) end (“Can't
open graphics.library”):
win - openWindow (&nw):;
if (win— NULL) end (“Can't open
windowỊi:
Move (win- RPort,10L,20L);
Text(win- RPort, Hello,worldl 14L);
end(NULL);
Bu programın işleyişine bir göz atalım. İlk önce gereken 3 adet “include include ediyoruz. Sonra global değişkenlerimizi saptıyoruz. Bunların hepsi ya bir structure ya da bir structure'ın adresini tutacak olan bir 'pointer'. Bildiğiniz gibi C'de farklı türde değişkenleri içeren structure adında bileşik değişken grupları vardır. AMIGA'da da birazcık önemi olan her olay için işletim sistemi bir structure kullanır, bu structure'ların içinde söz konusu olan olayla ilgili bilgiler tutulur. Programların daha hızlı ve kısa olmasını sağlamak için de fonksiyonların ve programların arasında pek çok defa bu structure'ların kendileri yerine adresleri (pointer'leri) aktarılır. bunlardan İntuitionBase ve GfxBase, sırasıyla tion' ve 'graphics' library'lerin aynı adlı kontrol (Base) structure'larının hafızadaki adreslerini içeren olarak kullanılacaklar. Kullanacağımız her library için bir base-pointer tanımlamamız gereklidir ve isimleri de her library için değildir. Bu pointer'lar daha sonra, eğer gereken library'ler açılabilirse, o library'lerin adreslerini içerecektir, eğer açılamazlarsa -bunlar global değişkenler oldukları için- sıfır değerini taşıyacaklardır. Diğer yandan, açtığımız bu library'lerin bir işe yaraması için İntuition library'nin fonksiyonlarını kullanarak bir pencere açıp graphics.library fonksiyonları ile içine birşeyler yazacağız. Bunun için açılacak pencerenin adresini tutacak bir değişkene gerek var. İşte 'struct Window *win' diyerek böyle bir değişken tanımlıyoruz. Bir de bizim açmak istediğimiz pencerede olmasını istediğimiz özellikleri belirtmek için kullanacağımız “struct NewWindow' türü 'nw' adında bir structure var. Diğerlerinin tersine bu adres değil, structure'- ın kendisi, Buraya da pencerenin yeri, boyutları, başlık çubuğunda görülecek ismi, renkleri, üstünde olmasını istediğimiz gadget'lar (Düğme, buton) hakkındaki istekleriİMiİZİ yazıyoruz. main( ) fonksiyonunda ilk önce library'lerimizi açıyoruz. Bunun için Openlibrary( ) adlı fonksiyonu kullanıyoruz. Bu fonksiyonun parametreleri, açılmasını istediğimiz library'nin adı ve versiyon numarası. Örnekte kullandığım 33 sayısı Kickstart 1.2'ye denk geliyor. Eğer bilgisayarımız ROM'undaki Kickstart'ınızın versiyonu 1.2 veya daha yüksek ise istediğiniz library açılacaktır. Bu versiyon resmi olarak piyasadaki en düşük versiyon olduğu için bu sayı yeterli olacaktır. Openlibraryl ) bize açılan library'- nin base-pointer'ini geri verir. Bu adresi gereken değişkene sakladıktan sonra bir if() emri ile sıfır olup olmadığını kontrol ediyoruz. Versiyon yetmezliği veya RAM yetersizliği gibi bir sebepten dolayı library'nin açılamaması olasılığı her zaman vardır. Buna rağmen o library'ye ait bir fonksiyonu çağırırsanız AMIGA'nız bir Guru meditation mesajı ile veda edecektir. Bu yüzden AMIGA'da genel mantık olarak işletim sisteminden bir şey isteyen herhangi bir emir çağırdıktan sonra isteğinizin yerine gelip gelmediğini kontrol etmelisiniz. Çoğu fonksiyon başarısızlık durumunda geriye sıfır değerini verecektir. Örneğin burada eğer library açılamamış İse base-pointer hâlâ sıfır (NULL) değerinde olacaktır. Bu durumda, açılabilmiş olan sistem kaynaklarını kapatarak bir hata mesajı yazıp programdan çıkıp 'end( )' adlı fonksiyon çağrılır. Hafıza yetersizliği veya pencere koordinatlarının ekrandan taşması gibi sebeplerden dolayı pencere açmaya yarayan OpenWindowl ) da başarısızlığa uğrayabilir. Bu durumda geriye açtığı pencerenin structure adresi yerine sifır (NULL) gelecektir. OpenWindowl( )'a yukarıda isteklerimizi içine yazdığımız 'nw' adlı “struct NewWindow' türü değişkenimizin adresini (pointer'ını) parametre olarak veriyoruz ve geriye sıfır gelmesi halinde yine )'i çağırıyo- TUZ. Programımız hâlâ end )'e atlamamış ise gereken her hazırlık tamam demektir. Bu artık pencerenin içine yazı yazabiliriz. Önce yazı yazılacak koordinatları Movef ) ile pencerenin ortasına bir yere getiriyoruz. Bu emrin parametreleri, wİNdow'un RastPort structure adresi, win- RPort diyerek bunu elde ediyoruz ve yazının sol alt köşesinin yatay ve dikey koordinatlardır. Sonra da ) ile yazımizi yazıyoruz. Önce yine RastPort adresi, sonra da yazımız ve en son olarak da yazacağımız string'in uzunulğu. Eğer string olarak bir değişken kullanırsanız, uzunluğunu İlong)strlen(string) diyerek bulup buraya yerleştirebilirsiniz. sonra ) diyerek 5 saniye bekliyoruz. Delay( )'in parametresi saniyenin 1/50'si olarak bekleme zamanıdır, bu bir integer” olmalı. Arkasından end(NULL) diyerek programdan çıkıyoruz. Burada NULL verdiğimiz için end ) bir hata mesajı yazmadan çıkıyor. endi ) fonksiyonu, kapatacağı her sistem kaynağı (Library veya Window) için önce bir kontrol yapıiyor. Eğer ilgili değişken sıfır değilse, bu bir sistem kaynağı açılabilmiş anlamına gelir, demek ki kapatılmalıdır. Burada kullanılan üç fonksiyon (Openlibrary( ), Closelibrary( ) ve Dalay( ), açtığımız library'lere ait değildir. Peki öyleyse onları nasıl kullanabiliyoruz. Bu sorunun cevabı şudur: Her C programına linker tarafından otomatikman eklenen “startup-code' adlı kısım, programınız çalışınca, daha main( ) adlı ana fonksiyon çağrılmadan önce yaptığı pekçok işin arasında 'exec.library' ve 'dos.library” adlı library'leri açarak kullanıma hazır hale getirir. Yukarıdaki fonksiyonlar da bu library'lere ait oldukları için onları doğrudan doğruya kullanabiliriz. İsterseniz biraz da AmigaBASIC'- ten resident library kullanımı ile ilgili birkaç örnek vereyim. Fakat önce İibrary'lere ait fonksiyonlar hakkında döküman arayanlara bazı kitaplar tevsiye edeceğim, ama ne yazık ki bu kaynakların hepsi yabancı dillerde. Ben henüz library'ler hakkında dilimize çevrilmiş ciddi bir kaynak görmedim, lütfen bulursanız bana da haber verin.
İngilizce kitaplar: Technical Reference Manudal:Libraries and Devices Inside the AMIGA (with C) Advanced System Programmer's Guide for the AMİGA AMIGA Reference Manual AMIGA C for Beginners Advenced AmigaBASIC Almanca kitaplar: C für Einsteiger Das grosse C Buch zum AMIGA İntern AMIGA Programmierrichtlinien
AmigaBASIC'ten bir library'yi kullanabilmeniz için ön şart, o library'- ye ait bir dosyasının AmigaBASIC tarafından bulunabilmesidir. Bunun için bu dosya ya LIBS: mantıksal drive'inda ya da AmigaBASIC'in current dir'inde olmalıdır. Bu ya AmigaBASIC'in çalıştırıldığı veya daha sonra CHDİR komutuyla geçilmiş olan directory'- dir. Programınızı eğer program iconu üstüne çift klik ile çalıştırmışsanız, programınızın bulunduğu çekmece current directory olacaktır. Bu durumda herhalde en iyisi bmap dosyalarını LIBS:'e yerleştirmek olsa gerek. Extras1.3 disketindeki BasicDemos çekmecesindeki örnek programların bazıları library kullandıkları için, burada üç İlibrary'ye ait dosyaları bulunur. Bunlar exec,dos ve graphics.library için gereken dosyalardır, library isimlerin sonuna yerine “bmap' getirerek adlandırılırlar. Burada mevcut olmayan bir dosyasına gerek duyarsanız, ConvertFD adlı BASIC programını kullanarak yine extras disketinde bulunan FD (Function description, fonksiyon açıklaması) dosyalarından gereken bmap dosyalarını üretebilirsiniz. Tabii ki bu anlatacaklarımı Extras disketinizin orijinali üstünde değil, bir kapyası üstünde yapmayı unutmayın. Zaten Extras disketi neredeyse ağzına kadar dolu olduğu İçin orijinal diskette yer bulmazsınız. Tavsiyem, (eğer şimdiye kadar yapmamışsanız) Extras disketinin, sırf AmigaBA-SIC kullanmak için bir kopyasını Çıkarıp, buradaki BASIC'le ilgisi olmayan şeyleri silmenizdir. Tabii FD1.3 adlı çekmeceyi silmemelisiniz. Neyse, bir bmap dosyasını yaiçin ConvertFD adlı BASIC programını çalıştırın, size FD dosyasının adını sorunca, örneğin “fd1.3/intuition-lib.fd” yazın. Bmap dosya adını sorunca da “"intuition.bmap” yazın. ConvertFD, bazen, library'ye ait bazı fonksiyonların lomap dosyasına aktarılamadığını söyleyen Uyarılar verebilir, bu normaldir. Ayrıca, bazı library emirleri, AmigaBASIC emirleri ile aynı adı taşırlar. ConvertFD, bunların başına *x” koyar, 'Open' yerine 'xOpen' gibi. Ayrıca unutmayın, library fonksiyonlarında küçükbüyük harf ayrımı yapılır, bu yüzden emirleri aynen örneklerde yazıldığı gibi yazmalısınız, yoksa AmigaBASIC bunları tanıyamaz. BasicDemos'taki adlı program, aslında bir program değil, burada REM'ler içinde dosyalar ile ilgili bilgiler var. Bu programı herhangi bir editör veya AS-Cİl text gösterici ile okumanızı tavsiye ederim. Yine burada bulunan “Library” adlı program, 'graphics' ve 'dos' library'leri kullanan birkaç örnek veriyor. Bunlar ROM'daki topaz fontunun iki versiyonunu kullanarak eğik, altı çizili, kalın vb. bazı yazılar yazmak ve (sadece Shell'den çalıştırınca işleyen) 'list” adlı dos emrini (yani herhangi bir başka programı) AmigaBASIC'in içinden çalıştırmak. Bunun dışında LOABIİLDM-SAVECBM, LOADACBM ve SAVE-ILBM adlı programlar da library ro-
JUNE 1991 «RYTE 24 utine'leri kullanırlar. Deluxe Paint gibi resim programlarının da kullandığı İFF-ILBM resim formatını BA-SIC'ten okuyup yazma konusunda örnekler içeren bu programların, biraz uzun ve karışık olmalarına rağmen, ilginç örnekler olduklarına İnanıyorum. Aşağıda verdiğim program yine farklı fontlar ile ekrana yazı yazmaya yarıyor, ancak farkı, ROM'dakilere dışında, açılış disketinizdeki FONTS: mantıksal drive'ındaki bazı fontların da kullanmasıdır. Çalışması için FONTS: ve LIBS: mantıksal cihazlarına (yani açılış disketinize) ihtiyacı vardır, LIBS:'te 'diskfont.library” ve dolayısıyla font.bmap, ayrıca 'graphics.bmap' adlı dosyalar bulunmalıdır (hatırlayacağınız gibi kendisi ROM'da idi). Aşağıdaki programı satır numaraları olmadan verin, o numaraları sadece açıklama sırasında bahsettiğim yeri anlatabilmek için ekledim (Arexx sağolsun). Ayrıca değişken İsimlerinin arkasına eklenen gibi karakterleri değişkenin türünü göstermek açısından çok önemli oldukları için onları unutmamaya dikkat edin. Yüzde karakteri ise 32 bitlik (dört byte) tamsayı olduğunu gösterir. Bunlar olmazsa AmigaBASIC bir değişkeni 'kayar nokta' (floating point) kabul eder, bu da bizim amacımıza uymaz. .
O library “diskfont.library”
1 library “graphics.library”
2
3 declare function OpenDiskFont
& library
4 declare function OpenfFoni&library
5
6 — 1
7 fontnodisk 4 - 0
8
9 Demo:
10 restore
11 print “Bunlar FONTS:'taki font-
lar:”
12
43 for x—1 to 10
14 read
15 PrepareFont Font$,
fontdisk»
16 print:print “punto”
17 next x
18
19 print “Tekrar ROM'daki fonta
geri döndük:”
20
21 read 4
22 PrepareFont
fontnodisk»
23 print Font$,Boy» “punto”
52 end if
53 end sub
Programın 0 ve 1 numaralı satırlarındaki library emirleri ile, hangi library'leri kullanacağımızı biliyoruz. Eğer gereken .bmap dosyaları veya (diskette duran) library'lerin kendileri bulunamazsa burada “File not found” hata mesajı gelebilir. AmigaBASIC'ten aynı anda en fazla 5 library kullanabilirsiniz. 3 ve 4 numaralı satırlar da ise fonksiyon olarak kullanacağımız, yani geriye bir değer vermesini beklediğimiz iki emiri birer birer 'declare' ediyoruz, yani sisteme bildiriyoruz. Daha sonraki 13. satırdan başlayan FOR döngüsü içinde, Font adını ve boyunu READ ile okuduktan sonra 15. satırda PrepareFont adlı Subprogramı çağırarak o fontu açıyoruz. 16. satırda yeni fontumuz ile bir şeyler yazdıktan sonra bunu 10 kez tekrarlıyoruz. Burada kullandığımız fontlar 25 ve 26, satırlarda ki DATA satırlarında veriliyor. Daha sonra 28, satırdaki DATA satırından okunan topaz 8 fontu ile 22. satırda tekrar
24
25 data Topaz,11,Ruby, 12,Opal,
15
26 dataGarnet,16,Emerald, 17, Di-
amond,20,Emerald,20,0pal9
27.
28 data topaz,8
29
30 library coles
381
32 end
33
34 sub
diske) static
35 FontNames 4 “font” -chrS(0)
36 FontBoy4 —- Boy»
37 EskiFont&-peekl(window(8)-- 52)
38
39
40 TextAttr&(1)—
41 TextAttr& - varptr(TextAtrr&(0))
42
43 if — 1 then
44 YeniFont&- OpenDiskFont&
Textttr&)
45 else
46 YeniFont&—openFont&(TextAttr&)
47 end if
48
49 if YeniFont& — O then
50 call CloseFont(EskiFont&)
51 call
eski fonta dönülüyor. LİBRARY CLO-SE ile library'ler kapatıldıktan sonra program bitiyor. Sıra geldi PrepareFont adlı Subprogram'ın nasıl çalıştığını açıklamaya. 35. satırda, Names adlı string değişkene font adını, arkasına “.font” sonekini ve C dilinde string sonunu gösterdiği için O sayısını karakter olarak ekliyoruz. AMIGA işletim sistemi çoğu C dilinde yazılmış olduğu için, bazı yerlerde C'nin normalde yaptığı şeyleri yapmak için BASIC'ten bazı hileler başvurmamız gerekiyor, buradaki CHRS(0)'da bunlardan biri. Şimdi hafızada 'structure' avına çıkıyoruz. Bunlar yine C dilinde kullanılan ve bileşik bilgi gruplarını sakamaya yarayan hafıza parçalarıdır. Pencereler, fontlar ve benzeri her önemli olay için gereken bilgileri AMIGA işletim sistemi bu tür structure'lar halinde tutar, 37. satırda ile penceremizin RASTPORT structure adresini buluyoruz, buna 52 ekleyip oradan da pencereye o anda bağlı olan Font'un adresini buluyoruz, eğer yeni fontumuzu açabilirsek bu eski fontu kapatacağız. Adresler 32 bitlik sayılar oldukları için bu adresi saklamak için yine değişkenimizin adına & karakterini ekliyo- TUZ. Şimdi ise, açmak İstediğimiz font'a ait istediğimizi taşıyan bir structure yaratmamız lazım. BASIC dili structure türü değişkenlerden anlamadığı için yine bir hileye başvuruyoruz. İstediğimiz, TextAttr adlı bir structure, Bunun yapısı ise şöyle: ilk önce 4 byte font adını taşıyan string'in hafızadaki adresi, 2 byte font'un yüksekliği, 2 byte da stil bilgisi ki, bunlara biz O veriyoruz. Hilemiz ise, 4 bayt'lık tamsayı elemanlardan oluşan bir dizi (array) doldurup, bunu kullanmak. TeptAttr& adını verdiğimiz dizinin ilk elemanına 39. satırda FontNames adlı isim değişkeninin adresini SADDI ) (String ADDress) ile bulup yerleştiriyoruz. Font boyunu sonraki 2 byte'a koymak için, bunu 2 üstü 16 yani 65536 ile çarpıp dizinin ikinci elemanına (1 numaralı eleman) yerleştiriyoruz. Sonra 41. satırda ) (VARiable PoinTer) ile bu dizinin (daha doğrusu dizinin ilk elemanının) adresini bulup bunu da TextAttr& adlı değişkene koyuyoruz. Artık fazla bir şey kalmadı, açılacak font'un ROM'da mı yoksa diskte mi olduğuna göre OpenFonil ) fonksiyonlarını, parametre olarak TextAttr adresimizi vererek çağırıyoruz (satır 44 ve 46.) Hatırlayacaksınız, bunları başta declare etmiştik, bunların geri verdiği değer hafızaya yüklenen Font'un adresi. Eğer font başarıyla yüklenebilmişse, bu değer sıfırdan büyük olacaktır, eğef bir sorun çıkmışsa değer sifirdır. Satır 49'da bunu kontrol ettikten sonra 50. satırda CloseFontl ) ile eski fontu kapatıyoruz, 51. satırda da SetFontl ) ile penceremizin RASTPORT'una (Bunun adresini yine windowf(8) ile elde ediyoruz) yeni fontumuzu yerleştiriyoruz. 53. satırda Subprogramımız da bitiyor. Evet, BASIC örneğimizi de verdik. Gelecek sefer Assembler örneği vermeyi düşünüyorum. Eğer Assembler örneğini daha önce İsteyip de bana geç yazdığım için kızanlar ya da Pascal'da hiç örnek vermediğim için üzülenler varsa (Var mı acaba?), bu gibi istekler için bana yazıp İsteklerinizi belirtmenizi rica ettiğimi hatırlatayım. Unutmayın, ağlamayan bebeğe mama vermezler. Son olarak yazımın başındaki ricamı tekrarlamak istiyorum: LÜT-FEN aklınıza takılanlar, yazıda anlaşılmaz bulduklarınız ya da daha çok İlginizi çeken ve şimdiye kadar benim değinmediğim konular hakkında fikirlerinizi ve isteklerinizi belirtin. Dergiye 'AMIGA İşletim sistemi' rumuzu ile yazarsanız İsteklerinize yanıt vermek için elimden geleni yapacağım. Tekrar görüşünceye kadar size mutluluklar ve (AMIGA'nıza ve buna dayanabilmeniz için) sabır dilerim.