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: Parallax ipucu?  (Okunma Sayısı 5243 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.798


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« : Aralık 11, 2013, 12:11:25 ÖS »

Akşam hazırladığım tile map'i ekrana basmayı becerebilirsem, parallax olayına girmeyi planlıyorum. Zaman kazanmak için işi bilen abilerim, ablalarıma sormak istedim. Varsayımlarım doğru mudur?

1. Ekranı için sola kaydırmak için aşağıdaki gibi bir rutin kurguladım. Tabi sondaki karakterleri bir yana kaydıran SHIFTCAR kısmının her satır için ayrı ayrı (25 kere) çalışması gerekiyor. Burdaki mantığım doğru mu? Rutin her çalıştığında $D016'nın son 3 bitini bir eksiltiyor. Sıfıra varınca bu sefer karekter belleğini 1 sola kaydırıyor.

 
Kod:
SHIFT = $03	; $03 adresini parametere olarak ayır

...
...

LDA #$7
STA SHIFT

...
...

;IRQ tarafından tetiklenecek kaydırma rutini

SHIFTBIT
DEC SHIFT
LDA SHIFT
AND #$7
STA $D016 ; kaydırma değerini $D016’ya yaz
CMP SHIFT
BOQ SHIFTCHAR ; SHIFT = 0 olduğunda dallan

RTS

SHIFTCAR ; ilk karakteri stack’a at
LDA $0400
PHA
LDX $00
LOOP1
INX
LDA $0401,X
  STA $0400,X
  CMP #$27 ;39 karakteri birer kaydır
BNE LOOP1
PLA
STA $0428 ;stack’taki karakteri sona ekle

RTS


2. Kaydırma kodunun kusursuz çalıştığını varsayıyorum. Parallax için ekranı 3 ayrı bant halinde kaydırmak istiyorum. Aklımdaki yöntem şu:
  • Raster IRQ'yu açıp 1. satıra kuracağım. Ekranı kaydırıp raster satırı tekrar 50. satıra kuracağım. 
  • 50. satırda aynı rutini tekrar çağıracağım. Bu kez 100. satıra kuracağım.
  • 100. satırda 3. kez tekrar çalıştıracağım

3. Son olarak geldik zurnanın zırt dediği yere. Parallax'ı hızlandırıp yavaşlatabilmek istiyorum. Bunun için bir timer IRQ kurup bu iş için bir bayrak atayarak şöyle bir işlem yapmak istiyorum.
  • Hızı belirlemek için timer IRQ'nun aralık değerini değiştireceğim.
  • Timer IRQ kaydırma olacağı zaman bir bayrak kaldıracak.
  • Raster IRQ çalıştığında bayrağı kontrol edecek. Bayrak yukarıdaysa kaydırmayı yapıp bayrağı indirecek.

Sorun: IRQ olduğunda Raster mı, yoksa timer IRQ'mu olduğunu nasıl anlacağım? Arada timer IRQ tetikleniyor olması raster IRQ'mun stabilitesini bozar mı? (Gecikme)
Logged

blackturk
Uzman
*****
Mesaj Sayısı: 1.285



Üyelik Bilgileri
« Yanıtla #1 : Aralık 11, 2013, 20:09:20 ÖS »

1--------------------------------------------------------------------
1--------------------------------------------------------------------


2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3////////////////////////////////////////////////////////////////////

4********************************************************************
4********************************************************************

       1,2,3,4  numaralı satırlar scroll yapmak istediğin alanlar.Ekranı tarama satırı 1 geldiğinde olana ait raster irq çağır.2 ,3,4 içinde aynı şeyler geçerli.örneğin 2 numaralı satır için raster irq  olduğunda sola shift yapacaksın.Burda önemli olan raster irq başladığın satırdan bitiş satırına kadar.shift işlemini ve diğer satıra yeni veri koyma işlemini bitirmen lazım.Buna dikkat etmen lazım çünkü zamanlamaları doğru yapmazsan ekran hatalı scroll yaparsın.örneğin bir ekran satırının taraması işlemci 64 cycle süre alır.Ona göre yapabilirisin.

    Birde grafikleri tile olduğunu söylemişsin.Tile map  hazırladın m ? tile  4X4 karakterden mi oluşuyor ?  Tile Map kaç'a kaç alan maksiumum çiziyor ?Tile map göre tile'ları belleğe mi yada ekrana mı doğrudan çizdiriyorsun ? Nasıl bir algoritma tasarladın ? .Basic kullarakr karakterlerden oluşan labirent "maze" bir grafik mi ? loop edip kullanmak mı istiyorsun ?

 

   

Logged

A1200 | APOLLO 1240 32 MB | CNET PCMCIA | SYSINFO SPEED TEST 30 MIPS
SM1,SEGA MEGA CD,SM2,SMS II,Sega Saturn Mod ve AR 4MB,PSX Mod ve Mpeg ,PSX2 ,SNES ,ATARI 800XL,SPECTRUM 128K +2,YAMAHA CX5M MSX,ATARI 520 STFM,1040 STF,C64,C128,1541 II,1571,RAM 1764 ,A500,A500+,A600,A590,IDE68k,2X1084S,1084P
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.798


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #2 : Aralık 11, 2013, 20:47:53 ÖS »

Hazırladığım map aşağıda.

işin içine timer IRQ'da sokmayı düşündüğüm için raster ların zamanlamasında problem yaşamaktan kokuyordum.  64 cycle benim için önemli bir ipucu oldu. Mesela yıldızlar 1. bant olacak ve 4 satır yüksekliğindeler. O zaman 1 bant için tüm işlemleri 4 x 8 x 64 = 2048 cycle'da bitirmem gekiyor ve bu süreye eğer timer irq bu aralığa denk gelirse onun harcayacağı süre de dahil.

4x4 tile'lardan oluşuyor. Tile'ları henüz oyuna dahil etmedim. Aşağıdaki resmi charpad'den export ettim.


* smracer.gif (32.86 KB, 4096x192 - Görüntüleme: 1550 kez.)
« Son Düzenleme: Aralık 11, 2013, 21:15:25 ÖS Gönderen: wizofwor » Logged

blackturk
Uzman
*****
Mesaj Sayısı: 1.285



Üyelik Bilgileri
« Yanıtla #3 : Aralık 11, 2013, 21:47:50 ÖS »

      Bir raster satırı 64 cycle süresi yiyor.bir karakter 8 pixel satırdan oluşuyor.8*64 cycle tamamlaman gerekiyor.Bir karakter basıldığında 8*64 cycle süre geciyor.Bad line durmu var. Bu konuyla fazla girmek istemiyorum konu uzuyor.Senin bu konularla ilgili dökümanları okumanı tavsiye ederim.c64 wiki gerekli yazılar ve kaynak kodlar mevcut.

     Hazırladığın tile map ilgili olarak Aşağıdaki resimde kutu olarak işaretlediğim alanlarla ilgili yazıcam.kırmızı kutu evet istediğin kaydırabilirsin.sorun yok .2 kutu olan yeşil yuvarlak içine aldığım yerler ön taraftaki beeyaz binalar ve arka fonda gölgeli mavi binalar aynı hızda scroll edemezsin. karakter tabanlı aynı satırda durdukları için yeşil yuvarlak  içindekiler sorun yaratır.aracların yolunu istediğin gibi scroll edebilirsin.sorun yok.
   
     Birde  binalar aynı loop ediyor.yoldaki çukur ve engellerde kendini tekrar ediyor.sorun yok.

     Binaların arkasındaki mavi fonu karakter olarak değilde sprite kullanırsan daha iyi olur.sebebi ise beyaz binaların arkasında mavi fon binaları istediğin gibi scroll edebilirsin.Burda sprite multiplex tekniğini kullanman lazım.




« Son Düzenleme: Aralık 11, 2013, 21:52:34 ÖS Gönderen: blackturk » Logged

A1200 | APOLLO 1240 32 MB | CNET PCMCIA | SYSINFO SPEED TEST 30 MIPS
SM1,SEGA MEGA CD,SM2,SMS II,Sega Saturn Mod ve AR 4MB,PSX Mod ve Mpeg ,PSX2 ,SNES ,ATARI 800XL,SPECTRUM 128K +2,YAMAHA CX5M MSX,ATARI 520 STFM,1040 STF,C64,C128,1541 II,1571,RAM 1764 ,A500,A500+,A600,A590,IDE68k,2X1084S,1084P
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.798


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #4 : Aralık 11, 2013, 22:58:42 ÖS »

Şu anda bir text scroller üzerinde deneme yapıyorum, onu halledebilirsem bu map'i biraz daha basitleştirip sonsuz döngüde yerleştirmeyi deneyeceğim.

Sprite multiplexer konusuna şimdilik girmek istemiyorum. Onun vakti gelecek. Yeşil işaretlediğin binalar için belediyeden yıkım kararı aldırmayı düşünüyorum Onlar traşlanacak. Bir de şu an 274 karater kullanıyorum bunu 256'ya çekmem lazım.

Logged

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