Gönderen Konu: 6510 Asm  (Okunma sayısı 30971 defa)

6510 Asm

« Yanıtla #75 : 06.03.2006 13:39:05 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
yok zaten partinin daha cok yeni platformlara scener kazandirdigi bir gercek ve ben bundan c64'cu olarak memnunum. jimqode ise tam olarak yeni scener sayilmaz. o yuzden partiden sonra o dahil bir iki kisinin de c64 scene'e ilgi duymasi muhtesem bi olay (h2o bu konuda ne derse desin :) ) hele de bu ilginin sirf nostaljik sebeplerden beslenmedigini bilmem beni daha da mutlu ediyor.

o kapidaki c64'te yapilan stuffin kaybolmamis olmasi ve jimqode tarafindan kaydedilmis oldugunu gorrmem bana sabah bir sevinc cigligi attirdi. o demoyu parti stuff olarak yayinlamak ve yapan arkadaslar'la iletisime gecmek isterim

jimqode su bir iki gun biraz yogun gececek bizler icin ama hemen ardindan sana her turlu 64 ilgili destegi saglayacagim.

6510 Asm

« Yanıtla #76 : 06.03.2006 14:09:57 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Elbette ki ben de her türlü desteği veririm jimgode'a. Kendisinin bu kadar istekli olması ve anladığım kadarıyla Commodore backgroundunun iyi olması çoktan ilk aşamayı geçmiş olduğunu gösterir. Bundan sonra bizlere yalnızca yol göstermek kalır. Mesajlarından gerisini yapabilecek potansiyeli olduğu açıkça hissediliyor zaten.

6510 Asm

« Yanıtla #77 : 06.03.2006 14:28:24 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
hahah beni simartiyorsunuz. Assembly bilgim embedded uygulamalarla profesyonel olarak ugrasmamdan geliyor. Aslinda C64 sahibi oldugum zamanlar introlarin scrollerlarini elimde sozlukle okumanin otesinde scene'le pek baglantim olmamisti.

Scene'de gordugum kadariyla modern platformlar disinda klasik platformlar da yurumeye devam ediyor ve etmeli. Eh bu kadar setupi kurduktan sonra da o commodore'u oyun icin kullanmak yazik olur degil mi? PSP, Xbox gibi platformlara sahip olsaydim onlari da kurcalardim elbet ama elimde programlayabilecegim tek cihaz su anda NGAGE. Onun da 3d apisi iyi dokumente edilmis olmadigindan su anda pek bisey yapamiyorum. Ya da bu dokumanlar bir yerlerde var ben erisemiyorum.

PC platformundan da tek kelimeyle hoslanmiyorum. buyukluk sinirlamali kategoriler ilgimi cekiyor ama mimarinin esnek olmasi isin esprisini biraz olduruyor bence. Hangi sinirlari zorliycaz?

Skate: kendine geldikten sonra bir ara ufak bi gun duzenleyip benim setupi toparlasak, biraz ACME kurcalasak harika olur bence.
/*
Planet Retro - Retrocomputing News and Blogs
*/

6510 Asm

« Yanıtla #78 : 06.03.2006 14:33:13 »
Hızlı düğmeleri aç

Ragnor

İleti: 901

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://ozanemirhan.blogspot.com
Beyler afedersiniz, dalgınlıkla eski bir mesajı görüp yeni bir mesaj sanıp ona cevap vermişim. ışin komiği konuşmanın gidişatınada uymuş gibi :).

Bunun dışında Nightlord, senin eski yazılardaki ödevleri yapmaya başlasam, bakkada'ya yaptığın gibi bir gözden geçirme yapman mümkün mü?

6510 Asm

« Yanıtla #79 : 10.03.2006 15:33:56 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
@jimqode: Kapım her zaman sana açık kardeşim. ıhtiyacın olduğu zaman mesaj at yeter. Evim Kağıthane'de, iş yerim 4.Levent tarafında.

6510 Asm

« Yanıtla #80 : 10.03.2006 15:45:44 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
selamlar ben de jimqode'un son mesajini kacirmisim bi sekilde (forumdaki trafikten olsa gerek)

odev gozden gecirme olayini yaparim tabii ki. Hatta sence sakincasi yoksa yine public sekilde burda yaparim. daha kitlesel fayda saglanmis olur.

6510 Asm

« Yanıtla #81 : 10.03.2006 16:45:04 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
Alıntı
Originally posted by nightlord@Mar 10 2006, 03:45 PM
selamlar ben de jimqode'un son mesajini kacirmisim bi sekilde (forumdaki trafikten olsa gerek)

