a5k - Another World / Out of This World'un FPGA'ye taşınmış hali
(github.com/sylefeb)- 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~BANK0DileMEMLIST.BINdosyalarınınGAMEDATAklasörüne kopyalanması gerekiyor - Çalıştırma yöntemi hem simülasyonu hem de gerçek kartı hedefliyor
- Simülasyonda, Silice kurulduktan sonra
make simul1ile 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
- Simülasyonda, Silice kurulduktan sonra
- 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,
vblankaralığı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_drawStringyolu ü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
Hacker News yorumları
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
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
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
Verilog'a derleyen bir derleyici sunuyor ve ortaya çıkan çıktıyı mevcut tasarım akışına dahil edebiliyorsunuz
İ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
O dönem için bu oyunun dramatik kamera efektleri gerçekten adı gibi başka bir dünya gibiydi
Kapak görseli de harikaydı
konanaka beetzai! motsuubo! /wave
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
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.
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.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.
Elbette son ikisi bazı yerel grafik ilkel işlemlerini de kullanıyordu.
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.