लगभग सभी Nintendo 64 गेम्स को native PC ports में recompile किया जा सकता है
(tomshardware.com)- 1996 में लॉन्च हुए Nintendo 64 गेम्स को emulation के बजाय PC native ports के रूप में recompile करके ray tracing, ultrawide और high FPS जैसे सुधार लागू किए जा सकते हैं
- GitHub पर Mr-Wiseguy द्वारा जारी N64Recomp और Zelda64Recomp मुख्य tools हैं, और Zelda64Recomp The Legend of Zelda: Majora's Mask को PC पर port करता है
- यह तरीका 2020 में जारी पूरी तरह decompilation-based Super Mario 64 PC port से अलग है, लेकिन दोनों PC पर natively चलते हैं, जिससे performance और effects की accuracy बढ़ाई जा सकती है
- manual decompilation में एक या अधिक लोगों को कई साल काम करना पड़ता है, जबकि N64Recomp N64 games को PC पर अधिक तेज़ी से चलने योग्य रूप में बदलने का approach है
- output में assets शामिल नहीं होते, इसलिए खेलने के लिए ROM की ज़रूरत होती है, और Banjo-Kazooie, Rocket Robot, Superman 64 को भी running examples के रूप में बताया गया है
N64 गेम porting तरीके में बदलाव
- 2024 में भी Nintendo 64 के original hardware और games को enthusiast community से लगातार रुचि मिल रही है
- advanced N64 play का अगला कदम emulation नहीं, बल्कि recompiled PC ports होने की संभावना बढ़ रही है
- GitHub पर Mr-Wiseguy ने N64Recomp और Zelda64Recomp जारी किए हैं
- N64Recomp N64 games को PC native ports बनाने का foundational tool है
- Zelda64Recomp The Legend of Zelda: Majora's Mask को PC पर port करता है और N64Recomp के graphics और convenience improvements लागू करता है
PC ports में संभव सुधार
- recompiled PC ports original N64 games में PC environment के improvements जोड़ सकते हैं
-
वास्तविक ray tracing
- frame limit unlock करना
- proper ultrawide support
- PC पर अपेक्षित graphics और convenience improvements
- Majora's Mask को emulation approach और native PC recompilation approach में ultrawide execution comparison के example के रूप में कवर किया गया है
-
Super Mario 64 PC port से अंतर
- 2020 में जारी पूरी तरह decompilation-based Super Mario 64 PC port ने ray tracing और full model replacement जैसी capabilities संभव कीं, और आज भी उसके mods जारी हैं
- recompilation ports का production method SM64 PC port जैसे decompilation ports से अलग है
- दोनों तरीके PC पर natively चलते हैं और original hardware की तुलना में performance और effects accuracy बढ़ाते हुए emulation से अपेक्षित PC-style improvements दे सकते हैं
N64Recomp क्यों महत्वपूर्ण है
- N64Recomp recompilation approach के जरिए emulation और native port के फायदे साथ लाने की कोशिश करने वाला tool है
- N64 game को manually decompile करने के लिए एक या अधिक लोगों को कई साल काम करना पड़ता है
- N64 games को अधिक efficient तरीके से PC पर तेज़ी से चलने योग्य स्थिति में बदलने वाला tool preservationists के लिए भी उपयोगी हो सकता है
RT64 और running examples
- Dario, N64Recomp और कुछ N64 emulators में इस्तेमाल होने वाले RT64 plugin को बनाने वाले developer हैं
- Dario की post के अनुसार, Wiseguy ने complete decompilation के बिना N64 games के PC ports बनाने वाले tool पर 1 साल तक private तौर पर काम किया
- output में assets शामिल नहीं होते, और खेलने के लिए केवल ROM की ज़रूरत होती है
- running examples के रूप में ये games बताए गए हैं
- Banjo-Kazooie
- Rocket Robot
- Superman 64
N64 ecosystem में अन्य गतिविधियां
- N64 library और original hardware fans के लिए अन्य प्रगति भी जारी है
- open-source SummerCart64 मौजूदा console के लिए flash cart है, और 64DD support भी implement करता है
- real hardware के साथ compatible homebrew N64 games और ROM hacking भी लगातार release हो रहे हैं
- 30 fighters देने वाला Smash Remix
- Mario 64 engine rewrite project Peach's Fury
2 टिप्पणियां
Hacker News की राय
इस tool का इस्तेमाल करने के लिए अभी भी पहले ROM को disassemble करना पड़ता है, और उसे फिर से compile हो सके इसके लिए बहुत सारे annotations लगाने पड़ते हैं
tool अपने-आप में शानदार है, लेकिन यह कहना कि यह किसी भी ROM को लगभग one-click में standalone executable बना देता है, कुछ ज़्यादा बढ़ा-चढ़ाकर लगता है
पोस्ट के video में एक unnamed N64 game को recompile करके ठीक से चलाया गया था, और अलग से annotations की ज़रूरत भी नहीं दिखी
ROM सचमुच read-only होता है, इसलिए ROM डालकर native port पाने जैसा flow संभव है
binary-to-binary conversion ज़्यादा intuitive होगा, और इसमें इंसानी input की भी ज़रूरत नहीं लगती
सच में कमाल है
N64 decompilation के लिए बने कई foundational tools अब दूसरे systems के decompilation packages में फैल रहे हैं
हाल ही में मैंने https://decomp.me/ देखा, जो कई systems के लिए संबंधित SDKs और hardware presets के साथ collaborative decompilation support करता है
लगता है आने वाले कुछ सालों में और भी systems में ऐसा trend देखने को मिलेगा
जब यह आया था तब मैंने देखा था, लेकिन ROM hacking को follow न करने वाले के तौर पर मुझे हैरानी है कि यह approach इतनी देर से क्यों आई
assembly instructions को C में translate करके फिर compile करना शुरुआत में आज़माने लायक एक obvious तरीका लगता है; सोचता हूँ कि पहले यह असंभव था और अब संभव बनाने वाला कोई और breakthrough आया क्या
GitHub repository सरसरी तौर पर देखने पर लगता है कि ray tracing support के लिए अंदरूनी तौर पर rt64 इस्तेमाल करता है(https://github.com/rt64/rt64)
rt64 GPU को emulate करने के लिए ubershader technique इस्तेमाल करता है, और यह शानदार लेख समझाता है कि ubershader क्या है, इसकी ज़रूरत क्यों है, और यह कितना chaotic हो सकता है: https://dolphin-emu.org/blog/2017/07/30/ubershaders/
एक machine code से दूसरी language में static recompilation करना practice में बहुत कठिन, या आम तौर पर असंभव, क्षेत्रों के बीच आता है [1]
ऐसी recompilation को सही से करने के लिए binary side से भी मदद चाहिए जो recompilation को आसान बनाए [2], और उसके ऊपर काम करवाने के लिए patches भी चाहिए [3]
dynamic recompilation में ये समस्याएँ नहीं होतीं, इसलिए original binary और assets, यानी ROM, डालने पर आम तौर पर emulated software बनाया जा सकता है
इस solution की generic applicability को लेकर बहुत भ्रम है
recompilation या porting को बहुत आसान बनाकर workload घटाने के लिहाज़ से यह बेहद impressive और valuable है, लेकिन यह traditional emulator की ज़रूरत को replace नहीं कर सकता
[1]: https://cs.stackexchange.com/questions/155511/why-is-static-...
[2]: N64 game binaries संयोग से उन कई चीज़ों से बचती हैं जो सामान्य static recompilation को मुश्किल बनाती हैं, इसलिए यह इस approach में मदद कर सकता है, लेकिन वास्तव में मुझे ठीक से पता नहीं
[3]: Majora's Mask recompilation repository में काम कराने के लिए हाथ से बनाए गए बहुत सारे patches हैं: https://github.com/Mr-Wiseguy/Zelda64Recomp
Jamulator ने यह काम NES के लिए 2013 में ही कर दिया था, लेकिन लगता है किसी ने खास ध्यान नहीं दिया
https://andrewkelley.me/post/jamulator.html
Android पर Windows प्रोग्राम चलाने वाला Winlator भी है
https://github.com/brunodev85/winlator
और लेख में लिंक किए गए YouTube वीडियो में क्या AI आवाज़ का इस्तेमाल हुआ है?
N64Recomp GitHub repository[0] में यह लिखा है:
"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
ऐसी स्थिति में recompilation सिर्फ काम को जटिल बनाता है, फायदा ज्यादा नहीं होता
N64 fixed hardware है, इसलिए थोड़ा आसान है
फिर भी यह project अब भी RDP के लिए emulation इस्तेमाल कर रहा है
generated RSP microcode को कैसे handle करता है, यह मुझे नहीं पता, और शायद हो सकता है कि करता ही न हो
कई games ने बस official libraries इस्तेमाल की थीं
अगर Jamulator Zelda के लिए इसी तरह के improvements के साथ आया होता, तो वह कहीं ज्यादा लोकप्रिय होता
लगता है दिलचस्पी अब तरीके में नहीं, बल्कि उससे क्या किया जा सकता है, इसमें ज्यादा है
वीडियो का narration बस Nerrel नाम के एक असली व्यक्ति ने किया है
आजकल AI voices इतनी अच्छी हो गई हैं कि जो लोग हमारे expected तरीके से नहीं बोलते, उन पर AI होने का शक होने लगता है—यह एक दिलचस्प मायने में काफी हैरान करने वाली बात है
narration इतना flat है कि पहले से ही AI जैसा लगता था, और मुझे पसंद है कि वह humour के साथ कैसे mix होता है
अच्छा होगा अगर सभी game executable files WebAssembly की तरह operating system से independent हों
उदाहरण के लिए GameAssembly जैसा कुछ
अब नए macOS पर 32-bit games नहीं खेले जा सकते, और Wine में भी 32-bit Windows games नहीं चलते
Wine/Crossover में ठीक से चल सकने वाली 64-bit
.exefile ढूंढना भी लगभग नामुमकिन हैconsoles के मामले में, खासकर पुराने titles और platform exclusives, अक्सर बहुत low-level GPU implementation details पर निर्भर होते हैं
और पुराने consoles में simple input/output के अलावा भी अहम काम करने वाली dedicated chips होती थीं
उदाहरण के लिए SNES का sound chip CPU और GPU के parallel अपना छोटा program चलाने वाला पूरी तरह independent CPU था
बेशक भविष्य के सभी game development के लिए high-level virtual machine अनिवार्य की जा सकती है, लेकिन console hardware specs fixed होने को देखते हुए, latest graphics का फायदा उठाने वाले titles के लिए यह competitive नहीं होगी
Debian पर यह चलाना पड़ता था
dpkg --add-architecture i386 && apt-get updateफिर
wine32package install कर देंgames को graphics API, window API, input API, sound API, disk API जैसे कई तरह के API चाहिए होते हैं
कभी-कभी anti-cheat या copy protection की वजह से kernel module भी चाहिए होता है
अफसोस की बात यह है कि open-source operating systems developers को एक बार code लिखकर test करने और फिर उसे हर जगह चलाने लायक common API set देने की कोशिश नहीं करते
Flatpak है, लेकिन मेरी समझ में वह API set देने के बजाय किसी specification या documentation के बिना Linux distribution को virtual machine के अंदर package करने जैसा ज्यादा है
यह देखने में खराब है, और छोटे non-Linux operating systems के साथ compatibility भी नहीं है
मैंने M1 mini पर GTA IV चलाया था
लगता है PlayOnMac जो 32-bit Wine version install करता है, उसमें किसी तरह की "32 on 64" emulation शामिल है, लेकिन search करना इतना मुश्किल है कि असल में यह कैसे काम करता है, नहीं जानता
मजेदार है कि Mac पुराने Mac programs की तुलना में पुराने Windows programs के साथ ज्यादा compatible है
अगर JVM न होता तो Minecraft Linux या BSD परिवार वगैरह को support करता या नहीं, इस पर शक है
गैर-JVM version Bedrock Edition Windows, consoles और phones को support करता है, लेकिन जबकि यह साफ तौर पर संभव होना चाहिए, फिर भी macOS को support नहीं करता
अच्छा होगा अगर यह आखिरकार Linux पर भी चले, ताकि बहुत कम स्पेक वाले handheld डिवाइस पर N64 गेम्स स्थिर तरीके से खेले जा सकें
N64 emulation मुश्किल होने के लिए बदनाम है, लेकिन अगर प्लेटफ़ॉर्म के लिए native build बना दी जाए तो performance की समस्या गायब हो जाती है
उदाहरण यहाँ देख सकते हैं: https://github.com/Mr-Wiseguy/Zelda64Recomp?tab=readme-ov-fi...
N64 emulation की बारीकियाँ मुझे अच्छी तरह नहीं पता, लेकिन 2010 के शुरुआती वर्षों से मैं N64 emulators को पूरी तरह सही चलते देखता आया हूँ
मैंने ज़्यादातर बड़े classic titles ही खेले हैं, इसलिए ज़्यादा niche titles की performance के बारे में ठीक से नहीं जानता
करीब एक घंटा खेला, कोई दिक्कत नहीं आई
मैंने खुद test किया है
GoldenEye जैसे गेम्स के लिए यह काफ़ी उपयोगी हो सकता है
यह अजीब joystick input को ध्यान में रखकर बना है, इसलिए PC पर खेलना मुश्किल है; अगर दूसरे FPS की तरह सामान्य mouse behavior वाला native GoldenEye port हो तो शानदार होगा
aiming का mode-switching तरीका और cursor का move होकर फिर center में लौटने में लगने वाला समय ही गेम के मज़ेदार हिस्से हैं
अगर PC FPS की तरह दौड़ते हुए free aim संभव हो जाए, तो campaign उसी premise के हिसाब से design है, इसलिए वह उल्टा बिगड़ सकता है
कहाँ रुककर aim करना है यह चुनना और aim करते समय शांत रहना ही इसका charm है
हालांकि mode switching को बनाए रखते हुए, अगर mouse 1) stick left-right की तरह Bond को घुमाए और 2) R दबाकर "aim mode" में होने पर ही cursor को control करे, तो यह मज़ेदार हो सकता है
सच कहूँ तो अफ़सोस है कि shooters सीधे Quake-style WASD+mouse free aim की तरफ चले गए
mode-switching तरीका GoldenEye को वह physical feel देता है जो मुझे पसंद है
https://github.com/Graslu/1964GEPD/releases/tag/latest
Perfect Dark में भी चलता है
काफ़ी दिलचस्प है; सोच रहा हूँ कि क्या इससे MiSTer पर ठीक से चलने वाले Conker version तक पहुँचा जा सकता है
उदाहरण के लिए, क्या इसे decompilation में मदद के लिए इस्तेमाल करके कोई modified version बना सकता है?
emulator की तुलना में इसका फायदा क्या है, यह जानना चाहता हूँ
आखिर यह पहले से translate कर देने वाले emulator जैसा ही तो है, नहीं?
ऐसा तरीका पहले Bleem जैसी चीज़ों में भी था, और performance में फायदा हो सकता है, लेकिन modern PC पर अच्छा emulator हो तो आम तौर पर चीज़ें ठीक चलती हैं
https://en.wikipedia.org/wiki/Bleem!
N64 emulator का लक्ष्य आम तौर पर original console के behavior को सही-सही reproduce करना होता है
इसके उलट, बहुत से लोग SM64, OOT, MM को 60fps, widescreen, texture packs, randomizer जैसी कई graphics improvements के साथ खेलना चाहते हैं
ऐसे लोगों के लिए यह बात कि ये games मूल रूप से N64 पर चलते थे, असल में मायने नहीं रखती
बल्कि यह एक बाधा जैसी है
N64 की graphics pipeline emulate करने में झंझट वाली है और modern improvements में सक्रिय रूप से अड़चन डालती है
यह project game को ही modern तरीके से handle करने और N64-केंद्रित हिस्सों को equation से पूरी तरह हटाने पर ज़्यादा focused लगता है
आजकल computers N64 से इतने तेज़ हैं कि फर्क शायद नज़र न आए
आम emulators पहले से compile करते हैं, या JIT इस्तेमाल करते हैं?
अगर नहीं, तो क्यों नहीं करते, यह जानना चाहता हूँ
यह approach, यानी ahead-of-time compilation, बड़ा फायदा देती दिखती है
हालांकि अगर TeknoParrot उस तरह काम नहीं करता, तो ahead-of-time translation के बारे में मुझे ज़्यादा पता नहीं
उदाहरण के लिए TeknoParrot से ELF binary इस्तेमाल करने वाले Linux arcade games को Windows पर चला सकते हैं, लेकिन architecture एक ही है, इसलिए मैं इसे किसी भी तरफ से emulation नहीं कहूँगा
interpreted execution में machine के कई हिस्सों की state को represent करने वाली virtual machine लिखी जाती है, और अलग-अलग accuracy levels के साथ उस state को बदलने वाले instructions execute किए जाते हैं
कमाल है उत्साही लोगों की! अब सिर्फ़ emulator में JIT compiler जोड़ने से आगे बढ़कर, binary lifting से C में बदलने के बाद दोबारा recompile करना भी संभव हो गया है