mirror of
https://github.com/ran-j/PS2Recomp.git
synced 2026-09-28 17:39:16 -04:00
75d729ce40
* refactor: from guest threads to EE scheduler * feat: bad wip mpeg fix for code veronica * feat: cheap copy from host feat: small perf o vsync tick * feat: added EE clock Hz fix: fix MPEG out of sync with new EE refactor * fix: fix lotr tests * fix: fix cri dtx loading fix: fix wrong mmi instruction translation fix: fix thread info params feat: added EE timers decoder and consumer feat: split SFI and IOP memory to prevent collision and overrides * feat: revert wrong changes * refactor: change GS architecture * feat: IOP emulator refactor: codegen to catch callbacks on mips code feat: added a lot of entries or IOP emulator * feat: analyzer resolve the complete constant-producing sequence with five-instruction backward scan stopped at LUI and therefore * feat: remove recompiled version of GetRomName refactor: split IOP emulator logic feat: added more HLE IOP modules feat: added ps2_path * eat: enhance ELF parser with improved callable entry detection and control flow analysis * feat: update memory hint handling and enhance entry point discovery logic * feat: add SET_GPR_ZE32 macro for zero-extending loads with unsigned semantics * refactor: Refactor PS2 IOP Host Adapter and Memory Management feat: Added PS2Vfs for virtual file system operations, including file opening, reading, writing, and path resolution. feat: Improve VIF1 data processing to handle GIF image packets more efficiently. * feat: added a lot of tests * fix: fix texture caching feat: wip multi version on dbcman * feat: remove LLE IOPs
51 lines
1.9 KiB
C++
51 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "ps2x/iop/iop_host.h"
|
|
#include "ps2x/iop/iop_types.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
namespace ps2x::iop
|
|
{
|
|
class IopSubsystem
|
|
{
|
|
public:
|
|
explicit IopSubsystem(IopHost &host);
|
|
~IopSubsystem();
|
|
|
|
IopSubsystem(const IopSubsystem &) = delete;
|
|
IopSubsystem &operator=(const IopSubsystem &) = delete;
|
|
IopSubsystem(IopSubsystem &&) noexcept;
|
|
IopSubsystem &operator=(IopSubsystem &&) noexcept;
|
|
|
|
void reset();
|
|
|
|
[[nodiscard]] ModuleLoadResult loadModule(std::string_view path, const void *arguments = nullptr, uint32_t argumentSize = 0);
|
|
[[nodiscard]] ModuleLoadResult loadModuleBuffer(uint32_t guestAddress, const void *arguments = nullptr, uint32_t argumentSize = 0);
|
|
[[nodiscard]] bool stopModule(int32_t moduleId, int32_t *result = nullptr);
|
|
void runEeCycles(uint64_t eeCycles) noexcept;
|
|
|
|
[[nodiscard]] RpcAbi selectRpcAbi(const RpcAbiRequest &request) const;
|
|
[[nodiscard]] bool canBindRpc(uint32_t sid) const noexcept;
|
|
[[nodiscard]] RpcResult handleRpc(const RpcRequest &request);
|
|
void onSifTransfer(const SifTransfer &transfer);
|
|
|
|
// Physical IOP RAM access shared by the emulator, SIF DMA, and HLE services. Addresses are IOP addresses.
|
|
[[nodiscard]] uint32_t allocateMemory(uint32_t size, uint32_t alignment = 16u);
|
|
[[nodiscard]] bool freeMemory(uint32_t address);
|
|
[[nodiscard]] bool readMemory(uint32_t address, void *destination, size_t size) const;
|
|
[[nodiscard]] bool writeMemory(uint32_t address, const void *source, size_t size);
|
|
[[nodiscard]] bool zeroMemory(uint32_t address, size_t size);
|
|
[[nodiscard]] bool isMemoryRange(uint32_t address, size_t size) const;
|
|
|
|
[[nodiscard]] DebugSnapshot debugSnapshot() const;
|
|
|
|
private:
|
|
class Impl;
|
|
std::unique_ptr<Impl> m_impl;
|
|
};
|
|
}
|