deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

SEEDS uzay oyunu, oyun içinde gerçek Alpine Linux çalıştıran tam bir RISC-V emülatörü sunuyor

Against All Odds, SEEDS uzay oyununun içindeki açık kaynak Object Pascal RISC-V emülatörü PasRISCV'yı ayrıntılarıyla anlattı; bu emülatör, oyuncunun oyun içi bilgisayarını çalıştırmak için gerçek bir Alpine Linux sistemini önyüklüyor.

SEEDS uzay oyunu, oyun içinde gerçek Alpine Linux çalıştıran tam bir RISC-V emülatörü sunuyor

Uzay oyununun içinde bir Linux makinesi

SEEDS uzay oyununun geliştiricisi Against All Odds, her oyuncunun oyun içi bilgisayarının gerçek Linux çalıştıran, tamamen emüle edilmiş bir makine olduğunu açıkladı. Stüdyonun blogunda yayımlanan ve Hacker News ana sayfasına ulaşan geliştirici yazısında ekip, gezegen genel bakışı ve istatistikler gibi oyun içi araçların yerel Linux ELF binary'leri olduğunu anlatıyor. Bir Windows makinesinde bile bu binary'ler, Alpine Linux çalıştıran emüle edilmiş bir 64-bit RISC-V sisteminde yürütülüyor.

Bunun arkasındaki emülatör PasRISCV, stüdyoda Object Pascal ile yazıldı ve pasriscvemu adlı bir frontend ile birlikte, izin verici zlib lisansı altında ücretsiz açık kaynak yazılım olarak yayımlandı. Stüdyo, başkalarını kodu incelemeye ve yeniden kullanmaya davet ediyor.

Yalnızca userspace değil, bütün bir makine

Geliştiriciler iki olası yaklaşımdan söz ediyor — yalnızca userspace'i emüle etmek ya da eksiksiz bir sanal makineyi emüle etmek — ve ikincisini seçtiklerini söylüyorlar. PasRISCV; ekran, depolama aygıtları ve kesintileri (interrupt) içeren tam bir makineyi modelliyor, böylece konuk çekirdek fiziksel donanımda çalışıyormuş gibi davranıyor.

Hedef mimari 64-bit RISC-V; yazıda, x86 ve ARM gibi tescilli mimarilere bağlı telif bedellerinden muaf açık bir standart olduğu belirtiliyor. Özellik tarafında emülatör; SMP ve multi-hart çalışmayı, RV64GC ve RVA23'ü, Hypervisor ve Vector uzantılarını ve ekalar skaler ile vektör şifreleme uzantılarını kapsıyor; tam liste proje deposunda tutuluyor.

Yorumlayıcı artı izleme JIT

CPU emülasyonu, bir yorumlayıcıyı (interpreter) izleme (tracing) JIT derleyicisiyle birleştiriyor. JIT şu anda yalnızca x86-64 ana makinelere (host) yönelik, ancak geliştiriciler karşılaştıkları talimatların yaklaşık yüzde 99'unu işlediğini tahmin ediyor. Kayan nokta işlemleri doğrudan ana makinenin FPU'suna aktarılabilirken, daha katı bir isteğe bağlı mod, yazılımsal kayan noktayı yorumlayıcıyla eşliyor; çünkü IEEE 754-2008, x86 donanımının birebir yeniden üretemediği davranışlar tanımlıyor.

Önyükleme zinciri ve disk düzeni

Emülatör, bir oyuncu oyunu başlattığında veya yüklediğinde arka planda önyükleme yapıyor. Doğrudan OpenSBI'den çekirdeğe geçen bir önyükleme, disk imajlarını initramfs içine yerleştirmeyi gerektirecekti; bu yüzden oyun OpenSBI'yi U-Boot üzerinden zincirliyor ve U-Boot çekirdeği sıradan bir disk imajından yükleyip çalıştırıyor.

