Bu sayfadaki yazılar
Sayfanın metni
Sayfa 39
cmp.b bne.s sub.w sub.w add.w add.w move.İl
Hove
Kx6 movel
Bekle2 dbf dbf
Accc
move.l cmp.b bne.s sub.w sub.w add.w add.w move.l
KxB f
Bekle22 dbf dbf
RenkAc cmp.b
move.l move.l move.l move.l move.l move.l move.l move.l bsr.W move.l
KXI OF
bne.s add.w move.l
HizAz abyel
move.l
Seroller cmp.l
ne.s cmp.l beg.s bne.w
Basma bsr.W
Bas
move.l
Kayma rts Kapanmaca
KXI
mOvel
KX4
move.l cmp.b bne.s sub.w
cc #$0100,CI #$0100,C2 #$0100,C3 #$0100,C4 #$5TEf,d6 d6,Bekle2 d7,Acc #80,d7 #S$İf,SAfFfOOG Accc #$0100,C11 #$0100,C12 #$0100,C13 #$0100,C14 #$1fff,d6 d6,Bekle22 d7,Accc #LBitMap,a0 #DBitMap,al #0,Sx #0,Sy #90,Dx #40,Dy #160,Nx #140,Ny Copy #4,d7 RenkAc #$0030,RX1 #S$8ffEf,d6 d6,HizAz d7,RenkAc #$ff,ScrollOnOff
#$ff,ScrollOnOff Kayma #4,ScrollFlag Bas Basma SerollDatas Scroll #1,ScrollFlag
ScrollDatas Scroll Decode
CocoliFaS
#10,d7 KXI #$0110,ScrollRengi
d6,KX2 d7,KXI
#3,d7 KX3 #$0030,RX1 #STEf,d6 d6,KX4
d7,KX3 Clear
#SEF,SAffOOG KX5
KX6
KX7
KX9
KX10
KXI12
Init
move.l move.l move.l move.l lea move.l move.l move.l jsr lea
#$0100,C11 #$0100,C12 #$0100,C13 #$0100,C14 #$1fff,d6 d6,KX6 d7,KX5 #5,d7 KX7
#$0100,CI #$0100,C2 #$0100,C3 #$0100,C4 #$5fff,d6 d6,KX8 d7,KX7 #S3ffff,d6 d6,KX9
#2,d7 KK10 #$0300,R1 #$0300,R11 #$0111,R2 #$0300,R3 #$0300,R13 d6,KX11 d7,KX10
d6,KX12 Xxx onoff $dffOa6 $dffOb6 $dff0Oc6 $dffOd6 $dffOa8 $AffOb8 $dff0c8 $dffOd8 #$f,$dff096 #1,$bfe00l Kapanmaca GfxBase,a6 SysCop,50(a6) 4,a6 -138(a6) -414(a6) (a7)4,a0-a6/d0-d7
4,a6 -132(a6) GfxName,al -408(a6) d0,a6 d0,GfxBase 50(a6),SysCop #Copper,50(a6) SBitMap,a0 #1,d0 #496,d1 #8,d2 -390(a6)
-198(a6)
SatirSonu
move.l
rts
add.l
Decode lea
lea move.l move.b cmp.b beg.b cmp.b bne.b move.l bra.b
Devam sub.b
Copy
Scroll
mulu move.l move.l lea lea move.l move.l move.l move.l add.l TİS move.l move.l move.l move.l move.l move.l move.l move.l move.l move.l jsr rts cmp.b bne.s move.l move.l move.l move.l move.l move.l move.l move.l
#SBitMap,SRast44 SBitMap,a0 #Buffer,8(a0) LBitMap,a0 0
#160,d1 #140,d2 -390(a6) LRast,al -198(a6) #LBitMap,LRast44 LBitMap,a0 #LBuffer,8(a0) #LBuffer4(20*140),12(a DBitMap,a0 #1,d0 #360,d1 #256,d2 -390(a6) DRast,al -198(a6) #DBitMap,DRast44 DBitMap,a0 #$70000,8(a0)
#1,ScrollTextPointer ScrollTextPointer,a0 Tablo,al (a0),a0 (a0),d0 #$0a,d0 satirsonu #"a",d0
devam #$7a000,ScrollTextPoint Decode #$20,d0 #8,d0 O(al,d0),Sx 4(al,d0),Sy SBitMap,a0 DBitMap,al #350,Dx #240,Dy
#8,Ny #1,ScrollTextPointer
GfxBase,a6 Sx,d0 Sy,d1 Dx,d2 Dy,d3 Nx,d4 Ny,d5 #$c0,d6 #255,d7 #0,a2 -30(a6)
#0,$dff006 Scroll GfxBase,a6 #DRast,al DeltaX,d0 FirstX,d2 FirstY,d3 SecondX,d4 SecondY,d5
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 38
nız ıda nı- ZOrek lim resadolardemel Te-
)tor'unda tek ler, eri-
ÇUŞ yer lare derada
Selam!!! Artık komutları bitirdiğimize göre, bu köşeye biraz fazla yer ayıracağım; zira komutlar için bu köşeye üç aydır devam edemiyorduk. Bu ay bu kadar beklediğiniz için ufak bir intro source'u veriyorum. İntroyu doğru olarak çalıştırmak için, diskete bir de BNXTXT isimli bir file yerleştirmeniz gerekmekte. Bu file, intro'daki scroll text'i içerecek olan file olacaktır. Bu file'daki bütün karakterler büyük olarak yazılmalı. File'ın sonuna da biraz boşluk (yaklaşık 20-30 karakterlik) koyduktan sonra ufak <a> harfini ekleyin. Bu sayede scroll text basma rutini, yazının sonuna ulaşıldığını anlayarak scrollun tekrar ilk karakterden başlamasını sağlar. Scroll text dosyası içinde anlaşılamayan (font datalarında bulunmayan) bir karaktere rastlanıldığında, bu karakter otomatik olarak atlanılacaktır. Şayet scroll text dosyası aktif directory'de (genelde ana directory) bulunamazsa, program size ses sinyali verecek ve scroll text yerine bir uyarı mesajı ile karşılaşacaksınız. Bu uyarı mesajı da ErrorText label'ından sonra bulunmakta. Gelecek ay, bu introyu hep beraber detaylı bir şekilde inceleyeceğiz. İntro'nun doğru olarak çalışabilmesini sağlamak için üç file'a ihtiyacımız var. Fakat üç file'dan biri olan font datalarını ben programın sonuna satırları olarak ekledim. Font dataları 496 byte uzunluğunda olduğundan, bu pek sorun çıkarmaz umarım. Merak edenlere belirteyim, fontlar 8x8 boyutlarında IFF olarak hazırlanmış. Gelecek ay scroll ve karakter algılama rutinlerini incelerken bu konuya daha detaylı değineceğim. Kalan iki data file'ından ilki, gösterilecek olan logo'muz; bunu DPaint ile 160x140 boyutlarında tek bitplane olarak hazırladıktan sonra bir IFF converter (IFF Master yine de en iyisi!) programıyla bitmap haline çevirmemiz gerekmekte. Çevrim sırasında resmin sadece 160x100'lük alanını çerçeveleyip almanız çok önemlidir. Bu yaratılan yeni file ismine de logo.bm adını verelim. Gereksinim duyduğumuz ikinci dosyanın adı da mod.astaroth; bu da Astaroth oyunundan aldığımız bir müzik. Bunun yerine Future Composer ile hazırlanmış herhangi bir parça (modül olarak!) da kullanabiliriz. Müzik istemiyorsanız, programın 'bsr Init Music', 'bsr Play' ve End altrutinindeki bsr komut satırlarını kaldırmanız (ya da başına ';' işareti koymanız) yeterli. Bu şekilde programınızın, müzikle ilgili rutinlere hiçbir şekilde dallanmamasını sağlayabilirsiniz. İsteyenler programın sonuna eklemiş olduğum müzikle ilgili rutinleri de silebilirler. Bu şekilde source'unuz kısalabilir. Fakat bunun da pek önemli olacağını sanmam. Programın en sonundaki incbin satırları yardımıyla, bahsettiğim bu iki data file'ı assemble edilen programın sonuna eklenecektir. Bu kadar tiyo şimdilik yeter, programın çalışmasını (özellikle scroll ile ilgili rutinleri) iyice inceleyip çözmeniz için bir ay vaktiniz var. Çözemeyenlere gelecek ay bütün source'u kısaca açıklayacağım. Hadi şimdilik hoşçakalın...
org $60000 load $60000 (0) movem.l a0-a6/d0-d7,-(a7) bsr.w Init Music InitVars bsr.W Clear bsr.b LoadText Init move.l — #2,d7 : bsr.W Acilmaca Loopl cmp.b — #0,$dff006 bne.b Loopl bsr.W Scroller bsr.w Play btst #6,$bfe001 bne.s Loopi bra.W End LoadText move.l 4,a6 lea Dosname,al İsr -408(a6) move.l — d0,a6 move.l — #1005,d2 move.l — İST -30(a6) tst.l dO beg.b CannotOpen move.l — d0,FileHeader move.l — move.l — #$7a000,d2 move.l jsr -42(a6) move.l — İsr -36(a6) move.l * a6,al move.l — İsr -414(a6) BackOpen bset #3,$bfd100 nop nop bset #7,$bfd100 nop nop belr #3,$bfd100 rts
Cem GENCER CannotOpen move.l — #$7a000,a0 move.l — #ErrorText,al move.l — #|ErrorEnd-ErrorText-1)1,d7 Copytext move.b (a1)4,(a0)4- dbf d7,copytext lea ErrorText,al move.l — #1,d7 TonUret bsr.w ErrorTone dbf d7,TonUret bra.b BackOpen move.w #0,RXİ move.w #0,RI move.w #0,R2 move.w #0,R3 move.w #0,Rİ1 move.w #0,R12 move.w #0,R13 move.w #$1807,CI move.w #$1907,C2 move.w #$la07,C3 move.w #$1b07,C4 move.w #$9007,CI11 move.w #$9107,C12 move.w move.w #$9307,CI14 move.w #$0ff0,ScrollRengi Tts Errortone move.w move.l — #Wave,$dff0a0 move.w
move.w #$3f,$dff0a8
move.w #$8201,$dff096 move.l — #Ton,a0 Tonp move.w #$8000,d1 Pau dbf d1,Pau move (a0)4,$dff0a6 beg.b EndT bra.b TonP EndT move #$01,$dff096 Tts Ton dc.w 440,1200,850,1088,0 even Wave dc.b 127,-127 Acilmaca cmp.b #$ff,$dff006 bne.s Acilmaca add.w #$0300,R1 add.w — #$0300,RI1 add.w — #$O111,R2 add.w — #$0111,Rİ2 add.w — #$0300,R3 add.w — #$0300,R13 move.l — #$İfff,d6 Beklel dbf d6,Beklel dbf d7,Acilmaca move.l — #5,d7