Coder Social home page Coder Social logo

obhq / obliteration Goto Github PK

View Code? Open in Web Editor NEW
596.0 596.0 17.0 20.68 MB

Experimental PS4 emulator written in Rust for Windows, macOS and Linux

Home Page: https://obliteration.net

License: MIT License

CMake 2.84% C++ 6.22% Rust 90.69% C 0.25%
cpp emulator freebsd kernel linux macos ps4 qt rust unix-like virtualization windows x86-64

obliteration's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

obliteration's Issues

Prevent malformed PFS from crashing the application

Currently the code that handle PFS do a little check on PFS. If the input PFS is malformed or decryption is failed it is likely to crash the application due to buffer allocation failed. It will be better if we can notify the user about malformed or decryption failed instead of application crashing.

The only component that need to fix is src/pfs.

The Kernel Crashed.

When trying to run Amplitude (And yes, I did a fresh install), Kyty would usually give a missing instruction error. However, when running the game, it now gives a "The kernel crashed" error before Obliteration closes entirely. It doesn't even show the Kyty error.

image
image
image

Removing things not part of core emulator

Currently Vulkan is cited as a requirement for the project when it is not necessary for building and running it. There's also kyty and uplift repo which are being used as reference; it would be more fitting for them to be git submodules as they are also not part of the core emulator.

Cannot create reader for system image.

Failed to install (D:\852\PS4UPDATE1.PUP.dec) to (D:\systemfolder): Cannot create reader for system image -> cannot read root directory -> unknown entry on #1 on cluster #5 (critical memory 1)

This error occurs when attempting to install decrypted firmware version 8.52

Remove context crate

When I started this project my plan is to use a single process for everything and the context crate was designed for this scenario. Then I realized it is not a good idea because we load and execute a PS4 app in the same address space so we moved the emulation part to a different process. With the new model we don't need the context crate anymore.

Question about Kyty and Obliteration

From what I've seen, you and InoriRus have been working together on both Kyty and Obliteration, are they at one point going to be merged together for ease of development? Plus it'd help reduce user confusion.

Add Dark Mode.

We could make a setting for it, OR, we can have it obey the user's settings on Windows.

    QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",QSettings::NativeFormat);
    if(settings.value("AppsUseLightTheme")==0){
    }

Obliteration compatibility list.

https://docs.google.com/spreadsheets/d/1FSr7vXfhMcIb5JfZ2R6O6sY4Ki7yKjLFOyogvwHguwU/edit

Made from my Kyty compatibility template, I now set up a sheet for Obliteration!
Anyone can contribute! (The examples below for the features are from the Kyty spreadsheet.)

  • Statuses are autocapitalized and color-coded.
  • Spreadsheet is sorted by alphabetical name.
    image
  • PS4 and PS5 are color coded (PS4 is light blue, PS5 dark blue.)
    image
  • Game tests with the latest emulator version have green text, while older emulator versions have red text.
    image
  • Compatibility counter updates in real time! (Uses an COUNTIF statement on the status region)
    image
    image
  • Changes color depending on if a game was tested less than a week ago, a week or longer, a month or longer, and a year or longer.
    image

Extract the inner PFS and remove ability to mount PFS directly

I want to use direct mounting in the first place because I want to support Unix file permissions on Windows. After I implemented a new memory manager I found out it have a problem with direct mounting PFS. The reason is because it is possible for each file in a PFS to have non-contiguous data, which make our memory manager cannot map it to the memory without the help from the OS kernel. So we have no choice but to drop the direct mounting feature.

When extracting the inner PFS we need to keep each file permission somewhere so we can retrieve it later.

Releasing version 0.01

When do you think we should release the first ever version, and what version should it be called? @ultimaweapon
Should it be when we can load firmware? Or when we can load a game without any issues?

Add MacOS support for Intel

This will potentially be very difficult to do with decent performance but it would be quite nice to see macos and arm support (as that's what apple is increasingly moving towards). In regards to CPU emulation, the Unicorn Engine could be used but am personally unfamiliar with its performance and Licensing could be an issue since it's GPL. There is also the option of Rosetta but it is unclear how long apple will support it.

Regarding GPU emulation, since the core emulation is written in Rust rendering with WGPU might be a good option.

Add AArch64 Support to Recompiler

Currently Obliteration's recompiler only provides support for x86_64 platforms. In order to support m1 macs and perhaps even Linux ARM/Android devices aarch64 will be required.

Design application icon

This one I cannot create by myself so I'll appreciate if someone can help me with this :)

Libraries not found.

A set of games can't find their required libraries.

Amplitude and Project Diva X: [E] Cannot find libSceGnmDriver_padebug.

Persona 5, Dancing In Starlight: [E] Cannot find libSceFont-module.

Homebrew Store: [E] Cannot find libSceFreeType.

Replace Recompiler with x86_64 emulation via Unicorn Engine

As recompilation takes significant effort due to sheer amount of x86 instructions, we've decided to shift our efforts CPU emulation using the Unicorn Engine framework. This would be a significant change in the codebase which would allow us to more easily pursue pertinent tasks in regards to supporting ps4 games (e.g. graphics, sound, etc...).

Rename QC workflow to Pre-build

It just look weird to have QC / Quality Checks like:

PR Build / QC / Quality Checks (pull_request)
PR Build / Build / Windows (pull_request)
PR Build / Build / Linux (pull_request)
PR Build / Build / Mac (pull_request)

VS:

PR Build / Pre-build / Quality Checks (pull_request)
PR Build / Build / Windows (pull_request)
PR Build / Build / Linux (pull_request)
PR Build / Build / Mac (pull_request)

We can also add other steps that does not related to QC in the future because it not only for QC anymore.

Implement a toolbar button to stop emulator kernel

Right now the only way to stop emulator kernel once it was started is to exit the application so we need to add a toolbar button and menu item to stop the kernel without exit the application. The only file that need to edit is src/main_window.cpp.

Add 64-bits inode supports for PFS

AFAIK there are no any games using 64-bits inode. So adding support for this just for completeness of the library and it is a good place to learn how PFS is working. Anyone who is interested in learning how PFS working can start working on this issue. You can start by looking at src/pfs/src/lib.rs and follow the code to see how it works.

PFS is an image file similar to .iso where game contents are stored. The PS4 will mount this image as a filesystem similar to how Linux mounts ISO files. So learning how PFS is working also gives you some knowledge on how to write a filesystem driver.

Github Self-Hosted Runner (Windows)

I currently have a computer in the attic that is unused (Besides from being a Pi-Hole), it has a Ryzen 5 2600, 16gb of ram, and a 2tb SSD. I might set it up to be a self-hosted runner for quicker compilations of Windows builds.
According to github, their specs for default runners is:

2-core CPU (x86_64)
7 GB of RAM
14 GB of SSD space

While the server I have has:

6-core CPU (12 threads x86_64)
16 GB of RAM
2 TB of SSD space

Output appimages on CI

AppImages are usually easier to use than Flatpaks. (Just double-click to run!)

They also include all of the dependencies and are usually smaller than flatpaks or snaps. All the user would have to do to use Obliteration on linux would be to download the AppImage, and double click.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.