odev gozden gecirme olayini yaparim tabii ki. Hatta sence sakincasi yoksa yine public sekilde burda yaparim. daha kitlesel fayda saglanmis olur.
[post=5820]Quoted post[/post]
[/b]

Onu ragnor istemis galiba :) ama ben de baslayabilirim yakinda.
/*
Planet Retro - Retrocomputing News and Blogs
*/

6510 Asm

« Yanıtla #82 : 10.03.2006 16:45:36 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
Alıntı
Originally posted by nightlord@Mar 10 2006, 03:45 PM
selamlar ben de jimqode'un son mesajini kacirmisim bi sekilde (forumdaki trafikten olsa gerek)

odev gozden gecirme olayini yaparim tabii ki. Hatta sence sakincasi yoksa yine public sekilde burda yaparim. daha kitlesel fayda saglanmis olur.
[post=5820]Quoted post[/post]
[/b]

Onu ragnor istemis galiba :) ama ben de baslayabilirim yakinda.

edit: cift post icin ozur dilerim internet baglantim cok dandini de bugun nedense
/*
Planet Retro - Retrocomputing News and Blogs
*/

6510 Asm

« Yanıtla #83 : 10.03.2006 18:37:58 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
goruldugu uzere benim beyinde bazi baglantilar dandini... evet ragnormus odev postunu atan :)

6510 Asm

« Yanıtla #84 : 23.04.2007 02:53:17 »
Hızlı düğmeleri aç

Punisher999

İleti: 7

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
bu forum ve nightlord'un dersleri ile ben de c64 asm'ye başlama kararı aldım. ilk 2 dersten sonra okuduklarımı tam öğrenmek için kendime nightlordun egzersizini genişleterek bir soru sordum. "ekranı 4 sutuna bolup her sutunu farklı bir karakterle doldurabilir misin?"
nightlordun forum mesajlarını takip ederek Vice kurdum, acme kurdum  ve uğraşmaya başladım. c64 zamanı aldığım kütüphanemin güzide eseri programcının el kitabından da renk adreslerine bakıp kodu süsleyerek nihayet neticeye kavuştum.  aşağı paste ediyor ve nightlord ustamdan yorum almayı umuyorum. biraz daha optimize edilebileceğini hissediyorum ama sadece öğrendiğim komutları kullanmam yüzünden sadece bunun hissine sahibim.

bunca sene sonra öze dönmek çok keyifli. disk driverı ve kabloyu tamamlarsam düzgün bir c64 setupımda olur inşallah gelecekte.
bu güzel tutorialler için nightlorda tekrar teşekkür ediyorum.

Kod: [Seç]

!to "4barrenkli.prg"
*=$c000



baslangic:

ldx #0

sayac:
cpx #200
beq baslangic
ldy #0




sira1:
lda #102
sta $0400,x
lda #2
sta $d800,x

lda #102
sta $04c8,x
lda #2
sta $d8c8,x

lda #102
sta $0590,x
lda #2
sta $d990,x

lda #102
sta $0658,x
lda #2
sta $da58,x

lda #102
sta $0720,x
lda #2
sta $db20,x

inx
iny
cpy #10
bne sira1


sira2:

lda #102
sta $0400,x
lda #1
sta $d800,x

lda #102
sta $04c8,x
lda #1
sta $d8c8,x

lda #102
sta $0590,x
lda #1
sta $d990,x

lda #102
sta $0658,x
lda #1
sta $da58,x

lda #102
sta $0720,x
lda #1
sta $db20,x
inx
iny
cpy #20
bne sira2


sira3:

lda #102
sta $0400,x
lda #5
sta $d800,x

lda #102
sta $04c8,x
lda #5
sta $d8c8,x

lda #102
sta $0590,x
lda #5
sta $d990,x

lda #102
sta $0658,x
lda #5
sta $da58,x

lda #102
sta $0720,x
lda #5
sta $db20,x
inx
iny
cpy #30
bne sira3


sira4:

lda #102
sta $0400,x
lda #7
sta $d800,x

lda #102
sta $04c8,x
lda #7
sta $d8c8,x

lda #102
sta $0590,x
lda #7
sta $d990,x

lda #102
sta $0658,x
lda #7
sta $da58,x

lda #102
sta $0720,x
lda #7
sta $db20,x
inx
iny
cpy #40
bne sira4

jmp sayac






6510 Asm

« Yanıtla #85 : 23.04.2007 04:23:53 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bence oldukça güzel olmuş, yapmak istediğini birebir elde etmişsin. Belki kendi açından daha düzenli olması için bu şekilde yazmış olabilirsin ancak accumulator'e lda ile yuklenen bir değer eğer birden fazla yerde kullanılıyorsa bunları peş peşe kullanmak kodu kısaltacak ve hızlandıracaktır. Yani;
 
