Gönderen Konu: 7mhz Amiga500 için Doom Klonu  (Okunma sayısı 2902 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
7mhz Amiga500 için Doom Klonu
« : 26 Şubat 2020, 20:38:39 »
KK/Altair'in kodlama projesi olan bir doom klonu. Site üyelerimizin hepsi görmüştür mutlaka ama burada @codewarrior sayesinde amiga kodlamadan bahsettik son günlerde, @Alpyre 'nin de benzer projesi vardı, bir yine de buraya bir link bırakalım.



Çevrimdışı Shax

  • Yönetici
  • Normalleşmiş Retroman
  • *
  • İleti: 1163
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #1 : 26 Şubat 2020, 23:21:34 »
Yasasin! Artik Amiga batmak zorunda degil.
Sahip oldukların zamanla sana sahip olur.

Çevrimdışı 68k

  • Retro Meraklısı
  • ***
  • İleti: 247
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #2 : 27 Şubat 2020, 11:56:44 »
Hangi turbo kartlar lazim, kac haneli maliyet :)

Çevrimdışı Alpyre

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 106
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #3 : 27 Şubat 2020, 20:13:45 »
Hangi turbo kartlar lazim, kac haneli maliyet :)

Stok A500 performansı videodaki... benim projede 4 renk (2 bitplane) kullanmış, bir sürü de kısıtlama yapmıştım 3-5 fps'yi pek aşamamıştım. A1200'de sağlam bir turbo kart gerektiren AlienBreed bile tam ekranda pikselleri 6x6 kullanıyor (yani çözünürlük 50'ye 40). Bu demoda pikseller 1x1 görünüyor. Bu arkadaş ne yaptı, nasıl yaptı aklım almıyor. Bir de WAD formatı kullanıyor. Yani BSP ağacı falan taranıyor. Çok sağlam coding trickler dönüyor orada, öyle böyle değil, çok fena.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #4 : 27 Şubat 2020, 22:34:02 »
Bu demoda pikseller 1x1 görünüyor. Bu arkadaş ne yaptı, nasıl yaptı aklım almıyor. Bir de WAD formatı kullanıyor. Yani BSP ağacı falan taranıyor. Çok sağlam coding trickler dönüyor orada, öyle böyle değil, çok fena.
O kadar derin optimizasyona bile aldığı fps 13.
Alpyre, sonuçta sen kodu yanlış hatırlamıyorsam AMOS ile prototiplemiştin ve 3-5 fps almıştın. Onu saf asm ile yazdığında o fps 10 civarına çıkacağı kesin gibi.

yeni gelen arkadaşlar için yeniden hatırlayalım, Alpyre'ninki çok güzel bir projeydi:
https://retrojen.org/pano/index.php?topic=1083.msg9339#msg9339

@codewarrior da ilgilenebilir, amiga kodlayabilen insanlar bir araya gelsin.

Çevrimdışı 68k

  • Retro Meraklısı
  • ***
  • İleti: 247
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #5 : 27 Şubat 2020, 23:09:06 »
Hangi turbo kartlar lazim, kac haneli maliyet :)

Stok A500 performansı videodaki... benim projede 4 renk (2 bitplane) kullanmış, bir sürü de kısıtlama yapmıştım 3-5 fps'yi pek aşamamıştım. A1200'de sağlam bir turbo kart gerektiren AlienBreed bile tam ekranda pikselleri 6x6 kullanıyor (yani çözünürlük 50'ye 40). Bu demoda pikseller 1x1 görünüyor. Bu arkadaş ne yaptı, nasıl yaptı aklım almıyor. Bir de WAD formatı kullanıyor. Yani BSP ağacı falan taranıyor. Çok sağlam coding trickler dönüyor orada, öyle böyle değil, çok fena.

stok a500'den sonrasını anlamadım ama o kısım yetti, hakkaten acayipmiş.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #6 : 27 Şubat 2020, 23:20:55 »
stok a500'den sonrasını anlamadım ama o kısım yetti, hakkaten acayipmiş.
di mi ya :)

