2 คะแนน โดย GN⁺ 2024-08-22 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • shadPS4 เป็น อีมูเลเตอร์ PlayStation 4 ระยะเริ่มต้นที่เขียนด้วย C++ และรองรับ Windows, Linux, macOS
  • รีโพซิทอรีนี้มีเฉพาะ แกนของอีมูเลเตอร์ และไม่มี GUI ดังนั้นผู้ใช้ทั่วไปต้องดาวน์โหลด QtLauncher แยกต่างหาก
  • ปัจจุบันสามารถรันเกมบางเกมได้ เช่น Bloodborne, Dark Souls Remastered, Red Dead Redemption แต่ก็ระบุไว้ว่าด้วยความที่โครงการยังอยู่ในช่วงพัฒนาเริ่มต้น จึงไม่ควรคาดหวัง ประสบการณ์ที่สมบูรณ์แบบ
  • มีเอกสารแนะนำการบิลด์ผ่าน Docker, Windows, Linux, macOS โดย macOS ต้องใช้ macOS 26.0 ขึ้นไป และไม่รองรับ Intel Mac
  • ต้องใส่โมดูลเฟิร์มแวร์ PS4 บางส่วนไว้ในโฟลเดอร์ sys_modules เพื่อให้เกมทำงานได้อย่างถูกต้อง และโมดูลเหล่านั้นต้องดัมป์มาจาก เครื่อง PlayStation 4 ที่ผู้ใช้เป็นเจ้าของอย่างถูกกฎหมาย

ลักษณะของ shadPS4 และกลุ่มผู้ใช้เป้าหมาย

  • shadPS4 เป็น อีมูเลเตอร์ PlayStation 4 ระยะเริ่มต้นที่ทำงานบน Windows, Linux, macOS และเขียนด้วย C++
  • รีโพซิทอรีนี้ให้เฉพาะ แกนของอีมูเลเตอร์ และไม่รวม GUI
  • ผู้ใช้ปลายทางที่ต้องการ GUI ควรใช้ QtLauncher
  • หากต้องการแก้ปัญหาหรือดูวิธีใช้งาน สามารถอ้างอิงเอกสาร Quickstart
  • มี shadPS4 Game Compatibility สำหรับตรวจสอบว่าเกมใดทำงานได้บ้าง

สถานะการทำงานปัจจุบันและทิศทางการพัฒนา

  • shadPS4 ระบุชัดว่าอยู่ใน ช่วงพัฒนาเริ่มต้น จึงยากที่จะคาดหวังประสบการณ์การใช้งานที่สมบูรณ์แบบ
  • ตัวอย่างเกมที่รันได้ในตอนนี้มีดังนี้
  • โครงการนี้เริ่มต้นจากความสนุก และด้วยเวลาว่างที่มีจำกัด การทำให้เกมที่ซับซ้อนกว่านี้รันได้อาจต้องใช้เวลา
  • ทีมพัฒนาระบุว่าจะเดินหน้าปล่อยอัปเดต เล็กแต่สม่ำเสมอ ต่อไป

การบิลด์และเงื่อนไขของแพลตฟอร์ม

  • การบิลด์แบบคอนเทนเนอร์ด้วย Docker และ VSCode ให้ทำตาม Docker Build Instructions
  • มีเอกสารการบิลด์แยกตามแพลตฟอร์ม
  • หากต้องการรัน shadPS4 บน macOS ต้องใช้ macOS 26.0 ขึ้นไป
  • Intel Mac ไม่ได้รับการรองรับ

