1 poin oleh GN⁺ 2023-07-16 | 1 komentar | Bagikan ke WhatsApp
  • Ini adalah proyek homage pribadi yang mengimplementasikan VM, blitter, dan rasterizer dari Another World / Out of This World dalam perangkat keras FPGA tanpa CPU standar
  • Desain intinya terdiri dari VM yang dibuat sebagai prosesor kustom nyata, blitter yang menangani penyalinan dan pengisian antar-framebuffer, rasterizer yang menggambar poligon, serta SOC yang menggabungkan pembaruan tampilan
  • SPRAM 128KB pada Lattice UP5K cocok untuk 4 framebuffer 4-bit 320x200, dengan tata letak memori di mana setiap blok SPRAM 32KB berkorespondensi dengan satu framebuffer
  • Data game tidak disertakan dalam repositori; BANK01 hingga BANK0D dan MEMLIST.BIN harus disalin ke folder GAMEDATA agar paket data dan bitstream dapat digunakan
  • Cara menjalankannya menargetkan baik simulasi maupun board nyata
    • Untuk simulasi, setelah memasang Silice, intro dapat dijalankan dengan make simul1
    • Untuk perangkat keras, didukung icebreaker + VGA PMOD, mch2022 badge, dan ULX3S HDMI
    • Bitstream yang sudah dibangun sebelumnya disertakan, tetapi data game tetap diperlukan secara terpisah
  • Eksekusi VM mengambil instruksi dan operand dari memori SPI, dan untuk mengurangi latensi, terlebih dahulu membaca 64 byte ke cache BRAM kecil
  • Jalur grafis menggunakan 4 framebuffer, double buffering, pembatasan akses selama periode vblank, serta arbitrase akses framebuffer antara blitter dan rasterizer
  • Rasterizer menggambar poligon cembung Another World sebagai span horizontal, dan untuk efek transparansi dapat membaca lalu memodifikasi nilai piksel yang ada atau menyalin piksel dari framebuffer sumber lain
  • Rendering teks dan sebagian latar part 6 ditangani dengan menyimpan buffer piksel yang sudah dipra-render ke ROM karena sisa anggaran LUT, lalu menyalinnya melalui jalur op_drawString
  • Batasan dan pekerjaan tersisa yang disebutkan mencakup belum adanya suara dan musik, kebutuhan bitstream serta paket data terpisah untuk tiap part, verifikasi gameplay penuh yang belum selesai, penyesuaian timing yang lebih cepat daripada versi asli, serta eksplorasi cara menyambungkan antar-part
  • Lisensinya adalah MIT License untuk desain Silice, CC BY-NC-SA 4.0 untuk dokumen, port C++ yang dimodifikasi tetap mengikuti GPL yang sudah ada, dan data game berada dalam cakupan hak cipta