Bir de narco police aklıma geldi. Bir dönem sprite scaling ile 3D'msi görseller yaratıyorlardı. Güzel de görülüyordu, en güzel örneği SEGA'nın Rad Mobile idi. Amigada sprite scaling olmamasına karşın, Narco Police kendince süper bir trick ile bu işin üstesinden gelmişti.


Çevrimdışı 68k

  • Retro Meraklısı
  • ***
  • İleti: 247
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #7 : 28 Şubat 2020, 00:51:42 »
stok a500'den sonrasını anlamadım ama o kısım yetti, hakkaten acayipmiş.
di mi ya :)

Bir de narco police aklıma geldi. Bir dönem sprite scaling ile 3D'msi görseller yaratıyorlardı. Güzel de görülüyordu, en güzel örneği SEGA'nın Rad Mobile idi. Amigada sprite scaling olmamasına karşın, Narco Police kendince süper bir trick ile bu işin üstesinden gelmişti.


japon işi pseudo 3d :P sanırım power drift de aynı tekniği kullanıyordu, o oyunu görür görmez vurulmuştum.

Çevrimdışı Melt

  • Retromanik
  • *****
  • İleti: 3
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #8 : 07 Mart 2020, 16:10:34 »

1995 te Polonyalıların yaptığı Citadel 1mb a500 de ilk oynadığım 3D texture map oyundu.  Screen size ı oyun içinde değiştirerek oynanabilir fps yakalıyorduk. 5 Disketten oluşuyordu sanırım ve ilk 4 disket 3D animasyon içindi, komik olan bu oyun nasıl oluyorda tek diskete sığmıştı.  Zamanında animasyonla başlangıç olmasın diye 5. diskete boot u kopyalamıştım action replay kartuşla.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #9 : 07 Mart 2020, 20:05:45 »
acaba bir poligonu doku ile kaplamak ile tek bir renge doldurmak arasında boyama hızı bakımından ne kadar fark var?

