Global Trash
Retro bilgisayarOlob
Merhaba... Democular, bu aydan itibaren çok değişik ve ilginç bir köşe ile karşınızdayız: İntro ve demo teknikleri. İntroların ve demoların ne demek olduğunu hepiniz biliyorsunuz. Cracker gruplarının oyunların başlarına attıkları kısa programlara intro denir. Yine bu kişilerin Amiga'nın bilinmeyen özelliklerini kullanıcıya göstermesi ve kendilerinin ne kadar uzman olduklarını belirtmeleri amacı ile yapılan programlara ise demo denir. Bunun köşemizle alakası şu: Sizlere intro ve demo nasıl yazılır, neler kullanılır Assembler dilinde göstereceğim. Bir demo meraklısı, her zaman için bir şeyler yapabilmek istemiştir. Bu köşeyi takip ederek kendi yaptığınız grafik ve sesleri bir program ile birleştirmeyi öğreneceksiniz. Ayrıca çeşitli efektler ile birçok kimseyi etkilersiniz!! Şunu da unutmayın ki, böyle bir köşeyi ilk defa Amiga Dünyası dergisinde bulacaksınız!! Evet, sizlere çeşitli intro efektleri anlatacağım; tabii ki Makina dili Source'leri ile beraber!! Böylece programcılığa ilk adımı atmış olacaksınız. Yazı dizimiz, zaman zaman Show Time ile paralel gidecek. Çünkü Show Time'da açıklanan tekniklerini bu köşede göstereceğim!! Eğer kendinizde bazı eksiklikler hissederseniz, acele olarak Cem Gencer'in Assembler yazılarına ağırlık vermenizi tavsiye ederim. Çünkü örnekleri anlayabilmeniz için belli bir seviyede Assembler bilmeniz gerekiyor (korkmayın çok değil!). Yine de ben gerekli yerlerde assembler komutları ve datalar hakkında hatırlatmalar yapacağım. Şimdi sizlere, ileride kullanacağım bazı terimlerin açıklamalarını vermek istiyorum. Scroll...: Mesajların yazıldığı genellikle sağdan sola kayan yazı. Bazen çeşitli yönlerde olabiliyor: up scroll, sinus scroll vs...
Intro'yu yapan grup isminin bir şekilde çizildiği grafik. ««! İntro'yu yazan programcı. , Replay R.: Intro içinde müziği çalmak için kullanılan program parçası (PLA-YER). Source C.: Programcının yazdığı programın orjinal hali. Amiga'nın içindeki özel bir entegrenin adresi veya 68000'in kullandı- Bı boş alanlar (daha sonra açıklanacak). Renk register'ları ve ekrandaki elektron taraması ile oluşturulan renk çubukları. Blitter..: Çok hızlı grafik kopyalayan Amiga özel birimi.
Hağan ÜNALDI
Bob..: Blitter'in kopyaladığı grafik parçası. b Sprite...: Bob'ların haricinde başka bir grafik birimi. Crunch...: Program datalarını sıkıştırma işlemi. Bitplane.: Amiga'nın tanıdığı, renkle orantılı grafik alanı (bkz. Sayı 1). Parallax.: Her bir bitplane'nin ayrı ayrı kayması (mesela'Shadow of the Beast). Demo.....: Amiga'nın özelliklerini meydana çıkarmak için yapılan gösteriler. Şimdilik bu kadar bilgi yeter; ilerde gerekli yerlerde bilgi verilecek. Bu arada biter adet MasterSeka v1.80 ve ASM-ONE edinmeniz şart; çünkü örneklerimizi bu programlarla yazacağız. Bir de grafik işlemleri için Kefrens IFF Converter adlı utility gerekli olacak. Bu programların birçoğu daha önce açıklanmıştı. Sayfalarımıza şöyle bir göz atacak olursanız, geniş bir source code ile karşılaşacaksınız. Nedeni, bu ay çok iyi tekniklerin bulunduğu bir assembler köşesi ile ilk inttromuzun çalışan bir kısmını yazmamız olacak!!! Evet, bu ay bir intro yazacağız. Bu, her ay gelişerek esas halini alacak. Haydi, hep beraber başlayalım... Dikkatle takip edin. Bir intro veya demo yazarken, programcının en zorlandığı yer design'dir; yani tasarım. Bu niye zor diyeceksiniz, niye mi? İlk önce ne yapacağımıza karar vermemiz gerekiyor. Benim sizlere göstereceğim bu ayki mde, ekranın en üstünde 8x8 boyutlarında bir scroll var. Burada bir takım mesajlar yazacağız. Hemen altına, kendi çizdiğiniz logonuzu çıkartıp logonun altına ve üstüne raster bar; logonun hemen altına da stars yani parallax şeklinde kayan yıldızlar koyacagız. Biraz işleri karıştıralım, mutlaka bu hepinizin hoşuna gidecek ve sizi bir süre SEKA başına bağlayacaktır. Alttaki yıldızların üstüne zıplayan bir raster bar (renk çubuğu) koyalım. Hemen arkasına bazı mesajlarımızın gösterileceği bir text screen. Bu da yetmiyor; textlerin içini renklerle doldurup, bu renkleri yukarı doğru cycle edelim (renk kaydırması tekniği). Sanırım hepiniz tüm bunlara çok sevindi İntromuz bunlarla kalmayacak, istediğiniz bir noisetracker modülünü de ekleyeceğiz yani müzikte olacak. Sizlerden gelen isteklere göre introl: 1zı şekillendirmeyi düşünüyorum. Bi lattıklarım, ilk yapacağımız intronun tamamı. Ben bu ay size sadece Scroll, altında raster bar ve logo hazırlamasını yazdım. Gelecek aylarda yeni eklemeler ile devam edeceğiz. Bunun için her zaman Global Trash köşesine yazın. Intromuzu, Tablo 1'de görmeniz mümkün. Şimdi Deluxe paint ile logonuzu çizin (32 renk) ve 320x100 boyutlarında kaydedin. Logo çizmekte zorlanırsanız, yine bu sayıda Grafik teknikleri köşesinde açıklanan, 320x100x5 şeklindeki logo çalışmasını inceleyin. Sonra Kefrens TEF converter ile logonuzu yükleyin ve yukarı kısımdan Raw norm'u seçin, Color map'ı off yapıp logonuzu kaydedin. Bu işlemlerden sonra Raw norm yazan yerin üstüne gelin ve onu Copper yaparak başka bir isimde kaydedin. Copper yapmamızın sebebi, logonun renk haritasının otomatik olarak kaydedilmesini saglamak... Bu yaptıklarımız logoyu IFF formatından (Deluxe Paint formatı) RAW formatına (oyun ve demolardaki grafik formatı) çevirmek içindi. OK? Herhalde hepiniz doğru olarak bu işlemleri yaptınız. Evet, şimdi Star editor adlı programa ihtiyacınız var. Star efektini gelecek ay yapacağız; ama yıldızları şimdiden oluşturmanızda fayda var. Çünkü, introdaki yıldızları bu program ile oluşturacağız. Starları yapıp source olarak kaydettikten sonra, yapacağımız tek şey kalıyor. Büyük bir sabırla Tablo 1'deki source'ı, aynen yukarıda tavsiye ettiğim programlardan birisi ile yazmak. Yazdıktan sonra tabloda Renk register'ları yazan yerin hemen altındaki boş satırın üstüne gelin ve oraya tuşu ile copper olarak kaydettiğiniz file'ı yükleyin (insert). Artık renk register'ları da hazır, sadece sayıların arasındaki boşlukları silin, hata çıkabilir. Şimdi "A" tuşu ile intromuzu derleyin, herhangi bir text hatası çıkarsa bu size belirtilir. Çıkmazsa, source'ı "W" ile mutlaka kaydedin (kesinlikle source'u saklamadan çalıştırmayın ve hiç bir işlem yapmayın). Hiçbir syntax hatası çıkmazsa ve source'u kaydettiyseniz dataları şu sekilde yükleyin; Assembler programında "RI" (seka için) veya "RB” (asm için) yazıp, logonuzu $50000 adresine yükleyin ve jstart ile çalıştırın, sonuç karşınızda. Eğer logo bozuk çıkarsa — 320x100 değil — demektir! Amiga'nız kilitlendiyse, bu yazım sırasında bir rakam hatası yaptığınız anlamına geliyor! Tekrar yükleyin ve kontrol edin. İlerde istediğiniz boyutlarda ekran kullanyn göstereceğim sabırsızlanmayın lüt-
Daha önce belirttiğim gibi, tekniklerimiz yeni gelen demo ve introlara göre olacak. Fakat ben size garantili olarak şu teknikleri öğreteceğim: Sprite kullanımı ve birçok introda gördüğünüz kayan yıldız efektleri, ekrandaki çeşitli yaratıkları hareketlendirmek ve bunların animasyonu, bob ve kullanımı, çeşitli renk efektleri (eycle,flash,fade vs.), Copper efektleri, Raster efektleri (buna ilgi artarsa plasma!), bazı scroll ve text rutinleri, çeşitli library rutinleri ve kullanımı. Disk, klavye, joystick kontrolleri gibi şu anda popüler intro ve demo tekniklerini zamanla göstereceğim. Sizler belli bir seviyeye geldikten sonra Vector'ler gibi üç boyutlu objelerin kullanımı da işlenebilir. Ayrıca gelecek ay, intromuzun başına sahte bir Guru Meditation hatası eklemeyi öğreneceğiz. Daha sonra bir logo efekti ile logomuza başka bir boyut vereceğiz. Fakat ben bütün bu yapacaklarımızı sizin kendi fikirleriniz doğrultusunda işlemeyi düşünüyorum! Mektup yazmayı ihmal etmeyin...
,Bu ay source'umuzun tam açıklamasını vermedim. Çünkü bu sizin isteğinize göre olacak. Sadece yan kısımlarına kısa açıklamalar mı, yoksa register işlevleri dahil tüm açıklamasını mı istediğinizi lütfen bize yazın. Tüm bunların esas hedefi, Türkiye'de oyun ve iş programları yazacak yeteneklerin çoğalmasına yardım etmektir. Unutmayın ki, AMIĞA sadece bir oyun makinası değildir. Yine de takdir sizin. Evet, bu yeni köşemizi umarım beğenmişsinizdir. Gelecek aya intromuzu hep beraber geliştireceğiz. Bakmışsınız bir de Mega- Demo yapmışız (niye olmasın...?)!! Takıldığınız herhangi bir yerde veya bu konuyla ilgili her türlü görüşlerinizi ve fikirlerinizi Global Trash adlı yazabilirsiniz. Mektuplarınızı bekliyorum. Bir de Show Time ile birlikte büyük bir demo yarışması açmayı düşünüyoruz, bekleyin. Gelecek ay görüşmek üzere... Son bir Not: Artık Red sector demomaker kullanmayı bırakın!
ak dk ak
e PROGRAM: B.KAĞAN ÜNALDI
ş* GLOBAL TRASH DEMO TEKNİKLERİ ÖRNEK 1A
*
*
*
*
ak ak ak ak akal
org $30000 adresine yerleştirir.
load — $30000
start: movem.l a0-a6/d0-d7,-(a7)
ştaskları kapat
;graphics.library aç
;hayır programdan çık
;bitmap rastport açma rutini
move.l 4,a6 şexec library-adresi
jsr -$84(a6)
lea gixname,al açmak için adres
jsr -$198(a6)
tst.l d0 ;library açıldı mı?
beg exit
movea.l d0,a2 ;graphics.library adresi
move.l dO,gfxbase — ;bu adresi sakla
bsr initoper
adda.l #$32,a2 ;copperlist adresi
move.l a2,oldaddy ;copper okuma adresi
move.l (a2),0ldcop copperlisti sakla
move.l #newcop,(a2) ;bizim clisti çalıştır
mouse: cmpi.b #255,$dff006 şelektron sayacı
bne.s mouse ;işlem bitti mi?
bsr scroll ;scroll (yazı kaydırma) rutini
btst #6,$bfe00l — ;mouse'a basıldı mı?
bne mouse ;hayır tekrar kontrol et
move.l oldaddy,a2 ;copper adresi
move.l oldcop,(a2) evet eski copperi çalıştır
move.l şexec adresi
İsr -$8a(a6) ;taskları aç
move.l gfxbase,al
;graphics.library adresi
-$19e(a6) library'i kapat
exit: movem.l (a7)4,a0-a6/d0-d7
out: — Tts ;programdan çık
initoper:
move.l gixbase,a6 — ;graphics library adresi
move.l #bitmap,a0 — ;bitmap adresi
move.l ;Depth (1 bitplane)
move.w #360,d1 ;width (320 pixel eni)
move.w #100,d2 ;height (100 pixel boyu)
jsr -390(a6) şinitbitmap
move.l #rastport,al — ;rastport adresi
-198(a6) ;initrastport
lea bitmap,a0 ;bitmap adresi
move.l #$60000,8(a0) ;scroll alanı bitmap--8 'e
move.l ;bitmap adresi
lea — ;rastport adresi
jsr -48(a6) ;els (ekranı temizler)
Tts ;rutine geri dön
seroll: — move.l gfxbase,a6 ;gfx library adresi
lea rastport,al — ;rastport adresi
move.l #2,d0
cir.l di
cir. d2 ;minx
cir.l d3 ;miny
move.l #360,d4 ;maxx
move.l 40,d5 ;maxy
İsr -396(a6) ;scroll raster
lea timer,a2 ;zamanlayıcı
adda.l ;bir artır
cmpi.l #4 (a2) :4 oldu mu?
bne out ;hayır çıkışa git
cir.l (a2) şevet zamanlayıcıyı sil
move.l #rastport,al — ;rastport adresi
move.w #324,d0 ;x (324. pixele bas)
move.w #10,d1 ;y (10. pixele bas)
İsr -240(a6) ;move cursor (İocate)
move.l ;rastport adresi
move.l txtbase,a0 — ;harfin adresi
move.w #1,d0 ;1 adet harf
jsr -60(a6) ;printext (harfi bas)
lea — adresi
adda.l #1, (a4) ;bir sonraki texte gel
move.l (a4),a3 şesas text adresi
tst.b (a3) ;text sona geldi mi?
bne out ;hayir cikisa git
move.l #scrolltxt,txtbase — scroll'u başa al
newcop:
de.w $008e,$2c81,$0090,$2cc1,$0092,$0038,$0094,$00d0
de.w $0102,$0000,$0104,$0000,$0120,$0000,$0122,$0000
de.w $0108,$0006 ;modulo — 6
$0100,$1200 ;scroll tek bitplane (2 renk)
de.w $00e0,$0006,$00e2,$0000 — ;bitplane points ($60000 adres)
de.w $0180,$0000
;— SCROLL FONTUNUN İÇİNDEKİ RENKLER -—-
dec.w $0180,$0000,$2f07,$fffe
de.w $0182,$0321,$3007,$fffe
de.w $0182,$0432,$3107,$fffe
de.w $0182,$0543,$3207,$fffe
dc.w $0182,$0654,$3307,$fffe
de.w $0182,$0765,$3407,$fffe
dc.w $0182,$0876,$3507,$fffe
$0182,$0987,$3607,$fffe
de.w $0182,$0a98,$3707,$fffe
de.w $0182,$0ba9,$3807,$fffe
dc.w $0182,$0cba,$3907,$fffe
dc.w $0182,$0dcb,$3a07,$fffe
de.w $0182,$0000,$3f07,$fffe
de.w $0108,$0000,$010a,$0000 — ;grafik modulosu
;— renk çubukları | ---
de.w $0180,$0000,$4007,$fffe
de.w $0180,$0111,$4107,$fffe
de.w $0180,$0222,$4207,$fffe
de.w $0180,$0333,$4307,$fffe
de.w $0180,$0444,$4407,$fffe
de.w $0180,$0555,$4507,$fffe
de.w $0180,$0666,$4607,$fffe
de.w $0180,$0777,$4707,$fffe
de.w $0180,$0888,$4807,$fffe