Gelişmiş Assembler

Merhaba; işte yine güzel geçen bir yaz tatili bitti. Kış da geldi sayılır. Eh, 30. sayıya da ulaştığımıza göre artık Assembler öğrenmiş sayabiliriz kendimizi. Fakat hala çok pratik yapmamız lazım. Bu yüzden de bu köşeyi artık sırf ilgi çeken enteresan source'lara ayırmak istiyorum. Gelişmiş Assembler köşesini de kaldırdım ve bu köşeyle birleştirdim. Daha önceki sayılarda belirtmiş olduğum tüm kitaplardan faydalanarak vermiş olduğum tüm source'ları gayet rahat anlayabilirsiniz. Bu kitaplardaki bilgileri tekrar burada yazmayacağım. Aşağıda gerekli kitapların listesini bir defa daha bulabilirsiniz: * Amiga Hardware Reference Manual * Amiga ROM Kernel Reference Manuals: - Includes and AutoDocs - Libraries and Devices - Exec * Mapping the Amiga * Inside Disk-drives * Inside the Amiga Her ay bir ya da iki source vermeye çalışacağım. Bunlardan biri demo ağırlıklı olacak; ikincisi sistem rutinlerini DOĞRU olarak kullanan ufak utility programları olacak. Zaman zaman da, benim ilgimi çeken bir source vermeyi düşünüyorum. Bu source'lardan bazıları datalara ihtiyaç duyacaklar. Bu dataları data satırları olarak yayınlamaya kalkışırsam bütün dergiyi kaplayacağından ve kimsenin bunları girmeye kalkışmayacağından aynen dergiden şutlanırım. Bu yüzden data file gereken source'ların datalarını ve source'ların kendilerini direkt benden temin edebilirsiniz. Bunun için boş bir disketi 1000 TL'lik posta puluyla beraber aşağıdaki adrese gönderin. Çekeceğim diskette şimdiye kadar yayınlanmış tüm source'ları doğru olarak bulabilirsiniz. İşte adresim: Cem GENCER, PK 46, 81110 Bostancı-İstanbul. Gelelim ilk rutinimize; bu herkesin yakından tanıdığı 3 boyutlu gibi gözüken bir yıldız rutini. Birçok demo ve intro'da da arka fon olarak karşımıza çıktı. İkinci source'umuz gayet kısa; yaklaşık 50 satır.

Bu source'u eski Almanca dergilerimi karıştırırken buldum. Disk driver'ınızın motorunu değişik şekillerde ve hızlarda hareket ettirerek müzik çalıyor. Disket sürücüsüne hiçbir zararı yok. Sadece programı çalıştıracağınız zaman disket sürücüsüne ya bozuk (çizilmiş) bir disket takın ya da hiç disket takmayın. Programı biraz kurcalarsanız, sizin istediğiniz bir melodiyi de ekleyebilirsiniz. Şimdilik bu kadar; hoşçakalın ...

3D YILDIZ RUTİNİ

