3 poin oleh GN⁺ 2024-05-16 | 2 komentar | Bagikan ke WhatsApp
  • Game Nintendo 64 yang dirilis pada 1996 kini bisa dikompilasi ulang menjadi port PC native alih-alih diemulasikan, sehingga peningkatan seperti ray tracing, ultrawide, dan FPS tinggi dapat diterapkan
  • N64Recomp dan Zelda64Recomp yang dirilis Mr-Wiseguy di GitHub adalah alat utamanya, dan Zelda64Recomp mem-porting The Legend of Zelda: Majora's Mask ke PC
  • Pendekatan ini berbeda dari port PC Super Mario 64 berbasis dekompilasi penuh yang dirilis pada 2020, tetapi keduanya sama-sama berjalan native di PC sehingga dapat meningkatkan performa dan akurasi efek
  • Sementara dekompilasi manual membutuhkan satu orang atau lebih untuk bekerja selama bertahun-tahun, N64Recomp adalah pendekatan untuk mengubah game N64 menjadi bentuk yang bisa dijalankan di PC dengan lebih cepat
  • Hasil akhirnya tidak menyertakan aset, sehingga ROM tetap dibutuhkan untuk bermain, dan Banjo-Kazooie, Rocket Robot, serta Superman 64 disebut sebagai contoh yang berhasil dijalankan

Perubahan cara porting game N64

  • Pada 2024 pun, perangkat keras asli dan game Nintendo 64 masih terus mendapat perhatian dari komunitas penggemar
  • Ada kemungkinan besar bahwa langkah berikutnya untuk memainkan N64 tingkat lanjut bukan lagi emulasi, melainkan port PC hasil kompilasi ulang
  • Mr-Wiseguy di GitHub merilis N64Recomp dan Zelda64Recomp
    • N64Recomp adalah alat dasar untuk membuat game N64 menjadi port PC native
    • Zelda64Recomp mem-porting The Legend of Zelda: Majora's Mask ke PC dan menerapkan peningkatan grafis serta kemudahan dari N64Recomp

Peningkatan yang dimungkinkan di port PC

  • Port PC hasil kompilasi ulang dapat menambahkan peningkatan khas lingkungan PC ke game N64 asli
    • Ray tracing sungguhan

      • Batas frame dibuka
      • Dukungan ultrawide yang semestinya
      • Peningkatan grafis dan kemudahan yang diharapkan di PC
      • Majora's Mask dibahas sebagai contoh perbandingan menjalankan ultrawide dengan metode emulasi versus kompilasi ulang native di PC

Perbedaan dengan port PC Super Mario 64

  • Port PC Super Mario 64 berbasis dekompilasi penuh yang dirilis pada 2020 memungkinkan fitur seperti ray tracing dan penggantian seluruh model, dan mod-nya masih terus berlanjut hingga sekarang
  • Port hasil kompilasi ulang berbeda cara pembuatannya dari port hasil dekompilasi seperti port PC SM64
  • Kedua pendekatan sama-sama berjalan native di PC, dan dapat meningkatkan performa serta akurasi efek dibanding perangkat keras asli, sambil tetap menghadirkan peningkatan ala PC yang biasanya diharapkan dari emulasi

Mengapa N64Recomp penting

  • N64Recomp adalah alat yang melalui pendekatan kompilasi ulang menargetkan kelebihan emulasi dan port native sekaligus
  • Untuk mendekompilasi game N64 secara manual, satu orang atau lebih harus bekerja selama bertahun-tahun
  • Alat yang lebih efisien untuk mengubah game N64 menjadi kondisi yang bisa cepat dijalankan di PC juga bisa berguna bagi para pegiat preservasi

RT64 dan contoh eksekusi

  • Dario adalah pengembang pembuat plugin RT64 yang digunakan di N64Recomp dan beberapa emulator N64
  • Menurut postingan Dario, Wiseguy diam-diam mengerjakan alat untuk membuat port PC game N64 tanpa dekompilasi penuh selama satu tahun
  • Hasil akhirnya tidak menyertakan aset, dan hanya ROM yang dibutuhkan untuk bermain
  • Game berikut disebut sebagai contoh yang berhasil dijalankan
    • Banjo-Kazooie
    • Rocket Robot
    • Superman 64

