Gönderen Konu: kurs sonrasi ornekler  (Okunma sayısı 13793 defa)

kurs sonrasi ornekler

« Yanıtla #15 : 07.01.2007 21:31:48 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
kanka, direk retro-replay kullan vice'da...
vice için .BIN'i var....
direk "kartuşla" çalış

kurs sonrasi ornekler

« Yanıtla #16 : 07.01.2007 21:35:46 »
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/
vice'ın monitörü aslında çok iyi çalışıyor hatta hatta commodore'daki monitörlere göre ekstra özelliklere sahip. şimdi o monitörler ilgili en büyük sorun harddiske ya da diskete kayıt yapılması durumlarıdır. Eğer "true drive emulation" açık değilse ,8 ile kaydetmek ya da yükletmek yerine ,0 kullanmak gerekir. Bir de yanılmıyorsam "," karakteri kullanılmıyor. doğrudan
 
s "koalagrafik" 0 6000 8710
 
gibi kullanılıyor. Eğer true drive emulation açıksa 0 yerine 8 kullanılabiliyor. Bunlar aklımda kalanlar, çok sık kullanmıyorum Vice'ın monitörünü load save amaçlı. Bunun haricinde "d" "i" "m" gibi komutlar sorunsuz çalışıyor.
 
Eğer monitörden kod yazmak isterseniz "a" kullanmanız lazım
a c000
.c000 sei
.c001 lda #$00
.c003 sta $d020
...
 
şeklinde kod girebilirsiniz. en son boş olarak enterladığınız satırda kod girme işlemi sona erer. Eğer doğrudan komut değil de byte değerleriyle birşeyler girmek isterseniz ">" karakterini kullanmanız lazım. Ama sonrasında bir boşluk vermeyi unutmayın
 
> c000 78
 
diyerek sei komutunu girebilirsiniz. VIC, SID, CIA1 ve CIA2 değerlerini listelemek için kısaca "io" komutu kullanabilirsiniz. O anki değişkenlerin ve flaglerin durumlarını görmek için "r" kullanabilirsiniz.
 
Aklıma geldikçe daha da yazarım...

kurs sonrasi ornekler

« Yanıtla #17 : 07.01.2007 21:37:17 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@vigo: bi ton CRT dosyasI var elimde Action Replay serisi Final serisi ama onlarda da yemedi.
Ben elimdekileri buraya gondereyim belki i$ine yarayan oLur.
Bu arada bahsettigin kartu$un crt'si varsa makbuLe gecer..
 
@skate: Thx. AnLadIm karde$im. Iyi bok atmI$Im vice'a bende :)
« Son Düzenleme: 07.01.2007 21:40:52 Gönderen: stranger »

kurs sonrasi ornekler

« Yanıtla #18 : 07.01.2007 21:41:37 »
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/
Birkaç Action Replay versiyonunu (6 dahil) ekliyorum buraya

kurs sonrasi ornekler

« Yanıtla #19 : 07.01.2007 21:44:35 »
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/
Alıntı yapılan: stranger
@vigo: bi ton CRT dosyasI var elimde Action Replay serisi Final serisi ama onlarda da yemedi.
Ben elimdekileri buraya gondereyim belki i$ine yarayan oLur.
Bu arada bahsettigin kartu$un crt'si varsa makbuLe gecer..
 
@skate: Thx. AnLadIm karde$im. Iyi bok atmI$Im vice'a bende :)
ıyi bok atmışım demişsin ama yok harbiden Commodore 64 kullanmaya alışık insanlar için çok boktan bir monitör o. En azından alışana kadar. Alışınca görüyorsun ki özellikleri gayet yerinde, hatta çok daha hızlı ve kullanışlı çalışıyor haliyle 64'dekilere göre. Gel gelelim bunca yılda anca alıştım ben Vice'ın monitörüne. Ben de aynı senin gibi bok atıp duruyordum, Endo sağolsun öğretti benim bulamadığım birkaç özelliğini. O zaman barıştım Vice'ın monitörüyle azcık :)

kurs sonrasi ornekler

« Yanıtla #20 : 07.01.2007 22:13:46 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Acme'yi indirip actiginiz zaman icinde docs diye bir klasor bulacaksiniz. Burada AllPOs.txt adli dosya var. orada butun ACME pseudo opcode'lari orneklerle beraber bayagi detayli listelenmis ve aciklanmis durumda. Alisana kadar onu el altinda printout seklinde bulundurmayi oneriyorum.
 
