.cargo | ||
.github | ||
.vscode | ||
kyty | ||
screenshots | ||
src | ||
uplift | ||
vcpkg@6ff1bfa059 | ||
.gitignore | ||
.gitmodules | ||
.obliteration-development | ||
CMakeLists.txt | ||
COPYING | ||
logo.png | ||
README.md | ||
vcpkg-packages.txt | ||
vcpkg-restore.ps1 | ||
vcpkg-restore.sh |
About
Obliteration is an experimental PS4 emulator using Kyty and Uplift as a reference. The project is under development and cannot run any games that Kyty is able to run yet.
The original author of Kyty does not involved in the development of Obliteration in anyway. Obliteration is a completely separated project. The reason you see the author of Kyty in a contributor list because this project contains commits from Kyty.
Get a daily build
You can download Windows binary for the latest development here.
Screenshots
Thanks Mou-Ikkai for the awesome icon!
Features
- Built-in PKG file supports for Fake PKG.
- Game library.
- Direct mounting PFS image.
- Emulate system calls instead of user space libraries.
System requirements
- Windows 10 x64 or Linux x86-64.
- CPU that supports all of instructions on PS4 CPU.
- AMD:
- Minimum (Based on Required Instruction Sets): Jaguar-Based CPUs or newer
- Recommended (Based on Performance): Zen-Based CPUs or newer
- Intel:
- Minimum (Based on Required Instruction Sets): Haswell-Based CPUs or newer
- Recommended (Based on Performance): 5th Gen CPUs or newer
- AMD:
Windows specific requirements
- Microsoft Visual C++ 2019 Redistributable. It is likely your system already have it so try to run Obliteration first. If there is an error related to
msvcp140.dll
,vcruntime140.dll
orvcruntime140_1.dll
that mean you need to install this manually.
Building from source
Windows prerequisites
- Visual Studio 2019
- Rust 1.63
- CMake 3.16
Linux prerequisites
- GCC 9.4
- Rust 1.63
- CMake 3.16
Install Qt 6.2
You need to install Qt 6.2 manually on your system before you proceed.
Install Vulkan SDK
For Windows just download from https://vulkan.lunarg.com/sdk/home. Once installed you need to restart your computer to make VULKAN_SDK
environment variable effective.
For Linux it will be depend on your distro. For Arch Linux just install vulkan-devel
and set VULKAN_SDK
to /usr
. For other distro try to find in its package repository first. If not found visit https://vulkan.lunarg.com/sdk/home to download and install it manually.
Clone the repository
You need to clone this repository with submodules like this:
git clone --recurse-submodules https://github.com/ultimaweapon/obliteration.git
Initialize VCPKG
Windows:
.\vcpkg\bootstrap-vcpkg.bat
Linux:
./vcpkg/bootstrap-vcpkg.sh
Install external dependencies
Windows:
.\vcpkg-restore.ps1
Linux:
./vcpkg-restore.sh
If the above command produced an error about Vulkan SDK that mean you have improper Vulkan SDK installed.
Configure build system
Windows:
cmake -B build -A x64
Linux:
cmake -B build -D CMAKE_BUILD_TYPE=Release
Build
Windows:
cmake --build build --config Release
Linux:
cmake --build build
Development
We recommended Visual Studio Code as a code editor with the following extensions:
Remove build
directory from the previous step and open this folder with VS Code. Everything should work out of the box (e.g. code completion, debugging, etc).
Get a homebrew application for testing
If you don't have a PS4 application for testing you can download PS Scene Quiz for free here.
Rules for Rust sources
- Don't be afraid to use
unsafe
when it is necessary. We are written an application that required very high performance code and we use Rust to assist us on this task, not to use Rust to compromise performance that C/C++ can provides. - Any functions that operate on pointers don't need to mark as
unsafe
. The reasons is because it will required the caller to wrap it inunsafe
. We already embraceunsafe
code so no point to make it harder to use. - Don't chain method calls without intermidate variable if the result code is hard to follow. We encourage code readability than a pleasure when writing so try to make it easy to read and understand for other people.
- Do not blindly cast an integer. Make sure the value can be fit in a destination type. We don't have any plans to support non 64-bits system so the pointer size and it related types like
usize
is always 64-bits.
Rules for C++ sources
Just follow how Qt is written (e.g. coding style, etc.). Always prefers Qt classes over std
when possible so you don't need to handle exception. Do not use Qt ui
file to design the UI because it will break on high-DPI screen.
Starting point
The application consist of 2 binaries:
- Main application. This is what user will see when they launch Obliteration. Its entry point is inside
src/main.cpp
. - Emulator kernel. This is where PS4 emulation take place. Its entry point is inside
src/kernel/src/main.rs
.
Debugging kernel
Create .kernel-debug
in the root of repository. The content of this file is YAML and the kernel will deserialize it to Args
struct in src/kernel/src/main.rs
when passing --debug
flag to the kernel. We already provided a launch configuration for VS Code so all you need to do is just choose Kernel
as a configuration and start debugging.
Action icons
We use icons from https://materialdesignicons.com for action icon (e.g. on menu and toolbar).
License
- All source code except
src/pfs
andsrc/pkg
are licensed under MIT license. src/pfs
andsrc/pkg
licensed under LGPL-3.0 license.- All release binaries are under GPL-3.0 license.