Gönderen Konu: Parallax mantığına Z80 bakışı  (Okunma sayısı 5646 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3093
  • Advanced User Simulator
    • ae unutmadan
Parallax mantığına Z80 bakışı
« : 29 Kasım 2014, 21:45:50 »
Daha parallax olmadı ama, bir scroller da benden :D



Kendi başlığımı belki sonra açarım, ama asıl amaç wizofwor'un yarattığı gazı atmak olduğu için, bu başlığa patlattım kokuyu :) Şimdi nightlord'un anlattığı gibi bir yönlendirici rutin kurarak birkaç scroller daha ekleyebilirim. Bu scroller'ın bir pixel kaydırması 5147 ts tuttu. Bir oturuşta yazdım, çalışınca sevindim, buraya koydum. Yazım sırasında referanslar için browserda 27 tab açmışım. Bunların 6 tanesi retrojenwiki'ye, 3'u WOS'a, 5'i z80-heaven'a, 4'ü z80.info'ya, 3'ü retrojen pano'ya, 2'si gmail'e, 3'ü facebook'a, 1'i fuse kaynak koduna.

Kod optimize edilebilir mi, ne kadar edilebilir bilmiyorum. Unrolled loop için makroya dikkat. Kaydırmanın tam satır olduğuna dikkat, çerçeveden çerçeveye uzanıyor, adice bir hile kullandım, umarım kimse farketmez ;)

Ekte: 50hz yavaşça kayan scroller, hem de full z80 koduyla birlikte :) Başlığı daha fazla kirletmemek için kodu buraya yapıştırmıyorum, arşivin içinde var.


Çevrimdışı wizofwor

  • RAAT
  • Tedavideki Retromanik
  • *
  • İleti: 398
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #1 : 29 Kasım 2014, 22:12:20 »
Ref, BASINC'ın içindeki emulatörü saymazsak senin bu scroller için hayatımda ilk defa speccy emulatörü kuruyorum. Greetz için teşekkürler. Gözlerimin ağrısı geçince kodlara da bakacağım.
Gosub ile gidilen yerden goto ile dönen adam

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3093
  • Advanced User Simulator
    • ae unutmadan
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #2 : 29 Kasım 2014, 23:02:02 »
Ref, BASINC'ın içindeki emulatörü saymazsak senin bu scroller için hayatımda ilk defa speccy emulatörü kuruyorum. Greetz için teşekkürler. Gözlerimin ağrısı geçince kodlara da bakacağım.

Hahah, özellikle seçtim macentayı, spectrum renkleri ışık tayf'ın x-ray'e geçtiği noktada bulunduğu için kanser edebilir, dikkat. ;) Fakat bu durumda hep c64 ile mi uğraşıyorsun yahu? Yıllardır retro camiasında olan bir adamın makinasında tüm emülatörler hazır bulunmalıdır. Elbette mac'lerde zx emülatör sıkıntısı var, bu da bir sebep olabilir. Mac kullanıyorsan Fuse sanırım en iyisi, fakat ayarları karmaşık olabilir. Kodu denemek için Zx Spectrum 48k'yı tavsiye ediyorum (aslında modelin pek bir önemi yok).

Çevrimdışı nightlord

  • RAAT
  • Tedavideki Retromanik
  • *
  • İleti: 389
    • Night Network
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #3 : 30 Kasım 2014, 06:40:12 »
Ellerine saglik Ref. Ben de sayende z80 assembly bilgilerimi bi tazeledim. HL'yi 8 ile carpmak icin yaptigin 3 toplama enteresan. ben niye 3 kere shift etmiyor diye dusunurken add hl, hl ile sla hl arasindaki hiz farkini farkettim:)

adice bir hile kullandım, umarım kimse farketmez ;)

carry flag ustunden pixeli yan bayt'a aktarmayi mi diyorsun? eger oysa hic adice degil :)