VICE monitorunun de aslinda cok guclu bir monitor olsugunu soylemeliyim. load ve save komutlari da calisiyor aslinda. Fakat dikkat edilecek bir kac nokta var. Bunlari benim tavsiyelerim olarak nitelendirin :)
 
- vice'i konsoldan x64 test.prg falan diye calistirin. boylece vice'in "working directory"si o komutu verdiginiz yer olur. bundan sonra vice monitorunde
 
s "song.prg" 0 1000 2000
(s dosya ismi    cihaz(0 | 8 | 9 )       baslangic_adresi     bitis_adresi)
 
gibi bi komutla bellekten 1000 2000 arasini working directory'ye atabilirsiniz. bu dosya c64 dosya formatinda olacaktir. yani ilk iki bayti baslangic adresidir vs.
 
- vice monitorunde komutlarda kullandiginiz sayilar hextir. basina $ koymaniza gerek yoktur.
 
- vice monitorunde super debug komutlari vardir.
break
watch
step
gibi.
 
break ile kodun bir yerine gelinceye kadar vice'in normal calisip sonra orada durmasini ve siz step dedikce birer komut birer komut ilerlemesini saglayabilirsiniz. her komuttan sonra registerlerin veya bellegin durumuna bakabilirsiniz.
 
watch ile bellekte bir araliga yazma veya okuma yapildiginda programi durdurabilir ve yine step ile komut komut ilerletebilirsiniz. bazen yazdiginiz program bellekte istemediginiz seklide kendi ustune yazip kendini bozabilir. bu durumlar icin watch ile hatanin oldugu ani bulmak cok kolaylasir
 
benim sitedeki ACME ve etiketler yazisina da bir goz atmak isteyebilirsiniz. orada output dosyalarinin nasil olusturuldugu detayli sekilde anlatiliyordu.

kurs sonrasi ornekler

« Yanıtla #21 : 08.01.2007 02:15:02 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
bu arada acme de muzigi nasil import edecegimiz ile ilgili kucuk bir not
 
acme'de bellege bir takim baytlari yerlestirmek icin;
 
!by $xx, $xx,......
 
kullanabilecegimiz gibi
 
!bin "song.prg" , 2, $1000
 
de kullanabiliriz. bu hali hazirda olan bir dosyanin baytlarini assemblerin output dosyasina aynen koymasini saglar dosya adindan sonraki argumanlar:
 
1- Atlanan baytlar: yani bu arguman kadar bayt dosyanin basindan itibaren sayilip dikkate alinmaz.dosya bellege yerlesmeye, dikkate alinmayan baytlardan sonrakiilk bayt ile baslar. bu ornekte song.prg'nin bir c64 dosyasi olduguunu varsaydim. c64 dosyalarinin ilk 2 bayti baslangic adresi oldugu ve biz onunla ilgilenmedigimiz icin onlari dikkate almiyoruz
 
2- Uzunluk: burada verilen sayi kadar bayt bellege yerlestirilir:
a- eger verilen sayi kadar bayt dosyadan okunmadan dosya biter ise, kalan baytlar 0 ile doldurulur
b- eger verilen sayi kadar bayt okundugunda dosya henuz bitmemis ise dosyada kalan baytlar okunmaz.
 
Ornek: elimizde song.prg diye $c00 baytlik bir dosya olsun
 
*= $1000
!bin "song.bin" , 2 , $1000
 
Dosyanin ilk iki baytini cope atip kalan $bfe bayti, [$1000 , $1bfd] arasina kopyalar. [$1bfe , $1fff] arasini 0 'le doldurur.
 
*= $1000
!bin "song.bin" , $100 , $400
 
Dosyanin ilk $100 baytini cope atip kalan $b00 baytin ilk $400 tanesini, [$1000 , $13ff] arasina kopyalar.
 
Muzik caldirma olayini da ayrica VIC kursu 3. bolumun sonunda anlatacagim
 
Bu arada VIC kursunu takip eden arkadaslara benim web sitesindeki "6510 Assembly" ve "Acme ve Etiketler" yazilarini mutlaka okumalarini oneriyorum. Cunku cogu zaman orada anlattigim seyleri tekrar anlatmiyorum VIC kursunda. Bu yuzden orayi okuyarak, benim bildiginizi varsaydigim ama bilmediginiz birsey kalmamasini saglamaniz kursu takip etmenizi cok kolaylastiracaktir.
 