; Written by Cem GENCER
dg
movem.l  d0-d7/a0-a6,-(sp)
bsr.S ClearBitplanes
move.l 4,26
jsr -132(a6)
lea $Aff000,a6
lea CopList(pe),a0
move.l a0,$80(a6)
clr.w $88(a6)
move.w — #$20,$96(a6)
bsr.S PrepareStarMovement
MainLoop
cmp.b
bne MainLoop
bsr.S MoveStars
btst #6,$bfe00O1
bne.S MainLoop
move.l 4,a5
move.l 156(a5),A1
move.l 38(A1),$80(a6)
move.w — #$8020,$96(a6)
move.l
jsr -138(a6)
Mmovem.l (sp)t,d0-d7/a0-a6
rts
ClearBitPlanes
lea BitPlane,a0
move.w — #$5dbf,d0
ClearLoop
cir.b (a0)4
dbf d0,Clearloop
rts
PrepareStarMovement
move.w — #$a00,d6
move.l #$fEfOOO,mmd1
lea . PosControl(pec),a2
lea Retter,al
PrepareLoop
bsr.L
move.l
move.l
sub.w
bne.S
lea
rts
MoveStars
move.w
MoveLoop
move.l
move.l
belr
belir
belr
GoOn bsr.L
bsr.L
move.l
move.l
move.l
bec.S
bset
NotSetl
İsr.w
bec.S
bset
NotSet2
İsr.w
bec.S
bset
NotSet3
sub.w
bne.S
Tts
RestoreAdder
lea
add.l
add.l
move.l
move.l
Loopl
move.l
Loop2
cir.b
cir.b
çlr.b
dbra
move.l
Loop3
sub.l
cir.b
cir.b
GetANewStar
#BitPlane,(a1,d6.W)
#6,4(a1,d6.W)
#820,d6
PrepareLoop
CMPundColor(pe),a4
#$a00,d6
O(a1,d6.W),a0
4(a1,d6.W),d0
d0,$1f40(a0)
d0,$3e80(a0)
DoMove
ComputeAddress
a0,0(a1,d6.W)
d0,4(a1,d6.W)
8(a2,d6.W),d4
#1,d4
NotSetl
d0,(a0)
NotSet2
d0,$1f40(a0)
NotSet3
d0,$3e80(a0)
#$20,d6
MoveLoop
BitPlane,a0
#$1f40/2,a0
#20,a0
#78,d0
di,d2
-(a0)
$1£40(a0)
$1f40*2(a0)
d2,Loop2
di,d2
#40,20
(20)
$1f40(a0)
$1f40*2(a0)
dbra d2,Loop3
move.l di,d2
#1,d2
Loop5
cir.b
clr.b $1f40(a0)
cir.b $1f40*2(a0)
dbra d2,Loop5
move.l — di,d2
add.l #1,d2
Loop6
add.l #40,a0
(a0)
cir.b $1f40(a0)
clr.b $1f40*2(a0)
dbra d2,Loop6
#2,d1
dbra d0,Loop1
move.l #0,Adder
rts
DoMove
move.l 12(a2,d6.W),d3
move.l 16(a2,d6.W),d4
add.l 0(a2,d6.W),d3
add.l 4(a2,d6.W),d4
tst.l d3
GetANewStar
tst.l d4
bmi.L GetANewStar
cmp.l #$01400000,d3
GetANewStar
cmp.l #$00c80000,d4
bgell — GetANewStar
move.l — d3,0(a2,d6.W)
move.l — d4,4(a2,6.W)
move.l — 20(a2,d6.W),d3
move.l — 24(a2,d6.W),d4
add.l 8(a1,d6.W),d3
add.l 12(a1,d6.W),d4
move.l — d3,8(a1,d6.W)
move.l — d4,12(a1,d6.W)
move.l — 28(a2,d6.W),d5
move.l — 0(a4,d5.L),di
— di,d3
NewSpeedAndColor
— di,d4
ble.S EndMoveStar
NewSpeedAndColor
move.l — 20(a2,d6.W),d0
move.l — 24(a2,d6.W),d1
İsrl #1,d0
move.l — dü,d2
asl.l
d2,d0
İsrl
move.l — di,d2
asl.l #1di
add.l d2,di
move.l 64(a4,d5.L),d2
move.l d2,8(a2,d6.W)
add.l #4,28(a2,d6.W)
move.l d0,20(a2,d6.W)
move.l d1,24(a2,d6.W)
NewPosition
move.l 20(a2,d6.W),d0
move.l d0,12(a2,d6.W)
move.l — 24(a2,d6.W),d0
move.l d0,16(a2,d6.W)
bist #1,20(a1,d6.W)
beg.s NotNegative
not.l 12(a2,d6.W)
NotNegative
btst
beg.s — EndMoveStar
not. 16(a2,d6.W)
EndMoveStar
TİS
GetANewStar
cirl 28(a2,6.W)
8(a1,d6.W)
cirl
bsr Zufall
dir 8(a2,16.W)
bsr.S Zufall
and.l #$30000,d0
add.l #$9e0000,d0
move.l d0,0(a2,d6.W)
bsr.S Zufall
and.l #$30000,d0
add.l #$620000,d0
move.l —
bsr.S Zufall
and.l
move.l — d0,20(a2,d6.W)
bsr.S Zufall
and.l
move.l — d0,24(a2,d6.W)
bsr.S Zufall
move.l —
— “NewPosition
ComputeAddress
lea BitPlane,a0
cir.l di
move.l — 0(a2,d6.W),d0
swap
move.w — d0,di
and.l #7,d0
divu #8,dl
move.l — 4(a2,d6.W),d2
swap
and.l
#$28,d2
add.w — d2 di
dl a0
Tİs
Zufall
move.l — Rndi(pe),a3
move.l — (a3),d0
add.l
— (a3),di
eor.l di,d0
move.l —
add.l
eor.l di,d0
$dff006,dO
eorl #$dff006,d0
move.l — d0,Rnd2
add.l #2,Rndl
Tits
BitPlane
egu $60000
CMPundColor
$000c0000,$00180000,$00240000,$00300000
de.1 $003c0000,$00480000,$00540000,$00600000
$006c0000,$00780000,$00840000,$00900000
$009c0000,$00a80000,$00b40000,$00b80000
$00000001,$00000002,$00000003,$00000004
$00000008,$00000008,$00000008,$00000008