bu arada 2 soru:
- halt diye komutunuz mu var vblank beklemek icin yoksa oda pasmo macrosu mu?
- neden 32 degil de 33 kere unroll ediyorsun loop'u. ekranda rol edilecek 33 bayt yok mu (en sagdaki hidden dahil)


Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 192
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #4 : 30 Kasım 2014, 12:27:06 »
Hımmm

Text'in ilk karakterini 0. satırın son kolonuna değilde 1. satırın ilk kolonuna basıp scroll yapılıyor. Bu yüzden 32 değil 33 döngü kullanılıyor.
HALT diye bir komut var. Bildiğim kadarıyla 1/50 sn'lik bir delay sağlıyor. Aslında donanımsal bir komut olması lazım. Tam olarak ne işe yaradığını bilmiyorum. Zaten Z80'in /HALT isimli bir çıkış pini var.

...
ld b,10
LOOP halt
djnz LOOP
...

Gaza geldim. Hemen bir scroll rutini yazayım. Bakalım hız ve uzunluk olarak fark olacak mı?

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3093
  • Advanced User Simulator
    • ae unutmadan
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #5 : 30 Kasım 2014, 15:51:19 »
Ellerine saglik Ref. Ben de sayende z80 assembly bilgilerimi bi tazeledim. HL'yi 8 ile carpmak icin yaptigin 3 toplama enteresan. ben niye 3 kere shift etmiyor diye dusunurken add hl, hl ile sla hl arasindaki hiz farkini farkettim:)
Bu sebepten z80.info'ya 4 tab açmıştım :) orda üç tane tablo var kolay referans için, sanırım en faydalısı şu: http://www.z80.info/z80code.txt


- halt diye komutunuz mu var vblank beklemek icin yoksa oda pasmo macrosu mu?
"Halt" bir Z80 komutu. cpu'yu interrupt gelene kadar durduruyor. Zx spectrumda interrupt vblank'ın sonunda tetikleniyor, yaklaşık 14400 tstate sonra üst border alanı tamamen çizilmiş oluyor ve bitmap'in çizimine başlanıyor. Eğer ekranla işinizi border'ın çizildiği o ilk 14k tstate içinde bitirebilirseniz ULA geciktirmesine yakalanmıyorsunuz, yani komutlarınız ula tarafından kesilmeden iş görebiliyorsunuz.

Halt'ı sadece interrupt bozabilir, eğer interruptlar kapalı ilken halt işletirseniz programınız çakmış olur.

Burada ben ROM servis rutinini IM1 bozmuyorum. Bu sebepten halt'tan sonra sinclair basic servis rutini çalışıyor, klavyeyi falan kontrol ediyor, sistem değişkenlerini tazeliyor, bu da yaklaşık 1000ts harcıyor. Normalde bana o işlemler lazım değil, IM2 kurup bu süreyi 30-40 ts'ye çekebiliyoruz.

iki interrupt arasında (1 kare görüntüde) 69888 ts var. 69888 x 50hz = 3494400ts = 3.49mhz işlemci.  128k biraz daha hızlı, 1 kare 70908ts, yani 3.54mhz

ld b,10
LOOP halt
djnz LOOP

Gaza geldim. Hemen bir scroll rutini yazayım. Bakalım hız ve uzunluk olarak fark olacak mı?
Titan zinciri gibi gaza geliyoruz hades. 7Dx mart ayında yapılacakmış :) Minik bir intro yapalım bari, zx olayı şenlensin.

bu arada o yazdığın loop 10 kare bekletir.


Ayrıca, ben yine fazla çene yaptığım, hades de olaya karıştığına göre, bu konuyu bölme zamanı geldi. Genel moderatör olaraktan bölüyorum konuyu.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 192
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #6 : 02 Aralık 2014, 21:38:12 »
Ellerine saglik Ref. Ben de sayende z80 assembly bilgilerimi bi tazeledim. HL'yi 8 ile carpmak icin yaptigin 3 toplama enteresan. ben niye 3 kere shift etmiyor diye dusunurken add hl, hl ile sla hl arasindaki hiz farkini farkettim:)


Nightlord'un mesajında bold yaptığım ifade dikkatimi çekti. Acaba Nightlord gizli gizli Speccy demosu kodluyor olabilir mi? :)

