ShadPS4 – อีมูเลเตอร์ PlayStation 4
(github.com/shadps4-emu)- 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 ระบุชัดว่าอยู่ใน ช่วงพัฒนาเริ่มต้น จึงยากที่จะคาดหวังประสบการณ์การใช้งานที่สมบูรณ์แบบ
- ตัวอย่างเกมที่รันได้ในตอนนี้มีดังนี้
- Bloodborne
- Dark Souls Remastered
- Red Dead Redemption
- และเกมอื่น ๆ อีกหลายเกม
- โครงการนี้เริ่มต้นจากความสนุก และด้วยเวลาว่างที่มีจำกัด การทำให้เกมที่ซับซ้อนกว่านี้รันได้อาจต้องใช้เวลา
- ทีมพัฒนาระบุว่าจะเดินหน้าปล่อยอัปเดต เล็กแต่สม่ำเสมอ ต่อไป
การบิลด์และเงื่อนไขของแพลตฟอร์ม
- การบิลด์แบบคอนเทนเนอร์ด้วย 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: สามารถระบุอาร์กิวเมนต์ของเกมโดยตรงด้วย-gshadPS4 /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 ความคิดเห็น
ความคิดเห็นบน Hacker News
อยากรู้จริง ๆ ว่าภายในแล้วมันใกล้เคียงกับ อีมูเลเตอร์อย่าง PCSX2 หรือใกล้เคียงกับ เลเยอร์ความเข้ากันได้อย่าง Wine กันแน่?
ถ้า PS4 แทบจะเป็นคอมพิวเตอร์ x86 อยู่แล้ว ส่วนที่ยากส่วนใหญ่น่าจะเป็นการอิมพลีเมนต์ระบบ/กราฟิก API ของ PS4 หรือยังมีความแตกต่างด้านฮาร์ดแวร์ใหญ่ ๆ ระหว่างพีซี x86 กับ PS4 ที่ต้องจัดการอีก?
แค่ดูตรงส่วนนั้นอย่างเดียว ก็นับว่าทำงานมากกว่าที่ Wine ทำอยู่พอสมควรแล้ว
ดูเหมือนจะเป็นอีมูเลเตอร์ PS4 ตัวแรกที่ไปถึง หน้าจอตัวละคร ของ Bloodborne ได้
https://x.com/shadps4/status/1825669017392107971?s=46
อยากรู้ว่าอีมูเลเตอร์ออกแบบกันอย่างไร มีแหล่งข้อมูลดี ๆ ให้เรียนไหม?
แบบแรกคือเขียนโค้ดที่อีมูเลต CPU ของระบบเป้าหมายแบบตัวแปลคำสั่ง เช่น NES ส่วนแบบที่สองคืออิมพลีเมนต์ API ของระบบเป้าหมายขึ้นมาใหม่ เช่น Wine ถ้าระบบเป้าหมายใช้สถาปัตยกรรม CPU ต่างกัน ก็อาจต้องใช้ JIT compiler เหมือน PS3
อีมูเลเตอร์คอนโซลยุคใหม่ส่วนใหญ่ใกล้เคียงกับแบบหลัง เพราะวิธีทำงานของคอนโซลยุคใหม่คล้ายกับ PC คือมีเคอร์เนลระบบปฏิบัติการและไลบรารี user mode สำหรับแอปพลิเคชัน
แบบหลังยังแบ่งได้อีกสองชนิด แบบหนึ่งคืออีมูเลตไลบรารี user mode อีกแบบคืออิมพลีเมนต์เคอร์เนลของคอนโซลขึ้นใหม่ พร้อมกับนำไลบรารีระบบของคอนโซลเองกลับมาใช้
แนะนำให้เริ่มจากตรงนั้นด้วยภาษาที่ต้องการ
มี เอกสารออกแบบ หรือแหล่งข้อมูลที่แสดงความพยายามก่อนหน้า งานที่ต่อยอดมา และเหตุผลว่าทำไมโปรเจกต์นี้จึงแตกต่างไหม?
ดูเป็นโปรเจกต์ที่น่าสนใจน่าติดตาม เมื่อดูจากการที่ Sony ยังมีตัวเลือกแบบพกพาไม่มากนัก ก็อยากรู้ว่าจะรันบน Steam Deck ได้อย่างไร
0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
นี่หมายความว่าทำของที่เทียบเท่า 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?
บางเกมดาวน์โหลดได้ แต่เกมอื่น ๆ เล่นได้เฉพาะแบบสตรีมมิง ทำให้ถ้าจะเล่นเกม PS2 ต้องมีอินเทอร์เน็ตที่ดี มันไร้สาระมาก
ความต้องการเล่นเกมเก่าจะมีอยู่เสมอ และนั่นคือเหตุผลที่อีมูเลเตอร์แบบนี้มีอยู่
สงสัยว่าทุกวันนี้ เมื่อคอนโซลสมัยใหม่แทบกลายเป็นระบบ PC แบบย่อส่วน การ พัฒนาอีมูเลชัน ง่ายขึ้นหรือเปล่า
โชคดีที่ PS4 ถูกแฮ็กแล้ว และไฟล์กับข้อมูลแทบทั้งหมดถูกถอดรหัสและดัมป์ออกมา SDK ทางการของ PS4 ก็รั่วออกมาด้วย
ตอนนี้เรารู้แล้วว่าคอนโซลรันเกมอย่างไร ขั้นต่อไปคือใช้ข้อมูลนี้เพื่อรันเกมนอกคอนโซล ระบบ PS4 เป็น FreeBSD เวอร์ชันที่ดัดแปลงมา จึงทำงานคล้าย PC มาก ไฟล์ปฏิบัติการของ PS4 ก็เป็นแค่ไฟล์ ELF แบบกำหนดเอง
ดังนั้นถ้าจะรันเกม PS4 นอกคอนโซล ก็ต้องแมปไฟล์ปฏิบัติการของเกมโดยตรง และจัดเตรียมสัญลักษณ์ที่จำเป็นด้วยวิธีใดวิธีหนึ่ง เช่น อิมพลีเมนต์เอง หรือใช้ไลบรารีของ PS4 ซ้ำ
อย่างไรก็ตาม ผมคิดว่าการเข้าถึงข้อมูลน่าจะเป็นปัจจัยสำคัญ
โดยรวมแล้ว ในอุตสาหกรรมก็มีความก้าวหน้าด้าน binary translation มากขึ้นมาก เช่น Rosetta 2 มันจึงกลายเป็นอีกเครื่องมือหนึ่งที่ใช้ยกไบนารีไปยังสภาพแวดล้อมโฮสต์อื่นได้
นึกขึ้นได้ว่าเมื่อไม่กี่ปีก่อนก็มีอีมูเลเตอร์ PS4 อีกตัวชื่อ Spine ที่ได้รับความสนใจเหมือนกัน อยากรู้ว่าโปรเจกต์นั้นเป็นอย่างไรแล้ว
https://github.com/devofspine/spine
ไม่มีซอร์สโค้ด มีแต่ไบนารี