Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: VICE monitör kullanımı  (Okunma Sayısı 13985 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« : Haziran 18, 2014, 14:25:13 ÖS »

Sprite muliplexer yazmaya çalışıyorum. Visual sprite register'ları, sıralama tabloları vs. kullanacağım. İşler biraz karışık olduğundan debugging mevzusu önem kazanıyor. Benim yumuşak karnım da orası zaten.

VICE monitör kullanımı hakkında bir tutorial'a ihtiyacım var. Yapmak istediğim şey,  programı durdurayım. Virtual register'ları bir tabloda tutuyorum. Bu tablodaki değerleri değiştireyim. Program counter'ı istediğim yere alıp tekrar çalıştırayım. Sonra gidip sort edilmiş tablonun değerlerini kontrol edeyim. Nasıl yapılır bu iş?
Logged

joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #1 : Haziran 18, 2014, 14:47:44 ÖS »

ihtiyacın olan şey elinin altında,nigthlord bu konu ile ilgili,plasma dergisinde çok güzel tutorial hazırlamıştı.

http://plazma-dergi.org/dergi/04/chunk/ch12.html

vice monitörü çok kullanışlı olsada,ben genelde multiice6 kullanıyorum.Tabii vice üzerinden multiice6 monitör kullanmak biraz fantazi oluyor,ama vice monitörü kullanmak aklıma pek gelmiyor nedense Kahkaha

Monitör için kısayollar.
d 0800 : sadece ilgili satırı ekrana getirir.
d 0800- : ilgili satırdan itibaren kodları listeler.
h 0800 ffff 78 : 0800 ile FFFF arasında sei(78) olan satırları listeler.
i* 1000 : genelde grafik ekranına bakmak için kullanıyorum.

Tablo vs incelemek için
M ile kullanman gerekiyor.
Örnek:
Sprite y değerlerini $4000 adresine koydun.Programı durdurup M 4000- dediğinde,$4000 den itibaren tablo değerleri listelenecektir.

İstediğin satırı değiştirip return'a bastıktan sonra,ilgili adrese yeni değer yazılır.

programın başlangıç satırı $0800 diyelim. G 0800 ilede programını yeniden çalıştırabilirsin.

Tabii daha önce den inc veya dec eden bir counter'ın varsa onlarda kaldığı yerden devam edecektir.Bunlarıda yine M (ilgili adres) yazarak sıfırlarsan,counter'dan kaynaklanacak problemleri çözmüş olursun..
« Son Düzenleme: Haziran 18, 2014, 14:52:33 ÖS Gönderen: joker_ » Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #2 : Haziran 18, 2014, 15:32:03 ÖS »

Eğer istersen,müsait olduğun bir gün,bir yerde oturup birliktede bakabiliriz kardeşim.
Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #3 : Haziran 18, 2014, 16:03:41 ÖS »

Onun da sırası gelecek inşallah. Önce kodu bir çalıştırayım. Sana optimizasyon için ihtiyacım olacak.
« Son Düzenleme: Haziran 18, 2014, 16:10:24 ÖS Gönderen: wizofwor » Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #4 : Haziran 20, 2014, 21:13:55 ÖS »

Her zamanki gibi talihsizlikler peşimi bırakmadığı için debug işini helledemedim. Bilgem'in tutorial çok işime yarayacaktı ancak OSX'te Vice'ın debugger pencereleri çalışmıyor. Monitör kısmından idare etmek gekiyor. Neyse ben daha fazla bunlarla uğraşmak istemediğim için işleri ters çevirdim. Çalışmayan sorter rutinini attım, sıralı halde verdiğim spriteları ekrana basacak rutini yazdım. Zipli dosyanın içinde kaynakları ve prg dosyasını koydum. İndirip inceleyebilirsiniz.



İşlem oldukça basit. Sinekler ve gözleri iki ayrı sprite. Raster IRQ kullanarak bu iki sprite'ı toplamda 9'ar defa tekrar ettirdim. Program iki kısımdan oluşuyor. Birinci kısım virtual sprite'ların pozisyonlarını hesaplıyor. IRQ ile çaprılan ikinci kısım spriteları ekrana diziyor. Bir de anlamadığım yer var. Eğer dikkat ederseniz yatay pozisyonun 8. biti ($d010) bütün spritelarda aynı anda değişiyor.

Bir diğer canımı sıkan yer de yine bu 8. bitle ilgili, spriteları sağa kaydıran rutin. Kulağımı tersten gösterdim galiba.

Kod:
!zone move_player {
;check extended position bit
calc_pos lda table_xe,x
sta PARAM

lda #%00000010 ; bitmask for sprite #02
bit PARAM ; check againist bitmask
bne .jump2 ; 
;while extended position bit is off
lda #$FF ; if the x=$FF
cmp table_x,x ; turn on extended position bit
bne .increase ; and make x=$00
lda #%00000011
sta table_xe,x
lda #$00
sta table_x,x
jmp .end
.jump2 ;while extended position bit is set
lda #$5F ; if position =$2f
cmp $d000 ; turn of extended position bit
bne .increase ; and make x=$00
lda #$10
sta table_x,x
sta table_xe,x
.increase
inc table_x,x
.end rts
}

* irq multiplexer.zip (3.35 KB - Yükleme: 230 kez.)

* Ekran Resmi 2014-06-20 21.11.56.png (69.46 KB, 834x680 - Görüntüleme: 10555 kez.)
« Son Düzenleme: Haziran 21, 2014, 09:01:18 ÖÖ Gönderen: wizofwor » Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.791


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #5 : Temmuz 03, 2014, 15:09:41 ÖS »

İşin pratiğiyle ilgili bazı sorularım var. PC istediğim satıra geldikten sonra programın işleyişini satır satır kontrol etmek istiyorum. Ancak satırın adresini bilmiyorum. Başına bir label koyup, derledikten sonra Acme'nin raporundan label'ın adresini alıp, breakpoint koyuyorum. Bunun kolayı yok mu? Acme'de breakpoint yerleştiren bir kod gibi?
Logged

Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: