6510 Asm

87 replies · 37,138 views

6510 Asm
Originally posted by skate+Sep 28 2005, 02:26 PM--><div class='quotetop'>QUOTE(skate @ Sep 28 2005, 02:26 PM)</div><div class='quotemain'><!--QuoteBegin-Bakkada@Sep 28 2005, 01:43 PM
@NightLord:Asm Part3'de turkce karakterleri goremiyorum.Acaba sorun ben de mi???
[post=2020]Quoted post[/post]


Sorun sende değil ancak sayfanın üzerinde sağ tıklayıp "Encoding"den "Turkish" seçersen sorun morun kalmıyor 🙂
[post=2021]Quoted post[/post]

[/b][/quote]
Hmmmm sanirim bazen bende zekadan eser kalmiyor(belki de cogu zaman 🙂 )
6510 Asm
iste size 6510 Assembly - 04 ve yeni odevler
valla odevini ilk yapan bakkada benden ozel sozlu bonusu aldi 🙂. residenttan birilerinin peandoasi durtup uyandirmasini rica ediyorum. hadi simdilik kanaat notu var bende ama bilmiyorum ne kadar dayanir odevini yapmadan
nerede bulacaginizi biliyorssunuz part 4'u
6510 Asm
akşam evde çalışıcam hocam... yanlız eve saat 21:00 gibi geliyom, ona rağmen ödevlerimi yapıcam hocam.. saygılar.
6510 Asm
Walla ben de odevleri pazartesine haftasonuna kadar yetistiririm 🙂
Anlayarak ilerleyelim ki acik nokta kalmasin 😉
@NightLord:Benim odevi inceliycektik noldu 🙂
6510 Asm
arkadaşlar, nightlord'un tutorial lari tek bir ms-word dosyası yaptın, nightlord da ok derse buraya file olarak koyiim?
6510 Asm
Originally posted by vigo@Sep 28 2005, 03:48 PM
arkada?lar, nightlord'un tutorial lari tek bir ms-word dosyas? yapt?n, nightlord da ok derse buraya file olarak koyiim?
[post=2027]Quoted post[/post]


bence hicbir sakincasi yok fakat onumuzdeki 5-10 gun kadar surekli ek dokuman cikarmayi planliyorum. o yuzden bekleyip hepsini birden eklemek isteyebilirsiniz. ya da ciktikca eklenebilir. ama galeriden brows edilememesi biraz problem.
neyse spaztica eminim ileride biseyler yapacaktir ben onden dokumantasyonu hazir edeyim de 🙂
bu arada bakkadanin odevini de web de degerlerndirecegim. genel hatlariyla dogru yapmis zaten. bir iki yerde yeni baslamaktan oldugu belli olan hatalar var. onlari gorunce bakkada aa dooru ya diycek. diger herkes de vay be adamin ilk asm koduna bak vay anasini diycek 🙂
umarim bu aksam bi ara post edecegim
6510 Asm
ben şimdi sizlere bir ödev vereyim. 51 FPS bir efekt yapın bana c64'de 🙂
6510 Asm
bana pek du$mez ama peandoas internet eri$imi nedeniyle fazla gelemiyor, cogunlukla haftasonundan haftasonuna.
6510 Asm
nightlord 6510 asm öğretiyor ha. aslında kaçırmamak lazım böyle bir fırsatı, velakin zaten başka bir c64 asm gurusu (yani skate), 1.5 metre sağımda oturuyor. artık öğrenmek şart oldu, evet 🙂
6510 Asm
her nekadar tablar bozulsa da asagidaki degerlendirmeyi okuyabileceginizi umuyorum. buradan bakkadaya bir kez daha tebrikler ve tesekkurler
;NTL:Bakkada arkadasimiz 6510 Assembly - 02 'de verilen odevi yapmis.
;genelinde dogru olmakla beraber birkac kucuk hata var. onlari 
;kendisinin de izniyle public olarak duzeltecegim. 

* =$c000 ;programin baslangix adresi
 	;(Basic disinda kalan adres) 

start:	ldx #0 ;dongu icin degisken atadim
	lda #$20	;akumulatore bosluk tusuna karsilik 
 	;gelen degeri atadim 