lda #102
sta $0400,x
lda #2
sta $d800,x
lda #102
sta $04c8,x
lda #2
sta $d8c8,x
lda #102
sta $0590,x
lda #2
sta $d990,x
lda #102
sta $0658,x
lda #2
sta $da58,x
lda #102
sta $0720,x
lda #2
sta $db20,x
 
yerine
 
lda #102
sta $0400,x
sta $04c8,x
sta $0590,x
sta $0658,x
sta $0720,x
lda #2
sta $d800,x
sta $d8c8,x
sta $d990,x
sta $da58,x
sta $db20,x
 
demek hem seni fazla lda komutlarından kurtarır, hem de 102, 2 değerlerini değiştirmek istediğinde her birini tek tek değiştirmek yerine bir seferde değiştirme imkanına kavuşursun.
 
Tekrar tebrik ederim.

6510 Asm

« Yanıtla #86 : 23.04.2007 04:50:41 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Oncelikle guzel sozlerin icin tesekkurler Punisher. Her 4-5 ayda bir genelde benim kurslardan dolayi bir kac kisi bu konuya heveslenip calismaya basliyor. Ben malesef herkesin sorularini ve bekledikleri yeni dokumanlari sizlerin okuma hizinda yetistiremesem de bundan cok cok buyuk bir mutluluk ve tatmin duyuyorum. Umarim cok gec olmadan birgun VIC ve 3D kurslarini da bitiririm :)

Ilk iki dersteki bilgileri kullanarak yazdigini dusunursek aslinda oldukca ilginc bir problem secmis ve oldukca da optimize bir sekilde kodu yazmissin. 4. bolumde anlatilan jsr ve 5. bolumde anlatilan "kendi kendini degistiren programlar" konulari kullanilmadan bu problemi senin yaptigindan cok daha iyi sekilde yapmanin bir yolunu ben de bulamadim.

Bir de optimizasyondan bahsederken aslinda iki eksen var bildigin gibi: bellek ve hiz. Ben genelde hiz optimizasyonlarina daha cok egildim bugune kadar. Asagida verecegim ornekte de hiz optimizasyonu daha on planda. Bellekte de nispeten az yer kapliyor ama hizdan fedakarlik yapilip daha da kucuk alanda yapilabilir. Fakat bunun icin daha ileri konularin kullanilmasi lazim.

Ayrica dedigim gibi 4. ve 5. bolumlerdeki bilgileri kullanmamaya calistim ben de. yani normalde bu kodu ihtimlen boyle yazmaz ve bir sutun_ciz alt rutini yazardim.

benim cozumume gecmeden once senin cozumundeki dikkatimi ceken yerlere yorum yapayim:

Kod: [Seç]
baslangic:
ldx #0
sayac:
cpx #200
beq baslangic
ldy #0
cok onemli degil ama bu bolumde beq baslangic yerine beq bitis gibi bir satir koyup ardindan

bitis:   jmp bitis

gibi bir sonsuz dongu daha iyi olur. senin kodun su anda surekli sutunlari ciziyor.

Ikinci yorumum genel yaklasimla ilgili. burada problemin asil can alici noktasini renk ramine yapilan yazmalar olusturuyor. yani video matrise ekranin her yerinde aslinda ayni degeri yaziyorsun. o yuzden bu ornekte aslinda ben olsam once basit bir donguyle video matrisi olusturur. ardindan karmasik dongulerimde sadece color ram ile ugrasirdim.

Ucuncu bir nokta kodun icindeki sabitler (102, 2,5 gibi). Bu aslinda her programlama dilinde her platformda gecerli bir konu. Genelde kod satirlarinin icinde sabit sayilar kullanmaktan kacinmak lazim.Bunlara bazen sihirli sayilar deniyor. Cunku 102 nedir tam olarak, bunu ilk bakista anlamak mumkun olmayabilir. Hem kodu okuyan baskalari icin hem  de kendin icin sabitleri isimli etiketler olarak tanimlamak iyi bir aliskanliktir. mesela 102 yerine ben DOLDURMA_KARAKTERI diye bir sabit kullandim. Senin orneginde birgun doldurma karakteri olarak 102 yerine 103 kullanmak istesen ne kadar cok satir degistirmen gerekecegini dusun. Halbuki etiket kullanirsan, sadece etiketin tanimli oldugu satiri degistirebilirsin.

