Có thể biên dịch lại gần như mọi game Nintendo 64 thành bản port PC native
(tomshardware.com)- Các game Nintendo 64 ra mắt năm 1996 nay có thể được biên dịch lại thành bản port PC native thay vì chạy qua giả lập, cho phép áp dụng các cải tiến như ray tracing, ultrawide và FPS cao
- N64Recomp và Zelda64Recomp do Mr-Wiseguy công bố trên GitHub là các công cụ cốt lõi; Zelda64Recomp port The Legend of Zelda: Majora's Mask lên PC
- Cách làm này khác với bản port Super Mario 64 cho PC dựa trên giải biên dịch hoàn toàn được công bố năm 2020, nhưng cả hai đều chạy native trên PC, giúp nâng cao hiệu năng và độ chính xác của hiệu ứng
- Trong khi giải biên dịch thủ công đòi hỏi một hoặc nhiều người làm việc trong nhiều năm, N64Recomp là cách tiếp cận giúp chuyển game N64 sang dạng có thể chạy trên PC nhanh hơn
- Thành phẩm không bao gồm asset nên cần có ROM để chơi; Banjo-Kazooie, Rocket Robot và Superman 64 cũng được nhắc đến như các ví dụ đã chạy được
Sự thay đổi trong cách port game N64
- Ngay cả trong năm 2024, phần cứng gốc và game của Nintendo 64 vẫn tiếp tục nhận được sự quan tâm từ cộng đồng người hâm mộ
- Bước tiếp theo của trải nghiệm N64 nâng cao nhiều khả năng sẽ không phải là giả lập, mà là các bản port PC được biên dịch lại
- Mr-Wiseguy trên GitHub đã công bố N64Recomp và Zelda64Recomp
- N64Recomp là công cụ nền tảng để tạo bản port native cho PC từ game N64
- Zelda64Recomp port The Legend of Zelda: Majora's Mask lên PC và áp dụng các cải tiến về đồ họa cũng như tiện ích của N64Recomp
Các cải tiến có thể có trong bản port PC
- Bản port PC được biên dịch lại có thể bổ sung các cải tiến của môi trường PC vào game N64 gốc
-
Ray tracing thực sự
- Gỡ giới hạn khung hình
- Hỗ trợ ultrawide đúng cách
- Các cải tiến đồ họa và tiện ích thường được kỳ vọng trên PC
- Majora's Mask được dùng làm ví dụ so sánh chạy ultrawide giữa phương thức giả lập và phương thức biên dịch lại native cho PC
-
Khác biệt với bản port Super Mario 64 cho PC
- Bản port Super Mario 64 cho PC dựa trên giải biên dịch hoàn toàn, được công bố năm 2020, đã cho phép các tính năng như ray tracing và thay thế toàn bộ model; đến nay các bản mod vẫn tiếp tục được phát triển
- Bản port biên dịch lại khác với các bản port giải biên dịch như bản port SM64 cho PC ở cách thức tạo ra
- Cả hai cách đều chạy native trên PC, có thể nâng cao hiệu năng và độ chính xác của hiệu ứng so với phần cứng gốc, đồng thời mang lại các cải tiến kiểu PC thường được kỳ vọng ở giả lập
Vì sao N64Recomp quan trọng
- N64Recomp là công cụ dùng cách tiếp cận biên dịch lại để nhắm tới lợi thế của cả giả lập lẫn bản port native
- Nếu muốn giải biên dịch thủ công một game N64, một hoặc nhiều người phải làm việc trong nhiều năm
- Một công cụ hiệu quả hơn để nhanh chóng đưa game N64 vào trạng thái có thể chạy trên PC cũng có thể hữu ích cho các nhà bảo tồn
RT64 và các ví dụ chạy được
- Dario là nhà phát triển tạo ra plugin RT64, được sử dụng trong N64Recomp và một số trình giả lập N64
- Theo bài đăng của Dario, Wiseguy đã âm thầm làm việc trong 1 năm trên một công cụ tạo bản port PC cho game N64 mà không cần giải biên dịch hoàn toàn
- Thành phẩm không bao gồm asset, và chỉ cần ROM để chơi
- Các game sau được nhắc đến như ví dụ chạy được
- Banjo-Kazooie
- Rocket Robot
- Superman 64
Những chuyển động khác trong hệ sinh thái N64
- Các tiến triển khác dành cho thư viện N64 và người hâm mộ phần cứng gốc cũng vẫn đang tiếp diễn
- SummerCart64 mã nguồn mở là flash cart cho console hiện có, và cũng đã triển khai hỗ trợ 64DD
- Các game homebrew N64 và ROM hack tương thích với phần cứng thật vẫn tiếp tục được phát hành
- Smash Remix, cung cấp 30 đấu sĩ
- Peach's Fury, dự án viết lại engine Mario 64
2 bình luận
Ý kiến trên Hacker News
Để dùng công cụ này, trước hết vẫn phải dịch ngược mã máy ROM và thêm rất nhiều chú thích để có thể biên dịch lại
Bản thân công cụ thì rất tuyệt, nhưng những lời thổi phồng kiểu gần như biến một ROM bất kỳ thành tệp thực thi độc lập chỉ với một cú nhấp có vẻ hơi quá đà
Trong video của bài đăng, họ biên dịch lại một game N64 không nêu tên và nó chạy tốt, cũng không có vẻ cần chú thích riêng nào
ROM đúng nghĩa là chỉ đọc, nên có thể làm theo kiểu đưa ROM vào rồi nhận bản port native
chuyển đổi nhị phân sang nhị phân có vẻ trực quan hơn, và cũng có lẽ không cần con người can thiệp
Thật sự rất ngầu
Nhiều công cụ nền tảng được tạo ra cho việc decompile N64 đang lan sang các gói decompile cho hệ thống khác
Gần đây tôi thấy https://decomp.me/ hỗ trợ decompile cộng tác cho nhiều hệ thống, với các SDK liên quan và preset phần cứng
Có lẽ trong vài năm tới xu hướng này sẽ xuất hiện ở nhiều hệ thống hơn nữa
Tôi đã thấy thứ này khi nó mới xuất hiện, và với góc nhìn của người không theo mảng ROM hacking, tôi thắc mắc vì sao cách tiếp cận này lại ra đời muộn đến vậy
Việc dịch lệnh assembly sang C rồi biên dịch lại trông như một cách khá hiển nhiên đáng ra phải được thử từ sớm, nên tôi muốn biết trước đây có gì khiến nó bất khả thi và gần đây đã có đột phá nào khác để làm nó khả thi hay không
Tôi lướt qua kho GitHub thì có vẻ họ dùng rt64 nội bộ để hỗ trợ ray tracing(https://github.com/rt64/rt64)
rt64 dùng kỹ thuật ubershader để mô phỏng GPU, và bài viết rất hay này giải thích ubershader là gì, vì sao nó cần thiết và mức độ điên rồ của nó: https://dolphin-emu.org/blog/2017/07/30/ubershaders/
Tái biên dịch tĩnh từ một mã máy sang ngôn ngữ khác là việc trong thực tế rất khó, hoặc nhìn chung là nằm ở ranh giới bất khả thi [1]
Để làm kiểu tái biên dịch này cho ra hồn, còn cần phía nhị phân hỗ trợ sao cho việc tái biên dịch dễ hơn [2], và bên trên đó còn cần các bản vá để làm cho nó chạy được [3]
Tái biên dịch động không gặp các vấn đề này, nên nếu đưa vào nhị phân gốc và tài nguyên, tức ROM, thì thường có thể tạo ra phần mềm giả lập được
Có khá nhiều nhầm lẫn về mức độ tổng quát của lời giải này
Xét ở khía cạnh giảm khối lượng công việc, giúp việc tái biên dịch hay port trở nên dễ hơn rất nhiều, thì nó cực kỳ ấn tượng và rất đáng giá, nhưng không thay thế nhu cầu đối với trình giả lập truyền thống
[1]: https://cs.stackexchange.com/questions/155511/why-is-static-...
[2]: Nhị phân game N64 có thể tình cờ tránh được nhiều yếu tố khiến việc tái biên dịch tĩnh nói chung trở nên khó khăn, nên điều đó có thể giúp ích cho cách tiếp cận này, nhưng thực ra tôi cũng không rõ
[3]: Kho tái biên dịch Majora's Mask có rất nhiều bản vá làm thủ công để nó hoạt động: https://github.com/Mr-Wiseguy/Zelda64Recomp
Jamulator đã làm điều này cho NES từ năm 2013, nhưng có vẻ chẳng mấy ai quan tâm
https://andrewkelley.me/post/jamulator.html
Cũng có Winlator để chạy chương trình Windows trên Android
https://github.com/brunodev85/winlator
Và video YouTube được liên kết trong bài có dùng giọng nói AI không?
Trong kho GitHub N64Recomp[0] có viết như sau:
"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
Trong tình huống như vậy, tái biên dịch chỉ làm mọi thứ phức tạp hơn mà lợi ích không lớn
N64 có phần cứng cố định nên dễ hơn đôi chút
Dù vậy, dự án này vẫn đang dùng giả lập cho RDP
Tôi không rõ họ xử lý microcode RSP được tạo ra như thế nào, và có lẽ là không xử lý
Nhiều game chỉ dùng thư viện chính thức
Nếu Jamulator ra mắt cùng các cải tiến tương tự cho Zelda thì hẳn đã nổi tiếng hơn nhiều
Có vẻ sự quan tâm đến nhiều hơn từ chuyện giờ có thể làm gì với cách tiếp cận đó, hơn là từ bản thân cách tiếp cận
Phần lời dẫn trong video đơn giản là do một người thật tên Nerrel thực hiện
Khá đáng ngạc nhiên theo một cách thú vị là giọng AI giờ đã hay đến mức chúng ta lại nghi ngờ là AI khi ai đó không nói theo kiểu mà ta mong đợi
Giọng thuyết minh vốn khá đều đều nên từ trước đến nay đã nghe giống AI, và tôi thích cảm giác nó hòa với chất hài hước
Sẽ thật tuyệt nếu mọi tệp thực thi game đều độc lập với hệ điều hành, kiểu giống WebAssembly
Ví dụ như một thứ kiểu GameAssembly
Giờ trên macOS mới thì không thể chơi game 32-bit nữa, và trong Wine cũng không chạy được game Windows 32-bit
Gần như không thể tìm được tệp
.exe64-bit có thể chạy ổn trong Wine/CrossoverTrong trường hợp console, nhất là các tựa cũ và game độc quyền nền tảng, chúng thường phụ thuộc vào chi tiết triển khai GPU ở mức rất thấp
Các console cũ hơn còn có thêm những chip chuyên dụng làm các việc quan trọng ngoài I/O đơn giản
Ví dụ, chip âm thanh của SNES là một CPU hoàn toàn độc lập, chạy chương trình nhỏ riêng của nó song song với CPU và GPU
Tất nhiên, về sau ta có thể bắt buộc mọi hoạt động phát triển game phải dùng máy ảo cấp cao, nhưng nếu xét đến việc thông số phần cứng console là cố định thì nó sẽ không có sức cạnh tranh với các tựa game muốn tận dụng đồ họa hiện đại
Trên Debian, tôi phải chạy
dpkg --add-architecture i386 && apt-get updateSau đó chỉ cần cài gói
wine32Game cần nhiều API khác nhau như API đồ họa, API cửa sổ, API đầu vào, API âm thanh, API đĩa...
Đôi khi còn cần cả module kernel vì chống gian lận hoặc chống sao chép
Điều đáng tiếc là các hệ điều hành mã nguồn mở không cố gắng cung cấp một tập API chung để nhà phát triển chỉ cần viết và kiểm thử mã một lần rồi chạy ở mọi nơi
Có Flatpak, nhưng theo hiểu biết của tôi thì nó giống việc đóng gói một bản phân phối Linux vào trong máy ảo mà không có đặc tả hay tài liệu, hơn là cung cấp một tập API
Nó khá xấu xí, và cũng không tương thích với các hệ điều hành nhỏ không phải Linux
Tôi đã chạy GTA IV trên M1 mini
Có vẻ trong bản Wine 32-bit mà PlayOnMac cài vào có một dạng giả lập "32 trên 64", nhưng rất khó tìm kiếm nên tôi không biết thực sự nó hoạt động như thế nào
Thật thú vị khi Mac lại tương thích với các chương trình Windows cũ tốt hơn cả các chương trình Mac cũ
Nếu không có JVM thì tôi nghi ngờ liệu Minecraft có hỗ trợ Linux, các hệ BSD và những nền tảng tương tự hay không
Bedrock Edition, tức bản không dùng JVM, hỗ trợ Windows, console và điện thoại, nhưng lại không hỗ trợ macOS dù rõ ràng là có thể làm được
Cuối cùng nếu cái này chạy được trên Linux nữa thì sẽ rất tuyệt, vì như vậy có thể chơi game N64 ổn định trên các thiết bị cầm tay cấu hình rất thấp
N64 vốn nổi tiếng là rất khó giả lập, nhưng nếu build native cho từng nền tảng thì vấn đề hiệu năng sẽ biến mất
Có thể xem ví dụ tại đây: https://github.com/Mr-Wiseguy/Zelda64Recomp?tab=readme-ov-fi...
Tôi không rành chi tiết về giả lập N64, nhưng từ đầu những năm 2010 tới giờ tôi vẫn chạy trình giả lập N64 hoàn hảo
Chủ yếu tôi chỉ chơi các game kinh điển nổi tiếng, nên không rõ hiệu năng với các tựa game ngách hơn thế nào
Chơi khoảng một tiếng mà không gặp vấn đề gì
Tôi đã tự kiểm thử
Cái này có thể khá hữu ích cho các game như GoldenEye
Chúng vốn giả định kiểu nhập liệu joystick kỳ quặc nên rất khó chơi trên PC, vì vậy sẽ rất hay nếu có một bản port GoldenEye native với thao tác chuột bình thường như các game FPS khác
Cách chuyển chế độ khi ngắm bắn và khoảng thời gian con trỏ di chuyển rồi quay lại giữa màn hình là một phần thú vị của game
Nếu có thể vừa chạy vừa tự do ngắm như FPS trên PC, tôi nghĩ phần chơi chiến dịch sẽ bị phá hỏng vì nó được thiết kế dựa trên tiền đề đó
Việc chọn chỗ dừng lại để ngắm và giữ bình tĩnh khi đang nhắm bắn chính là điểm hấp dẫn
Tuy vậy, nếu vẫn giữ cách chuyển chế độ, và chuột 1) xoay Bond như trục trái-phải của cần analog và 2) chỉ điều khiển con trỏ khi giữ R để vào "chế độ ngắm", thì có thể sẽ khá vui
Thành thật mà nói tôi thấy tiếc vì các game bắn súng đều nhanh chóng đi thẳng tới kiểu Quake với WASD+chuột và ngắm tự do
Kiểu chuyển chế độ đó tạo cho GoldenEye cảm giác vật lý mà tôi rất thích
https://github.com/Graslu/1964GEPD/releases/tag/latest
Nó cũng chạy với Perfect Dark
Khá thú vị, nhưng tôi tự hỏi liệu điều này có thể dẫn tới một phiên bản Conker chạy đúng trên MiSTer hay không
Ví dụ có thể dùng cái này để hỗ trợ decompile, rồi ai đó làm ra một bản chỉnh sửa được không?
Tôi muốn biết ưu điểm của nó so với trình giả lập là gì
Chẳng phải cuối cùng nó chỉ là một dạng trình giả lập đã dịch trước hay sao?
Kiểu này trước đây cũng từng có với những thứ như Bleem, và đúng là có thể có lợi thế về hiệu năng, nhưng trên PC hiện đại thì một trình giả lập tốt nhìn chung vẫn chạy ổn
https://en.wikipedia.org/wiki/Bleem!
Mục tiêu của trình giả lập N64 thường là tái hiện chính xác hành vi của máy console gốc
Ngược lại, cũng có rất nhiều người muốn chơi SM64, OOT, MM ở 60fps, màn hình rộng, texture pack, randomizer và nhiều cải tiến đồ họa khác
Với những người này, việc các game đó ban đầu chạy trên N64 thực tế không còn quan trọng
Thậm chí còn gần như là một trở ngại
Pipeline đồ họa của N64 rất phiền phức để giả lập và tích cực cản trở các cải tiến hiện đại
Dự án này có vẻ tập trung hơn vào việc xử lý chính bản thân game theo hướng hiện đại, và loại hoàn toàn các yếu tố lấy N64 làm trung tâm ra khỏi bài toán
Bây giờ máy tính đã nhanh hơn N64 rất nhiều nên có thể khác biệt không còn dễ nhận ra nữa
Các trình giả lập thông thường có biên dịch sẵn trước không, hay là dùng JIT?
Nếu không thì tôi tò mò tại sao lại không làm
Cách tiếp cận này, tức biên dịch trước, có vẻ có lợi thế lớn
Tuy vậy, trừ khi TeknoParrot hoạt động theo kiểu đó thì tôi không rõ về dịch trước
Ví dụ với TeknoParrot, bạn có thể chạy game arcade Linux dùng ELF binary trên Windows, nhưng vì kiến trúc là như nhau nên tôi cũng không gọi đó là giả lập theo nghĩa nào cả
Chạy thông dịch là cách viết một máy ảo biểu diễn trạng thái của nhiều phần khác nhau trong hệ thống, rồi thực thi các lệnh thay đổi trạng thái đó với các mức độ chính xác khác nhau
Đúng là sức mạnh của dân đam mê! Không chỉ gắn thêm trình biên dịch JIT cho trình giả lập, giờ còn có thể dùng binary lifting để chuyển sang C rồi biên dịch lại thành bản port PC native