1 puan yazan GN⁺ 2023-07-16 | 1 yorum | WhatsApp'ta paylaş
  • Another World / Out of This World'un VM'i, blitter'ı ve rasterizer'ını standart bir CPU olmadan FPGA donanımı üzerinde gerçekleştiren kişisel bir saygı projesi
  • Temel tasarım, VM'in gerçek bir özel işlemciye dönüştürülmesi ve framebuffer'lar arası kopyalama/doldurmadan sorumlu blitter, poligon çizen rasterizer ve ekran yenilemeyi bir araya getiren bir SoC'den oluşuyor
  • Lattice UP5K'in 128KB SPRAM'i, 4 bit 320x200 boyutunda 4 framebuffer'a uyuyor; her 32KB SPRAM bloğu bir framebuffer'a karşılık gelen bir bellek yerleşimi oluşturuyor
  • Oyun verileri depoya dahil değil; veri paketi ve bitstream'in kullanılabilmesi için BANK01~BANK0D ile MEMLIST.BIN dosyalarının GAMEDATA klasörüne kopyalanması gerekiyor
  • Çalıştırma yöntemi hem simülasyonu hem de gerçek kartı hedefliyor
    • Simülasyonda, Silice kurulduktan sonra make simul1 ile intro çalıştırılabiliyor
    • Donanım tarafında icebreaker + VGA PMOD, mch2022 badge ve ULX3S HDMI destekleniyor
    • Önceden derlenmiş bitstream dahil, ancak oyun verileri ayrıca gerekli
  • VM yürütmesi, komutları ve operandları SPI bellekten alıyor; gecikmeyi azaltmak için önce 64 baytı küçük bir BRAM önbelleğine okuyor
  • Grafik yolu; 4 framebuffer, double buffering, vblank aralığında erişim kısıtlaması ve blitter ile rasterizer'ın framebuffer erişiminin arbitre edilmesini kullanıyor
  • rasterizer, Another World'ün dışbükey poligonlarını yatay span'ler halinde çiziyor; saydamlık efekti için mevcut piksel değerini okuyup değiştirebiliyor veya başka bir kaynak framebuffer'dan piksel kopyalayabiliyor
  • Metin render etme ve part 6'nın bazı arka planları, kalan LUT bütçesi nedeniyle ROM'a önceden render edilmiş piksel tamponları kaydedilip op_drawString yolu üzerinden kopyalanarak işleniyor
  • Belirtilen sınırlamalar ve kalan işler arasında ses ve müziğin olmaması, her part için ayrı bitstream ve veri paketi gerekliliği, oyunun tamamının oynanış doğrulamasının bitmemiş olması, orijinalden daha hızlı zamanlamanın ayarlanması ve part'ler arası bağlama yönteminin araştırılması yer alıyor
  • Lisanslar: Silice tasarımı MIT License, belgeler CC BY-NC-SA 4.0, değiştirilmiş C++ portu mevcut GPL'i koruyor, oyun verileri ise telif hakkına tabi

