ArmProcessContext.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using ARMeilleure.Memory;
  2. using ARMeilleure.State;
  3. using Ryujinx.Cpu;
  4. using Ryujinx.HLE.HOS.Kernel.Process;
  5. using Ryujinx.Memory;
  6. using System;
  7. namespace Ryujinx.HLE.HOS
  8. {
  9. class ArmProcessContext<T> : IProcessContext where T : class, IVirtualMemoryManager, IMemoryManager
  10. {
  11. private readonly CpuContext _cpuContext;
  12. private T _memoryManager;
  13. public IVirtualMemoryManager AddressSpace => _memoryManager;
  14. public ArmProcessContext(T memoryManager)
  15. {
  16. if (memoryManager is IRefCounted rc)
  17. {
  18. rc.IncrementReferenceCount();
  19. }
  20. _memoryManager = memoryManager;
  21. _cpuContext = new CpuContext(memoryManager);
  22. }
  23. public void Execute(ExecutionContext context, ulong codeAddress)
  24. {
  25. _cpuContext.Execute(context, codeAddress);
  26. }
  27. public void Dispose()
  28. {
  29. if (_memoryManager is IRefCounted rc)
  30. {
  31. rc.DecrementReferenceCount();
  32. _memoryManager = null;
  33. }
  34. }
  35. }
  36. }