1 komentar

 
GN⁺ 2023-07-16
Komentar Hacker News
  • Waktu kecil saya memainkan Out of this World di Sega Genesis dan berpikir grafis tidak mungkin bisa jadi lebih bagus dari ini
    Itu pertama kalinya saya melihat cutscene animasi penuh seperti itu di Sega, dan benar-benar luar biasa. Tentu saja grafis kemudian menjadi lebih baik, tetapi Another World masih terasa tetap kuat secara artistik sampai sekarang. Gayanya sangat khas, dan saat saya memainkannya lagi sekitar setahun lalu, game itu masih tetap mengesankan
    Banyak puzzle-nya terasa seperti trial and error dan game-nya juga sangat pendek, tetapi tetap saja tidak ada yang ingin saya ubah. Jika Anda penggemar Another World, saya juga merekomendasikan Flashback: The Quest for Identity. Suasananya sinematik dengan nuansa yang mirip, dan meskipun awalnya saya kurang suka, dalam 10 tahun terakhir saya justru makin menyukainya
    • Saya benar-benar suka Flashback. Latar cyberpunk-nya sangat sesuai dengan selera saya, background-nya indah, dan ceritanya juga keren
      Tapi Another World itu sebuah karya seni. Poster game-nya terlihat seperti lukisan cat minyak dan benar-benar indah [1]
      [1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
    • Saya sangat suka Flashback sampai mencoba menamatkannya di tingkat kesulitan ahli, tetapi mentok di bagian akhir dan tidak bisa mengalahkan slime man
    • Versi Genesis keluar cukup belakangan. Saya memainkan versi Amiga segera setelah rilis pada 1991, dan itu benar-benar mengejutkan; saya belum pernah melihat game seperti itu sebelumnya
    • Saya pertama kali mengenal Flashback di Sega dan langsung menyukainya. Ketika kemudian memainkan Out of this World, saya butuh waktu untuk benar-benar tenggelam ke dalamnya, tetapi keduanya adalah karya seni yang luar biasa
    • Flashback adalah karya Delphine Software, dan game detektif Cruise for a Corpse juga memakai sebagian teknologi poligon yang sama
  • Materi terkait yang layak dilihat:
    Reverse engineering dan port JavaScript Infernal Runner untuk Amstrad CPC oleh cyxx. Ini adalah karya dari pembuat Another World, dan keduanya memanfaatkan arsitektur mesin virtual: https://github.com/cyxx/infernal_js
    Presentasi The Virtual Machine Architecture of Infernal Runner oleh Norbert Kehrer. Presentasinya berbahasa Jerman dengan slide berbahasa Inggris: 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
    Port Another World untuk Nintendo 64: https://github.com/jnmartin84/aw64
    Port Another World untuk PlayStation 1: https://github.com/fgsfdsfgs/rawpsx
  • Jika HDL membingungkan, ini adalah bahasa kustom buatan penulis: https://github.com/sylefeb/Silice/tree/master
    Tersedia compiler yang mengompilasinya ke Verilog, dan hasilnya bisa dimasukkan ke alur desain yang sudah ada
  • Intro-nya fantastis. Bahkan hanya dengan speaker PC dan tanpa sound card pun tetap begitu
    Dari aksi pertama saja kita sudah harus berenang untuk melarikan diri, lalu kabur dari makhluk mirip singa, dan itu adalah salah satu pengalaman game paling brutal sepanjang masa. Main game ini satu menit saja sudah cukup untuk membuatnya terkenang seumur hidup
    • Saya rasa saya hanya memainkannya beberapa menit, paling lama beberapa jam, dan hampir tidak membuat kemajuan, tetapi intro dan pelarian pertama itu masih terpatri dalam ingatan saya sampai sekarang
      Untuk standar saat itu, efek kamera dramatis di game ini benar-benar terasa seperti dunia lain, sesuai judulnya
    • Saya sendiri belum pernah memainkan game ini, tetapi hanya adegan 2 menit di kaset VHS promosi yang disertakan dengan majalah video game saja sudah menancap di kepala saya selama 30 tahun
      Ilustrasi sampulnya juga luar biasa
    • Saya juga tidak akan pernah lupa “dialog” dalam game yang muncul tepat setelah teman baru kita menyelamatkan kita dari makhluk mirip singa itu
      konanaka beetzai! motsuubo! /wave
    • Bukan hanya intro-nya, fakta bahwa seluruh game muat dalam satu disket floppy juga sangat mengejutkan
    • Saya punya ingatan yang sama, mentok setelah bermain sekitar 1 menit. Saya memainkannya lagi 25 tahun kemudian dan berhasil menamatkannya; begitu hambatan kecepatan reaksi terlewati, ini adalah game yang hebat dan berkesan
  • Pengembang asli Another World pernah memberikan presentasi retrospektif di GDC, dan itu termasuk salah satu presentasi GDC yang cukup bagus:
    https://www.youtube.com/watch?v=JFaOYYSxSEA
    Kalau saya ingat benar, ia juga memperlihatkan sebagian alat pengembangannya, termasuk cara mengedit animasi langsung per baris dalam bytecode mesin virtual dan menjalankannya langkah demi langkah
  • Saya penasaran seberapa umum mesin virtual untuk seluruh game pada era 90-an. Ini game yang lebih tua dari saya, tetapi bukankah lapisan mesin virtual di PC saat itu akan menimbulkan penalti performa yang besar?
    • Jauh lebih penting agar perangkat lunak yang sama bisa berjalan di Amiga, x86(DOS), Mac, dan banyak platform lain
      Saat ini jumlah platform lebih sedikit dibanding masa ledakan pertumbuhan pada 80-an. Bahkan sekarang, sebagian besar “perangkat lunak” bisa dibilang adalah JavaScript yang ditafsirkan oleh web browser. Masalah portabilitas juga sudah ada pada 80-an, dan justru lebih sulit saat itu karena harus membuat interpreter sendiri
      Banyak, mungkin bahkan sebagian besar, video game tampaknya ditulis menggunakan mesin virtual sebelum era Doom atau grafis 3D berperforma tinggi. Game konsol kemungkinan besar memakai C atau assembly karena tuntutan performa

Pada masa itu, game “komputer” masih sebelum IBM PC menjadi standar, atau setidaknya sebelum PC menang dan Microsoft mendominasi. Dalam situasi ketika belum jelas apakah yang akan menang itu Amiga, PC-98, IBM PC, Mac, dan lain-lain, membuat mesin virtual adalah pilihan yang masuk akal, dan SCUMM langsung terlintas

  • Meski begitu, orang juga tidak membuat sesuatu seperti Elite dengan mesin virtual tujuan khusus seperti ini
    Portabilitas memang penting, tetapi pada masa ketika Hukum Moore melaju dengan kecepatan penuh dan umur platform terasa sesingkat lalat sehari, mesin virtual juga memberi efek kompresi. Biner yang dikompilasi penuh bisa memakan terlalu banyak ruang disk atau kaset, serta RAM
    Sebaliknya, mesin virtual yang sangat kecil bisa memakai bahasa kustom untuk diinterpretasikan secara langsung, dan sangat menghemat ruang dalam situasi ketika setiap kilobyte harus dihemat. Cukup bayangkan perbedaan ukuran antara print "Hello world!" dan biner hasil kompilasi dasar. Secepat apa pun text adventure, kalau tidak muat dalam X KB, itu tidak ada gunanya
  • Pada masa kejayaan bahasa assembly, mesin virtual juga umum dipakai dalam perangkat lunak bisnis. Pada saat itu compiler C yang patuh standar untuk banyak sistem masih belum ada atau sangat mahal, sehingga porting ke berbagai sistem yang berbeda menjadi lebih mudah
  • Kunci dari mesin virtual awal seperti Z-Machine milik Infocom, kode Pascal terinterpretasi milik Wizardry, SCUMM, Sierra AGI dan SCI, Another World, game-game Horrorsoft, adalah bahwa mereka sangat memahami bahwa game yang mereka buat pada dasarnya adalah “perangkat penyampai konten”
    Ada banyak teks dan aset grafis, sementara komputasinya relatif sederhana. Batasan kepengarangan hanya terhubung dengan perangkat keras dari sisi I/O dan kompresi data, dan kode yang dijalankan interpreter biasanya hanyalah “inisialisasi adegan” yang dijalankan sekali serta sedikit timer animasi
    Gagasan di sisi sebaliknya lebih terlihat pada game arcade, dan kemudian pada hal-hal seperti Doom dan Quake. Apa yang disimulasikan game jauh lebih terkait erat dengan perangkat keras, dan definisi adegannya menjadi lebih mirip data peta daripada logika skrip, seperti “taruh monster di sini dan item kesehatan di sana”
  • Itu tergantung bagaimana kita memandang “mesin virtual untuk seluruh game”. Game petualangan Infocom menjalankan seluruh kode game di mesin virtual, dan graphic adventure dari Sierra dan LucasArts juga begitu
    Tentu saja, dua yang belakangan tetap memakai sebagian operasi primitif grafis native
  • Rasanya seperti Only Amiga makes it possible digantikan FPGA 30 tahun kemudian
  • Bagian yang mengatakan, “[transparansi] menambah kompleksitas pada rasterizer. Untuk membalik hanya satu bit dari [nilai warna], kita harus mengetahui nilai piksel sebelumnya pada posisi tersebut” terasa seperti salah satu dari tiga kelebihan yang didapat saat memakai grafis planar seperti pada Amiga
    Dengan memakai bitplane, tidak perlu membaca ulang memori video. Cukup anggap bit paling atas dikhususkan untuk efek transparansi dan semprotkan span apa adanya
    Dua kelebihan lainnya adalah bahwa plane-plane itu bisa digerakkan relatif satu sama lain untuk menciptakan efek moire yang keren, dan bahwa untuk kedalaman warna yang serba tanggung dan tidak pas ke byte atau nibble, seperti 8 warna (3 bit per piksel) atau 32 warna (5 bit per piksel), efisiensi memori dan bandwidth bus menjadi baik
  • Gara-gara thread ini, saya akhirnya mengakui bahwa saya tidak akan pernah menamatkan game ini sendiri lalu menonton video gameplay di YouTube. Durasi videonya 22 menit. Sepertinya saya cuma pernah berhasil melewati singa sekali