Bu arada ben de birşeyler kodlasam iyi olacak.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 3093
  • Advanced User Simulator
    • ae unutmadan
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #7 : 02 Aralık 2014, 22:47:48 »
Acaba Nightlord gizli gizli Speccy demosu kodluyor olabilir mi? :)

Bundan 5 sene önce cgtr'de bir sinerji yakaladığımızda (herkesin bir rahatlayıp paralel platformlara da neşe ile yaklaştığı zamanlarda) nightlord'un böyle bir planı vardı.

Sonra z80'e baktığında aslında o kadar da süper bir işlemci olmadığına karar verdiğini hatırlıyorum.

İşin doğrusu, içine daldıkça, ve 6502'deki 2 cycle'lık işlemleri gördükçe, 3.5mhz'in çok da bir esprisi olmadığını görüyor insan. z80, 6502'ye göre daha iyi bir işlemci, ama 6502 hele ki yanına sid ve vic'i alınca, 1541'deki ikinci 6502'yi de katınca çok daha büyük bir güç oluşturuyor. Z80 yetim gibi tek başına çok sönük kalıyor. Bu sefer bin çeşit takla atmanız gerekiyor basit bir iş için. c64 kodlama 6502 yüzünden zorlaşıyor gibi görünse de vic görsel işlemlerde büyük bir yükü programcının elinden alıyor. iki düdük adresi modifiye ederek bir grafik alanını oynatabilmek büyük bir lüks. Amaç z80 kodlama ise, Zx Spectrum ayrıca bir problem. Amstrad'da yapsa z80 kodlamayı daha mutlu olacaktır. En azından clive'ın ucuzlaştırma manevralarına takılmadan işini rahatça görür.


Herşey bir kenara, nightlod bir gün zx spectrum için kodlama yapacak olsa hiç zorlanmayacağından eminim. En azından sadece z80 kasması gerecek, spectrumda başka bir işlemci yok :) Fakat artık oğlan da büyümeye başladığına göre, gittikçe azalan zamanını spectrum'a ayırabileceğini beklememek gerek.

Diğer taraftan ingilizce bilmeyenler için retrojen wikideki z80 başlık sayısını çoook yavaştan arttırıyorum. Spambot probleminden dolayı tüm hesapları sildim, birtek benimki kaldı ama el atmak isteyene hesap açabilirim.

Çevrimdışı nightlord

  • RAAT
  • Tedavideki Retromanik
  • *
  • İleti: 389
    • Night Network
Ynt: Parallax mantığına Z80 bakışı
« Yanıtla #8 : 03 Aralık 2014, 01:05:02 »
daha alco'ya cpc demo borcum var once.

Ondan once ref'in bahsettigi gibi bir ara birseyler kodlamistim speccy 48K icin. Ama benim temel problemim su olmustu. Ben, elimde gercegi bulunmayan cihaza kod yazmayi sevmiyorum. yani gelistirirken elbette emulatorle calisiyorum ama bitince gercek cihaza atabilmeliyim ve calisirken gorebilmeliyim. Malesef elimdeki tek speccy 48K. onun da sesi cikmadigi icin ustunde intro falan bile yapan yok gordugum kadariyla. daha ust bi speccy alayim falan diye niyetlenmistim. O moda girince insan ustunde platformun iyi demolarini izleyebilecegim bir cihaz olsun istiyor. Ref'ten ogrendigim kadariyla onlar da bu abuk Rus klonlari. Onlari bulmak temelli imkansiz. Benim speccy macerasi biraz o yuzden yarim kaldi. Yaptigim introyu calistiracak ve onemli Speccy demolarini izleyecek donanim bulup alamadim.

cpc'de de 3 degisik grafik modunda pixel bastim falan ama daha oteye gitmeye vakit olmadi. Bu platformlara muzik, grafik yapmak icin de gerekli toollari bulmak ogrenmek falan lazim. Hadi grafiklere kendi converterlarimi uydururum ihtimalen ama muzik olayi bana su an tamamen muallak