Loop1:	sta $0400,x	;ilk dongunun baslangic degeri ekranin 
 	;sol ust kosesi x degerinide ekliyerek 
 	;bosluk karakter bas 
	inx ;x'i bir arttir
	cpx #240	;x 240 mi?
	bne loop1	;degilse loop1'e don.(bir satir 40 
 	;karakter ekrani bosaltmak icin 6 
 	;satir yani 240 karakter sildim)
	ldx #0 ;dongu icin degisken atadim
Loop2:	lda text_source1,x;ikinci dongunun baslangici alltaki 
 	;string kumesini karakter karakter 
 	;okumak icin
	sta $0880,x	;12.satirdan itibaren yazmam gerekiyor 
 	;12*40=480 400+480=880'den baslamaliyim.
 	;x.inci karakteri ekrana bastim

;NTL:burada ilk hata $0400 hexadecimal bi sayi (ondalik duzende 1024'e 
;esit). hex $0400 ile ondalik 480 in toplami $0880 etmez. bu tur hesaplari 
;genelde birakin acme sizin icin yapsin burada 
;
;SCREEN = $0400 + (12 * 40)
;
;diye bir etiket yaratip sonra
;
;sta SCREEN,x
;
;seklinde kod yazmak daha saglikli olur. ustelik program bittikten sonra 
;12.satirda guzel gozukmedigine karar verirseniz SCREEN etiketinin 
;tanimlandigi yerde mesela (10 * 40) diye degisklik yaprsiniz ve her yerdeki 
;SCREEN etiketleri otomatikman degisir. 



	inx ;x'i bir arttir
	cpx #13 ;x 13 mu?13 karakterim war cunku
	bne loop2	;degilse loop2'ye don

text_source1:	
	!scr "MERHABA DUNYA"

;NTL: Kod ihtimalen burada kilitlenecektir. cunku tam text_source1 adresinde 
;baslayan karakter kodlari, CPU bne loop2 komutunu gectikten sonra komut 
;olarak degerlendirilmeye calisilacak. M E R harflerinin karakter kodlari 
;hangi opcodelara karsilik geliyorsa CPU o komutlari gerceklestirmeye 
;calisacak. Bu problem, text_source parcalarinin hepsi programin en sonuna 
;toplanarak (jmp end satirindan sonra) veya bir sonraki ldx #0 koduna bi 
;etiket konulup, bne loop2 den sonra jmp etiket diye atlanarak giderilebilir.


	ldx #0 ;dongu icin degisken atadim
	lda #$20	;akumulatore bosluk tusuna karsilik 
 	;gelen degeri atadim 
loop3:	sta $0880,x	;3.dongunun baslangic degeri 
 	;12. satirin basina bosluk karakter bas 
;NTL: deminki problem... SCREEN diye etiket kullanmak daha iyi :)

	inx ;x'i bir arttir
	cpe #13 ;x 13 mu?13 karakterim war cunku
	bne loop3	;degilse loop3ye don

	ldx #0 ;dongu icin degisken atadim
loop4:	lda text_source2,x;4. dongunun baslangici alltaki 
 	;string kumesini karakter karakter 
 	;okumak icin
	sta $0880,x	;12.satirdan itibren yazmam gerekiyor 
 	;12*40=480 400+48=880'den baslamaliyim.
 	;x'inci karakteri ekrana bastim

;NTL: deminki problem... SCREEN diye etiket kullanmak daha iyi :)

	inx ;x'i bir arttir
	cpx #15 ;x 15 mi?Once 15 karakter basicam 
 	;sonra bekleyip geri kalanini basicam.
	bne loop4	;degilse loop4'e don
	ldy #$30	;bekletme islemi icin baslangic 
 	;y degeri atama
	ldx #0 ;bekletme islemi icin baslangic 
 	;x degeri atama
delay:	dex ;delay dongusu icin etiketleme 
 	;x degerini azaltiyoruz
	bne delay	;delay'e esit mi degil mi,degilse 
 	;delay'e dallan
	dey ;esitse y'i 1 azalt
	bne delay	;delay'e esit mi degil mi,degilse 
 	;delay'e dallan
	ldx #15 ;dongu icin degisken atadim
 	;(15. karakterden sonra okuyacagi icin)