Diskler ya VirtIO blok aygıtları olarak ya da PCIe üzerinde emüle edilmiş NVMe donanımı olarak bağlanıyor ve okuma-yazma ya da salt okunur olarak bağlanabiliyor. SEEDS, oyun güncellemelerinin bütünüyle değiştirebildiği salt okunur bir kök bölümü ve mini oyun yüksek skor tabloları gibi oyuncu verileri için ayrı bir kullanıcı bölümü bulunduruyor; bu durum, o veri oyun durumunun kendisine taşınıncaya kadar sürecek. Ana makine dizinleri, VirtIO-9P ya da VirtIO-FS aracılığıyla konuk makineyle paylaşılabiliyor; ekip bunu geliştirme sırasında pratik buluyor, çünkü ana makinede derlenen araçlar VM içinde hemen görünüyor. Yayımlanan sistem, özel bir çekirdek derlemesiyle hafifçe değiştirilmiş Alpine Linux 3.23.6; yine de yazıya göre güncel stok Alpine imajı da sorunsuz çalışıyor.

Retro grafikler ve Yamaha ses çipleri

Oyun içi ekranlar piksellerini, özel bir MMIO ekran arabelleğiyle desteklenen bir SimpleFB framebuffer'dan okuyor. Bu, oyunun çıktıyı shader'larla son işlemek için yeterince hızlı; tarama çizgileri, fosfor parıltısı ve bilinçli olarak bozuk 80'ler ve 90'lar görselleri ekleniyor. PasRISCV ayrıca EDID ve 2D destekli VirtIO GPU ile deneysel VirGL 3D sunuyor; ayrıca Bochs VBE ve Cirrus Logic sürücüleriyle desteklenen PCI aygıtları var; ekip Motif pencere yöneticisiyle bir X sunucusu bile çalıştırmış, ancak çoğu makinede kullanılabilir olacak kadar hızlı değilmiş.

Ses emülasyonu da benzer şekilde retro; PCM, OPL2 ve OPL3 ile CMI8738 ve FM801 kartlarını, yanı sıra Intel HDA ve VirtIO sesi kapsıyor. OPL, 80'lerin sonu ve 90'ların başı bilgisayar ve konsol sesini şekillendiren Yamaha FM sentezi ailelerine aittir. Temaya uygun olarak, yanında gelen kavram kanıtı oyunu Space Prowler, OPL3 sentezini PCM davul örnekleriyle birleştiren bir chiptune başlık temasına sahip. Bestecisi, oyun içi makinenin 640×400 framebuffer konsolunda bile çalışan chOPLin adlı küçük bir konsol tracker yazmış; geliştirici bunu cilaladıktan sonra açık kaynak olarak yayımlamayı planlıyor.

Neden önemli

Yayımlanan oyunlar neredeyse hiçbir zaman eksiksiz bir donanım emülasyon yığını içermez. SEEDS bunlardan birinin üretimde çalıştığını gösteriyor: oyuncular bir bilgisayarın senaryolaştırılmış bir taklidiyle değil, gerçek binary'ler çalıştıran gerçek bir Linux sistemiyle etkileşim kuruyor. Oyun içi uygulamalar sıradan Linux programları olduğu için, özel yapım oyun arayüzleri gibi değil, herhangi bir yazılım gibi geliştirilebiliyor, hata ayıklanabiliyor ve güncellenebiliyor. Üstelik PasRISCV zlib lisansıyla ücretsiz ve açık kaynak olduğu için, daha geniş topluluk tek bir oyunun geliştirilmesinin yan ürünü olarak yeniden kullanılabilir bir RISC-V makine emülatörü ediniyor — RISC-V'nin telifsiz açıklığının salt yazılımda meyvesini verdiğine somut bir örnek.

  • #risc-v
  • #emulation
  • #linux
  • #open-source
  • #gaming
  • #object-pascal

İlgili yazılar