Pergerakan lain di ekosistem N64

  • Kemajuan lain untuk para penggemar pustaka N64 dan perangkat keras aslinya juga terus berlanjut
  • SummerCart64 open source adalah flash cart untuk konsol yang sudah ada, dan juga menghadirkan dukungan 64DD
  • Game homebrew N64 yang kompatibel dengan perangkat keras asli dan ROM hacking juga terus dirilis
    • Smash Remix yang menyediakan 30 fighter
    • Peach's Fury, proyek penulisan ulang engine Mario 64

2 komentar

 
GN⁺ 2024-05-16
Opini Hacker News
  • Untuk memakai alat ini, kamu tetap harus terlebih dulu mendisassemble ROM, lalu memberi banyak anotasi agar bisa dikompilasi ulang
    Alatnya sendiri bagus, tetapi klaim bahwa ROM sembarang bisa hampir dengan sekali klik dijadikan berkas eksekusi mandiri terasa terlalu dilebih-lebihkan

    • Meski begitu, berbeda dari PS2 atau Game Boy, N64 hanya punya 388 game rilis, jadi memproses dan merapikan semua game yang pernah dirilis lewat proses ini tampaknya realistis
    • Sepertinya itu tidak benar
      Dalam video di postingan, mereka mengompilasi ulang game N64 yang tidak disebutkan namanya dan berjalan dengan baik, dan sepertinya tidak perlu anotasi terpisah
    • Pekerjaan itu cukup dilakukan sekali lalu disimpan dan dibagikan di suatu tempat
      ROM secara harfiah bersifat hanya-baca, jadi skenario memasukkan ROM lalu mendapatkan port native itu memungkinkan
    • Saya tidak mengerti kenapa ROM harus didisassemble dulu dan diberi banyak anotasi
      Konversi biner-ke-biner mestinya lebih intuitif, dan sepertinya tidak memerlukan input manusia
    • Saya penasaran seperti apa tepatnya proses itu, dan apakah sebagian pun bisa ditangani dengan ChatGPT
  • Benar-benar keren
    Berbagai alat dasar yang dibuat untuk dekompilasi N64 mulai menyebar ke paket dekompilasi untuk sistem lain
    Yang baru-baru ini saya lihat, https://decomp.me/, mendukung dekompilasi kolaboratif untuk berbagai sistem dengan SDK terkait dan preset perangkat keras
    Saya rasa dalam beberapa tahun ke depan tren seperti ini akan muncul di lebih banyak sistem

  • Saya melihat ini ketika baru muncul, dan sebagai orang yang tidak mengikuti dunia ROM hacking, saya penasaran kenapa pendekatan seperti ini baru muncul begitu terlambat
    Menerjemahkan instruksi assembly ke C lalu mengompilasinya ulang tampak seperti metode jelas yang layak dicoba sejak awal, jadi saya penasaran apakah dulu tidak mungkin dan kini ada terobosan lain yang membuatnya memungkinkan

    • N64 punya GPU yang berbeda dari GPU modern, dan GPU itu diperlukan untuk merender grafis
      Dari melihat sekilas repositori GitHub-nya, sepertinya secara internal memakai rt64 untuk dukungan ray tracing (https://github.com/rt64/rt64)
      rt64 memakai teknik ubershader untuk mengemulasi GPU, dan tulisan bagus ini menjelaskan apa itu ubershader, kenapa dibutuhkan, dan betapa rumitnya: https://dolphin-emu.org/blog/2017/07/30/ubershaders/
    • Emulator lain mencoba menyelesaikan masalah secara umum, tetapi solusi ini tidak sepenuhnya seperti itu
      Rekompilasi statis dari satu bahasa mesin ke bahasa lain berada di antara sangat sulit dalam praktik dan umumnya mustahil [1]
      Agar rekompilasi seperti ini berjalan dengan benar, diperlukan juga bantuan dari sisi biner yang membuat rekompilasi lebih mudah [2], ditambah patch agar bisa berjalan di atasnya [3]
      Rekompilasi dinamis tidak punya masalah seperti ini, jadi jika memasukkan biner asli dan asetnya, yaitu ROM, biasanya bisa dibuat perangkat lunak yang teremulasi
      Ada banyak kebingungan tentang seberapa umum solusi ini
      Dari sisi pengurangan beban kerja yang membuat rekompilasi atau port jauh lebih mudah, ini sangat mengesankan dan bernilai besar, tetapi tidak menggantikan kebutuhan akan emulator tradisional
      [1]: https://cs.stackexchange.com/questions/155511/why-is-static-...
      [2]: Biner game N64 mungkin secara kebetulan menghindari berbagai faktor yang membuat rekompilasi statis umum menjadi sulit, sehingga membantu pendekatan ini, tetapi sebenarnya saya tidak tahu pasti
      [3]: Repositori rekompilasi Majora's Mask berisi banyak patch buatan tangan agar bisa berjalan: https://github.com/Mr-Wiseguy/Zelda64Recomp
    • Emulasi perangkat keras biasanya harus mengemulasi hal-hal yang berjalan paralel dengan akurasi siklus, jadi ini bukan masalah sederhana yang cukup menangani program di dalam ROM saja
    • Saya penasaran apakah mereka memakai kode yang memodifikasi dirinya sendiri atau unsur lain yang membuat ini sulit
  • Jamulator sudah melakukan ini untuk NES pada 2013, tetapi sepertinya tidak banyak yang peduli
    https://andrewkelley.me/post/jamulator.html
    Ada juga Winlator, yang menjalankan program Windows di Android
    https://github.com/brunodev85/winlator
    Dan apakah video YouTube yang ditautkan di artikel itu memakai suara AI?

    • Setidaknya Mr WiseGuy sepertinya peduli
      Di repositori GitHub N64Recomp[0] tertulis begini:
      "This is not the first project that uses static recompilation on game console binaries. A well known example is jamulator, which targets NES binaries."
      [0]: https://github.com/Mr-Wiseguy/N64Recomp
    • Alasan Jamulator tidak berhasil adalah karena kartridnya berisi terlalu banyak hardware tambahan
      Dalam situasi seperti itu, recompilation hanya membuat semuanya lebih rumit tanpa banyak manfaat
      N64 sedikit lebih mudah karena hardware-nya tetap
      Meski begitu, proyek ini masih memakai emulasi untuk RDP
      Saya tidak tahu bagaimana mereka menangani microcode RSP yang dihasilkan, dan mungkin saja tidak menanganinya
      Banyak game hanya memakai library resmi
    • Selain cara menjalankannya, Jamulator tidak melangkah lebih jauh dari apa yang bisa dilakukan emulator NES
      Kalau Jamulator keluar bersama peningkatan serupa untuk Zelda, mungkin popularitasnya akan jauh lebih besar
      Minat tampaknya lebih banyak muncul dari apa yang kini bisa dilakukan dengannya, bukan dari metodenya sendiri
      Narasi videonya hanya dibawakan oleh orang sungguhan bernama Nerrel
      Menariknya, karena suara AI sekarang sudah sangat bagus, kita jadi cukup terkejut dalam arti yang menarik ketika mencurigai orang sebagai AI hanya karena mereka tidak berbicara dengan cara yang kita harapkan
    • Itu hanya Nerrel
      Narasinya memang sangat datar, jadi sejak dulu terdengar seperti AI, dan saya suka kesan itu bercampur dengan humornya
  • Akan bagus kalau semua executable game bersifat independen dari sistem operasi, mirip WebAssembly
    Misalnya sesuatu seperti GameAssembly
    Sekarang di macOS baru kita tidak bisa memainkan game 32-bit, dan di Wine pun game Windows 32-bit tidak bisa jalan
    Hampir mustahil juga menemukan file .exe 64-bit yang bisa dijalankan dengan benar di Wine/Crossover

    • Dalam game, kode yang dijalankan di CPU justru bisa dianggap sebagai masalah yang relatif kecil
      Untuk konsol, terutama judul lama dan platform exclusive, banyak yang bergantung pada detail implementasi GPU tingkat sangat rendah
      Konsol yang lebih lama juga punya chip khusus lain yang melakukan pekerjaan penting selain I/O sederhana
      Misalnya, chip suara SNES adalah CPU yang sepenuhnya independen dan menjalankan program kecilnya sendiri secara paralel dengan CPU dan GPU
      Tentu saja untuk semua pengembangan game ke depan kita bisa saja mewajibkan virtual machine tingkat tinggi, tetapi mengingat spesifikasi hardware konsol itu tetap, pendekatan itu tidak akan kompetitif untuk judul yang ingin memanfaatkan grafis modern
    • Saya setuju dengan maksudnya, tetapi saya sudah menjalankan game Windows 32-bit di Linux x86_64 dengan cukup memuaskan
      Di Debian, saya harus menjalankan ini
      dpkg --add-architecture i386 && apt-get update
      Lalu tinggal memasang paket wine32
    • Untuk membuat game portabel, menyediakan machine code yang portabel saja tidak cukup
      Game membutuhkan berbagai API seperti API grafis, API jendela, API input, API suara, API disk, dan sebagainya
      Kadang juga perlu modul kernel karena anti-cheat atau proteksi salinan
      Yang disayangkan adalah sistem operasi open source tidak berusaha menyediakan sekumpulan API umum agar developer cukup menulis dan menguji kode sekali, lalu berjalan di mana saja
      Memang ada Flatpak, tetapi sejauh pemahaman saya itu bukan menyediakan sekumpulan API, melainkan lebih seperti membungkus distribusi Linux di dalam virtual machine tanpa spesifikasi atau dokumentasi
      Tidak sedap dipandang, dan juga tidak kompatibel dengan sistem operasi kecil non-Linux
    • Di Wine untuk Mac pun, bahkan di Apple Silicon, game Windows 32-bit bisa dijalankan
      Saya menjalankan GTA IV di M1 mini
      Sepertinya ada semacam emulasi "32 on 64" di dalam versi Wine 32-bit yang dipasang PlayOnMac, tetapi sulit sekali mencarinya sehingga saya tidak tahu bagaimana cara kerjanya sebenarnya
      Menarik juga bahwa Mac lebih kompatibel dengan program Windows lama dibandingkan dengan program Mac lama
    • JVM melakukan ini dengan cukup baik di Minecraft
      Saya ragu Minecraft akan mendukung Linux atau keluarga BSD dan sebagainya kalau tidak ada JVM
      Bedrock Edition yang bukan versi JVM mendukung Windows, konsol, dan ponsel, tetapi tidak mendukung macOS padahal jelas itu mungkin dilakukan
  • Pada akhirnya semoga ini juga berjalan di Linux, sehingga game N64 bisa dimainkan dengan stabil di perangkat portabel yang sangat rendah spesifikasinya
    N64 terkenal sulit diemulasikan, tetapi jika dibuat sebagai build native untuk platformnya, masalah performa akan hilang

    • Hampir pasti Linux didukung secara native melalui N64Recomp: https://github.com/Mr-Wiseguy/N64Recomp
      Contohnya bisa dilihat di sini: https://github.com/Mr-Wiseguy/Zelda64Recomp?tab=readme-ov-fi...
    • Saya tidak menyangka N64 sulit diemulasikan
      Saya tidak terlalu tahu detail emulasi N64, tetapi sejak awal 2010-an saya sudah menjalankan emulator N64 dengan sempurna
      Karena biasanya hanya memainkan judul-judul klasik besar, saya tidak terlalu tahu performa judul yang lebih niche
    • Saya mencobanya sendiri di PC Ubuntu dan berjalan sangat baik
      Saya bermain sekitar satu jam dan tidak ada masalah
    • Beberapa hari lalu saya menonton video YouTube yang ditautkan artikel ini, dan mereka menyebut dukungan Linux, khususnya bahwa ini juga seharusnya bisa dipakai di Steam Deck
    • Ini sudah berjalan di Linux
      Saya sudah mengujinya sendiri
  • Ini bisa cukup berguna untuk game seperti GoldenEye
    Game itu sulit dimainkan di PC karena mengasumsikan input joystick yang aneh, jadi akan keren kalau ada port GoldenEye native dengan gerakan mouse normal seperti FPS lain

    • WASD dan bidikan mouse sebenarnya tidak terlalu cocok dengan game itu
      Cara beralih mode untuk membidik, serta waktu saat kursor bergerak lalu kembali ke tengah, adalah bagian yang menarik dari game tersebut
      Jika pemain bisa berlari sambil membidik bebas seperti FPS PC, kampanyenya justru bisa rusak karena memang didesain dengan asumsi itu
      Daya tariknya adalah memilih kapan berhenti untuk membidik dan tetap tenang saat sedang membidik
      Namun akan menarik jika perpindahan mode tetap dipertahankan, sementara mouse 1) memutar Bond seperti stik kiri-kanan dan 2) hanya mengendalikan kursor saat tombol R ditekan untuk masuk ke "mode bidik"
      Sejujurnya, saya menyayangkan semua shooter langsung menuju gaya Quake, WASD+mouse dengan bidikan bebas
      Cara beralih mode itu memberi GoldenEye sensasi fisik yang saya sukai
    • Ada hack emulator yang menambahkan dukungan WASD+mouse ke GoldenEye, dan saya dengar itu berjalan dengan baik
      https://github.com/Graslu/1964GEPD/releases/tag/latest
    • Tapi bukankah itu tetap akan mengharapkan joystick yang aneh?
    • Hack mouse+WASD itu benar-benar berjalan dengan baik
      Juga berfungsi di Perfect Dark
  • Ini cukup menarik, dan saya penasaran apakah ini bisa berujung pada versi Conker yang berjalan dengan benar di MiSTer
    Misalnya, bisakah ini dipakai untuk membantu dekompilasi, lalu seseorang membuat versi modifikasinya?

  • Saya penasaran apa kelebihannya dibanding emulator
    Bukankah pada akhirnya ini semacam emulator yang sudah diterjemahkan lebih dulu?
    Pendekatan seperti ini dulu juga pernah ada lewat sesuatu seperti Bleem, dan mungkin punya keuntungan performa, tetapi di PC modern emulator yang bagus umumnya berjalan baik
    https://en.wikipedia.org/wiki/Bleem!

    • Tujuan proyek ini dan tujuan emulasi N64 cukup berbeda
      Tujuan emulator N64 biasanya adalah mereproduksi perilaku konsol asli secara akurat
      Sebaliknya, ada banyak orang yang ingin memainkan SM64, OOT, dan MM pada 60fps, widescreen, dengan texture pack, randomizer, dan berbagai peningkatan grafis lain
      Bagi orang-orang seperti ini, fakta bahwa game-game tersebut dulu berjalan di N64 pada dasarnya tidak penting
      Justru lebih mendekati hambatan
      Pipeline grafis N64 merepotkan untuk diemulasikan dan secara aktif menghalangi peningkatan modern
      Proyek ini tampaknya lebih berfokus pada memperlakukan gamenya sendiri secara modern dan sepenuhnya mengeluarkan elemen yang berpusat pada N64 dari persamaan
    • Emulasi JIT bisa menimbulkan stutter, tetapi AOT seharusnya tidak begitu
      Saat ini komputer sudah jauh lebih cepat daripada N64, jadi perbedaannya mungkin tidak terlihat
    • Dalam videonya ditunjukkan bahwa dengan pendekatan ini, beberapa bug dibanding emulasi menghilang
    • Rekompilasi bukan emulasi
  • Apakah emulator umum melakukan kompilasi di muka, atau menggunakan JIT?
    Jika tidak, saya penasaran mengapa tidak
    Pendekatan ini, yaitu kompilasi di awal, tampaknya punya keuntungan besar

    • Sebut saja nama teknik kompilasi atau interpreter apa pun, setidaknya ada satu emulator yang menggunakannya
    • Di antara emulator generasi setelah 32-bit, cukup banyak yang memakai rekompilasi JIT
      Namun kecuali TeknoParrot bekerja dengan cara seperti itu, saya tidak terlalu tahu soal penerjemahan di muka
      Misalnya, dengan TeknoParrot kita bisa menjalankan game arcade Linux yang memakai binary ELF di Windows, tetapi karena arsitekturnya sama, saya tidak akan menyebut salah satunya sebagai emulasi
    • Ada banyak metode emulasi, tetapi eksekusi interpretatif mungkin yang paling umum, atau setidaknya sangat umum
      Eksekusi interpretatif adalah cara menulis virtual machine yang merepresentasikan status berbagai bagian mesin, lalu menjalankan instruksi yang mengubah status itu dengan tingkat akurasi yang berbeda-beda
 
lifeisliving 2024-05-18

Kemampuan para penggemar memang luar biasa! Melampaui sekadar memasang kompiler JIT pada emulator, kini bahkan bisa mengonversinya ke C dengan binary lifting lalu mengompilasikannya ulang.