2 điểm bởi GN⁺ 2024-08-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • shadPS4trình giả lập PlayStation 4 giai đoạn đầu được viết bằng C++, hỗ trợ Windows, Linux và macOS
  • Kho lưu trữ chỉ bao gồm lõi giả lập, không có GUI, nên người dùng cuối thông thường cần tải riêng QtLauncher
  • Hiện có thể chạy một số game như Bloodborne, Dark Souls Remastered, Red Dead Redemption, v.v., nhưng dự án nêu rõ rằng do vẫn ở giai đoạn phát triển ban đầu nên khó có thể kỳ vọng một trải nghiệm hoàn chỉnh
  • Việc build được hướng dẫn qua tài liệu Docker, Windows, Linux, macOS; macOS yêu cầu macOS 26.0 trở lên và không hỗ trợ Intel Mac
  • Một số module firmware PS4 phải được đặt vào thư mục sys_modules để game hoạt động đúng; các module này phải được dump từ máy PlayStation 4 mà bạn sở hữu hợp pháp

Bản chất của shadPS4 và đối tượng sử dụng

  • shadPS4trình giả lập PlayStation 4 giai đoạn đầu chạy trên Windows, Linux và macOS, được viết bằng C++
  • Kho lưu trữ này cung cấp lõi giả lập và không bao gồm GUI
  • Người dùng cuối cần GUI nên dùng QtLauncher
  • Có thể tham khảo tài liệu Quickstart để xử lý sự cố hoặc xem cách sử dụng
  • shadPS4 Game Compatibility được cung cấp để kiểm tra game có hoạt động hay không

Trạng thái hoạt động hiện tại và hướng phát triển

  • shadPS4 nêu rõ rằng vì đang ở giai đoạn phát triển ban đầu, khó có thể kỳ vọng trải nghiệm chạy hoàn hảo
  • Ví dụ về các game hiện có thể chạy như sau
  • Dự án bắt đầu vì niềm vui, và do thời gian rảnh hạn chế nên có thể cần thêm thời gian để chạy được các game phức tạp hơn
  • Nhóm phát triển cho biết sẽ tiếp tục thực hiện các bản cập nhật nhỏ và đều đặn

Build và điều kiện nền tảng

  • Build container dựa trên Docker và VSCode tuân theo Docker Build Instructions
  • Có tài liệu build theo từng nền tảng
  • Để chạy shadPS4 trên macOS cần macOS 26.0 trở lên
  • Không hỗ trợ Intel Mac

Cách chạy và nhập liệu

  • Có thể xem danh sách lệnh và mô tả chi tiết của từng lệnh trong output --help
  • Các mẫu chạy thường dùng như sau
    • shadPS4 CUSA00001: tìm thư mục CUSA00001 trong danh sách thư mục cài đặt game và boot
    • shadPS4 --fullscreen true --config-clean CUSA00001: đối số game mặc định đặt ở cuối
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: có thể chỉ định trực tiếp đối số game bằng -g
    • shadPS4 /path/to/game.elf: boot trực tiếp file PS4 ELF
    • shadPS4 CUSA00001 -- -flag1 -flag2: truyền các flag vào argv của file thực thi game
  • Với kiểm thử, debug và báo cáo issue, tham khảo Debugging documentation
  • Phím tắt bàn phím hỗ trợ bộ đếm FPS, thông tin debug video, toàn màn hình, chụp RenderDoc và chụp ảnh màn hình
  • Tay cầm Xbox và DualShock hoạt động mà không cần cấu hình riêng
  • Có thể tùy chỉnh nhập liệu bàn phím và chuột từ nút Controller trong menu cài đặt
    • Binding tùy chỉnh được lưu theo từng game
    • Hỗ trợ tối đa 3 phím cho mỗi binding, nút chuột, chuyển động chuột được ánh xạ thành input joystick, v.v.

File firmware và điều kiện pháp lý

  • shadPS4 có thể load một số file firmware PlayStation 4
  • Các module firmware được hỗ trợ phải được đặt trong thư mục sys_modules của shadPS4
  • Các module được hỗ trợ bao gồm libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx, v.v.
  • Các module này cần thiết để chạy game đúng cách
  • Module firmware phải được dump từ máy PlayStation 4 mà bạn sở hữu hợp pháp