วิธีรันและอินพุต

  • สามารถดูรายการคำสั่งและคำอธิบายโดยละเอียดของแต่ละคำสั่งได้จากผลลัพธ์ของ --help
  • รูปแบบการรันที่ใช้บ่อยมีดังนี้
    • shadPS4 CUSA00001: ค้นหาโฟลเดอร์ CUSA00001 จากรายการโฟลเดอร์ติดตั้งเกมแล้วบูตเกม
    • shadPS4 --fullscreen true --config-clean CUSA00001: โดยปกติอาร์กิวเมนต์ของเกมจะวางไว้ท้ายสุด
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: สามารถระบุอาร์กิวเมนต์ของเกมโดยตรงด้วย -g
    • shadPS4 /path/to/game.elf: บูตไฟล์ PS4 ELF โดยตรง
    • shadPS4 CUSA00001 -- -flag1 -flag2: ส่งแฟล็กไปยัง argv ของไฟล์รันเกม
  • สำหรับการทดสอบ การดีบัก และการรายงานปัญหา ให้ดู Debugging documentation
  • คีย์ลัดบนคีย์บอร์ดรองรับตัวนับ FPS, ข้อมูลดีบักวิดีโอ, โหมดเต็มหน้าจอ, การจับภาพด้วย RenderDoc และการจับภาพหน้าจอ
  • คอนโทรลเลอร์ Xbox และ DualShock ใช้งานได้ทันทีโดยไม่ต้องตั้งค่าเพิ่มเติม
  • อินพุตจากคีย์บอร์ดและเมาส์สามารถปรับแต่งได้จากปุ่ม Controller ในเมนูตั้งค่า
    • การตั้งค่าปุ่มแบบกำหนดเองจะถูกบันทึกแยกตามเกม
    • รองรับการแมปได้สูงสุด 3 ปุ่มต่อหนึ่งบายนด์ รวมถึงปุ่มเมาส์ และการเคลื่อนไหวของเมาส์ที่แมปกับอินพุตจากจอยสติ๊ก

ไฟล์เฟิร์มแวร์และเงื่อนไขทางกฎหมาย

  • shadPS4 สามารถโหลด ไฟล์เฟิร์มแวร์ PlayStation 4 บางส่วนได้
  • โมดูลเฟิร์มแวร์ที่รองรับต้องถูกวางไว้ในโฟลเดอร์ sys_modules ของ shadPS4
  • โมดูลที่รองรับรวมถึง libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx เป็นต้น
  • โมดูลเหล่านี้จำเป็นต่อการรันเกมอย่างถูกต้อง
  • โมดูลเฟิร์มแวร์ต้องดัมป์มาจาก เครื่อง PlayStation 4 ที่ผู้ใช้เป็นเจ้าของอย่างถูกกฎหมาย

การมีส่วนร่วมและโครงการอ้างอิง

  • หากต้องการมีส่วนร่วม ให้อ่าน CONTRIBUTING.md แล้วเปิด PR ได้เลย
  • โครงการนี้ขอบคุณทีมและโครงการต่อไปนี้
    • Panda3DS: ช่วยให้เข้าใจและแก้ปัญหาที่เกิดขึ้นระหว่างการรันโค้ด x64 ของไบนารี PS4 แบบเนทีฟ
    • fpPS4: ช่วยให้เข้าใจส่วนที่ซับซ้อนของระบบปฏิบัติการและไลบรารีของ PS4
    • yuzu: คอมไพเลอร์เชดเดอร์ของ shadPS4 ใช้คอมไพเลอร์ Hades ของ yuzu เป็นต้นแบบ
    • felix86: อีมูเลเตอร์ user-space Linux สำหรับ x86-64 → RISC-V
    • emudev.org: เครือข่ายของผู้ที่สนใจงานด้านเอกสาร อีมูเลชัน ซิมูเลชัน และการสร้างใหม่ของฮาร์ดแวร์ที่ใกล้สูญหาย
  • ใบอนุญาตคือ GPL-2.0 license