Çevrimdışı Alpyre

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 106
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #10 : 07 Mart 2020, 20:46:50 »
acaba bir poligonu doku ile kaplamak ile tek bir renge doldurmak arasında boyama hızı bakımından ne kadar fark var?
Çok. Çünkü Blitter çipinin "polygon fill" modu var. Ekrandaki tüm poligonları tek bir yönergeyle aynı renge doldurabilirsin (hem de CPU'ya paralel olarak).

Hadi onu kullamayacaksın, CPU ile yazacaksın diyelim. Her bir piksel için "Texture Look Up" yapmayacağın için en az iki kat hızlanma olur tek renge doldururken.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #11 : 08 Mart 2020, 08:47:42 »
Coppershade tutorialinden blitter'in nasıl çalıştığına şöyle bir baktım. Orda bir uyarı var:

"The Blitter runs on DMA, but shares cycles with the CPU, so that a heavy Blitter operation will block chipmem accesses for the CPU and make the code run slower. You can make the blit finish faster (when the operation is such that not all CPU cycle slots are already taken) by setting the BLTPRI bit in DMACON. Conversely, you can force every fourth cycle to be available for the CPU so that they can work concurrently by clearing this bit."

Peşinden wikipedia'da:

"certain chipset DMA, such as high-resolution graphics with a larger color palette, Copper, or blitter operations, can use any spare cycles, effectively blocking cycles from the CPU. In such situations CPU cycles are only blocked while accessing shared RAM, but never when accessing Fast (CPU-only) RAM (when present) or ROM"

Yani, Blitter (ya da diğer chipset elemanları) Chip Mem üzerinde operasyon yaparken (ki chipset sadece chipmem'e erişebiliyor) CPU sırasını bekler. Bu ne demek oluyor? Zx Spectrum ile bire bir aynı durum. Burada şöyle bir işlem yapabiliyorsunuz: işi blitter'e paslayıp siz fastmem'de CPU ile rahatça çalışabiliyorsunuz. Fakat ekran kaşesi chipmem'de tutulmak zorunda olduğu için bu sırada CPU ile ekrana dokunmanız size zarar yazıyor, çünkü o zaman en iyi ihtimalle CPU'yu %25 hızında kullanabiliyor olacaksınız (Blitter'in bir seçeneği var, 3 çizip 1 bekleyebiliyor CPU için).

Tabii bir ekstra not: ilk alıntıdaki "spare cycles" mantığı da şu, Amigada 68K sadece çift cycle değerlerinde chipram'e erişebiliyormuş. Tek değerlerde chipset erişiyormuş, bu durumda bir çakışmanın önüne geçiliyor. Eğer yaptığınız işlem o "tek değerlerde" halledilebiliyorsa CPU yine rahatça çalışıyor. Anladığım kadarıyla bu boş cycle'ların blitter fill için kullanılması pek mümkün değil. Yanılıyor olabilirim, bu 10 dakikalık bir okumanın sonucuydu. El birliği ile çözeriz zamanla bu sorunu :D 

Çevrimdışı witchdoktor

  • RAAT
  • Normalleşmiş Retroman
  • *
  • İleti: 758
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #12 : 08 Mart 2020, 10:33:38 »
2 frame'den biri chipmem'de, diğeri fastmem'de CPU ile oluşturulup kopyalanma maliyeti durumu kurtarır mıydı acaba? PC'de DOS zamanlarında birçok oyununun virtual framebuffer üzerinde çalıştığını duymuştum.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2653
  • Advanced User Simulator
    • ae unutmadan
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #13 : 08 Mart 2020, 10:43:05 »
2 frame'den biri chipmem'de, diğeri fastmem'de CPU ile oluşturulup kopyalanma maliyeti durumu kurtarır mıydı acaba? PC'de DOS zamanlarında birçok oyununun virtual framebuffer üzerinde çalıştığını duymuştum.

Anladığım kadarıyla, o zaman sadece cpu ile işlem yapabilrsin. Blitter'in fastmem'e erişimi yok. Bu sebepten oradaki bilgi ekrana ancak cpu ile kopyalanabilir. Backbuffer'ı chipmem'e açsan blit sırasında cpu duruyor.
Sadece bu da değil, tüm sesler grafikler, spritelar, ekran tamponu, hepsi chipmem'de durması lazım. Bu açıdan bakınca fastmem hızlı bir depolama birimi gibi. Gerçekten de sıkıntılı bir durum. Bu durumda amiga programclığı "ya chipset/ ya cpu" ikilemine sıkışmış oluyor. Elbette programı mükemmel tasarlayıp, blitter bazı işlemleri yaparken, kompleks matematiksel işlemleri diğer taraftan cpu ile fastmem'de halletmek mümkün. Sonra sonuçlardan çizime yarayacak kısımları alıp yine chipmem'e atmak gerekiyor. Sadece bu da değil, blitter'in çizime başlaması için 20 register'in ayarlanması gerekiyormuş:
http://coppershade.org/asmskool/Blitter-Register-List.S
eğer dolduracağın kısım küçükse, 20 register ayarlayana kadar ekrana 20 kere 32 bit veri yazarsın. Bayağı ustalık gerektiren bir iş chipset ile uğraşmak, kesinlikle tüm sistemi çok iyi anlamış olman gerekiyor, ve kodlamaya başlamadan önce bu sistemdeki parçaları birbirini tıkamayacak şekilde planlaman gerekiyor.   


Çevrimdışı Alpyre

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 106
Ynt: 7mhz Amiga500 için Doom Klonu
« Yanıtla #14 : 10 Mart 2020, 07:48:17 »
Sadece bu da değil, blitter'in çizime başlaması için 20 register'in ayarlanması gerekiyormuş:
http://coppershade.org/asmskool/Blitter-Register-List.S
eğer dolduracağın kısım küçükse, 20 register ayarlayana kadar ekrana 20 kere 32 bit veri yazarsın.

Durum o kadar da kötü değil. Yapacağın blit işlemleri benzer ve aynı screen buffer'a olacağı için o register'ların çoğunu baştan ayarlamış olacak, her yeni blit için adresi ve BLTSIZE'ı güncellemen (ki bu işlemi de tetikliyor aynı zamanda) yetecektir.