Đóng góp và các dự án tham khảo

  • Để đóng góp, hãy đọc CONTRIBUTING.md và mở PR
  • Dự án gửi lời cảm ơn tới các nhóm và dự án sau
    • Panda3DS: giúp hiểu và giải quyết các vấn đề phát sinh khi chạy native mã x64 của binary PS4
    • fpPS4: giúp hiểu các phần phức tạp của hệ điều hành và thư viện PS4
    • yuzu: trình biên dịch shader của shadPS4 lấy trình biên dịch Hades của yuzu làm bản thiết kế
    • felix86: trình giả lập không gian người dùng Linux x86-64 → RISC-V
    • emudev.org: mạng lưới những người quan tâm đến việc lập tài liệu, giả lập, mô phỏng và tái triển khai phần cứng gần như đang đứng trước nguy cơ biến mất
  • Giấy phép là GPL-2.0 license

1 bình luận

 
GN⁺ 2024-08-22
Ý kiến Hacker News
  • Thực sự khá tò mò, về mặt nội bộ thì nó gần với trình giả lập như PCSX2 hơn hay gần với lớp tương thích như Wine hơn?
    Nếu PS4 gần như là một máy tính x86, thì có vẻ phần khó chủ yếu sẽ là triển khai các API hệ thống/đồ họa của PS4. Hay là giữa PC x86 và PS4 vẫn còn những khác biệt phần cứng lớn cần xử lý?

    • Có thể xem bài nói chuyện CCC năm 2016 của Marcan để thấy nhiều khác biệt giữa PS4 và PC: https://youtu.be/QMiubC6LdTA
    • Trên console, mọi shader đều được phân phối ở trạng thái đã biên dịch sẵn cho nền tảng đó, nên sẽ cần một kiến trúc dựa trên bộ biên dịch lại shader
      Chỉ riêng phần đó thôi cũng đã là làm nhiều việc hơn đáng kể so với Wine
    • Phần lớn trình giả lập PS4 hoạt động theo cách giống Wine
  • Có vẻ đây là trình giả lập PS4 đầu tiên đi tới được màn hình nhân vật của Bloodborne

  • Tò mò không biết người ta thiết kế trình giả lập như thế nào. Có tài liệu nào đáng học không?

    • Điều này thay đổi rất nhiều tùy vào phần cứng bạn muốn giả lập. Thường có hai loại: giả lập toàn bộ hệ thốnggiả lập API hệ thống
      Loại đầu tiên là viết mã giả lập CPU của hệ thống đích theo kiểu thông dịch lệnh, như với NES. Loại thứ hai là tái triển khai API của hệ thống đích như Wine. Nếu hệ thống đích dùng kiến trúc CPU khác thì có thể cần trình biên dịch JIT như PS3
      Phần lớn trình giả lập console hiện đại gần với loại thứ hai hơn, vì cách hoạt động của console hiện đại khá giống PC, có kernel hệ điều hành và các thư viện chế độ người dùng cho ứng dụng
      Loại thứ hai lại chia thành hai kiểu. Một là giả lập các thư viện chế độ người dùng, và hai là tái triển khai kernel của console trong khi tái sử dụng các thư viện hệ thống của chính console đó
    • https://rylev.github.io/DMG-01/public/book/ là tài liệu khá dễ đọc
    • Nếu muốn học thì có lẽ nên bắt đầu từ thứ gì đó như trình giả lập Game Boy đời cũ, vốn được tài liệu hóa tốt và tương đối đơn giản
    • javidx9 trên YouTube, tức OneLoneCoder, đã làm một series khá hay về việc viết trình giả lập NES từ đầu: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Có rất nhiều tài liệu trực tuyến về cách viết trình giả lập Game Boy, và kiến trúc của nó đủ đơn giản để dễ theo dõi
      Khuyên nên bắt đầu từ đó bằng ngôn ngữ bạn muốn
  • Có tài liệu thiết kế hay tư liệu nào cho thấy các nỗ lực trước đây hoặc công việc nền tảng, cũng như lý do dự án này khác biệt không?

  • Trông như một dự án thú vị đáng để theo dõi. Xét việc Sony hiện thiếu lựa chọn máy chơi game cầm tay, khá tò mò nó sẽ chạy thế nào trên Steam Deck

    • Tôi nghĩ là hoàn toàn không thể. Steam Deck có thể cho mức khung hình ổn với một số game giả lập PS3[0], nhưng để chạy những game mà người ta thực sự muốn chơi từ PS4 thì là điều bất khả thi
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Nếu đi theo hướng lớp tương thích thì có thể nó sẽ chạy tốt hơn trình giả lập Switch
  • Ý này có nghĩa là họ đã tạo ra một phiên bản tương đương DXVK cho Gnm/Gnmx phải không?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Đây là tiến triển mới nhất của Bloodborne. Có lẽ đây là thứ mà đa số mọi người đang chờ:
    YouTube của nhà phát triển này: https://www.youtube.com/watch?v=wC6s0avpQRE
    Tôi thật sự không hiểu vì sao Sony vẫn gần như cố tình bỏ mặc tựa game hạng S có ý nghĩa văn hóa này. Họ đang chờ để dùng nó làm game ra mắt cho PS6 sao?

    • Tôi luôn thích game của Sony, nhưng vẫn không quên việc Sony từng nói chẳng ai quan tâm sau khi không đưa tính tương thích ngược vào PS4, rồi sau đó lại bắt người ta chơi game cũ qua dịch vụ PSNOW dựa trên thuê bao
      Một số game có thể tải về, nhưng số khác chỉ chơi được qua streaming, nên muốn chơi game PS2 thì phải có kết nối internet tốt. Thật vô lý
      Nhu cầu chơi game cũ sẽ luôn tồn tại, và đó là lý do những trình giả lập như thế này tồn tại
  • Tò mò không biết việc console hiện đại giờ về cơ bản đã trở thành những hệ thống PC thu gọn có đang khiến việc phát triển giả lập trở nên dễ hơn không

    • Tôi không rõ về các thế hệ trước, nhưng có thể giải thích cách giả lập PS4 trở nên khả thi. Bước đầu tiên là hiểu console chạy game như thế nào
      May mắn là PS4 đã bị hack, và gần như mọi tệp cũng như thông tin đều đã được giải mã và dump ra. Bộ SDK PS4 chính thức cũng đã bị rò rỉ
      Giờ thì người ta đã biết console chạy game thế nào, và bước tiếp theo là dùng thông tin đó để chạy game bên ngoài console. Hệ thống PS4 là một phiên bản FreeBSD đã được chỉnh sửa nên cách hoạt động rất giống PC. Tệp thực thi của PS4 chỉ là các tệp ELF tùy biến
      Vì vậy để chạy game PS4 bên ngoài console, bạn chỉ cần ánh xạ trực tiếp tệp thực thi của game và cung cấp các symbol cần thiết bằng cách nào đó. Ví dụ như tự triển khai hoặc tái sử dụng các thư viện PS4
    • Nhờ internet, giờ dễ tiếp cận hơn với những người đang làm cùng lĩnh vực này, và năng lực tính toán để tìm hiểu các hệ thống như vậy cũng tốt hơn
      Dù vậy, có lẽ khả năng tiếp cận thông tin vẫn là yếu tố lớn
    • Kiến trúc tập lệnh chung chắc chắn có ích. Nó mở ra con đường chạy trực tiếp image của game mà không cần khởi động hệ điều hành của console, rồi chèn các phụ thuộc cần thiết xuống bên dưới. Tức là khá giống cách WINE hoạt động
      Nhìn rộng hơn, ngành này cũng đã tiến bộ nhiều về dịch nhị phân. Rosetta 2 là một ví dụ. Nó trở thành thêm một công cụ có thể dùng để đưa nhị phân sang môi trường host khác
    • Đúng vậy. Nếu kiến trúc giữa các thế hệ có phần nào giống nhau thì mọi thứ sẽ nhanh hơn
  • Nhớ là vài năm trước một trình giả lập PS4 khác tên là Spine cũng từng được chú ý. Không biết dự án đó giờ ra sao
    https://github.com/devofspine/spine
    Không có mã nguồn, chỉ có file nhị phân