1 ความคิดเห็น

 
GN⁺ 2024-08-22
ความคิดเห็นบน Hacker News
  • อยากรู้จริง ๆ ว่าภายในแล้วมันใกล้เคียงกับ อีมูเลเตอร์อย่าง PCSX2 หรือใกล้เคียงกับ เลเยอร์ความเข้ากันได้อย่าง Wine กันแน่?
    ถ้า PS4 แทบจะเป็นคอมพิวเตอร์ x86 อยู่แล้ว ส่วนที่ยากส่วนใหญ่น่าจะเป็นการอิมพลีเมนต์ระบบ/กราฟิก API ของ PS4 หรือยังมีความแตกต่างด้านฮาร์ดแวร์ใหญ่ ๆ ระหว่างพีซี x86 กับ PS4 ที่ต้องจัดการอีก?

    • ความแตกต่างหลายอย่างระหว่าง PS4 กับ PC ดูได้จากการนำเสนอ CCC ปี 2016 ของ Marcan: https://youtu.be/QMiubC6LdTA
    • บนคอนโซล shader ทั้งหมดถูกแจกจ่ายในสภาพที่ คอมไพล์ล่วงหน้า สำหรับแพลตฟอร์มนั้น ๆ ดังนั้นน่าจะต้องมีโครงสร้างที่อิงกับ shader recompiler
      แค่ดูตรงส่วนนั้นอย่างเดียว ก็นับว่าทำงานมากกว่าที่ Wine ทำอยู่พอสมควรแล้ว
    • อีมูเลเตอร์ PS4 ส่วนใหญ่ทำงานในลักษณะเดียวกับ Wine
  • ดูเหมือนจะเป็นอีมูเลเตอร์ PS4 ตัวแรกที่ไปถึง หน้าจอตัวละคร ของ Bloodborne ได้

  • อยากรู้ว่าอีมูเลเตอร์ออกแบบกันอย่างไร มีแหล่งข้อมูลดี ๆ ให้เรียนไหม?

    • ขึ้นอยู่กับมากว่าต้องการอีมูเลตฮาร์ดแวร์อะไร โดยทั่วไปมีสองแบบ: การอีมูเลตทั้งระบบ และ การอีมูเลต API ของระบบ
      แบบแรกคือเขียนโค้ดที่อีมูเลต CPU ของระบบเป้าหมายแบบตัวแปลคำสั่ง เช่น NES ส่วนแบบที่สองคืออิมพลีเมนต์ API ของระบบเป้าหมายขึ้นมาใหม่ เช่น Wine ถ้าระบบเป้าหมายใช้สถาปัตยกรรม CPU ต่างกัน ก็อาจต้องใช้ JIT compiler เหมือน PS3
      อีมูเลเตอร์คอนโซลยุคใหม่ส่วนใหญ่ใกล้เคียงกับแบบหลัง เพราะวิธีทำงานของคอนโซลยุคใหม่คล้ายกับ PC คือมีเคอร์เนลระบบปฏิบัติการและไลบรารี user mode สำหรับแอปพลิเคชัน
      แบบหลังยังแบ่งได้อีกสองชนิด แบบหนึ่งคืออีมูเลตไลบรารี user mode อีกแบบคืออิมพลีเมนต์เคอร์เนลของคอนโซลขึ้นใหม่ พร้อมกับนำไลบรารีระบบของคอนโซลเองกลับมาใช้
    • https://rylev.github.io/DMG-01/public/book/ แหล่งนี้อ่านดี
    • ถ้าอยากเรียน แนะนำให้เริ่มจากของที่มีเอกสารดีและค่อนข้างเรียบง่าย เช่น อีมูเลเตอร์ Game Boy รุ่นเก่า
    • javidx9 หรือ OneLoneCoder บน YouTube ทำซีรีส์ค่อนข้างดีเกี่ยวกับการเขียนอีมูเลเตอร์ NES ตั้งแต่ศูนย์: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • มีแหล่งข้อมูลออนไลน์มากมายเกี่ยวกับการเขียนอีมูเลเตอร์ Game Boy และสถาปัตยกรรมก็เรียบง่ายพอที่จะตามได้ง่าย
      แนะนำให้เริ่มจากตรงนั้นด้วยภาษาที่ต้องการ
  • มี เอกสารออกแบบ หรือแหล่งข้อมูลที่แสดงความพยายามก่อนหน้า งานที่ต่อยอดมา และเหตุผลว่าทำไมโปรเจกต์นี้จึงแตกต่างไหม?

  • ดูเป็นโปรเจกต์ที่น่าสนใจน่าติดตาม เมื่อดูจากการที่ Sony ยังมีตัวเลือกแบบพกพาไม่มากนัก ก็อยากรู้ว่าจะรันบน Steam Deck ได้อย่างไร

    • ผมว่าเป็นไปไม่ได้แน่นอน Steam Deck อาจให้เฟรมเรตพอใช้ได้กับเกมอีมูเลต PS3 บางเกม[0] แต่การรันเกมที่คนทั่วไปน่าจะอยากเล่นจริง ๆ บน PS4 นั้นไม่ไหว
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • ถ้าไปทางเลเยอร์ความเข้ากันได้ อาจรันได้ดีกว่า อีมูเลเตอร์ Switch ด้วยซ้ำ
  • นี่หมายความว่าทำของที่เทียบเท่า DXVK สำหรับ Gnm/Gnmx ขึ้นมาหรือเปล่า?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • นี่คือความคืบหน้าล่าสุดของ Bloodborne สิ่งที่คนส่วนใหญ่รอคงเป็นอันนี้:
    YouTube ของนักพัฒนาคนนี้: https://www.youtube.com/watch?v=wC6s0avpQRE
    ไม่เข้าใจจริง ๆ ว่าทำไม Sony ถึงยังปล่อย เกมระดับ S ที่มีความหมายทางวัฒนธรรม นี้ทิ้งไว้แทบจะอย่างจงใจร้าย ๆ แบบนั้น หรือกำลังรอเอาไว้ใช้เป็นเกมเปิดตัว PS6?

    • ผมชอบเกมของ Sony มาตลอด แต่ลืมไม่ได้ที่ Sony ไม่ใส่ ความเข้ากันได้ย้อนหลัง ให้ PS4 แล้วอ้างว่าไม่มีใครสนใจ จากนั้นภายหลังก็ทำให้คนต้องเล่นเกมเก่าผ่านบริการ PSNOW แบบสมัครสมาชิก
      บางเกมดาวน์โหลดได้ แต่เกมอื่น ๆ เล่นได้เฉพาะแบบสตรีมมิง ทำให้ถ้าจะเล่นเกม PS2 ต้องมีอินเทอร์เน็ตที่ดี มันไร้สาระมาก
      ความต้องการเล่นเกมเก่าจะมีอยู่เสมอ และนั่นคือเหตุผลที่อีมูเลเตอร์แบบนี้มีอยู่
  • สงสัยว่าทุกวันนี้ เมื่อคอนโซลสมัยใหม่แทบกลายเป็นระบบ PC แบบย่อส่วน การ พัฒนาอีมูเลชัน ง่ายขึ้นหรือเปล่า

    • รุ่นก่อน ๆ ผมไม่ค่อยรู้ แต่พออธิบายได้ว่าการอีมูเลต PS4 เป็นไปได้อย่างไร ขั้นแรกคือเข้าใจว่าคอนโซลรันเกมอย่างไร
      โชคดีที่ PS4 ถูกแฮ็กแล้ว และไฟล์กับข้อมูลแทบทั้งหมดถูกถอดรหัสและดัมป์ออกมา SDK ทางการของ PS4 ก็รั่วออกมาด้วย
      ตอนนี้เรารู้แล้วว่าคอนโซลรันเกมอย่างไร ขั้นต่อไปคือใช้ข้อมูลนี้เพื่อรันเกมนอกคอนโซล ระบบ PS4 เป็น FreeBSD เวอร์ชันที่ดัดแปลงมา จึงทำงานคล้าย PC มาก ไฟล์ปฏิบัติการของ PS4 ก็เป็นแค่ไฟล์ ELF แบบกำหนดเอง
      ดังนั้นถ้าจะรันเกม PS4 นอกคอนโซล ก็ต้องแมปไฟล์ปฏิบัติการของเกมโดยตรง และจัดเตรียมสัญลักษณ์ที่จำเป็นด้วยวิธีใดวิธีหนึ่ง เช่น อิมพลีเมนต์เอง หรือใช้ไลบรารีของ PS4 ซ้ำ
    • อินเทอร์เน็ตทำให้เข้าถึงคนที่ทำเรื่องเดียวกันได้ง่ายขึ้น และ พลังประมวลผล สำหรับทำความเข้าใจว่าระบบเหล่านี้ทำงานอย่างไรก็ดีขึ้นด้วย
      อย่างไรก็ตาม ผมคิดว่าการเข้าถึงข้อมูลน่าจะเป็นปัจจัยสำคัญ
    • สถาปัตยกรรมชุดคำสั่ง ที่เหมือนกันช่วยได้แน่นอน เพราะเปิดทางให้รันอิมเมจเกมโดยตรงโดยไม่ต้องบูตระบบปฏิบัติการของคอนโซล แล้วสอดแทรก dependency ที่จำเป็นไว้ข้างใต้ กล่าวคือคล้ายกับวิธีที่ WINE ทำ
      โดยรวมแล้ว ในอุตสาหกรรมก็มีความก้าวหน้าด้าน binary translation มากขึ้นมาก เช่น Rosetta 2 มันจึงกลายเป็นอีกเครื่องมือหนึ่งที่ใช้ยกไบนารีไปยังสภาพแวดล้อมโฮสต์อื่นได้
    • ใช่ ถ้าสถาปัตยกรรมระหว่างรุ่นคล้ายกันในระดับหนึ่ง ก็จะเร็วขึ้น
  • นึกขึ้นได้ว่าเมื่อไม่กี่ปีก่อนก็มีอีมูเลเตอร์ PS4 อีกตัวชื่อ Spine ที่ได้รับความสนใจเหมือนกัน อยากรู้ว่าโปรเจกต์นั้นเป็นอย่างไรแล้ว
    https://github.com/devofspine/spine
    ไม่มีซอร์สโค้ด มีแต่ไบนารี