loop5:	lda text_source2,x;5. dongunun baslangici alltaki string 
 	;kumesini karakter karakter okumak icin
	sta $0895,x	;12.satir 15. karakterden itibaren 
 	;yazmam gerekiyor 12*40=480 
 	;400+480+15=895'den baslamaliyim.
 	;x'inci karakteri ekrana bastim

;NTL: Burada guzel bi mantik var. aslinda odevde son iki mesaj arasinda
;yine ekranin silinmesini dusunmustum ama sorudan bu tam acik anlasilmiyor. 
;oyuzden arkadasimiz burada once ilk mesaji basip biraz bekleyip ikinci 
;mesaji devamina basacak sekilde dizayn yapmis. iyi de olmus. fakat ufak 
;bi hata var. ben yine SCREEN etiketi ile anlatayim. ilk 15 karakteri 
;SCREEN adresini basiyoruz. ardindan delay suresinden sonra 16 - 28 arasi
;karakterleri SCREEN+15 adresine basacagiz. bunun icin dongu indexi olan 
;x registerini 15 degeri ile donguye sokmak guzel bi mantik. boylece 
;text_source + 15 adresinden ilk okumayi yapacagiz. fakat sta satirinda
;SCREEN+15,x dersek o zaman (x 15 oldugu icin) SCREEN+30 adresine basmis
;oluruz. o yuzden sta satirinda da aynen okumada oldugu gibi mutlak
;adresi degistirmeden kullanmaliyiz.
;
;    ldx #15
;loop5: lda text_source2,x
;    sta SCREEN,x
;    inx
;    cpx #28
;    bne loop5
;
;veya 15 sonradan okuma ve 15 sonraya yazma olayini lda ve sta komutlarinin 
;kullandigi mutlak adresleri 15 artirip x registerini 0'dan baslatabilirdik
;
;    ldx #0
;loop5: lda text_source2+15,x
;    sta SCREEN+15,x
;    inx
;    cpx #28
;    bne loop5
;
;seklinde de calisir...


	inx ;x'i bir arttir
	cpx #28 ;x 28 mi?28 karakterim war cunku
	bne loop5	;degilse loop5'e don
text_source2:	
	!scr "ISTE GELIYORUM,BANGIR BANGIR"

;NTL: yine bne loop5 satirindan sonra kilitlenme tehlikesi... jmp end satiri
;text_source2'den onceye alinarak sorun giderilebilir.

end:	jmp end ;programi bitir.
6510 Asm
Bise sormak istiom screen=$0400+(12*40) tanimlamasini kodun en basinda yapabilir miyiz yane =
!to out.prg
* =$c000
screen=$0400+(12*40)
gecerli olurmu se sonra programda nerde screen yassam bu toplama degerine esit olur mu?
6510 Asm
Originally posted by Bakkada@Sep 29 2005, 12:20 PM
Bise sormak istiom screen=$0400+(12*40) tanimlamasini kodun en basinda yapabilir miyiz yane =
!to out.prg
* =$c000
screen=$0400+(12*40)
gecerli olurmu se sonra programda nerde screen yassam bu toplama degerine esit olur mu?
[post=2047]Quoted post[/post]


evet olur. hatta genelde boyle etiketlerin tamamini kodun basinda bir yerde tanimlamak da iyi bir aliskanliktir.
etiket kullanimi ile ilgili bi not daha: genelde yazdiginiz program icinde ilk bakista ne olduu anlasilmayan sayilar gecmesi de genelde pek iyi bi aliskanlik sayilmaz. yani kodda
lda #32
sta $137f
gibi bisey gecerse aradan bi ay gectikten sonra baktiginizda 137f neydi ben buna niye 32 yukluyodum gibi sorulari cevaplayamayabilirsiniz. o yuzden
DEFAULT_NO_OF_PLAYERS = 32
NumberOfPlayers = $137f
lda #DEFAULT_NO_OF_PLAYERS
sta NumberOfPlayers
gibisinden yazmak daha iyi bir aliskanlik olacaktir.
Bu arada etiketler birbirinin tanimlanmasinda da kullanilabilir. mesela
MESAJIN_SATIRI = 12
VM = $0400
SCREEN = VM + (MESAJIN_SATIRI *40)
da calisir.
6510 Asm
Originally posted by nightlord+Sep 29 2005, 12:51 PM--><div class='quotetop'>QUOTE(nightlord @ Sep 29 2005, 12:51 PM)</div><div class='quotemain'><!--QuoteBegin-Bakkada@Sep 29 2005, 12:20 PM
Bise sormak istiom screen=$0400+(12*40)  tanimlamasini kodun en basinda yapabilir miyiz yane =
!to out.prg
* =$c000  
screen=$0400+(12*40)
gecerli olurmu se sonra programda nerde screen yassam bu toplama degerine esit olur mu?
[post=2047]Quoted post[/post]