1 yorum

 
GN⁺ 2023-07-16
Hacker News yorumları
  • Çocukken Out of this World'u Sega Genesis'te oynarken grafiklerin bundan daha iyi olamayacağını düşünmüştüm
    Sega'da böyle tam animasyonlu ara sahneleri ilk kez görmüştüm ve gerçekten inanılmazdı. Elbette grafikler daha da gelişti ama bence Another World bugün bile sanatsal olarak gayet iyi ayakta duruyor. Çok belirgin bir tarzı var ve yaklaşık bir yıl önce tekrar oynadığımda hâlâ etkileyiciydi
    Bulmacaların önemli bir kısmı deneme-yanılmaya yakın ve oyun da aşırı kısa, ama yine de değiştirmek isteyeceğim hiçbir şey yok. Another World hayranıysanız Flashback: The Quest for Identity'yi de tavsiye ederim. Benzer bir sinematik havası var; ilk başta pek sevmemiştim ama son 10 yılda giderek daha çok beğenir oldum
    • Flashback'i gerçekten çok seviyorum. Siberpunk atmosferi tam zevkime hitap ediyor, arka planlar çok güzel ve hikâyesi de harika
      Yine de Another World bir sanat eseri. Oyunun posteri yağlı boya tablo gibi görünüyor ve gerçekten çok güzel [1]
      [1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
    • Flashback'i o kadar çok sevmiştim ki uzman zorluk seviyesinde bitirmeye çalıştım, ama sonlara doğru takıldım ve slime man'i yenemedim
    • Genesis sürümü epey geç çıkmıştı. 1991'de çıkar çıkmaz Amiga sürümünü oynamıştım ve tam anlamıyla sarsıcıydı; daha önce böyle bir oyun görmemiştim
    • Sega'da önce Flashback ile tanıştım ve anında sevdim. Daha sonra Out of this World oynadığımda içine girmem biraz zaman aldı ama ikisi de müthiş sanat eserleri
    • Flashback, Delphine Software yapımıydı ve dedektif oyunu Cruise for a Corpse'ta da aynı poligon teknolojisinin bir kısmı kullanılmıştı
  • Birlikte bakılabilecek kaynaklar:
    cyxx'in Amstrad CPC için yaptığı Infernal Runner tersine mühendislik çalışması ve JavaScript portu. Another World'ün yaratıcısının eseri ve ikisi de sanal makine mimarisini kullanıyor: https://github.com/cyxx/infernal_js
    Norbert Kehrer'in The Virtual Machine Architecture of Infernal Runner sunumu. Almanca bir sunum, İngilizce slaytlar içeriyor: https://media.ccc.de/v/vcfb20_-146-en-202010111400-_th...
    The Story of Another World on the Amiga | MVG: https://www.youtube.com/watch?v=0iz9PJbs5rE
    Another World'ün Nintendo 64 portu: https://github.com/jnmartin84/aw64
    Another World'ün PlayStation 1 portu: https://github.com/fgsfdsfgs/rawpsx
  • HDL kafanızı karıştırıyorsa, bu yazarın özel dili: https://github.com/sylefeb/Silice/tree/master
    Verilog'a derleyen bir derleyici sunuyor ve ortaya çıkan çıktıyı mevcut tasarım akışına dahil edebiliyorsunuz
  • Giriş sahnesi harikaydı. PC speaker dışında ses kartım olmasa bile öyleydi
    İlk hareketten itibaren yüzerek kaçmak zorunda olmak, ardından aslan benzeri bir yaratıktan kurtulmaya çalışmak, oyun tarihindeki en acımasız deneyimlerden biri. Bu oyun sadece 1 dakika oynansa bile ömür boyu akılda kalıyor
    • Benim de birkaç dakikadan fazla, en fazla birkaç saat oynamışlığım vardır ve neredeyse hiç ilerleyememiştim ama o giriş ve ilk kaçış hâlâ zihnime kazınmış durumda
      O dönem için bu oyunun dramatik kamera efektleri gerçekten adı gibi başka bir dünya gibiydi
    • Bu oyunu hiç oynamadım ama bir video oyun dergisiyle gelen tanıtım amaçlı VHS kasetteki 2 dakikalık sahne bile 30 yıldır aklımda
      Kapak görseli de harikaydı
    • Aslan benzeri şeyden yeni arkadaşınız tarafından kurtarıldıktan hemen sonra oyundaki “replik” de asla unutulmaz
      konanaka beetzai! motsuubo! /wave
    • Sadece giriş değil, oyunun tamamının tek bir floppy disk içine sığması da şok ediciydi
    • Benim de yaklaşık 1 dakika oynayıp takıldığımı hatırlıyorum. 25 yıl sonra tekrar oynayıp bitirdim; tepki süresi eşiğini aşınca harika ve akılda kalıcı bir oyun oluyor
  • Another World'ün orijinal geliştiricisi bir GDC retrospektif konuşması yapmıştı ve GDC sunumları arasında oldukça iyi olanlardan biri:
    https://www.youtube.com/watch?v=JFaOYYSxSEA
    Yanlış hatırlamıyorsam bazı geliştirme araçlarını da gösteriyor; sanal makine bytecode'u üzerinde animasyonu satır satır doğrudan düzenleyip adım adım çalıştırdığı kısım da var
  • 90'larda tüm oyun için sanal makine yaklaşımının ne kadar yaygın olduğunu merak ediyorum. Bu oyun benden daha yaşlı; o dönemin PC'lerinde sanal makine katmanı büyük bir performans kaybına yol açmıyor muydu?
    • Aynı yazılımın Amiga, x86(DOS), Mac ve sayısız başka platformda çalışabilmesi çok daha önemliydi
      Bugün bile 80'lerdeki o patlayıcı büyüme dönemine kıyasla daha az platform var. Hatta günümüzde çoğu “yazılım”ı web tarayıcısının yorumladığı JavaScript olarak görebiliriz. 80'lerde de taşınabilirlik sorunu vardı ve o zamanlar kendi yorumlayıcınızı yazmanız gerektiği için iş daha da zordu
      Birçok, belki de çoğu video oyunu Doom ve yüksek performanslı 3D grafiklerden önce sanal makine ile yazılmış gibi görünüyor. Konsol oyunları ise performans nedeniyle muhtemelen C ya da assembly idi

O dönemde “bilgisayar” oyunlarında IBM PC standart haline gelmemişti; en azından PC’nin galip gelip Microsoft’un hakimiyet kurmasından önceydi. Amiga, PC-98, IBM PC, Mac gibi seçenekler arasında hangisinin kazanacağının belli olmadığı bir ortamda sanal makine yapmak mantıklıydı ve akla doğrudan SCUMM geliyor.

  • Yine de bu tür özel amaçlı sanal makinelerle Elite gibi şeyler yapılmıyordu.
    Taşınabilirlik önemliydi ama Moore yasasının tam hız ilerlediği ve platform ömrünün bir günlük böcek kadar kısa olduğu o dönemde sanal makine aynı zamanda sıkıştırma etkisi de sağlıyordu. Tam derlenmiş ikili dosyalar disk ya da teyp alanı ve RAM açısından fazla yer kaplayabiliyordu.
    Buna karşılık çok küçük bir sanal makine, anında yorumlanacak özel bir dil kullanabiliyor ve her kilobaytın önemli olduğu koşullarda alanı ciddi biçimde azaltıyordu. print "Hello world!" ile temel derlenmiş ikili dosyanın boyut farkını düşünmek yeterli. Metin macerası ne kadar hızlı olursa olsun X KB içine sığmıyorsa bunun bir anlamı yoktu.
  • Assembly dilinin altın çağında iş yazılımlarında da sanal makineler yaygındı. Birden çok sistemi hedefleyen standartlara uygun C derleyicileri henüz yoktu ya da çok pahalıydı; bu yüzden farklı sistemlere port etmek kolaylaşıyordu.
  • Infocom Z-Machine, Wizardry’nin yorumlanan Pascal kodu, SCUMM, Sierra AGI ve SCI, Another World, Horrorsoft oyunları gibi erken dönem sanal makinelerin püf noktası, yaptıkları oyunun esasen bir “içerik sunum aracı” olduğunu iyi kavramış olmalarıydı.
    Metin ve grafik varlıkları çoktu, hesaplama ise görece basitti. Yazım tarafındaki kısıtlar donanımla yalnızca G/Ç ve veri sıkıştırma açısından bağlantılıydı; yorumlayıcının çalıştırdığı kod da çoğunlukla bir kez çalışan “sahne başlatma” ve biraz animasyon zamanlayıcısından ibaretti.
    Bunun karşısındaki yaklaşım, atari oyunlarında ve daha sonra Doom ile Quake gibi yapımlarda daha net görülüyor. Oyunun simüle ettiği şey donanımla çok daha yakından ilişkiliydi ve sahne tanımı da “buraya canavar koy, şuraya sağlık eşyası koy” düzeyindeydi; yani betik mantığından çok harita verisine yaklaşıyordu.
  • “Tüm oyun sanal makinesi”ni nasıl tanımladığına bağlı. Infocom’un macera oyunları tüm oyun kodunu sanal makinede çalıştırıyordu; Sierra ve LucasArts’ın grafik macera oyunları da öyleydi.
    Elbette son ikisi bazı yerel grafik ilkel işlemlerini de kullanıyordu.
  • Only Amiga makes it possible sloganının 30 yıl sonra FPGA ile yer değiştirmiş hali gibi duruyor.
  • “[Şeffaflık] rasterizer’a karmaşıklık ekler. [Renk değerinin] tek bir bitini çevirmek için o konumdaki pikselin önceki değerini bilmek gerekir” kısmı, Amiga gibi planar grafik kullanmanın sağladığı üç avantajdan birine daha yakın.
    Bitplane kullanıldığında video belleğini yeniden okumak gerekmiyor. En üst bitin şeffaflık efekti için ayrıldığını varsayıp span’i doğrudan basmak yeterli.
    Diğer iki avantaj ise, düzlemleri birbirine göre kaydırarak hoş moiré efektleri oluşturabilmek ve 8 renk (piksel başına 3 bit) ya da 32 renk (piksel başına 5 bit) gibi bayt ya da nibble sınırına tam oturmayan tuhaf renk derinliklerinde bellek ve veri yolu bant genişliği açısından verimli olabilmek.
  • Bu başlık sayesinde sonunda bu oyunu kendi başıma hiç bitiremeyeceğimi kabul edip YouTube’dan oynanış videosu izledim. 22 dakikalıktı. Sanırım benim ilerleyebildiğim en fazla, aslanı bir kez geçmek olmuştu.