Kolay gelsin...

kurs sonrasi ornekler

« Yanıtla #22 : 08.01.2007 02:31:02 »
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/
Ufak bir düzeltme. ılk parametre boyut, ikincisi atlanacak bytelar. Yani;
 
!bin "song.prg" , 2, $1000
 
yerine
 
!bin "song.prg" , $1000, 2
 
olması lazım. Hatta hatta hiç boyut vermeden dosyanın kendi boyutuyla yükletebilirsiniz. Örnek:
 
!bin "song.prg" , , 2

kurs sonrasi ornekler

« Yanıtla #23 : 10.01.2007 11:15:46 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
Alıntı yapılan: skate
Kod: [Seç]
lda #$c0 ; [B]$c0*$40[/B] = $3000 adresindeki spriteı göster

hocam şurayı anlamadım. hadi biz comment e bakıp $3000 i buluyoruzda aküye #$c0 yükleniyor.
Coding Is Art.

kurs sonrasi ornekler

« Yanıtla #24 : 10.01.2007 11:50:38 »
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/
spritelar 24x21 pixellik alanlar. 24 pixel de bitlerle ifade edildiği için 3 byte'a karşılık geliyor. 3 byte x 21 satır = 63 byte.
 
şimdi bu noktada 2li sistemde işi kolaylaştırıcı bir yöntem devreye giriyor. 2^6 = 64 olduğu için 63 byte kaplayan spritelar aralarında 1 byte boş bırakılarak hafızaya yerleştiriliyorlar. Yani hafıza düzeninde hafızanın en başından itibaren bakacak olursak
 
0 - 62       : 1. sprite alanı
63            : boş byte
64 - 126    : 2. sprite alanı
127          : boş byte
128 - 190  : 3. sprite alanı
191          : boş byte
.....
 
şeklinde yerleşiyorlar. Biz ise spriteları tanımlarken sprite alanlarıyla tanımlıyoruz. Yani 3. sprite'ı göster. 17. sprite'ı göster gibi. şimdi bu hesaptan yola çıkarsak $3000 = 192 * 64 = $c0 * $40'a denk geliyor. Yani aslında biz orada $c0 (=192) değerini verirken "Git hafızadaki 192. sprite'ı göster" demiş oluyoruz. Bilgisayar da 192 * 64 = 12288 = $3000 adresindeki sprite'ı gösteriyor.
 
Burda ufak bir not. Sprite numaraları maksimum 255'e kadar gider. Bu da $3fc0 adresindeki sprite'a denk gelir. Peki $4000'den sonrasında sprite gösteremiyor muyuz? Elbette ki gösterebiliyoruz. Çok detaya girmeden kısaca anlatayım.
 
64k'lık hafıza 16k'lık 4 parçaya bölünmüş durumda. Bunlara "bank" deniyor. Biz $dd00 adresini kullanarak bunlar arasında geçiş yapabiliyoruz. Diyelim ki 2 numaralı banktayız. Bu bank $4000-$8000 arasına denk geliyor. Bu durumda 192 nolu sprite $3000'de değil, bank adresinin başlangıcıyla toplanarak $4000+$3000 = $7000'e denk gelir.
 
3 numaralı bank $0000-$3fff
2 numaralı bank $4000-$7fff
1 numaralı bank $8000-$bfff
0 numaralı bank $c000-$ffff
 
x numaralı bankdan kastım $dd00'ın alt iki bitinin alacağı değerlere karşılık geliyor. Örneğin $8000-$bfff arasını kullanmak istiyorsanız 1 numaralı bank olduğu için en basit tanımıyla
 
lda #1
sta $dd00
 
diyebilirsiniz. şimdilik fikir sahibi olmanız için kısaca açıkladım. Bu konuya fazla kafanızı yormayın. Çünkü bank değiştirdiğiniz gibi ekran adresleri gibi birçok şey değişecektir. Ayrıca diğer bankların bir bölümünde "garip" adres aralıklarına denk gelebilirsiniz. Onun için bunu şimdilik bilin ama kullanmayın. Nightlord sizi güvenle bank değiştirecek hale getirecektir :)

kurs sonrasi ornekler