Bu sekilde yazilmis asagidaki ornege bakabilirsin. Tekrar belirtiyorum. Senin cozumun de gayet guzel. Cok ciddiyim seni gazlamak icin falan soylemiyorum. Sadece senin kullandigin komutlari kullanarak cozmek icin hayli zor bir problem. Yani degil optimize olarak cozmek, tek basina "cozmek" hayli zor. Ben bu ornegi kursta kullansam kurs sonunda "iddiali ogrenciler icin meydan okuma odevi" falan diye isimlendirirdim. O yuzden icten tebrikler

Kod: [Seç]
!to "4barrenkli.prg"
*=$c000

DOLDURMA_KARAKTERI = 102

RENK1 =    2
RENK2 =    1
RENK3 =    5
RENK4 =    7
   
;;----------------------------------------------------------------------
basla:
    ;; once video matrisi dolduralim
    ldx #0
    lda #DOLDURMA_KARAKTERI
vm_dongu:
    sta $0400,x
    sta $0400+250,x
    sta $0400+500,x
    sta $0400+750,x
    inx
    cpx #250
    bne vm_dongu
       
    ;; simdi renk ram'ine sutunlari cizelim
    ldx #0
    ldy #10
    lda #RENK1
    ;; sutun cizme alt rutini
    ;; x registerinde sutunun baslama x degeri
    ;; y registerinde sutunun kalinligi
    ;; a registerinde sutunun rengi
sutun_ciz:
    sta $d800+(00 * 40),x
    sta $d800+(01 * 40),x
    sta $d800+(02 * 40),x
    sta $d800+(03 * 40),x
    sta $d800+(04 * 40),x
    sta $d800+(05 * 40),x
    sta $d800+(06 * 40),x
    sta $d800+(07 * 40),x
    sta $d800+(08 * 40),x
    sta $d800+(09 * 40),x
    sta $d800+(10 * 40),x
    sta $d800+(11 * 40),x
    sta $d800+(12 * 40),x
    sta $d800+(13 * 40),x
    sta $d800+(14 * 40),x
    sta $d800+(15 * 40),x
    sta $d800+(16 * 40),x
    sta $d800+(17 * 40),x
    sta $d800+(18 * 40),x
    sta $d800+(19 * 40),x
    sta $d800+(20 * 40),x
    sta $d800+(21 * 40),x
    sta $d800+(22 * 40),x
    sta $d800+(23 * 40),x
    sta $d800+(24 * 40),x
    inx
    dey
    bne sutun_ciz

    cpx #10
    bne ucuncu_sutun_mu
    ;; ikinci sutuna basla
    lda #RENK2
    ldy #10
    jmp sutun_ciz
           
ucuncu_sutun_mu:        
    cpx #20
    bne dorduncu_sutun_mu
    ;; ucuncu sutuna basla
    lda #RENK3
    ldy #10
    jmp sutun_ciz
   
dorduncu_sutun_mu:    
    cpx #30
    bne bitis
    ;; dorduncu sutuna basla
    lda #RENK4
    ldy #10
    jmp sutun_ciz
   
bitis:    jmp bitis        ; sonsuz dongu
;;----------------------------------------------------------------------

6510 Asm

« Yanıtla #87 : 23.04.2007 23:50:01 »
Hızlı düğmeleri aç

Punisher999

İleti: 7

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
skate ve nightlord öncelikle ben de size güzel sözleriniz için teşekkür ediyorum.

nightlord :

baslangic:
ldx #0
sayac:
cpx #200
beq baslangic
ldy #0
buradaki beq baslangic kullanma amacim x registerini tekrar sifirlamak. cunku ben cizimi 40x5  şeklinde  beşerlik satırlar şeklinde yaptırdım. registerin byte olarak aldığı maksimum değer değişken yerlerde kaldığından, tam satır bitişi olsun diye 200 değeri kullandım ve bunu 5 aşamada kullanmak için 200 oldukça sıfırladım.  Ama evet sonsuz döngüde kalıyor burası sorun oldu benim için.

Etiket kullanımını ileriki derslere göz gezdirirken görmüştüm fakat sadece çalıştığım 2 dersteki bilgileri kullanmayı kendime sınır olarak koyduğumdan kullanmamıştım. Bundan sonra ilk işim değişmezleri bu şekilde tanımlamak olacak kodun başlangıcında.

optimizasyon derken de ben PCdeki alışkanlıkla gereksiz kod kullanmadan minimum kod satırı ile amaca ulaşmaktan bahsetmiştim ama çok doğru bir noktayı algılamış oldum sayende, hızı güncel sistemlerle kıyaslanamayacak kadar düşük cihazda, hız optimizasyonu da gözden kaçırmamam gerekecek.


yazdığınız kodları da dikkatle inceliyorum.