evet olur. hatta genelde boyle etiketlerin tamamini kodun basinda bir yerde tanimlamak da iyi bir aliskanliktir.
etiket kullanimi ile ilgili bi not daha: genelde yazdiginiz program icinde ilk bakista ne olduu anlasilmayan sayilar gecmesi de genelde pek iyi bi aliskanlik sayilmaz. yani kodda
lda #32
sta $137f
gibi bisey gecerse aradan bi ay gectikten sonra baktiginizda 137f neydi ben buna niye 32 yukluyodum gibi sorulari cevaplayamayabilirsiniz. o yuzden
DEFAULT_NO_OF_PLAYERS = 32
NumberOfPlayers = $137f
lda #DEFAULT_NO_OF_PLAYERS
sta NumberOfPlayers
gibisinden yazmak daha iyi bir aliskanlik olacaktir.
Bu arada etiketler birbirinin tanimlanmasinda da kullanilabilir. mesela
MESAJIN_SATIRI = 12
VM = $0400
SCREEN = VM + (MESAJIN_SATIRI *40)
da calisir.
[post=2048]Quoted post[/post]

[/b][/quote]
Bir de dipnot. Etiketler ile tanımlamaların kullanımı farklıdır.
x = $40
diye tanımlama yapıldıysa
lda #x
şeklinde kullanılması gerekir. Ancak herhangi bir byte'a label verildiyse
x !byte $c
o zaman
lda x
şeklinde bu byteın değeri kullanılabilir. "#" karakteri kullanımaya çalışıldığında hata mesajları alırsınız.
Bu kafanızı karıştırmasın (henüz o konuya gelmemiş olabilirsiniz) ama bir dip not olarak yer alsın.
İkinci bir dip not:
Alın size basicden otomatik çalışabilecek bir program örneği (ACME).
!to "test.prg"
* = $0801
!byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
* = $080d
lda #$02
sta $d020
rts

$0801'den itibaren yazılan bytelar basicden programı çalıştıracak "SYS" komutunu içeriyor ve komutun çalışması için sonnunda üç tane "0" byteına ihtiyaç var. bunun haricinde "0"dan önce yer alan 4 byte:
$32, $30, $36, $31
2, 0, 6 ve 1'in karakter kodlarını içeriyor. $30 0'a $39 ise 9'a denk gelecek şekilde. 2061'in hex karşılığı da $080d'dir. Bu durumda burdan itibaren programımızı yazmaya başlayabiliriz. Bu program derlendiği zaman $0801'den başlayan bir prg dosyası üretir ki bu dosya otomatik olarak çalışacaktır. Eğer programımızı $c000'a koymak isteseydik $c000'ın decimal karşılığı olan 49152'ye sys komutu ile gitmemiz gerkecekti. Bu durumda kod şu şekilde değişir.
!to "test.prg"
* = $0801
!byte $0c, $08, $00, $00, $9e, [b]$34, $39, $31, $35, $32
, $00, $00, $00
* = $c000
lda #$02
sta $d020
rts
[/b]

Ancak unutmamanız gereken şey bu kaynak kod $0801'den başlayan ve $c006'da sona eren bir PRG dosyası üretir. Yani arada kalan tüm boş alanlar da dosyanın içinde gereksiz yer kaplar. Gerçi herhangi bir sıkıştırma programıyla bu alanlar kolaylıkla sıkıştırılabilir ancak bu da aklınızda bulunsun.
Daldan dala oldu biraz da içimden geldi işte 🙂
6510 Asm
Assembler kursu bolum 5 nightlord.dr2.net adresinde hazirdir. bu bolumun sonunda boole scrollu falan intromtrak bisey yapabilir hale gelmis olacaksiniz 🙂
6510 Asm
heyyo!...
süper.. heycanla devamını bekliyorum.