« Yanıtla #25 : 10.01.2007 15:29:10 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
yani $07f8 adresine koyulacak herhangi bir değer istisnasız deger*$40 olarak değerlendiriliyor. bir de 3. sprite ı göstermek isteseydim ozaman 128 yani $80 göndericektim doğrumu O da gidip $80 * $40 = $2000 den itibaren 63 byte okuyacaktı.
« Son Düzenleme: 10.01.2007 15:51:31 Gönderen: esmaeild »
Coding Is Art.

kurs sonrasi ornekler

« Yanıtla #26 : 10.01.2007 23:29:26 »
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/
3. sprite'ı göstermek için senin (0'dan başlayan dizi mantığı) 128 değil 2 demen gerekiyor. 128 yani $80 onun hafıza adresi. $0080 şeklinde düşünebilirsin. Deminki örnekte 1'den başlamakla hata ettim. 0'dan başlayarak yazarsam daha kolay olacak sanırım. Deminkinin bir eksiği olarak biraz daha geniş bir tablo oluşturacak olursak
 
0. sprite -> $0000
1. sprite -> $0040
2. sprite -> $0080
3. sprite -> $00c0
4. sprite -> $0100
5. sprite -> $0140
6. sprite -> $0180
7. sprite -> $01c0
8. sprite -> $0200
9. sprite -> $0240
10. sprite -> $0280
11. sprite -> $02c0
12. sprite -> $0300
.
.
64. sprite -> $1000
65. sprite -> $1040
.
.
.
.
128. sprite -> $2000
129. sprite -> $2040
.
.
.
192. sprite -> $3000
193. sprite -> $3040
.
.
255. sprite -> $3fc0
 
şeklinde. sen $07f8'e kaçıncı sprite olduğunu yazıyorsun. Bu tabloya göre 3. sprite'ı göstermek için
 
lda #3
sta $07f8
 
dediğinde $00c0 adresindeki sprite gösteriliyor kısacası. Benim örnekteki
 
lda #$c0
sta $07f8
 
ise $c0 = 192 olduğundan yine bu tabloya göre $3000'deki sprite'ı gösteriyor.
 
Bu arada $0800'ün gerisindeki spritelar genellikle $0340-$0400 aralığı hariç pek kullanılmaz. Spriteları ekranda göstermek sorun olmayacaktır ancak özellikle $0000-$0340 aralığında çok fazla bilgisayarın kullandığı alan olduğu için oraya bir sprite datası yerleştirmekte zorlanabilirsin. $0400-$07e8 ise ekranın bulunduğu yerdir.
 
Bak sana eğlenceli bir deneme yaptıriim. $0400'deki spriteı gösterecek bir rutin yaz. $0400'deki sprite için $07f8'e 16 (ya da hex olarak $10) vermen gerekiyor. Sprite ekranın ortalarında bir yere yerleştir. Daha sonra çık ekranın en sol üst köşesine, ekrana birşeyler yaz, hatta hatta imleci olduğu yerde beklet. Bak bakalım spriteda nasıl bir değişim gözlemliyorsun :) Eğlenceli bir deneme olacaktır senin için. Eğer bir sorun yaşarsan söyle bana kodu post ederim buraya.
 
Not: Interrupt v.s. kullanmana gerek yok. Yalnızca sprite basıp RTS ile çıkacaksın.

kurs sonrasi ornekler

« Yanıtla #27 : 10.01.2007 23:45:57 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
$400 ü biliyorum ekranın adresinin başlangıcı. ekrana yazacağım yazılar spriteın datalarını değiştirecek. hemen yapayım.
 
 
ok. oldu :) spriteları pixel atlamadan daha hızlı götürme imkanı var mı
 
