A tool for deriving PKG packet encryption keys for ps4 written in c++
| 1 | /* |
| 2 | * ╔═══════════════════════════════════════════════════════════════════════════╗ |
| 3 | * ║ SDL BACKEND FOR PS4 EMULATION ║ |
| 4 | * ╠═══════════════════════════════════════════════════════════════════════════╣ |
| 5 | * ║ Provides window, rendering, and input for decompiled PS4 games. ║ |
| 6 | * ╚═══════════════════════════════════════════════════════════════════════════╝ |
| 7 | */ |
| 8 | |
| 9 | #ifndef SDL_BACKEND_H |
| 10 | #define SDL_BACKEND_H |
| 11 | |
| 12 | #include <cstdint> |
| 13 | #include <string> |
| 14 | |
| 15 | namespace PS4Emu { |
| 16 | namespace SDL { |
| 17 | |
| 18 | // ═══════════════════════════════════════════════════════════════════════════ |
| 19 | // INITIALIZATION |
| 20 | // ═══════════════════════════════════════════════════════════════════════════ |
| 21 | |
| 22 | bool Initialize(const std::string& title = "PS4 Game", int width = 1920, int height = 1080); |
| 23 | void Shutdown(); |
| 24 | bool IsInitialized(); |
| 25 | |
| 26 | // ═══════════════════════════════════════════════════════════════════════════ |
| 27 | // WINDOW & RENDERING |
| 28 | // ═══════════════════════════════════════════════════════════════════════════ |
| 29 | |
| 30 | void* GetWindowHandle(); |
| 31 | void* GetRendererHandle(); |
| 32 | |
| 33 | // Frame buffer operations |
| 34 | void* CreateFrameBuffer(int width, int height); |
| 35 | void DestroyFrameBuffer(void* buffer); |
| 36 | void UpdateFrameBuffer(void* buffer, const void* pixels, int pitch); |
| 37 | void PresentFrameBuffer(void* buffer); |
| 38 | |
| 39 | // Simple rendering |
| 40 | void ClearScreen(uint8_t r, uint8_t g, uint8_t b); |
| 41 | void Present(); |
| 42 | void SetVSync(bool enabled); |
| 43 | |
| 44 | // Text and dialog rendering |
| 45 | void DrawText(const char* text, int x, int y, uint8_t r, uint8_t g, uint8_t b); |
| 46 | void DrawRect(int x, int y, int w, int h, uint8_t r, uint8_t g, uint8_t b, bool filled = true); |
| 47 | void ShowDialog(const char* title, const char* message); |
| 48 | void SetDialogMessage(const char* message); |
| 49 | const char* GetCurrentDialogMessage(); |
| 50 | |
| 51 | // ═══════════════════════════════════════════════════════════════════════════ |
| 52 | // INPUT |
| 53 | // ═══════════════════════════════════════════════════════════════════════════ |
| 54 | |
| 55 | struct PadState { |
| 56 | uint32_t buttons; // Button bitmask |
| 57 | uint8_t leftStickX; // 0-255, 128 = center |
| 58 | uint8_t leftStickY; |
| 59 | uint8_t rightStickX; |
| 60 | uint8_t rightStickY; |
| 61 | uint8_t l2; // 0-255 |
| 62 | uint8_t r2; |
| 63 | bool connected; |
| 64 | }; |
| 65 | |
| 66 | // PS4 button masks (matching OrbisPadButtonDataOffset) |
| 67 | constexpr uint32_t PAD_L3 = 0x0002; |
| 68 | constexpr uint32_t PAD_R3 = 0x0004; |
| 69 | constexpr uint32_t PAD_OPTIONS = 0x0008; |
| 70 | constexpr uint32_t PAD_UP = 0x0010; |
| 71 | constexpr uint32_t PAD_RIGHT = 0x0020; |
| 72 | constexpr uint32_t PAD_DOWN = 0x0040; |
| 73 | constexpr uint32_t PAD_LEFT = 0x0080; |
| 74 | constexpr uint32_t PAD_L2 = 0x0100; |
| 75 | constexpr uint32_t PAD_R2 = 0x0200; |
| 76 | constexpr uint32_t PAD_L1 = 0x0400; |
| 77 | constexpr uint32_t PAD_R1 = 0x0800; |
| 78 | constexpr uint32_t PAD_TRIANGLE = 0x1000; |
| 79 | constexpr uint32_t PAD_CIRCLE = 0x2000; |
| 80 | constexpr uint32_t PAD_CROSS = 0x4000; |
| 81 | constexpr uint32_t PAD_SQUARE = 0x8000; |
| 82 | constexpr uint32_t PAD_TOUCHPAD = 0x100000; |
| 83 | |
| 84 | void PollEvents(); |
| 85 | bool ShouldQuit(); |
| 86 | PadState GetPadState(); |
| 87 | |
| 88 | // ═══════════════════════════════════════════════════════════════════════════ |
| 89 | // TIMING |
| 90 | // ═══════════════════════════════════════════════════════════════════════════ |
| 91 | |
| 92 | uint64_t GetTicks(); // Milliseconds since init |
| 93 | void Delay(uint32_t ms); |
| 94 | void WaitVBlank(); // Wait for ~16.67ms (60Hz) |
| 95 | |
| 96 | } // namespace SDL |
| 97 | } // namespace PS4Emu |
| 98 | |
| 99 | #endif // SDL_BACKEND_H |
| 100 |