Copkist de.w $008e,$2c61,$0090,$ffc1

de.w — $0092,$0038,$0094,$00d0
— $0100,$3200
de.w — $0108,$0000,$010a,$0000
de.w — $00e0,$0006,$00e2,$0000
de.w — $00e4,$0006,$00e6,$1140
de.w — $00e8,$0006,$00ea,$3e80
de.w — $0180,$0000,$0182,$0222
de.w — $0184,$0444,$0186,$0666
dc.w — $0188,$0999,$018a,$0bbb
de.w —
del
Adder — 0
Rndi de.l o
Rnd2 — dc
PosControl bik.l $1020,0
Retter — bik.l $1020,0
; Drive ile müzik çaldırma
9g  movemil d0-d7/a0-a6,-(sp)
move #$4000,$dff09a
bset #3,$bfd100
belr #3,$bfd100
move.l — #MSize,d5
lea MusicDatas,a5
Startl
move.l — (a5)4,Freguenzi
move.l — (a5)4,Freguenz2
Start2
bset #0,$bfd100
#0,$bfd100
bsr.b Wait |
btst #6,$bfe00l
beg.b Finito
cmp.l #0,Freguenzl
beg.b Aus
sub.l #1,Freguenzl
bra.b Start2
Aus dbra d5,Startl
Finito
— (a7)4,d0-d7/a0-a6
rts
Wait move.l — Freguenz2,d3
Waitlbeg.b AusWait
sub.l #1,d3
bra.b Waitl
AusWait
rts
MusicDatas |
del — 1300,100,700,90,1100,80, 1250,90
de.l 1150,75,1100,81,700,90, 500,110
del — 900,102,1400,59,1200,67, 1100,76
de.l 1000,82,950,92,600,82, 500,106
de.l 1300,65
de.l 900,100,900,90,900,80, 900,75
de.l 1300,66,0,$8000,1200, 66,0, $2000
de.l 1000,60,0,$4000,800,60, 0,$4000
de. 800,60,0,$4000,800,60, 0,$4000
de.l 1200,66,0,$13000,1000, 60,0,$4000
del 800,60,0,$4000,800,60, 0,$4000 |
de.l 800,60,0,$4000,1200,66, 0,$4000
de.l 800,75,0,$4000,800,75, 0,$4000
de.l 800,75,0,$4000,800, 75, 0,$400
del 1200,90,0,$4000,1200,90, 0,$2000
de. 700,66,0,$2000,700,66, 0,$2000
del 700,66,0,$2000,700,66, 0,$2000
de.l 1000,100
Rnd del O
Freguenzi del O
Freguenz2 del O
MSize egu — (|MEnd-MusicDatas) /8-İ