Kod: [Seç]
[SIZE=1][COLOR=#000040]
[/COLOR][/SIZE][SIZE=4][COLOR=#008000]!to[/COLOR][COLOR=#800080]"sprite2.prg"[/COLOR][/SIZE][COLOR=#000040][SIZE=4],cbm[/SIZE]
 
[/COLOR][SIZE=4][COLOR=#008000]*=[/COLOR][COLOR=#804000]$1000
[/COLOR][/SIZE][COLOR=#000040]
[/COLOR][COLOR=#808080][SIZE=4]; Sprite Bas[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$01
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d015[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$10[/COLOR][COLOR=#808080];c0 ; $c0*$40 = $3000 adresindeki spriteı göster
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$07f8[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$98
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d000[/COLOR][COLOR=#808080]; spriteın x koordinatı
[/COLOR][/SIZE][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$72
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d001[/COLOR][COLOR=#808080]; spriteın y koordinatı
[/COLOR][/SIZE][COLOR=#000040]
[/COLOR][COLOR=#808080][SIZE=4]; Interruptı Hazırla[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]sei[/SIZE]
 
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$7f
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$dc0d[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$01
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d01a[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$1b
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d011[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$00
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d012[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][/SIZE][COLOR=#000040][SIZE=4]<irq_rutini[/SIZE]
[SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$0314[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][/SIZE][COLOR=#000040][SIZE=4]>irq_rutini[/SIZE]
[SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$0315[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]cli[/SIZE]
 
[/COLOR][COLOR=#808080][SIZE=4]; Space kontrolü[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]space [/SIZE]
[SIZE=4]lda [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$dc01[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]cmp [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$ef
[/COLOR][/SIZE][COLOR=#000040]
[SIZE=4]bne space[/SIZE]
 
[/COLOR][COLOR=#808080][SIZE=4]; Spriteları kapa[/SIZE]
[/COLOR][COLOR=#808080][SIZE=4];lda #$00[/SIZE]
[/COLOR][COLOR=#808080][SIZE=4];sta $d015[/SIZE]
[/COLOR][COLOR=#000040]
[/COLOR][COLOR=#808080][SIZE=4]; Basic'e dön[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]sei[/SIZE]
 
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$81
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$dc0d[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$f0
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d01a[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$31
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$0314[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$ea
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$0315[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]cli[/SIZE]
 
[SIZE=4]rts[/SIZE]
 
[/COLOR][COLOR=#808080][SIZE=4]; Interrupt Rutini[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]int [/SIZE]
[SIZE=4]inc [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d000[/COLOR][COLOR=#808080]; Sprite'ın X koordinatını 1 arttır
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d000[/COLOR][COLOR=#808080]; Eğer sprite 255'i geçmediyse
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]bne out [/SIZE][/COLOR][COLOR=#808080][SIZE=4]; interruptın çıkışına git[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d010[/COLOR][COLOR=#808080]; Sprite 255'i geçtiyse
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]eor [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$01[/COLOR][COLOR=#808080]; 9.bitini değiştir
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$d010[/COLOR][COLOR=#808080]; 0 ise 1 yap, 1 ise 0 yap
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]out [/SIZE]
[SIZE=4]inc [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d019[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]jmp [/SIZE][/COLOR][SIZE=4][COLOR=#804000]$ea81[/COLOR][/SIZE][COLOR=#000040]
 
 
 
 
[SIZE=4]irq_rutini:[/SIZE]
[SIZE=4]inc [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d019[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]jsr sprite_pozisyonunu_guncelle[/SIZE]
[SIZE=4]jmp [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$ea81[/SIZE]
[/COLOR][COLOR=#000040]
[SIZE=4]sprite_pozisyonunu_guncelle:[/SIZE]
[SIZE=4]lda hareket_yonu[/SIZE]
[SIZE=4]cmp [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][/SIZE][COLOR=#000040][SIZE=4]SAGA_HAREKET[/SIZE]
[SIZE=4]beq saga_kaydir[/SIZE]
[SIZE=4]jmp sola_kaydir[/SIZE]
 
[SIZE=4]saga_kaydir:[/SIZE]
[SIZE=4]ldx [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]inx [/SIZE]
[SIZE=4]beq sola_don[/SIZE]
[SIZE=4]stx [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]jmp irq_rutini_sonu[/SIZE]
 
[SIZE=4]sola_don:[/SIZE]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][/SIZE][COLOR=#000040][SIZE=4]SOLA_HAREKET[/SIZE]
[SIZE=4]sta hareket_yonu[/SIZE]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$fe
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]jmp irq_rutini_sonu[/SIZE]
 
[SIZE=4]sola_kaydir:[/SIZE]
[SIZE=4]ldx [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]dex [/SIZE]
[SIZE=4]beq saga_don[/SIZE]
[SIZE=4]stx [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]jmp irq_rutini_sonu[/SIZE]
 
[SIZE=4]saga_don:[/SIZE]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][/SIZE][COLOR=#000040][SIZE=4]SAGA_HAREKET[/SIZE]
[SIZE=4]sta hareket_yonu[/SIZE]
[SIZE=4]lda [/SIZE][/COLOR][SIZE=4][COLOR=#008080]#[/COLOR][COLOR=#804000]$00
[/COLOR][/SIZE][COLOR=#000040][SIZE=4]sta [/SIZE][/COLOR][COLOR=#804000][SIZE=4]$d000[/SIZE]
[/COLOR][COLOR=#000040][SIZE=4]jmp irq_rutini_sonu[/SIZE]
 
[SIZE=4]irq_rutini_sonu:[/SIZE]
[SIZE=4]rts[/SIZE]
 
[SIZE=4]hareket_yonu:[/SIZE]
[/COLOR][SIZE=4][COLOR=#008000]!by[/COLOR][/SIZE][COLOR=#000040][SIZE=4] SAGA_HAREKET[/SIZE]
 
[SIZE=4]SAGA_HAREKET = 1[/SIZE]
[SIZE=4]SOLA_HAREKET = 2[/SIZE]
 
 
 
 
 
 
[/COLOR][SIZE=4][COLOR=#008000]*=[/COLOR][COLOR=#804000]$3000
[/COLOR][/SIZE][SIZE=4][COLOR=#008000]!fill[/COLOR][COLOR=#000040] 63,255 [/COLOR][COLOR=#808080]; Sprite haritasını 255 ile doldur
[/COLOR][/SIZE][COLOR=#808080][SIZE=4];!fill 31,0 ; Sprite haritasını 255 ile doldur[/SIZE]
[/COLOR][COLOR=#808080][SIZE=4];!fill 1,1 ; Sprite haritasını 255 ile doldur[/SIZE]
[/COLOR][SIZE=1][COLOR=#808080][SIZE=4];!fill 31,0 ; Sprite haritasını 255 ile doldur[/SIZE]
[/COLOR][/SIZE]
« Son Düzenleme: 10.01.2007 23:55:54 Gönderen: esmaeild »
Coding Is Art.

kurs sonrasi ornekler

« Yanıtla #28 : 11.01.2007 00:37:31 »
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/
Rutinin kesinlikle doğru. Ama dediğim gibi interrupta falan gerek yok. şu kadarı yeterli.
 
Kod: [Seç]
lda #$01
sta $d015
lda #$10
sta $07f8
lda #$98
sta $d000
lda #$72
sta $d001
rts

Sonuç olarak herhalde demek istediğimi anlamışsındır. Aynı zamanda ekranın sol üstünden itibaren karakter yazarak ilerledikçe spriteların hafıza dizilimlerinin nasıl olduğunu da adım adım görebilirsin.

kurs sonrasi ornekler

« Yanıtla #29 : 11.01.2007 00:44:19 »
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/
Bu arada diğer sorunu unuttum cevaplamayı. Spriteları pixel atlatmadan daha hızlı götüremezsin. Peki neden?
 
Olayı interrupt içinde yapacak olursan saniyede 50 kere tekrar ettiğinden 1 sn'de pixel atlamadan maksimum 50 pixel ilerletebilirsin. Bir interrupt içinde 2 kere sprite'ı ilerletirsen ikisinin de çizilmesini bekleyemezsin çünkü 2 kere ekran taraması yapılmayacaktır. Kısaca limitin bu.
 
Diğer yöntem ne? Interrupt dışı. Bu durumda kontrolsüz bir şekilde taramaya hiç bakmaksızın istediğin kadar ilerletebilirsin spriteları. Ama yine ekran saniyede 50 defa çizilecektir ve sen yine 50 farklı koordinatta göreceksin spriteları. Sen birer birer de arttırsan koordinatları ekranın çizimiyle senkron tutmayacağı için yine pixel atlayacaktır. Ayrıca bir de tarama arada spriteın çizildiği yerlere denk geldiğinde spriteın üst yarısını bir önceki taramadaki koordinatta alt yarısını yeni koordinatında (ordan itibaren değiştirdiğin için) göreceğinden iyiden iyiye bozuk bir görüntü elde edersin.
 
Aynı şey aslında PClerde de geçerli. Diyelim ki 100 FPS çalışan bir kodunuz var. Pixel atlamadan 101 pixeli 1 sn'de götüremezsiniz.