From 62b827f474f0aa2152dd339fcc7cf31084e16a0b Mon Sep 17 00:00:00 2001
From: emmauss <emmausssss@gmail.com>
Date: Tue, 20 Feb 2018 22:09:23 +0200
Subject: [PATCH] Split main project into core,graphics and chocolarm4
 subproject (#29)

---
 {Ryujinx/Cpu => ChocolArm64}/ABitUtils.cs     |  0
 {Ryujinx/Cpu => ChocolArm64}/AOpCodeTable.cs  |  0
 .../Cpu => ChocolArm64}/AOptimizations.cs     |  0
 {Ryujinx/Cpu => ChocolArm64}/AThread.cs       |  0
 .../Cpu => ChocolArm64}/ATranslatedSub.cs     |  0
 {Ryujinx/Cpu => ChocolArm64}/ATranslator.cs   |  0
 ChocolArm64/ChocolArm64.csproj                | 15 ++++++
 .../Cpu => ChocolArm64}/Decoder/ABlock.cs     |  0
 {Ryujinx/Cpu => ChocolArm64}/Decoder/ACond.cs |  0
 .../Cpu => ChocolArm64}/Decoder/ADataOp.cs    |  0
 .../Cpu => ChocolArm64}/Decoder/ADecoder.cs   |  0
 .../Decoder/ADecoderHelper.cs                 |  0
 .../Cpu => ChocolArm64}/Decoder/AIntType.cs   |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCode.cs    |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeAdr.cs |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeAlu.cs |  0
 .../Decoder/AOpCodeAluImm.cs                  |  0
 .../Decoder/AOpCodeAluRs.cs                   |  0
 .../Decoder/AOpCodeAluRx.cs                   |  0
 .../Decoder/AOpCodeBImm.cs                    |  0
 .../Decoder/AOpCodeBImmAl.cs                  |  0
 .../Decoder/AOpCodeBImmCmp.cs                 |  0
 .../Decoder/AOpCodeBImmCond.cs                |  0
 .../Decoder/AOpCodeBImmTest.cs                |  0
 .../Decoder/AOpCodeBReg.cs                    |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeBfm.cs |  0
 .../Decoder/AOpCodeCcmp.cs                    |  0
 .../Decoder/AOpCodeCcmpImm.cs                 |  0
 .../Decoder/AOpCodeCcmpReg.cs                 |  0
 .../Decoder/AOpCodeCsel.cs                    |  0
 .../Decoder/AOpCodeException.cs               |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeMem.cs |  0
 .../Decoder/AOpCodeMemEx.cs                   |  0
 .../Decoder/AOpCodeMemImm.cs                  |  0
 .../Decoder/AOpCodeMemLit.cs                  |  0
 .../Decoder/AOpCodeMemPair.cs                 |  0
 .../Decoder/AOpCodeMemReg.cs                  |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeMov.cs |  0
 .../Cpu => ChocolArm64}/Decoder/AOpCodeMul.cs |  0
 .../Decoder/AOpCodeSimd.cs                    |  0
 .../Decoder/AOpCodeSimdCvt.cs                 |  0
 .../Decoder/AOpCodeSimdFcond.cs               |  0
 .../Decoder/AOpCodeSimdFmov.cs                |  0
 .../Decoder/AOpCodeSimdImm.cs                 |  0
 .../Decoder/AOpCodeSimdIns.cs                 |  0
 .../Decoder/AOpCodeSimdMemImm.cs              |  0
 .../Decoder/AOpCodeSimdMemLit.cs              |  0
 .../Decoder/AOpCodeSimdMemMs.cs               |  0
 .../Decoder/AOpCodeSimdMemPair.cs             |  0
 .../Decoder/AOpCodeSimdMemReg.cs              |  0
 .../Decoder/AOpCodeSimdMemSs.cs               |  0
 .../Decoder/AOpCodeSimdReg.cs                 |  0
 .../Decoder/AOpCodeSimdRegElem.cs             |  0
 .../Decoder/AOpCodeSimdShImm.cs               |  0
 .../Decoder/AOpCodeSimdTbl.cs                 |  0
 .../Decoder/AOpCodeSystem.cs                  |  0
 .../Cpu => ChocolArm64}/Decoder/AShiftType.cs |  0
 .../Cpu => ChocolArm64}/Decoder/IAOpCode.cs   |  0
 .../Decoder/IAOpCodeAlu.cs                    |  0
 .../Decoder/IAOpCodeAluImm.cs                 |  0
 .../Decoder/IAOpCodeAluRs.cs                  |  0
 .../Decoder/IAOpCodeAluRx.cs                  |  0
 .../Decoder/IAOpCodeCond.cs                   |  0
 .../Decoder/IAOpCodeLit.cs                    |  0
 .../Decoder/IAOpCodeSimd.cs                   |  0
 .../Exceptions/VmmAccessViolationException.cs |  0
 .../Exceptions/VmmOutOfMemoryException.cs     |  0
 .../Exceptions/VmmPageFaultException.cs       |  0
 .../Cpu => ChocolArm64}/Instruction/AInst.cs  |  0
 .../Instruction/AInstEmitAlu.cs               |  0
 .../Instruction/AInstEmitAluHelper.cs         |  0
 .../Instruction/AInstEmitBfm.cs               |  0
 .../Instruction/AInstEmitCcmp.cs              |  0
 .../Instruction/AInstEmitCsel.cs              |  0
 .../Instruction/AInstEmitException.cs         |  0
 .../Instruction/AInstEmitFlow.cs              |  0
 .../Instruction/AInstEmitMemory.cs            |  0
 .../Instruction/AInstEmitMemoryEx.cs          |  0
 .../Instruction/AInstEmitMemoryHelper.cs      |  0
 .../Instruction/AInstEmitMove.cs              |  0
 .../Instruction/AInstEmitMul.cs               |  0
 .../Instruction/AInstEmitSimdArithmetic.cs    |  0
 .../Instruction/AInstEmitSimdCmp.cs           |  0
 .../Instruction/AInstEmitSimdCvt.cs           |  0
 .../Instruction/AInstEmitSimdHelper.cs        |  0
 .../Instruction/AInstEmitSimdLogical.cs       |  0
 .../Instruction/AInstEmitSimdMemory.cs        |  0
 .../Instruction/AInstEmitSimdMove.cs          |  0
 .../Instruction/AInstEmitSimdShift.cs         |  0
 .../Instruction/AInstEmitSystem.cs            |  0
 .../Instruction/AInstEmitter.cs               |  0
 .../Instruction/ASoftFallback.cs              |  0
 .../Cpu => ChocolArm64}/Memory/AMemory.cs     |  0
 .../Memory/AMemoryAlloc.cs                    |  0
 .../Memory/AMemoryHelper.cs                   |  0
 .../Memory/AMemoryMapInfo.cs                  |  0
 .../Cpu => ChocolArm64}/Memory/AMemoryMgr.cs  |  0
 .../Cpu => ChocolArm64}/Memory/AMemoryPerm.cs |  0
 .../State/AInstExceptEventArgs.cs             |  0
 .../State/AInstUndEventArgs.cs                |  0
 {Ryujinx/Cpu => ChocolArm64}/State/APState.cs |  0
 .../Cpu => ChocolArm64}/State/ARegister.cs    |  0
 .../State/ARegisterSize.cs                    |  0
 .../State/ARegisterType.cs                    |  0
 .../Cpu => ChocolArm64}/State/AThreadState.cs |  0
 {Ryujinx/Cpu => ChocolArm64}/State/AVec.cs    |  0
 .../Translation/AILBlock.cs                   |  0
 .../Translation/AILEmitter.cs                 |  0
 .../Translation/AILEmitterCtx.cs              |  0
 .../Translation/AILLabel.cs                   |  0
 .../Translation/AILOpCode.cs                  |  0
 .../Translation/AILOpCodeBranch.cs            |  0
 .../Translation/AILOpCodeCall.cs              |  0
 .../Translation/AILOpCodeConst.cs             |  0
 .../Translation/AILOpCodeLoad.cs              |  0
 .../Translation/AILOpCodeLog.cs               |  0
 .../Translation/AILOpCodeStore.cs             |  0
 .../Translation/AIoType.cs                    |  0
 .../Translation/ALocalAlloc.cs                |  0
 .../Translation/IAILEmit.cs                   |  0
 .../Translation/ILGeneratorEx.cs              |  0
 {Ryujinx => Ryujinx.Core}/Config.cs           |  2 +-
 {Ryujinx => Ryujinx.Core}/Hid.cs              |  4 +-
 .../Hid/HidController.cs                      |  2 +-
 {Ryujinx => Ryujinx.Core}/Hid/HidKeyboard.cs  |  2 +-
 {Ryujinx => Ryujinx.Core}/Hid/HidMouse.cs     |  2 +-
 .../Hid/HidTouchScreen.cs                     |  2 +-
 {Ryujinx => Ryujinx.Core}/Hid/HidUnknown.cs   |  2 +-
 {Ryujinx => Ryujinx.Core}/Hid/JoyCon.cs       |  0
 .../Loaders/Compression/Lz4.cs                |  2 +-
 {Ryujinx => Ryujinx.Core}/Loaders/ElfDyn.cs   |  2 +-
 .../Loaders/ElfDynTag.cs                      |  2 +-
 {Ryujinx => Ryujinx.Core}/Loaders/ElfRel.cs   |  2 +-
 .../Loaders/ElfRelType.cs                     |  2 +-
 {Ryujinx => Ryujinx.Core}/Loaders/ElfSym.cs   |  2 +-
 .../Loaders/ElfSymBinding.cs                  |  2 +-
 .../Loaders/ElfSymType.cs                     |  2 +-
 .../Loaders/ElfSymVisibility.cs               |  2 +-
 .../Loaders/Executable.cs                     |  6 +--
 .../Loaders/Executables/IExecutable.cs        |  4 +-
 .../Loaders/Executables/Nro.cs                |  2 +-
 .../Loaders/Executables/Nso.cs                |  4 +-
 {Ryujinx => Ryujinx.Core}/Logging.cs          |  2 +-
 {Ryujinx => Ryujinx.Core}/OsHle/CondVar.cs    |  6 +--
 {Ryujinx => Ryujinx.Core}/OsHle/Display.cs    |  2 +-
 .../GuestBrokeExecutionException.cs           |  2 +-
 .../UndefinedInstructionException.cs          |  2 +-
 {Ryujinx => Ryujinx.Core}/OsHle/FileDesc.cs   |  2 +-
 .../OsHle/Handles/HDomain.cs                  |  4 +-
 Ryujinx.Core/OsHle/Handles/HEvent.cs          |  7 +++
 .../OsHle/Handles/HNvMap.cs                   |  2 +-
 .../OsHle/Handles/HSession.cs                 |  2 +-
 .../OsHle/Handles/HSessionObj.cs              |  2 +-
 .../OsHle/Handles/HSharedMem.cs               |  2 +-
 .../OsHle/Handles/HThread.cs                  |  4 +-
 .../OsHle/Handles/HTransferMem.cs             |  2 +-
 .../OsHle/Handles/KProcessScheduler.cs        |  4 +-
 {Ryujinx => Ryujinx.Core}/OsHle/Horizon.cs    | 12 ++---
 .../OsHle/Ipc/IpcBuffDesc.cs                  |  2 +-
 .../OsHle/Ipc/IpcDomCmd.cs                    |  2 +-
 .../OsHle/Ipc/IpcHandleDesc.cs                |  2 +-
 .../OsHle/Ipc/IpcHandler.cs                   |  8 +--
 .../OsHle/Ipc/IpcMessage.cs                   |  2 +-
 .../OsHle/Ipc/IpcMessageType.cs               |  2 +-
 .../OsHle/Ipc/IpcPtrBuffDesc.cs               |  2 +-
 .../OsHle/Ipc/IpcRecvListBuffDesc.cs          |  2 +-
 .../OsHle/Ipc/ServiceProcessRequest.cs        |  2 +-
 {Ryujinx => Ryujinx.Core}/OsHle/MemoryInfo.cs |  2 +-
 {Ryujinx => Ryujinx.Core}/OsHle/MemoryType.cs |  2 +-
 {Ryujinx => Ryujinx.Core}/OsHle/Mutex.cs      |  6 +--
 .../Objects/Acc/IManagerForApplication.cs     |  4 +-
 .../OsHle/Objects/Acc/IProfile.cs             |  4 +-
 .../OsHle/Objects/Am/IApplicationFunctions.cs |  6 +--
 .../OsHle/Objects/Am/IApplicationProxy.cs     |  6 +--
 .../OsHle/Objects/Am/IAudioController.cs      |  4 +-
 .../OsHle/Objects/Am/ICommonStateGetter.cs    |  4 +-
 .../OsHle/Objects/Am/IDebugFunctions.cs       |  4 +-
 .../OsHle/Objects/Am/IDisplayController.cs    |  4 +-
 .../OsHle/Objects/Am/ILibraryAppletCreator.cs |  4 +-
 .../Objects/Am/IParentalControlService.cs     |  4 +-
 .../OsHle/Objects/Am/ISelfController.cs       |  4 +-
 .../OsHle/Objects/Am/IStorage.cs              |  6 +--
 .../OsHle/Objects/Am/IStorageAccessor.cs      |  4 +-
 .../OsHle/Objects/Am/IWindowController.cs     |  4 +-
 .../OsHle/Objects/Apm/ISession.cs             |  4 +-
 .../OsHle/Objects/Aud/IAudioOut.cs            |  6 +--
 .../OsHle/Objects/Aud/IAudioRenderer.cs       |  6 +--
 .../OsHle/Objects/Friend/IFriendService.cs    |  4 +-
 .../OsHle/Objects/FspSrv/IDirectory.cs        |  4 +-
 .../OsHle/Objects/FspSrv/IFile.cs             |  4 +-
 .../OsHle/Objects/FspSrv/IFileSystem.cs       |  6 +--
 .../OsHle/Objects/FspSrv/IStorage.cs          |  4 +-
 .../OsHle/Objects/Hid/IAppletResource.cs      |  6 +--
 .../OsHle/Objects/IIpcInterface.cs            |  4 +-
 .../OsHle/Objects/ObjHelper.cs                |  6 +--
 .../OsHle/Objects/Parcel.cs                   |  2 +-
 .../OsHle/Objects/Time/ISteadyClock.cs        |  4 +-
 .../OsHle/Objects/Time/ISystemClock.cs        |  4 +-
 .../OsHle/Objects/Time/ITimeZoneService.cs    |  4 +-
 .../OsHle/Objects/Time/SystemClockType.cs     |  2 +-
 .../Objects/Vi/IApplicationDisplayService.cs  | 10 ++--
 .../OsHle/Objects/Vi/IHOSBinderDriver.cs      | 10 ++--
 .../Objects/Vi/IManagerDisplayService.cs      |  4 +-
 .../OsHle/Objects/Vi/ISystemDisplayService.cs |  4 +-
 {Ryujinx => Ryujinx.Core}/OsHle/Process.cs    | 14 ++---
 {Ryujinx => Ryujinx.Core}/OsHle/ServiceCtx.cs |  6 +--
 .../OsHle/Services/ServiceAcc.cs              |  6 +--
 .../OsHle/Services/ServiceApm.cs              |  6 +--
 .../OsHle/Services/ServiceAppletOE.cs         |  6 +--
 .../OsHle/Services/ServiceAud.cs              |  6 +--
 .../OsHle/Services/ServiceFriend.cs           |  6 +--
 .../OsHle/Services/ServiceFspSrv.cs           |  6 +--
 .../OsHle/Services/ServiceHid.cs              |  8 +--
 .../OsHle/Services/ServiceLm.cs               |  2 +-
 .../OsHle/Services/ServiceNvDrv.cs            | 22 ++++----
 .../OsHle/Services/ServicePctl.cs             |  6 +--
 .../OsHle/Services/ServicePl.cs               |  4 +-
 .../OsHle/Services/ServiceSet.cs              |  2 +-
 .../OsHle/Services/ServiceSm.cs               |  6 +--
 .../OsHle/Services/ServiceTime.cs             |  6 +--
 .../OsHle/Services/ServiceVi.cs               |  6 +--
 .../OsHle/Svc/SvcHandler.cs                   |  2 +-
 .../OsHle/Svc/SvcMemory.cs                    |  4 +-
 .../OsHle/Svc/SvcResult.cs                    |  2 +-
 .../OsHle/Svc/SvcSystem.cs                    |  8 +--
 .../OsHle/Svc/SvcThread.cs                    |  4 +-
 .../OsHle/Svc/SvcThreadSync.cs                |  4 +-
 .../OsHle/Utilities/IdPool.cs                 |  2 +-
 .../OsHle/Utilities/IdPoolWithObj.cs          |  2 +-
 .../OsHle/Utilities/MemReader.cs              |  2 +-
 .../OsHle/Utilities/MemWriter.cs              |  2 +-
 Ryujinx.Core/Ryujinx.Core.csproj              | 20 +++++++
 {Ryujinx => Ryujinx.Core}/Switch.cs           | 32 +++++++++--
 {Ryujinx => Ryujinx.Core}/VirtualFs.cs        |  2 +-
 .../Gal/GalPrimitiveType.cs                   |  2 +-
 .../Gal/GalVertexAttrib.cs                    |  2 +-
 .../Gal/GalVertexAttribSize.cs                |  2 +-
 .../Gal/GalVertexAttribType.cs                |  2 +-
 .../Gal/IGalRenderer.cs                       |  2 +-
 .../Gal/OpenGL/OpenGLRenderer.cs              |  2 +-
 {Ryujinx => Ryujinx.Graphics}/Gpu/BCn.cs      |  2 +-
 Ryujinx.Graphics/Gpu/NsGpu.cs                 | 53 +++++++++++++++++++
 .../Gpu/NsGpuEngine.cs                        |  2 +-
 .../Gpu/NsGpuMemoryMgr.cs                     |  2 +-
 .../Gpu/NsGpuPBEntry.cs                       |  4 +-
 .../Gpu/NsGpuPGraph.cs                        |  4 +-
 .../Gpu/NsGpuRegister.cs                      |  4 +-
 .../Gpu/NsGpuTexture.cs                       |  2 +-
 .../Gpu/NsGpuTextureFormat.cs                 |  2 +-
 .../Gpu/SwizzleAddr.cs                        |  2 +-
 Ryujinx.Graphics/Ryujinx.Graphics.csproj      | 15 ++++++
 Ryujinx.sln                                   | 24 +++++++--
 Ryujinx/Gpu/NsGpu.cs                          | 22 --------
 Ryujinx/OsHle/Handles/HEvent.cs               |  7 ---
 Ryujinx/Ryujinx.csproj                        |  5 ++
 Ryujinx/Ui/GLScreen.cs                        |  5 +-
 Ryujinx/Ui/Program.cs                         | 13 ++---
 257 files changed, 415 insertions(+), 285 deletions(-)
 rename {Ryujinx/Cpu => ChocolArm64}/ABitUtils.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/AOpCodeTable.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/AOptimizations.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/AThread.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/ATranslatedSub.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/ATranslator.cs (100%)
 create mode 100644 ChocolArm64/ChocolArm64.csproj
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/ABlock.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/ACond.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/ADataOp.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/ADecoder.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/ADecoderHelper.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AIntType.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCode.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeAdr.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeAlu.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeAluImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeAluRs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeAluRx.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBImmAl.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBImmCmp.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBImmCond.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBImmTest.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBReg.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeBfm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeCcmp.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeCcmpImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeCcmpReg.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeCsel.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeException.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMem.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMemEx.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMemImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMemLit.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMemPair.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMemReg.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMov.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeMul.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimd.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdCvt.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdFcond.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdFmov.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdIns.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemLit.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemMs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemPair.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemReg.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdMemSs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdReg.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdRegElem.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdShImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSimdTbl.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AOpCodeSystem.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/AShiftType.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCode.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeAlu.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeAluImm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeAluRs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeAluRx.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeCond.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeLit.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Decoder/IAOpCodeSimd.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Exceptions/VmmAccessViolationException.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Exceptions/VmmOutOfMemoryException.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Exceptions/VmmPageFaultException.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInst.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitAlu.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitAluHelper.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitBfm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitCcmp.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitCsel.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitException.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitFlow.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitMemory.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitMemoryEx.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitMemoryHelper.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitMove.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitMul.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdArithmetic.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdCmp.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdCvt.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdHelper.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdLogical.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdMemory.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdMove.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSimdShift.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitSystem.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/AInstEmitter.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Instruction/ASoftFallback.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemory.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemoryAlloc.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemoryHelper.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemoryMapInfo.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemoryMgr.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Memory/AMemoryPerm.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/AInstExceptEventArgs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/AInstUndEventArgs.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/APState.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/ARegister.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/ARegisterSize.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/ARegisterType.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/AThreadState.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/State/AVec.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILBlock.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILEmitter.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILEmitterCtx.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILLabel.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCode.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeBranch.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeCall.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeConst.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeLoad.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeLog.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AILOpCodeStore.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/AIoType.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/ALocalAlloc.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/IAILEmit.cs (100%)
 rename {Ryujinx/Cpu => ChocolArm64}/Translation/ILGeneratorEx.cs (100%)
 rename {Ryujinx => Ryujinx.Core}/Config.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/Hid.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/Hid/HidController.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/Hid/HidKeyboard.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Hid/HidMouse.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Hid/HidTouchScreen.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/Hid/HidUnknown.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/Hid/JoyCon.cs (100%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/Compression/Lz4.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfDyn.cs (89%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfDynTag.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfRel.cs (93%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfRelType.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfSym.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfSymBinding.cs (77%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfSymType.cs (87%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/ElfSymVisibility.cs (82%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/Executable.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/Executables/IExecutable.cs (82%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/Executables/Nro.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Loaders/Executables/Nso.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/Logging.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/CondVar.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Display.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Exceptions/GuestBrokeExecutionException.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Exceptions/UndefinedInstructionException.cs (90%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/FileDesc.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HDomain.cs (94%)
 create mode 100644 Ryujinx.Core/OsHle/Handles/HEvent.cs
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HNvMap.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HSession.cs (93%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HSessionObj.cs (94%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HSharedMem.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HThread.cs (88%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/HTransferMem.cs (93%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Handles/KProcessScheduler.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Horizon.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcBuffDesc.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcDomCmd.cs (70%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcHandleDesc.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcHandler.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcMessage.cs (99%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcMessageType.cs (79%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcPtrBuffDesc.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/IpcRecvListBuffDesc.cs (92%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Ipc/ServiceProcessRequest.cs (65%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/MemoryInfo.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/MemoryType.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Mutex.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Acc/IManagerForApplication.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Acc/IProfile.cs (92%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IApplicationFunctions.cs (94%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IApplicationProxy.cs (94%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IAudioController.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/ICommonStateGetter.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IDebugFunctions.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IDisplayController.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/ILibraryAppletCreator.cs (86%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IParentalControlService.cs (86%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/ISelfController.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IStorage.cs (84%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IStorageAccessor.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Am/IWindowController.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Apm/ISession.cs (90%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Aud/IAudioOut.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Aud/IAudioRenderer.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Friend/IFriendService.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/FspSrv/IDirectory.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/FspSrv/IFile.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/FspSrv/IFileSystem.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/FspSrv/IStorage.cs (94%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Hid/IAppletResource.cs (87%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/IIpcInterface.cs (69%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/ObjHelper.cs (84%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Parcel.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Time/ISteadyClock.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Time/ISystemClock.cs (93%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Time/ITimeZoneService.cs (85%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Time/SystemClockType.cs (66%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Vi/IApplicationDisplayService.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Vi/IHOSBinderDriver.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Vi/IManagerDisplayService.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Objects/Vi/ISystemDisplayService.cs (88%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Process.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/ServiceCtx.cs (92%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceAcc.cs (83%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceApm.cs (61%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceAppletOE.cs (64%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceAud.cs (94%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceFriend.cs (62%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceFspSrv.cs (89%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceHid.cs (89%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceLm.cs (83%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceNvDrv.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServicePctl.cs (63%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServicePl.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceSet.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceSm.cs (91%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceTime.cs (88%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Services/ServiceVi.cs (69%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcHandler.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcMemory.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcResult.cs (84%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcSystem.cs (98%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcThread.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Svc/SvcThreadSync.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Utilities/IdPool.cs (96%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Utilities/IdPoolWithObj.cs (97%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Utilities/MemReader.cs (95%)
 rename {Ryujinx => Ryujinx.Core}/OsHle/Utilities/MemWriter.cs (94%)
 create mode 100644 Ryujinx.Core/Ryujinx.Core.csproj
 rename {Ryujinx => Ryujinx.Core}/Switch.cs (54%)
 rename {Ryujinx => Ryujinx.Core}/VirtualFs.cs (98%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/GalPrimitiveType.cs (95%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/GalVertexAttrib.cs (96%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/GalVertexAttribSize.cs (93%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/GalVertexAttribType.cs (86%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/IGalRenderer.cs (93%)
 rename {Ryujinx => Ryujinx.Graphics}/Gal/OpenGL/OpenGLRenderer.cs (99%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/BCn.cs (99%)
 create mode 100644 Ryujinx.Graphics/Gpu/NsGpu.cs
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuEngine.cs (87%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuMemoryMgr.cs (99%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuPBEntry.cs (97%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuPGraph.cs (99%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuRegister.cs (98%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuTexture.cs (79%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/NsGpuTextureFormat.cs (76%)
 rename {Ryujinx => Ryujinx.Graphics}/Gpu/SwizzleAddr.cs (99%)
 create mode 100644 Ryujinx.Graphics/Ryujinx.Graphics.csproj
 delete mode 100644 Ryujinx/Gpu/NsGpu.cs
 delete mode 100644 Ryujinx/OsHle/Handles/HEvent.cs

diff --git a/Ryujinx/Cpu/ABitUtils.cs b/ChocolArm64/ABitUtils.cs
similarity index 100%
rename from Ryujinx/Cpu/ABitUtils.cs
rename to ChocolArm64/ABitUtils.cs
diff --git a/Ryujinx/Cpu/AOpCodeTable.cs b/ChocolArm64/AOpCodeTable.cs
similarity index 100%
rename from Ryujinx/Cpu/AOpCodeTable.cs
rename to ChocolArm64/AOpCodeTable.cs
diff --git a/Ryujinx/Cpu/AOptimizations.cs b/ChocolArm64/AOptimizations.cs
similarity index 100%
rename from Ryujinx/Cpu/AOptimizations.cs
rename to ChocolArm64/AOptimizations.cs
diff --git a/Ryujinx/Cpu/AThread.cs b/ChocolArm64/AThread.cs
similarity index 100%
rename from Ryujinx/Cpu/AThread.cs
rename to ChocolArm64/AThread.cs
diff --git a/Ryujinx/Cpu/ATranslatedSub.cs b/ChocolArm64/ATranslatedSub.cs
similarity index 100%
rename from Ryujinx/Cpu/ATranslatedSub.cs
rename to ChocolArm64/ATranslatedSub.cs
diff --git a/Ryujinx/Cpu/ATranslator.cs b/ChocolArm64/ATranslator.cs
similarity index 100%
rename from Ryujinx/Cpu/ATranslator.cs
rename to ChocolArm64/ATranslator.cs
diff --git a/ChocolArm64/ChocolArm64.csproj b/ChocolArm64/ChocolArm64.csproj
new file mode 100644
index 00000000..47d66cf1
--- /dev/null
+++ b/ChocolArm64/ChocolArm64.csproj
@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+
+</Project>
diff --git a/Ryujinx/Cpu/Decoder/ABlock.cs b/ChocolArm64/Decoder/ABlock.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/ABlock.cs
rename to ChocolArm64/Decoder/ABlock.cs
diff --git a/Ryujinx/Cpu/Decoder/ACond.cs b/ChocolArm64/Decoder/ACond.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/ACond.cs
rename to ChocolArm64/Decoder/ACond.cs
diff --git a/Ryujinx/Cpu/Decoder/ADataOp.cs b/ChocolArm64/Decoder/ADataOp.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/ADataOp.cs
rename to ChocolArm64/Decoder/ADataOp.cs
diff --git a/Ryujinx/Cpu/Decoder/ADecoder.cs b/ChocolArm64/Decoder/ADecoder.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/ADecoder.cs
rename to ChocolArm64/Decoder/ADecoder.cs
diff --git a/Ryujinx/Cpu/Decoder/ADecoderHelper.cs b/ChocolArm64/Decoder/ADecoderHelper.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/ADecoderHelper.cs
rename to ChocolArm64/Decoder/ADecoderHelper.cs
diff --git a/Ryujinx/Cpu/Decoder/AIntType.cs b/ChocolArm64/Decoder/AIntType.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AIntType.cs
rename to ChocolArm64/Decoder/AIntType.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCode.cs b/ChocolArm64/Decoder/AOpCode.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCode.cs
rename to ChocolArm64/Decoder/AOpCode.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeAdr.cs b/ChocolArm64/Decoder/AOpCodeAdr.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeAdr.cs
rename to ChocolArm64/Decoder/AOpCodeAdr.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeAlu.cs b/ChocolArm64/Decoder/AOpCodeAlu.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeAlu.cs
rename to ChocolArm64/Decoder/AOpCodeAlu.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeAluImm.cs b/ChocolArm64/Decoder/AOpCodeAluImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeAluImm.cs
rename to ChocolArm64/Decoder/AOpCodeAluImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeAluRs.cs b/ChocolArm64/Decoder/AOpCodeAluRs.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeAluRs.cs
rename to ChocolArm64/Decoder/AOpCodeAluRs.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeAluRx.cs b/ChocolArm64/Decoder/AOpCodeAluRx.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeAluRx.cs
rename to ChocolArm64/Decoder/AOpCodeAluRx.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBImm.cs b/ChocolArm64/Decoder/AOpCodeBImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBImm.cs
rename to ChocolArm64/Decoder/AOpCodeBImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBImmAl.cs b/ChocolArm64/Decoder/AOpCodeBImmAl.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBImmAl.cs
rename to ChocolArm64/Decoder/AOpCodeBImmAl.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBImmCmp.cs b/ChocolArm64/Decoder/AOpCodeBImmCmp.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBImmCmp.cs
rename to ChocolArm64/Decoder/AOpCodeBImmCmp.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBImmCond.cs b/ChocolArm64/Decoder/AOpCodeBImmCond.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBImmCond.cs
rename to ChocolArm64/Decoder/AOpCodeBImmCond.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBImmTest.cs b/ChocolArm64/Decoder/AOpCodeBImmTest.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBImmTest.cs
rename to ChocolArm64/Decoder/AOpCodeBImmTest.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBReg.cs b/ChocolArm64/Decoder/AOpCodeBReg.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBReg.cs
rename to ChocolArm64/Decoder/AOpCodeBReg.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeBfm.cs b/ChocolArm64/Decoder/AOpCodeBfm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeBfm.cs
rename to ChocolArm64/Decoder/AOpCodeBfm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeCcmp.cs b/ChocolArm64/Decoder/AOpCodeCcmp.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeCcmp.cs
rename to ChocolArm64/Decoder/AOpCodeCcmp.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeCcmpImm.cs b/ChocolArm64/Decoder/AOpCodeCcmpImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeCcmpImm.cs
rename to ChocolArm64/Decoder/AOpCodeCcmpImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeCcmpReg.cs b/ChocolArm64/Decoder/AOpCodeCcmpReg.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeCcmpReg.cs
rename to ChocolArm64/Decoder/AOpCodeCcmpReg.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeCsel.cs b/ChocolArm64/Decoder/AOpCodeCsel.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeCsel.cs
rename to ChocolArm64/Decoder/AOpCodeCsel.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeException.cs b/ChocolArm64/Decoder/AOpCodeException.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeException.cs
rename to ChocolArm64/Decoder/AOpCodeException.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMem.cs b/ChocolArm64/Decoder/AOpCodeMem.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMem.cs
rename to ChocolArm64/Decoder/AOpCodeMem.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMemEx.cs b/ChocolArm64/Decoder/AOpCodeMemEx.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMemEx.cs
rename to ChocolArm64/Decoder/AOpCodeMemEx.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMemImm.cs b/ChocolArm64/Decoder/AOpCodeMemImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMemImm.cs
rename to ChocolArm64/Decoder/AOpCodeMemImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMemLit.cs b/ChocolArm64/Decoder/AOpCodeMemLit.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMemLit.cs
rename to ChocolArm64/Decoder/AOpCodeMemLit.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMemPair.cs b/ChocolArm64/Decoder/AOpCodeMemPair.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMemPair.cs
rename to ChocolArm64/Decoder/AOpCodeMemPair.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMemReg.cs b/ChocolArm64/Decoder/AOpCodeMemReg.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMemReg.cs
rename to ChocolArm64/Decoder/AOpCodeMemReg.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMov.cs b/ChocolArm64/Decoder/AOpCodeMov.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMov.cs
rename to ChocolArm64/Decoder/AOpCodeMov.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeMul.cs b/ChocolArm64/Decoder/AOpCodeMul.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeMul.cs
rename to ChocolArm64/Decoder/AOpCodeMul.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimd.cs b/ChocolArm64/Decoder/AOpCodeSimd.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimd.cs
rename to ChocolArm64/Decoder/AOpCodeSimd.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdCvt.cs b/ChocolArm64/Decoder/AOpCodeSimdCvt.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdCvt.cs
rename to ChocolArm64/Decoder/AOpCodeSimdCvt.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdFcond.cs b/ChocolArm64/Decoder/AOpCodeSimdFcond.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdFcond.cs
rename to ChocolArm64/Decoder/AOpCodeSimdFcond.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdFmov.cs b/ChocolArm64/Decoder/AOpCodeSimdFmov.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdFmov.cs
rename to ChocolArm64/Decoder/AOpCodeSimdFmov.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdImm.cs b/ChocolArm64/Decoder/AOpCodeSimdImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdImm.cs
rename to ChocolArm64/Decoder/AOpCodeSimdImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdIns.cs b/ChocolArm64/Decoder/AOpCodeSimdIns.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdIns.cs
rename to ChocolArm64/Decoder/AOpCodeSimdIns.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemImm.cs b/ChocolArm64/Decoder/AOpCodeSimdMemImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemImm.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemLit.cs b/ChocolArm64/Decoder/AOpCodeSimdMemLit.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemLit.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemLit.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemMs.cs b/ChocolArm64/Decoder/AOpCodeSimdMemMs.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemMs.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemMs.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemPair.cs b/ChocolArm64/Decoder/AOpCodeSimdMemPair.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemPair.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemPair.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemReg.cs b/ChocolArm64/Decoder/AOpCodeSimdMemReg.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemReg.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemReg.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdMemSs.cs b/ChocolArm64/Decoder/AOpCodeSimdMemSs.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdMemSs.cs
rename to ChocolArm64/Decoder/AOpCodeSimdMemSs.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdReg.cs b/ChocolArm64/Decoder/AOpCodeSimdReg.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdReg.cs
rename to ChocolArm64/Decoder/AOpCodeSimdReg.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdRegElem.cs b/ChocolArm64/Decoder/AOpCodeSimdRegElem.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdRegElem.cs
rename to ChocolArm64/Decoder/AOpCodeSimdRegElem.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdShImm.cs b/ChocolArm64/Decoder/AOpCodeSimdShImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdShImm.cs
rename to ChocolArm64/Decoder/AOpCodeSimdShImm.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSimdTbl.cs b/ChocolArm64/Decoder/AOpCodeSimdTbl.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSimdTbl.cs
rename to ChocolArm64/Decoder/AOpCodeSimdTbl.cs
diff --git a/Ryujinx/Cpu/Decoder/AOpCodeSystem.cs b/ChocolArm64/Decoder/AOpCodeSystem.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AOpCodeSystem.cs
rename to ChocolArm64/Decoder/AOpCodeSystem.cs
diff --git a/Ryujinx/Cpu/Decoder/AShiftType.cs b/ChocolArm64/Decoder/AShiftType.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/AShiftType.cs
rename to ChocolArm64/Decoder/AShiftType.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCode.cs b/ChocolArm64/Decoder/IAOpCode.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCode.cs
rename to ChocolArm64/Decoder/IAOpCode.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeAlu.cs b/ChocolArm64/Decoder/IAOpCodeAlu.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeAlu.cs
rename to ChocolArm64/Decoder/IAOpCodeAlu.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeAluImm.cs b/ChocolArm64/Decoder/IAOpCodeAluImm.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeAluImm.cs
rename to ChocolArm64/Decoder/IAOpCodeAluImm.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeAluRs.cs b/ChocolArm64/Decoder/IAOpCodeAluRs.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeAluRs.cs
rename to ChocolArm64/Decoder/IAOpCodeAluRs.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeAluRx.cs b/ChocolArm64/Decoder/IAOpCodeAluRx.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeAluRx.cs
rename to ChocolArm64/Decoder/IAOpCodeAluRx.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeCond.cs b/ChocolArm64/Decoder/IAOpCodeCond.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeCond.cs
rename to ChocolArm64/Decoder/IAOpCodeCond.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeLit.cs b/ChocolArm64/Decoder/IAOpCodeLit.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeLit.cs
rename to ChocolArm64/Decoder/IAOpCodeLit.cs
diff --git a/Ryujinx/Cpu/Decoder/IAOpCodeSimd.cs b/ChocolArm64/Decoder/IAOpCodeSimd.cs
similarity index 100%
rename from Ryujinx/Cpu/Decoder/IAOpCodeSimd.cs
rename to ChocolArm64/Decoder/IAOpCodeSimd.cs
diff --git a/Ryujinx/Cpu/Exceptions/VmmAccessViolationException.cs b/ChocolArm64/Exceptions/VmmAccessViolationException.cs
similarity index 100%
rename from Ryujinx/Cpu/Exceptions/VmmAccessViolationException.cs
rename to ChocolArm64/Exceptions/VmmAccessViolationException.cs
diff --git a/Ryujinx/Cpu/Exceptions/VmmOutOfMemoryException.cs b/ChocolArm64/Exceptions/VmmOutOfMemoryException.cs
similarity index 100%
rename from Ryujinx/Cpu/Exceptions/VmmOutOfMemoryException.cs
rename to ChocolArm64/Exceptions/VmmOutOfMemoryException.cs
diff --git a/Ryujinx/Cpu/Exceptions/VmmPageFaultException.cs b/ChocolArm64/Exceptions/VmmPageFaultException.cs
similarity index 100%
rename from Ryujinx/Cpu/Exceptions/VmmPageFaultException.cs
rename to ChocolArm64/Exceptions/VmmPageFaultException.cs
diff --git a/Ryujinx/Cpu/Instruction/AInst.cs b/ChocolArm64/Instruction/AInst.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInst.cs
rename to ChocolArm64/Instruction/AInst.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitAlu.cs b/ChocolArm64/Instruction/AInstEmitAlu.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitAlu.cs
rename to ChocolArm64/Instruction/AInstEmitAlu.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitAluHelper.cs b/ChocolArm64/Instruction/AInstEmitAluHelper.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitAluHelper.cs
rename to ChocolArm64/Instruction/AInstEmitAluHelper.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitBfm.cs b/ChocolArm64/Instruction/AInstEmitBfm.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitBfm.cs
rename to ChocolArm64/Instruction/AInstEmitBfm.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitCcmp.cs b/ChocolArm64/Instruction/AInstEmitCcmp.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitCcmp.cs
rename to ChocolArm64/Instruction/AInstEmitCcmp.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitCsel.cs b/ChocolArm64/Instruction/AInstEmitCsel.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitCsel.cs
rename to ChocolArm64/Instruction/AInstEmitCsel.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitException.cs b/ChocolArm64/Instruction/AInstEmitException.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitException.cs
rename to ChocolArm64/Instruction/AInstEmitException.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitFlow.cs b/ChocolArm64/Instruction/AInstEmitFlow.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitFlow.cs
rename to ChocolArm64/Instruction/AInstEmitFlow.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitMemory.cs b/ChocolArm64/Instruction/AInstEmitMemory.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitMemory.cs
rename to ChocolArm64/Instruction/AInstEmitMemory.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitMemoryEx.cs b/ChocolArm64/Instruction/AInstEmitMemoryEx.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitMemoryEx.cs
rename to ChocolArm64/Instruction/AInstEmitMemoryEx.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitMemoryHelper.cs b/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitMemoryHelper.cs
rename to ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitMove.cs b/ChocolArm64/Instruction/AInstEmitMove.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitMove.cs
rename to ChocolArm64/Instruction/AInstEmitMove.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitMul.cs b/ChocolArm64/Instruction/AInstEmitMul.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitMul.cs
rename to ChocolArm64/Instruction/AInstEmitMul.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdArithmetic.cs b/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdArithmetic.cs
rename to ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdCmp.cs b/ChocolArm64/Instruction/AInstEmitSimdCmp.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdCmp.cs
rename to ChocolArm64/Instruction/AInstEmitSimdCmp.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdCvt.cs b/ChocolArm64/Instruction/AInstEmitSimdCvt.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdCvt.cs
rename to ChocolArm64/Instruction/AInstEmitSimdCvt.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdHelper.cs b/ChocolArm64/Instruction/AInstEmitSimdHelper.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdHelper.cs
rename to ChocolArm64/Instruction/AInstEmitSimdHelper.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdLogical.cs b/ChocolArm64/Instruction/AInstEmitSimdLogical.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdLogical.cs
rename to ChocolArm64/Instruction/AInstEmitSimdLogical.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdMemory.cs b/ChocolArm64/Instruction/AInstEmitSimdMemory.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdMemory.cs
rename to ChocolArm64/Instruction/AInstEmitSimdMemory.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdMove.cs b/ChocolArm64/Instruction/AInstEmitSimdMove.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdMove.cs
rename to ChocolArm64/Instruction/AInstEmitSimdMove.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSimdShift.cs b/ChocolArm64/Instruction/AInstEmitSimdShift.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSimdShift.cs
rename to ChocolArm64/Instruction/AInstEmitSimdShift.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitSystem.cs b/ChocolArm64/Instruction/AInstEmitSystem.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitSystem.cs
rename to ChocolArm64/Instruction/AInstEmitSystem.cs
diff --git a/Ryujinx/Cpu/Instruction/AInstEmitter.cs b/ChocolArm64/Instruction/AInstEmitter.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/AInstEmitter.cs
rename to ChocolArm64/Instruction/AInstEmitter.cs
diff --git a/Ryujinx/Cpu/Instruction/ASoftFallback.cs b/ChocolArm64/Instruction/ASoftFallback.cs
similarity index 100%
rename from Ryujinx/Cpu/Instruction/ASoftFallback.cs
rename to ChocolArm64/Instruction/ASoftFallback.cs
diff --git a/Ryujinx/Cpu/Memory/AMemory.cs b/ChocolArm64/Memory/AMemory.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemory.cs
rename to ChocolArm64/Memory/AMemory.cs
diff --git a/Ryujinx/Cpu/Memory/AMemoryAlloc.cs b/ChocolArm64/Memory/AMemoryAlloc.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemoryAlloc.cs
rename to ChocolArm64/Memory/AMemoryAlloc.cs
diff --git a/Ryujinx/Cpu/Memory/AMemoryHelper.cs b/ChocolArm64/Memory/AMemoryHelper.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemoryHelper.cs
rename to ChocolArm64/Memory/AMemoryHelper.cs
diff --git a/Ryujinx/Cpu/Memory/AMemoryMapInfo.cs b/ChocolArm64/Memory/AMemoryMapInfo.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemoryMapInfo.cs
rename to ChocolArm64/Memory/AMemoryMapInfo.cs
diff --git a/Ryujinx/Cpu/Memory/AMemoryMgr.cs b/ChocolArm64/Memory/AMemoryMgr.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemoryMgr.cs
rename to ChocolArm64/Memory/AMemoryMgr.cs
diff --git a/Ryujinx/Cpu/Memory/AMemoryPerm.cs b/ChocolArm64/Memory/AMemoryPerm.cs
similarity index 100%
rename from Ryujinx/Cpu/Memory/AMemoryPerm.cs
rename to ChocolArm64/Memory/AMemoryPerm.cs
diff --git a/Ryujinx/Cpu/State/AInstExceptEventArgs.cs b/ChocolArm64/State/AInstExceptEventArgs.cs
similarity index 100%
rename from Ryujinx/Cpu/State/AInstExceptEventArgs.cs
rename to ChocolArm64/State/AInstExceptEventArgs.cs
diff --git a/Ryujinx/Cpu/State/AInstUndEventArgs.cs b/ChocolArm64/State/AInstUndEventArgs.cs
similarity index 100%
rename from Ryujinx/Cpu/State/AInstUndEventArgs.cs
rename to ChocolArm64/State/AInstUndEventArgs.cs
diff --git a/Ryujinx/Cpu/State/APState.cs b/ChocolArm64/State/APState.cs
similarity index 100%
rename from Ryujinx/Cpu/State/APState.cs
rename to ChocolArm64/State/APState.cs
diff --git a/Ryujinx/Cpu/State/ARegister.cs b/ChocolArm64/State/ARegister.cs
similarity index 100%
rename from Ryujinx/Cpu/State/ARegister.cs
rename to ChocolArm64/State/ARegister.cs
diff --git a/Ryujinx/Cpu/State/ARegisterSize.cs b/ChocolArm64/State/ARegisterSize.cs
similarity index 100%
rename from Ryujinx/Cpu/State/ARegisterSize.cs
rename to ChocolArm64/State/ARegisterSize.cs
diff --git a/Ryujinx/Cpu/State/ARegisterType.cs b/ChocolArm64/State/ARegisterType.cs
similarity index 100%
rename from Ryujinx/Cpu/State/ARegisterType.cs
rename to ChocolArm64/State/ARegisterType.cs
diff --git a/Ryujinx/Cpu/State/AThreadState.cs b/ChocolArm64/State/AThreadState.cs
similarity index 100%
rename from Ryujinx/Cpu/State/AThreadState.cs
rename to ChocolArm64/State/AThreadState.cs
diff --git a/Ryujinx/Cpu/State/AVec.cs b/ChocolArm64/State/AVec.cs
similarity index 100%
rename from Ryujinx/Cpu/State/AVec.cs
rename to ChocolArm64/State/AVec.cs
diff --git a/Ryujinx/Cpu/Translation/AILBlock.cs b/ChocolArm64/Translation/AILBlock.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILBlock.cs
rename to ChocolArm64/Translation/AILBlock.cs
diff --git a/Ryujinx/Cpu/Translation/AILEmitter.cs b/ChocolArm64/Translation/AILEmitter.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILEmitter.cs
rename to ChocolArm64/Translation/AILEmitter.cs
diff --git a/Ryujinx/Cpu/Translation/AILEmitterCtx.cs b/ChocolArm64/Translation/AILEmitterCtx.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILEmitterCtx.cs
rename to ChocolArm64/Translation/AILEmitterCtx.cs
diff --git a/Ryujinx/Cpu/Translation/AILLabel.cs b/ChocolArm64/Translation/AILLabel.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILLabel.cs
rename to ChocolArm64/Translation/AILLabel.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCode.cs b/ChocolArm64/Translation/AILOpCode.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCode.cs
rename to ChocolArm64/Translation/AILOpCode.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeBranch.cs b/ChocolArm64/Translation/AILOpCodeBranch.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeBranch.cs
rename to ChocolArm64/Translation/AILOpCodeBranch.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeCall.cs b/ChocolArm64/Translation/AILOpCodeCall.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeCall.cs
rename to ChocolArm64/Translation/AILOpCodeCall.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeConst.cs b/ChocolArm64/Translation/AILOpCodeConst.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeConst.cs
rename to ChocolArm64/Translation/AILOpCodeConst.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeLoad.cs b/ChocolArm64/Translation/AILOpCodeLoad.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeLoad.cs
rename to ChocolArm64/Translation/AILOpCodeLoad.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeLog.cs b/ChocolArm64/Translation/AILOpCodeLog.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeLog.cs
rename to ChocolArm64/Translation/AILOpCodeLog.cs
diff --git a/Ryujinx/Cpu/Translation/AILOpCodeStore.cs b/ChocolArm64/Translation/AILOpCodeStore.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AILOpCodeStore.cs
rename to ChocolArm64/Translation/AILOpCodeStore.cs
diff --git a/Ryujinx/Cpu/Translation/AIoType.cs b/ChocolArm64/Translation/AIoType.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/AIoType.cs
rename to ChocolArm64/Translation/AIoType.cs
diff --git a/Ryujinx/Cpu/Translation/ALocalAlloc.cs b/ChocolArm64/Translation/ALocalAlloc.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/ALocalAlloc.cs
rename to ChocolArm64/Translation/ALocalAlloc.cs
diff --git a/Ryujinx/Cpu/Translation/IAILEmit.cs b/ChocolArm64/Translation/IAILEmit.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/IAILEmit.cs
rename to ChocolArm64/Translation/IAILEmit.cs
diff --git a/Ryujinx/Cpu/Translation/ILGeneratorEx.cs b/ChocolArm64/Translation/ILGeneratorEx.cs
similarity index 100%
rename from Ryujinx/Cpu/Translation/ILGeneratorEx.cs
rename to ChocolArm64/Translation/ILGeneratorEx.cs
diff --git a/Ryujinx/Config.cs b/Ryujinx.Core/Config.cs
similarity index 99%
rename from Ryujinx/Config.cs
rename to Ryujinx.Core/Config.cs
index b5361421..b97e80b8 100644
--- a/Ryujinx/Config.cs
+++ b/Ryujinx.Core/Config.cs
@@ -4,7 +4,7 @@ using System.IO;
 using System.Linq;
 using System.Reflection;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     public static class Config
     {
diff --git a/Ryujinx/Hid.cs b/Ryujinx.Core/Hid.cs
similarity index 99%
rename from Ryujinx/Hid.cs
rename to Ryujinx.Core/Hid.cs
index c344ec58..44d3e0fb 100644
--- a/Ryujinx/Hid.cs
+++ b/Ryujinx.Core/Hid.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle;
+using Ryujinx.Core.OsHle;
 using System;
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     public class Hid
     {
diff --git a/Ryujinx/Hid/HidController.cs b/Ryujinx.Core/Hid/HidController.cs
similarity index 99%
rename from Ryujinx/Hid/HidController.cs
rename to Ryujinx.Core/Hid/HidController.cs
index 7dd19841..641bc556 100644
--- a/Ryujinx/Hid/HidController.cs
+++ b/Ryujinx.Core/Hid/HidController.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Runtime.InteropServices;
  
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     [Flags]
     public enum HidControllerKeys
diff --git a/Ryujinx/Hid/HidKeyboard.cs b/Ryujinx.Core/Hid/HidKeyboard.cs
similarity index 97%
rename from Ryujinx/Hid/HidKeyboard.cs
rename to Ryujinx.Core/Hid/HidKeyboard.cs
index 2ee51bfa..f9987f68 100644
--- a/Ryujinx/Hid/HidKeyboard.cs
+++ b/Ryujinx.Core/Hid/HidKeyboard.cs
@@ -1,6 +1,6 @@
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     [StructLayout(LayoutKind.Sequential, Size = 0x20)]
     public struct HidKeyboardHeader
diff --git a/Ryujinx/Hid/HidMouse.cs b/Ryujinx.Core/Hid/HidMouse.cs
similarity index 97%
rename from Ryujinx/Hid/HidMouse.cs
rename to Ryujinx.Core/Hid/HidMouse.cs
index db01e649..9a019dd5 100644
--- a/Ryujinx/Hid/HidMouse.cs
+++ b/Ryujinx.Core/Hid/HidMouse.cs
@@ -1,6 +1,6 @@
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     [StructLayout(LayoutKind.Sequential, Size = 0x20)]
     public struct HidMouseHeader
diff --git a/Ryujinx/Hid/HidTouchScreen.cs b/Ryujinx.Core/Hid/HidTouchScreen.cs
similarity index 98%
rename from Ryujinx/Hid/HidTouchScreen.cs
rename to Ryujinx.Core/Hid/HidTouchScreen.cs
index 7fb02289..b755cb95 100644
--- a/Ryujinx/Hid/HidTouchScreen.cs
+++ b/Ryujinx.Core/Hid/HidTouchScreen.cs
@@ -1,6 +1,6 @@
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     [StructLayout(LayoutKind.Sequential, Size = 0x28)]
     public struct HidTouchScreenHeader
diff --git a/Ryujinx/Hid/HidUnknown.cs b/Ryujinx.Core/Hid/HidUnknown.cs
similarity index 98%
rename from Ryujinx/Hid/HidUnknown.cs
rename to Ryujinx.Core/Hid/HidUnknown.cs
index ef2172d5..c3fe68a8 100644
--- a/Ryujinx/Hid/HidUnknown.cs
+++ b/Ryujinx.Core/Hid/HidUnknown.cs
@@ -1,6 +1,6 @@
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     [StructLayout(LayoutKind.Sequential, Size = 0x400)]
     public struct HidSharedMemHeader
diff --git a/Ryujinx/Hid/JoyCon.cs b/Ryujinx.Core/Hid/JoyCon.cs
similarity index 100%
rename from Ryujinx/Hid/JoyCon.cs
rename to Ryujinx.Core/Hid/JoyCon.cs
diff --git a/Ryujinx/Loaders/Compression/Lz4.cs b/Ryujinx.Core/Loaders/Compression/Lz4.cs
similarity index 97%
rename from Ryujinx/Loaders/Compression/Lz4.cs
rename to Ryujinx.Core/Loaders/Compression/Lz4.cs
index aace200c..eb1602a0 100644
--- a/Ryujinx/Loaders/Compression/Lz4.cs
+++ b/Ryujinx.Core/Loaders/Compression/Lz4.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.Loaders.Compression
+namespace Ryujinx.Core.Loaders.Compression
 {
     static class Lz4
     {
diff --git a/Ryujinx/Loaders/ElfDyn.cs b/Ryujinx.Core/Loaders/ElfDyn.cs
similarity index 89%
rename from Ryujinx/Loaders/ElfDyn.cs
rename to Ryujinx.Core/Loaders/ElfDyn.cs
index 595d6cfb..2ed50b3e 100644
--- a/Ryujinx/Loaders/ElfDyn.cs
+++ b/Ryujinx.Core/Loaders/ElfDyn.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     struct ElfDyn
     {
diff --git a/Ryujinx/Loaders/ElfDynTag.cs b/Ryujinx.Core/Loaders/ElfDynTag.cs
similarity index 98%
rename from Ryujinx/Loaders/ElfDynTag.cs
rename to Ryujinx.Core/Loaders/ElfDynTag.cs
index fb6cab3f..1616c223 100644
--- a/Ryujinx/Loaders/ElfDynTag.cs
+++ b/Ryujinx.Core/Loaders/ElfDynTag.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     enum ElfDynTag
     {
diff --git a/Ryujinx/Loaders/ElfRel.cs b/Ryujinx.Core/Loaders/ElfRel.cs
similarity index 93%
rename from Ryujinx/Loaders/ElfRel.cs
rename to Ryujinx.Core/Loaders/ElfRel.cs
index 8b691d99..8db27452 100644
--- a/Ryujinx/Loaders/ElfRel.cs
+++ b/Ryujinx.Core/Loaders/ElfRel.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     struct ElfRel
     {
diff --git a/Ryujinx/Loaders/ElfRelType.cs b/Ryujinx.Core/Loaders/ElfRelType.cs
similarity index 99%
rename from Ryujinx/Loaders/ElfRelType.cs
rename to Ryujinx.Core/Loaders/ElfRelType.cs
index cc638b19..a0533138 100644
--- a/Ryujinx/Loaders/ElfRelType.cs
+++ b/Ryujinx.Core/Loaders/ElfRelType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     enum ElfRelType
     {
diff --git a/Ryujinx/Loaders/ElfSym.cs b/Ryujinx.Core/Loaders/ElfSym.cs
similarity index 97%
rename from Ryujinx/Loaders/ElfSym.cs
rename to Ryujinx.Core/Loaders/ElfSym.cs
index c4ed810c..35a45500 100644
--- a/Ryujinx/Loaders/ElfSym.cs
+++ b/Ryujinx.Core/Loaders/ElfSym.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     struct ElfSym
     {
diff --git a/Ryujinx/Loaders/ElfSymBinding.cs b/Ryujinx.Core/Loaders/ElfSymBinding.cs
similarity index 77%
rename from Ryujinx/Loaders/ElfSymBinding.cs
rename to Ryujinx.Core/Loaders/ElfSymBinding.cs
index 8bbc6d4e..c8789496 100644
--- a/Ryujinx/Loaders/ElfSymBinding.cs
+++ b/Ryujinx.Core/Loaders/ElfSymBinding.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     enum ElfSymBinding
     {
diff --git a/Ryujinx/Loaders/ElfSymType.cs b/Ryujinx.Core/Loaders/ElfSymType.cs
similarity index 87%
rename from Ryujinx/Loaders/ElfSymType.cs
rename to Ryujinx.Core/Loaders/ElfSymType.cs
index e504411e..786395e6 100644
--- a/Ryujinx/Loaders/ElfSymType.cs
+++ b/Ryujinx.Core/Loaders/ElfSymType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     enum ElfSymType
     {
diff --git a/Ryujinx/Loaders/ElfSymVisibility.cs b/Ryujinx.Core/Loaders/ElfSymVisibility.cs
similarity index 82%
rename from Ryujinx/Loaders/ElfSymVisibility.cs
rename to Ryujinx.Core/Loaders/ElfSymVisibility.cs
index a308ef79..e72eb5b8 100644
--- a/Ryujinx/Loaders/ElfSymVisibility.cs
+++ b/Ryujinx.Core/Loaders/ElfSymVisibility.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     enum ElfSymVisibility
     {
diff --git a/Ryujinx/Loaders/Executable.cs b/Ryujinx.Core/Loaders/Executable.cs
similarity index 98%
rename from Ryujinx/Loaders/Executable.cs
rename to Ryujinx.Core/Loaders/Executable.cs
index 65043658..6a6073ef 100644
--- a/Ryujinx/Loaders/Executable.cs
+++ b/Ryujinx.Core/Loaders/Executable.cs
@@ -1,9 +1,9 @@
 using ChocolArm64.Memory;
-using Ryujinx.Loaders.Executables;
-using Ryujinx.OsHle;
+using Ryujinx.Core.Loaders.Executables;
+using Ryujinx.Core.OsHle;
 using System.Collections.Generic;
 
-namespace Ryujinx.Loaders
+namespace Ryujinx.Core.Loaders
 {
     class Executable
     {
diff --git a/Ryujinx/Loaders/Executables/IExecutable.cs b/Ryujinx.Core/Loaders/Executables/IExecutable.cs
similarity index 82%
rename from Ryujinx/Loaders/Executables/IExecutable.cs
rename to Ryujinx.Core/Loaders/Executables/IExecutable.cs
index 3e42a834..73787b1d 100644
--- a/Ryujinx/Loaders/Executables/IExecutable.cs
+++ b/Ryujinx.Core/Loaders/Executables/IExecutable.cs
@@ -1,8 +1,8 @@
 using System.Collections.ObjectModel;
 
-namespace Ryujinx.Loaders.Executables
+namespace Ryujinx.Core.Loaders.Executables
 {
-    interface IExecutable
+    public interface IExecutable
     {
         ReadOnlyCollection<byte> Text { get; }
         ReadOnlyCollection<byte> RO   { get; }
diff --git a/Ryujinx/Loaders/Executables/Nro.cs b/Ryujinx.Core/Loaders/Executables/Nro.cs
similarity index 97%
rename from Ryujinx/Loaders/Executables/Nro.cs
rename to Ryujinx.Core/Loaders/Executables/Nro.cs
index 2217f331..3cbc4c5d 100644
--- a/Ryujinx/Loaders/Executables/Nro.cs
+++ b/Ryujinx.Core/Loaders/Executables/Nro.cs
@@ -2,7 +2,7 @@ using System;
 using System.Collections.ObjectModel;
 using System.IO;
 
-namespace Ryujinx.Loaders.Executables
+namespace Ryujinx.Core.Loaders.Executables
 {
     class Nro : IExecutable
     {
diff --git a/Ryujinx/Loaders/Executables/Nso.cs b/Ryujinx.Core/Loaders/Executables/Nso.cs
similarity index 97%
rename from Ryujinx/Loaders/Executables/Nso.cs
rename to Ryujinx.Core/Loaders/Executables/Nso.cs
index ead1baf1..7b8bf253 100644
--- a/Ryujinx/Loaders/Executables/Nso.cs
+++ b/Ryujinx.Core/Loaders/Executables/Nso.cs
@@ -1,9 +1,9 @@
-using Ryujinx.Loaders.Compression;
+using Ryujinx.Core.Loaders.Compression;
 using System;
 using System.Collections.ObjectModel;
 using System.IO;
 
-namespace Ryujinx.Loaders.Executables
+namespace Ryujinx.Core.Loaders.Executables
 {
     class Nso : IExecutable
     {
diff --git a/Ryujinx/Logging.cs b/Ryujinx.Core/Logging.cs
similarity index 99%
rename from Ryujinx/Logging.cs
rename to Ryujinx.Core/Logging.cs
index 2ae858b4..e14e5587 100644
--- a/Ryujinx/Logging.cs
+++ b/Ryujinx.Core/Logging.cs
@@ -2,7 +2,7 @@
 using System.Diagnostics;
 using System.IO;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     public static class Logging
     {
diff --git a/Ryujinx/OsHle/CondVar.cs b/Ryujinx.Core/OsHle/CondVar.cs
similarity index 97%
rename from Ryujinx/OsHle/CondVar.cs
rename to Ryujinx.Core/OsHle/CondVar.cs
index 91ea37bd..7b3e1852 100644
--- a/Ryujinx/OsHle/CondVar.cs
+++ b/Ryujinx.Core/OsHle/CondVar.cs
@@ -1,10 +1,10 @@
-using Ryujinx.OsHle.Handles;
+using Ryujinx.Core.OsHle.Handles;
 using System.Collections.Generic;
 using System.Threading;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
-    class CondVar
+    public class CondVar
     {
         private Process Process;
 
diff --git a/Ryujinx/OsHle/Display.cs b/Ryujinx.Core/OsHle/Display.cs
similarity index 85%
rename from Ryujinx/OsHle/Display.cs
rename to Ryujinx.Core/OsHle/Display.cs
index f62430fa..590841fc 100644
--- a/Ryujinx/OsHle/Display.cs
+++ b/Ryujinx.Core/OsHle/Display.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
     class Display
     {
diff --git a/Ryujinx/OsHle/Exceptions/GuestBrokeExecutionException.cs b/Ryujinx.Core/OsHle/Exceptions/GuestBrokeExecutionException.cs
similarity index 85%
rename from Ryujinx/OsHle/Exceptions/GuestBrokeExecutionException.cs
rename to Ryujinx.Core/OsHle/Exceptions/GuestBrokeExecutionException.cs
index 1369c57b..db4929c5 100644
--- a/Ryujinx/OsHle/Exceptions/GuestBrokeExecutionException.cs
+++ b/Ryujinx.Core/OsHle/Exceptions/GuestBrokeExecutionException.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.OsHle.Exceptions
+namespace Ryujinx.Core.OsHle.Exceptions
 {
     public class GuestBrokeExecutionException : Exception
     {
diff --git a/Ryujinx/OsHle/Exceptions/UndefinedInstructionException.cs b/Ryujinx.Core/OsHle/Exceptions/UndefinedInstructionException.cs
similarity index 90%
rename from Ryujinx/OsHle/Exceptions/UndefinedInstructionException.cs
rename to Ryujinx.Core/OsHle/Exceptions/UndefinedInstructionException.cs
index 86033a82..20cf8386 100644
--- a/Ryujinx/OsHle/Exceptions/UndefinedInstructionException.cs
+++ b/Ryujinx.Core/OsHle/Exceptions/UndefinedInstructionException.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.OsHle.Exceptions
+namespace Ryujinx.Core.OsHle.Exceptions
 {
     public class UndefinedInstructionException : Exception
     {
diff --git a/Ryujinx/OsHle/FileDesc.cs b/Ryujinx.Core/OsHle/FileDesc.cs
similarity index 85%
rename from Ryujinx/OsHle/FileDesc.cs
rename to Ryujinx.Core/OsHle/FileDesc.cs
index 2a21f500..4be83bb0 100644
--- a/Ryujinx/OsHle/FileDesc.cs
+++ b/Ryujinx.Core/OsHle/FileDesc.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
     class FileDesc
     {
diff --git a/Ryujinx/OsHle/Handles/HDomain.cs b/Ryujinx.Core/OsHle/Handles/HDomain.cs
similarity index 94%
rename from Ryujinx/OsHle/Handles/HDomain.cs
rename to Ryujinx.Core/OsHle/Handles/HDomain.cs
index e781602a..ca287a5f 100644
--- a/Ryujinx/OsHle/Handles/HDomain.cs
+++ b/Ryujinx.Core/OsHle/Handles/HDomain.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Utilities;
+using Ryujinx.Core.OsHle.Utilities;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HDomain : HSession
     {
diff --git a/Ryujinx.Core/OsHle/Handles/HEvent.cs b/Ryujinx.Core/OsHle/Handles/HEvent.cs
new file mode 100644
index 00000000..4e881ca2
--- /dev/null
+++ b/Ryujinx.Core/OsHle/Handles/HEvent.cs
@@ -0,0 +1,7 @@
+namespace Ryujinx.Core.OsHle.Handles
+{
+    class HEvent
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Ryujinx/OsHle/Handles/HNvMap.cs b/Ryujinx.Core/OsHle/Handles/HNvMap.cs
similarity index 91%
rename from Ryujinx/OsHle/Handles/HNvMap.cs
rename to Ryujinx.Core/OsHle/Handles/HNvMap.cs
index 3e15eda3..09173730 100644
--- a/Ryujinx/OsHle/Handles/HNvMap.cs
+++ b/Ryujinx.Core/OsHle/Handles/HNvMap.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HNvMap
     {
diff --git a/Ryujinx/OsHle/Handles/HSession.cs b/Ryujinx.Core/OsHle/Handles/HSession.cs
similarity index 93%
rename from Ryujinx/OsHle/Handles/HSession.cs
rename to Ryujinx.Core/OsHle/Handles/HSession.cs
index 6b901659..8aa1c06b 100644
--- a/Ryujinx/OsHle/Handles/HSession.cs
+++ b/Ryujinx.Core/OsHle/Handles/HSession.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HSession
     {
diff --git a/Ryujinx/OsHle/Handles/HSessionObj.cs b/Ryujinx.Core/OsHle/Handles/HSessionObj.cs
similarity index 94%
rename from Ryujinx/OsHle/Handles/HSessionObj.cs
rename to Ryujinx.Core/OsHle/Handles/HSessionObj.cs
index a871a11f..ed0530f7 100644
--- a/Ryujinx/OsHle/Handles/HSessionObj.cs
+++ b/Ryujinx.Core/OsHle/Handles/HSessionObj.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HSessionObj : HSession, IDisposable
     {
diff --git a/Ryujinx/OsHle/Handles/HSharedMem.cs b/Ryujinx.Core/OsHle/Handles/HSharedMem.cs
similarity index 97%
rename from Ryujinx/OsHle/Handles/HSharedMem.cs
rename to Ryujinx.Core/OsHle/Handles/HSharedMem.cs
index 4f943ebc..3d56ff92 100644
--- a/Ryujinx/OsHle/Handles/HSharedMem.cs
+++ b/Ryujinx.Core/OsHle/Handles/HSharedMem.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HSharedMem
     {
diff --git a/Ryujinx/OsHle/Handles/HThread.cs b/Ryujinx.Core/OsHle/Handles/HThread.cs
similarity index 88%
rename from Ryujinx/OsHle/Handles/HThread.cs
rename to Ryujinx.Core/OsHle/Handles/HThread.cs
index fef2faf2..8bb276fa 100644
--- a/Ryujinx/OsHle/Handles/HThread.cs
+++ b/Ryujinx.Core/OsHle/Handles/HThread.cs
@@ -1,8 +1,8 @@
 using ChocolArm64;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
-    class HThread
+    public class HThread
     {
         public AThread Thread { get; private set; }
 
diff --git a/Ryujinx/OsHle/Handles/HTransferMem.cs b/Ryujinx.Core/OsHle/Handles/HTransferMem.cs
similarity index 93%
rename from Ryujinx/OsHle/Handles/HTransferMem.cs
rename to Ryujinx.Core/OsHle/Handles/HTransferMem.cs
index b24e1412..701fc451 100644
--- a/Ryujinx/OsHle/Handles/HTransferMem.cs
+++ b/Ryujinx.Core/OsHle/Handles/HTransferMem.cs
@@ -1,6 +1,6 @@
 using ChocolArm64.Memory;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
     class HTransferMem
     {
diff --git a/Ryujinx/OsHle/Handles/KProcessScheduler.cs b/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs
similarity index 99%
rename from Ryujinx/OsHle/Handles/KProcessScheduler.cs
rename to Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs
index 9044987f..2045f8a1 100644
--- a/Ryujinx/OsHle/Handles/KProcessScheduler.cs
+++ b/Ryujinx.Core/OsHle/Handles/KProcessScheduler.cs
@@ -3,9 +3,9 @@ using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Threading;
 
-namespace Ryujinx.OsHle.Handles
+namespace Ryujinx.Core.OsHle.Handles
 {
-    class KProcessScheduler : IDisposable
+    public class KProcessScheduler : IDisposable
     {
         private class SchedulerThread : IDisposable
         {
diff --git a/Ryujinx/OsHle/Horizon.cs b/Ryujinx.Core/OsHle/Horizon.cs
similarity index 97%
rename from Ryujinx/OsHle/Horizon.cs
rename to Ryujinx.Core/OsHle/Horizon.cs
index b9af69c2..e2d38d52 100644
--- a/Ryujinx/OsHle/Horizon.cs
+++ b/Ryujinx.Core/OsHle/Horizon.cs
@@ -1,14 +1,14 @@
 using ChocolArm64.Memory;
-using Ryujinx.Loaders.Executables;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Utilities;
+using Ryujinx.Core.Loaders.Executables;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Utilities;
+using System;
 using System.Collections.Concurrent;
 using System.IO;
-using System;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
-    class Horizon
+    public class Horizon
     {
         internal const int HidSize  = 0x40000;
         internal const int FontSize = 0x50;
diff --git a/Ryujinx/OsHle/Ipc/IpcBuffDesc.cs b/Ryujinx.Core/OsHle/Ipc/IpcBuffDesc.cs
similarity index 95%
rename from Ryujinx/OsHle/Ipc/IpcBuffDesc.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcBuffDesc.cs
index 41b1efe0..01bb1539 100644
--- a/Ryujinx/OsHle/Ipc/IpcBuffDesc.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcBuffDesc.cs
@@ -1,6 +1,6 @@
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     struct IpcBuffDesc
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcDomCmd.cs b/Ryujinx.Core/OsHle/Ipc/IpcDomCmd.cs
similarity index 70%
rename from Ryujinx/OsHle/Ipc/IpcDomCmd.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcDomCmd.cs
index 03567185..1ef0c408 100644
--- a/Ryujinx/OsHle/Ipc/IpcDomCmd.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcDomCmd.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     enum IpcDomCmd
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcHandleDesc.cs b/Ryujinx.Core/OsHle/Ipc/IpcHandleDesc.cs
similarity index 98%
rename from Ryujinx/OsHle/Ipc/IpcHandleDesc.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcHandleDesc.cs
index fa5d7e1d..572c0e64 100644
--- a/Ryujinx/OsHle/Ipc/IpcHandleDesc.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcHandleDesc.cs
@@ -1,7 +1,7 @@
 using System;
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     class IpcHandleDesc
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcHandler.cs b/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
similarity index 98%
rename from Ryujinx/OsHle/Ipc/IpcHandler.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
index f1278914..deab8896 100644
--- a/Ryujinx/OsHle/Ipc/IpcHandler.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
@@ -1,12 +1,12 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Objects;
-using Ryujinx.OsHle.Services;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Objects;
+using Ryujinx.Core.OsHle.Services;
 using System;
 using System.Collections.Generic;
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     static class IpcHandler
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcMessage.cs b/Ryujinx.Core/OsHle/Ipc/IpcMessage.cs
similarity index 99%
rename from Ryujinx/OsHle/Ipc/IpcMessage.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcMessage.cs
index 407fd65f..3b38c451 100644
--- a/Ryujinx/OsHle/Ipc/IpcMessage.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcMessage.cs
@@ -1,7 +1,7 @@
 using System.Collections.Generic;
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     class IpcMessage
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcMessageType.cs b/Ryujinx.Core/OsHle/Ipc/IpcMessageType.cs
similarity index 79%
rename from Ryujinx/OsHle/Ipc/IpcMessageType.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcMessageType.cs
index b0e283de..8027508d 100644
--- a/Ryujinx/OsHle/Ipc/IpcMessageType.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcMessageType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     enum IpcMessageType
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcPtrBuffDesc.cs b/Ryujinx.Core/OsHle/Ipc/IpcPtrBuffDesc.cs
similarity index 95%
rename from Ryujinx/OsHle/Ipc/IpcPtrBuffDesc.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcPtrBuffDesc.cs
index 414d71f4..d39f78db 100644
--- a/Ryujinx/OsHle/Ipc/IpcPtrBuffDesc.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcPtrBuffDesc.cs
@@ -1,6 +1,6 @@
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     struct IpcPtrBuffDesc
     {
diff --git a/Ryujinx/OsHle/Ipc/IpcRecvListBuffDesc.cs b/Ryujinx.Core/OsHle/Ipc/IpcRecvListBuffDesc.cs
similarity index 92%
rename from Ryujinx/OsHle/Ipc/IpcRecvListBuffDesc.cs
rename to Ryujinx.Core/OsHle/Ipc/IpcRecvListBuffDesc.cs
index 8180b8dd..c647208f 100644
--- a/Ryujinx/OsHle/Ipc/IpcRecvListBuffDesc.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcRecvListBuffDesc.cs
@@ -1,6 +1,6 @@
 using System.IO;
 
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     struct IpcRecvListBuffDesc
     {
diff --git a/Ryujinx/OsHle/Ipc/ServiceProcessRequest.cs b/Ryujinx.Core/OsHle/Ipc/ServiceProcessRequest.cs
similarity index 65%
rename from Ryujinx/OsHle/Ipc/ServiceProcessRequest.cs
rename to Ryujinx.Core/OsHle/Ipc/ServiceProcessRequest.cs
index 838a6aea..ea758074 100644
--- a/Ryujinx/OsHle/Ipc/ServiceProcessRequest.cs
+++ b/Ryujinx.Core/OsHle/Ipc/ServiceProcessRequest.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Ipc
+namespace Ryujinx.Core.OsHle.Ipc
 {
     delegate long ServiceProcessRequest(ServiceCtx Context);
 }
\ No newline at end of file
diff --git a/Ryujinx/OsHle/MemoryInfo.cs b/Ryujinx.Core/OsHle/MemoryInfo.cs
similarity index 96%
rename from Ryujinx/OsHle/MemoryInfo.cs
rename to Ryujinx.Core/OsHle/MemoryInfo.cs
index 395ccf73..76a4bef3 100644
--- a/Ryujinx/OsHle/MemoryInfo.cs
+++ b/Ryujinx.Core/OsHle/MemoryInfo.cs
@@ -1,6 +1,6 @@
 using ChocolArm64.Memory;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
     struct MemoryInfo
     {
diff --git a/Ryujinx/OsHle/MemoryType.cs b/Ryujinx.Core/OsHle/MemoryType.cs
similarity index 96%
rename from Ryujinx/OsHle/MemoryType.cs
rename to Ryujinx.Core/OsHle/MemoryType.cs
index b1ac330a..d3b43dd5 100644
--- a/Ryujinx/OsHle/MemoryType.cs
+++ b/Ryujinx.Core/OsHle/MemoryType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
     enum MemoryType
     {
diff --git a/Ryujinx/OsHle/Mutex.cs b/Ryujinx.Core/OsHle/Mutex.cs
similarity index 97%
rename from Ryujinx/OsHle/Mutex.cs
rename to Ryujinx.Core/OsHle/Mutex.cs
index 43862d7b..c95ed771 100644
--- a/Ryujinx/OsHle/Mutex.cs
+++ b/Ryujinx.Core/OsHle/Mutex.cs
@@ -1,10 +1,10 @@
-using Ryujinx.OsHle.Handles;
+using Ryujinx.Core.OsHle.Handles;
 using System.Collections.Concurrent;
 using System.Threading;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
-    class Mutex
+    public class Mutex
     {
         private const int MutexHasListenersMask = 0x40000000;
 
diff --git a/Ryujinx/OsHle/Objects/Acc/IManagerForApplication.cs b/Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs
similarity index 91%
rename from Ryujinx/OsHle/Objects/Acc/IManagerForApplication.cs
rename to Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs
index 404ee7da..afbfab24 100644
--- a/Ryujinx/OsHle/Objects/Acc/IManagerForApplication.cs
+++ b/Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Acc
+namespace Ryujinx.Core.OsHle.Objects.Acc
 {
     class IManagerForApplication : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Acc/IProfile.cs b/Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs
similarity index 92%
rename from Ryujinx/OsHle/Objects/Acc/IProfile.cs
rename to Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs
index c84c7ae2..94d17183 100644
--- a/Ryujinx/OsHle/Objects/Acc/IProfile.cs
+++ b/Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Acc
+namespace Ryujinx.Core.OsHle.Objects.Acc
 {
     class IProfile : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IApplicationFunctions.cs b/Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs
similarity index 94%
rename from Ryujinx/OsHle/Objects/Am/IApplicationFunctions.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs
index 138d9084..939ad248 100644
--- a/Ryujinx/OsHle/Objects/Am/IApplicationFunctions.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs
@@ -1,10 +1,10 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 using System.IO;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IApplicationFunctions : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IApplicationProxy.cs b/Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs
similarity index 94%
rename from Ryujinx/OsHle/Objects/Am/IApplicationProxy.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs
index 3d692d6b..4a164daf 100644
--- a/Ryujinx/OsHle/Objects/Am/IApplicationProxy.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs
@@ -1,9 +1,9 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IApplicationProxy : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IAudioController.cs b/Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Am/IAudioController.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs
index 0ca49f89..c37042fd 100644
--- a/Ryujinx/OsHle/Objects/Am/IAudioController.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IAudioController : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/ICommonStateGetter.cs b/Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs
similarity index 96%
rename from Ryujinx/OsHle/Objects/Am/ICommonStateGetter.cs
rename to Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs
index 5a3af8e1..83d61fa6 100644
--- a/Ryujinx/OsHle/Objects/Am/ICommonStateGetter.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class ICommonStateGetter : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IDebugFunctions.cs b/Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Am/IDebugFunctions.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs
index dc57e8e6..d04d8363 100644
--- a/Ryujinx/OsHle/Objects/Am/IDebugFunctions.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IDebugFunctions : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IDisplayController.cs b/Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Am/IDisplayController.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs
index 88612086..9eafa70d 100644
--- a/Ryujinx/OsHle/Objects/Am/IDisplayController.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IDisplayController : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/ILibraryAppletCreator.cs b/Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs
similarity index 86%
rename from Ryujinx/OsHle/Objects/Am/ILibraryAppletCreator.cs
rename to Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs
index 91fae3dd..10e0f4f4 100644
--- a/Ryujinx/OsHle/Objects/Am/ILibraryAppletCreator.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class ILibraryAppletCreator : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IParentalControlService.cs b/Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs
similarity index 86%
rename from Ryujinx/OsHle/Objects/Am/IParentalControlService.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs
index c462ff07..1feacfa6 100644
--- a/Ryujinx/OsHle/Objects/Am/IParentalControlService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IParentalControlService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/ISelfController.cs b/Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs
similarity index 95%
rename from Ryujinx/OsHle/Objects/Am/ISelfController.cs
rename to Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs
index c46396c5..691bb202 100644
--- a/Ryujinx/OsHle/Objects/Am/ISelfController.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class ISelfController : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IStorage.cs b/Ryujinx.Core/OsHle/Objects/Am/IStorage.cs
similarity index 84%
rename from Ryujinx/OsHle/Objects/Am/IStorage.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IStorage.cs
index d5a7ee61..b30059ba 100644
--- a/Ryujinx/OsHle/Objects/Am/IStorage.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IStorage.cs
@@ -1,9 +1,9 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IStorage : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IStorageAccessor.cs b/Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs
similarity index 95%
rename from Ryujinx/OsHle/Objects/Am/IStorageAccessor.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs
index bcf0fc01..df260cc3 100644
--- a/Ryujinx/OsHle/Objects/Am/IStorageAccessor.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs
@@ -1,9 +1,9 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IStorageAccessor : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Am/IWindowController.cs b/Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs
similarity index 91%
rename from Ryujinx/OsHle/Objects/Am/IWindowController.cs
rename to Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs
index 1796644e..aa6e961e 100644
--- a/Ryujinx/OsHle/Objects/Am/IWindowController.cs
+++ b/Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.Objects.Am
 {
     class IWindowController : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Apm/ISession.cs b/Ryujinx.Core/OsHle/Objects/Apm/ISession.cs
similarity index 90%
rename from Ryujinx/OsHle/Objects/Apm/ISession.cs
rename to Ryujinx.Core/OsHle/Objects/Apm/ISession.cs
index f3965b48..3ab33005 100644
--- a/Ryujinx/OsHle/Objects/Apm/ISession.cs
+++ b/Ryujinx.Core/OsHle/Objects/Apm/ISession.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Apm
+namespace Ryujinx.Core.OsHle.Objects.Apm
 {
     class ISession : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Aud/IAudioOut.cs b/Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs
similarity index 98%
rename from Ryujinx/OsHle/Objects/Aud/IAudioOut.cs
rename to Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs
index 9e55e30e..061c6376 100644
--- a/Ryujinx/OsHle/Objects/Aud/IAudioOut.cs
+++ b/Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs
@@ -1,13 +1,13 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using OpenTK.Audio;
 using OpenTK.Audio.OpenAL;
 using System;
 using System.Collections.Generic;
 using System.IO;
 
-namespace Ryujinx.OsHle.Objects.Aud
+namespace Ryujinx.Core.OsHle.Objects.Aud
 {
     class IAudioOut : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Aud/IAudioRenderer.cs b/Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs
similarity index 95%
rename from Ryujinx/OsHle/Objects/Aud/IAudioRenderer.cs
rename to Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs
index a953d82a..05356477 100644
--- a/Ryujinx/OsHle/Objects/Aud/IAudioRenderer.cs
+++ b/Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Aud
+namespace Ryujinx.Core.OsHle.Objects.Aud
 {
     class IAudioRenderer : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Friend/IFriendService.cs b/Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Friend/IFriendService.cs
rename to Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs
index 41084f8d..e98e27ca 100644
--- a/Ryujinx/OsHle/Objects/Friend/IFriendService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Friend
+namespace Ryujinx.Core.OsHle.Objects.Friend
 {
     class IFriendService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/FspSrv/IDirectory.cs b/Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs
similarity index 98%
rename from Ryujinx/OsHle/Objects/FspSrv/IDirectory.cs
rename to Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs
index 82867451..88fce28e 100644
--- a/Ryujinx/OsHle/Objects/FspSrv/IDirectory.cs
+++ b/Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs
@@ -1,5 +1,5 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -7,7 +7,7 @@ using System.Linq;
 using System.Runtime.InteropServices;
 using System.Text;
 
-namespace Ryujinx.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.Objects.FspSrv
 {
     [StructLayout(LayoutKind.Sequential, Size = 0x310)]
     struct DirectoryEntry
diff --git a/Ryujinx/OsHle/Objects/FspSrv/IFile.cs b/Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs
similarity index 97%
rename from Ryujinx/OsHle/Objects/FspSrv/IFile.cs
rename to Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs
index 2f389990..95fbc650 100644
--- a/Ryujinx/OsHle/Objects/FspSrv/IFile.cs
+++ b/Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs
@@ -1,10 +1,10 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System;
 using System.Collections.Generic;
 using System.IO;
 
-namespace Ryujinx.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.Objects.FspSrv
 {
     class IFile : IIpcInterface, IDisposable
     {
diff --git a/Ryujinx/OsHle/Objects/FspSrv/IFileSystem.cs b/Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs
similarity index 98%
rename from Ryujinx/OsHle/Objects/FspSrv/IFileSystem.cs
rename to Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs
index c3edf271..68b15845 100644
--- a/Ryujinx/OsHle/Objects/FspSrv/IFileSystem.cs
+++ b/Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs
@@ -1,11 +1,11 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 using System.IO;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.Objects.FspSrv
 {
     class IFileSystem : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/FspSrv/IStorage.cs b/Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs
similarity index 94%
rename from Ryujinx/OsHle/Objects/FspSrv/IStorage.cs
rename to Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs
index 40fb87ca..4eca37e8 100644
--- a/Ryujinx/OsHle/Objects/FspSrv/IStorage.cs
+++ b/Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs
@@ -1,9 +1,9 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 using System.IO;
 
-namespace Ryujinx.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.Objects.FspSrv
 {
     class IStorage : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Hid/IAppletResource.cs b/Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs
similarity index 87%
rename from Ryujinx/OsHle/Objects/Hid/IAppletResource.cs
rename to Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs
index ac7ccf56..d6e8947b 100644
--- a/Ryujinx/OsHle/Objects/Hid/IAppletResource.cs
+++ b/Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Hid
+namespace Ryujinx.Core.OsHle.Objects.Hid
 {
     class IAppletResource : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/IIpcInterface.cs b/Ryujinx.Core/OsHle/Objects/IIpcInterface.cs
similarity index 69%
rename from Ryujinx/OsHle/Objects/IIpcInterface.cs
rename to Ryujinx.Core/OsHle/Objects/IIpcInterface.cs
index af0594cc..c57a0974 100644
--- a/Ryujinx/OsHle/Objects/IIpcInterface.cs
+++ b/Ryujinx.Core/OsHle/Objects/IIpcInterface.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects
+namespace Ryujinx.Core.OsHle.Objects
 {
     interface IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/ObjHelper.cs b/Ryujinx.Core/OsHle/Objects/ObjHelper.cs
similarity index 84%
rename from Ryujinx/OsHle/Objects/ObjHelper.cs
rename to Ryujinx.Core/OsHle/Objects/ObjHelper.cs
index bab22203..a151a287 100644
--- a/Ryujinx/OsHle/Objects/ObjHelper.cs
+++ b/Ryujinx.Core/OsHle/Objects/ObjHelper.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 
-namespace Ryujinx.OsHle.Objects
+namespace Ryujinx.Core.OsHle.Objects
 {
     static class ObjHelper
     {
diff --git a/Ryujinx/OsHle/Objects/Parcel.cs b/Ryujinx.Core/OsHle/Objects/Parcel.cs
similarity index 97%
rename from Ryujinx/OsHle/Objects/Parcel.cs
rename to Ryujinx.Core/OsHle/Objects/Parcel.cs
index 0d322bab..cd7179e1 100644
--- a/Ryujinx/OsHle/Objects/Parcel.cs
+++ b/Ryujinx.Core/OsHle/Objects/Parcel.cs
@@ -1,7 +1,7 @@
 using System;
 using System.IO;
 
-namespace Ryujinx.OsHle.Objects.Android
+namespace Ryujinx.Core.OsHle.Objects.Android
 {
     static class Parcel
     {
diff --git a/Ryujinx/OsHle/Objects/Time/ISteadyClock.cs b/Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Time/ISteadyClock.cs
rename to Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs
index a5139bab..1116b849 100644
--- a/Ryujinx/OsHle/Objects/Time/ISteadyClock.cs
+++ b/Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.Objects.Time
 {
     class ISteadyClock : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Time/ISystemClock.cs b/Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs
similarity index 93%
rename from Ryujinx/OsHle/Objects/Time/ISystemClock.cs
rename to Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs
index 1d9bae3b..3aa70691 100644
--- a/Ryujinx/OsHle/Objects/Time/ISystemClock.cs
+++ b/Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.Objects.Time
 {
     class ISystemClock : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Time/ITimeZoneService.cs b/Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs
similarity index 85%
rename from Ryujinx/OsHle/Objects/Time/ITimeZoneService.cs
rename to Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs
index 29e7ec92..c083628b 100644
--- a/Ryujinx/OsHle/Objects/Time/ITimeZoneService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.Objects.Time
 {
     class ITimeZoneService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Time/SystemClockType.cs b/Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs
similarity index 66%
rename from Ryujinx/OsHle/Objects/Time/SystemClockType.cs
rename to Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs
index ad9675aa..f447ca1c 100644
--- a/Ryujinx/OsHle/Objects/Time/SystemClockType.cs
+++ b/Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.Objects.Time
 {
     enum SystemClockType
     {
diff --git a/Ryujinx/OsHle/Objects/Vi/IApplicationDisplayService.cs b/Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs
similarity index 96%
rename from Ryujinx/OsHle/Objects/Vi/IApplicationDisplayService.cs
rename to Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs
index 4fa35928..b3ec0e90 100644
--- a/Ryujinx/OsHle/Objects/Vi/IApplicationDisplayService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs
@@ -1,13 +1,13 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 using System.IO;
 
-using static Ryujinx.OsHle.Objects.Android.Parcel;
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.Android.Parcel;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.Objects.Vi
 {
     class IApplicationDisplayService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Vi/IHOSBinderDriver.cs b/Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs
similarity index 97%
rename from Ryujinx/OsHle/Objects/Vi/IHOSBinderDriver.cs
rename to Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs
index 157d600f..cfd271e8 100644
--- a/Ryujinx/OsHle/Objects/Vi/IHOSBinderDriver.cs
+++ b/Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs
@@ -1,15 +1,15 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
-using Ryujinx.OsHle.Utilities;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Utilities;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
 
-using static Ryujinx.OsHle.Objects.Android.Parcel;
+using static Ryujinx.Core.OsHle.Objects.Android.Parcel;
 
-namespace Ryujinx.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.Objects.Vi
 {
     class IHOSBinderDriver : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Vi/IManagerDisplayService.cs b/Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs
similarity index 91%
rename from Ryujinx/OsHle/Objects/Vi/IManagerDisplayService.cs
rename to Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs
index c2bbf43b..f1b3cdd0 100644
--- a/Ryujinx/OsHle/Objects/Vi/IManagerDisplayService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.Objects.Vi
 {
     class IManagerDisplayService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Objects/Vi/ISystemDisplayService.cs b/Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs
similarity index 88%
rename from Ryujinx/OsHle/Objects/Vi/ISystemDisplayService.cs
rename to Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs
index 39d19786..4c83c25f 100644
--- a/Ryujinx/OsHle/Objects/Vi/ISystemDisplayService.cs
+++ b/Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.Objects.Vi
 {
     class ISystemDisplayService : IIpcInterface
     {
diff --git a/Ryujinx/OsHle/Process.cs b/Ryujinx.Core/OsHle/Process.cs
similarity index 96%
rename from Ryujinx/OsHle/Process.cs
rename to Ryujinx.Core/OsHle/Process.cs
index 4d07b94b..84267885 100644
--- a/Ryujinx/OsHle/Process.cs
+++ b/Ryujinx.Core/OsHle/Process.cs
@@ -1,19 +1,19 @@
 using ChocolArm64;
 using ChocolArm64.Memory;
 using ChocolArm64.State;
-using Ryujinx.Loaders;
-using Ryujinx.Loaders.Executables;
-using Ryujinx.OsHle.Exceptions;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Svc;
+using Ryujinx.Core.Loaders;
+using Ryujinx.Core.Loaders.Executables;
+using Ryujinx.Core.OsHle.Exceptions;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Svc;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Threading;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
-    class Process : IDisposable
+    public class Process : IDisposable
     {
         private const int  MaxStackSize  = 8 * 1024 * 1024;
 
diff --git a/Ryujinx/OsHle/ServiceCtx.cs b/Ryujinx.Core/OsHle/ServiceCtx.cs
similarity index 92%
rename from Ryujinx/OsHle/ServiceCtx.cs
rename to Ryujinx.Core/OsHle/ServiceCtx.cs
index 501d8d0f..31ecce3d 100644
--- a/Ryujinx/OsHle/ServiceCtx.cs
+++ b/Ryujinx.Core/OsHle/ServiceCtx.cs
@@ -1,9 +1,9 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using System.IO;
 
-namespace Ryujinx.OsHle
+namespace Ryujinx.Core.OsHle
 {
     class ServiceCtx
     {
diff --git a/Ryujinx/OsHle/Services/ServiceAcc.cs b/Ryujinx.Core/OsHle/Services/ServiceAcc.cs
similarity index 83%
rename from Ryujinx/OsHle/Services/ServiceAcc.cs
rename to Ryujinx.Core/OsHle/Services/ServiceAcc.cs
index 632fb41c..f25113e5 100644
--- a/Ryujinx/OsHle/Services/ServiceAcc.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceAcc.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Acc;
+using Ryujinx.Core.OsHle.Objects.Acc;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceApm.cs b/Ryujinx.Core/OsHle/Services/ServiceApm.cs
similarity index 61%
rename from Ryujinx/OsHle/Services/ServiceApm.cs
rename to Ryujinx.Core/OsHle/Services/ServiceApm.cs
index 81e68680..e1bc0d34 100644
--- a/Ryujinx/OsHle/Services/ServiceApm.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceApm.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Apm;
+using Ryujinx.Core.OsHle.Objects.Apm;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceAppletOE.cs b/Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs
similarity index 64%
rename from Ryujinx/OsHle/Services/ServiceAppletOE.cs
rename to Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs
index 9f2391df..bbb2484b 100644
--- a/Ryujinx/OsHle/Services/ServiceAppletOE.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Am;
+using Ryujinx.Core.OsHle.Objects.Am;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceAud.cs b/Ryujinx.Core/OsHle/Services/ServiceAud.cs
similarity index 94%
rename from Ryujinx/OsHle/Services/ServiceAud.cs
rename to Ryujinx.Core/OsHle/Services/ServiceAud.cs
index 6d1367cf..a8ba7dc0 100644
--- a/Ryujinx/OsHle/Services/ServiceAud.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceAud.cs
@@ -1,10 +1,10 @@
 using ChocolArm64.Memory;
-using Ryujinx.OsHle.Objects.Aud;
+using Ryujinx.Core.OsHle.Objects.Aud;
 using System.Text;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceFriend.cs b/Ryujinx.Core/OsHle/Services/ServiceFriend.cs
similarity index 62%
rename from Ryujinx/OsHle/Services/ServiceFriend.cs
rename to Ryujinx.Core/OsHle/Services/ServiceFriend.cs
index 10c23aae..d1229bd4 100644
--- a/Ryujinx/OsHle/Services/ServiceFriend.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceFriend.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Friend;
+using Ryujinx.Core.OsHle.Objects.Friend;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceFspSrv.cs b/Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs
similarity index 89%
rename from Ryujinx/OsHle/Services/ServiceFspSrv.cs
rename to Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs
index 17aa3bda..3fe41cf0 100644
--- a/Ryujinx/OsHle/Services/ServiceFspSrv.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.FspSrv;
+using Ryujinx.Core.OsHle.Objects.FspSrv;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceHid.cs b/Ryujinx.Core/OsHle/Services/ServiceHid.cs
similarity index 89%
rename from Ryujinx/OsHle/Services/ServiceHid.cs
rename to Ryujinx.Core/OsHle/Services/ServiceHid.cs
index 176c7842..4b2e82ff 100644
--- a/Ryujinx/OsHle/Services/ServiceHid.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceHid.cs
@@ -1,9 +1,9 @@
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Objects.Hid;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Objects.Hid;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceLm.cs b/Ryujinx.Core/OsHle/Services/ServiceLm.cs
similarity index 83%
rename from Ryujinx/OsHle/Services/ServiceLm.cs
rename to Ryujinx.Core/OsHle/Services/ServiceLm.cs
index dc6acad9..1fdde552 100644
--- a/Ryujinx/OsHle/Services/ServiceLm.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceLm.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceNvDrv.cs b/Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs
similarity index 96%
rename from Ryujinx/OsHle/Services/ServiceNvDrv.cs
rename to Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs
index 405eace2..6c5fdaed 100644
--- a/Ryujinx/OsHle/Services/ServiceNvDrv.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs
@@ -1,12 +1,12 @@
 using ChocolArm64.Memory;
-using Ryujinx.Gpu;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
-using Ryujinx.OsHle.Utilities;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Utilities;
+using Ryujinx.Graphics.Gpu;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
@@ -142,11 +142,11 @@ namespace Ryujinx.OsHle.Services
 
             if ((Flags & 1) != 0)
             {
-                Align = Context.Ns.Gpu.MemoryMgr.Reserve(Align, (long)Pages * PageSize, 1);
+                Align = Context.Ns.Gpu.ReserveMemory(Align, (long)Pages * PageSize, 1);
             }
             else
             {
-                Align = Context.Ns.Gpu.MemoryMgr.Reserve((long)Pages * PageSize, Align);
+                Align = Context.Ns.Gpu.ReserveMemory((long)Pages * PageSize, Align);
             }
 
             Context.Memory.WriteInt64(Position + 0x10, Align);
@@ -174,11 +174,11 @@ namespace Ryujinx.OsHle.Services
             {
                 if ((Flags & 1) != 0)
                 {
-                    Offset = Context.Ns.Gpu.MemoryMgr.Map(NvMap.Address, Offset, NvMap.Size);
+                    Offset = Context.Ns.Gpu.MapMemory(NvMap.Address, Offset, NvMap.Size);
                 }
                 else
                 {
-                    Offset = Context.Ns.Gpu.MemoryMgr.Map(NvMap.Address, NvMap.Size);
+                    Offset = Context.Ns.Gpu.MapMemory(NvMap.Address, NvMap.Size);
                 }
             }
 
@@ -417,7 +417,7 @@ namespace Ryujinx.OsHle.Services
 
                 int Size = (int)(GpFifoHdr >> 40) & 0x7ffffc;
 
-                long CpuAddr = Context.Ns.Gpu.MemoryMgr.GetCpuAddr(GpuAddr);
+                long CpuAddr = Context.Ns.Gpu.GetCpuAddr(GpuAddr);
 
                 if (CpuAddr != -1)
                 {
@@ -425,7 +425,7 @@ namespace Ryujinx.OsHle.Services
 
                     NsGpuPBEntry[] PushBuffer = NsGpuPBEntry.DecodePushBuffer(Data);
 
-                    Context.Ns.Gpu.PGraph.ProcessPushBuffer(PushBuffer, Context.Memory);
+                    Context.Ns.Gpu.ProcessPushBuffer(PushBuffer, Context.Memory);
                 }
             }
 
diff --git a/Ryujinx/OsHle/Services/ServicePctl.cs b/Ryujinx.Core/OsHle/Services/ServicePctl.cs
similarity index 63%
rename from Ryujinx/OsHle/Services/ServicePctl.cs
rename to Ryujinx.Core/OsHle/Services/ServicePctl.cs
index a0a5aaf3..9c4406bb 100644
--- a/Ryujinx/OsHle/Services/ServicePctl.cs
+++ b/Ryujinx.Core/OsHle/Services/ServicePctl.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Am;
+using Ryujinx.Core.OsHle.Objects.Am;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServicePl.cs b/Ryujinx.Core/OsHle/Services/ServicePl.cs
similarity index 91%
rename from Ryujinx/OsHle/Services/ServicePl.cs
rename to Ryujinx.Core/OsHle/Services/ServicePl.cs
index 6981637f..21e6741c 100644
--- a/Ryujinx/OsHle/Services/ServicePl.cs
+++ b/Ryujinx.Core/OsHle/Services/ServicePl.cs
@@ -1,6 +1,6 @@
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Ipc;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceSet.cs b/Ryujinx.Core/OsHle/Services/ServiceSet.cs
similarity index 95%
rename from Ryujinx/OsHle/Services/ServiceSet.cs
rename to Ryujinx.Core/OsHle/Services/ServiceSet.cs
index f98e8f0d..83ea5b2c 100644
--- a/Ryujinx/OsHle/Services/ServiceSet.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceSet.cs
@@ -1,6 +1,6 @@
 using ChocolArm64.Memory;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceSm.cs b/Ryujinx.Core/OsHle/Services/ServiceSm.cs
similarity index 91%
rename from Ryujinx/OsHle/Services/ServiceSm.cs
rename to Ryujinx.Core/OsHle/Services/ServiceSm.cs
index 8af3ed5e..58abed24 100644
--- a/Ryujinx/OsHle/Services/ServiceSm.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceSm.cs
@@ -1,7 +1,7 @@
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceTime.cs b/Ryujinx.Core/OsHle/Services/ServiceTime.cs
similarity index 88%
rename from Ryujinx/OsHle/Services/ServiceTime.cs
rename to Ryujinx.Core/OsHle/Services/ServiceTime.cs
index 8a32aabc..a5fddcba 100644
--- a/Ryujinx/OsHle/Services/ServiceTime.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceTime.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Time;
+using Ryujinx.Core.OsHle.Objects.Time;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Services/ServiceVi.cs b/Ryujinx.Core/OsHle/Services/ServiceVi.cs
similarity index 69%
rename from Ryujinx/OsHle/Services/ServiceVi.cs
rename to Ryujinx.Core/OsHle/Services/ServiceVi.cs
index 096bc18f..75cdc31b 100644
--- a/Ryujinx/OsHle/Services/ServiceVi.cs
+++ b/Ryujinx.Core/OsHle/Services/ServiceVi.cs
@@ -1,8 +1,8 @@
-using Ryujinx.OsHle.Objects.Vi;
+using Ryujinx.Core.OsHle.Objects.Vi;
 
-using static Ryujinx.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.Objects.ObjHelper;
 
-namespace Ryujinx.OsHle.Services
+namespace Ryujinx.Core.OsHle.Services
 {
     static partial class Service
     {
diff --git a/Ryujinx/OsHle/Svc/SvcHandler.cs b/Ryujinx.Core/OsHle/Svc/SvcHandler.cs
similarity index 98%
rename from Ryujinx/OsHle/Svc/SvcHandler.cs
rename to Ryujinx.Core/OsHle/Svc/SvcHandler.cs
index 3ab89d44..60af1e11 100644
--- a/Ryujinx/OsHle/Svc/SvcHandler.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcHandler.cs
@@ -3,7 +3,7 @@ using ChocolArm64.State;
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
     {
diff --git a/Ryujinx/OsHle/Svc/SvcMemory.cs b/Ryujinx.Core/OsHle/Svc/SvcMemory.cs
similarity index 98%
rename from Ryujinx/OsHle/Svc/SvcMemory.cs
rename to Ryujinx.Core/OsHle/Svc/SvcMemory.cs
index fa91397c..7528f4e0 100644
--- a/Ryujinx/OsHle/Svc/SvcMemory.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcMemory.cs
@@ -1,8 +1,8 @@
 using ChocolArm64.Memory;
 using ChocolArm64.State;
-using Ryujinx.OsHle.Handles;
+using Ryujinx.Core.OsHle.Handles;
 
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
     {
diff --git a/Ryujinx/OsHle/Svc/SvcResult.cs b/Ryujinx.Core/OsHle/Svc/SvcResult.cs
similarity index 84%
rename from Ryujinx/OsHle/Svc/SvcResult.cs
rename to Ryujinx.Core/OsHle/Svc/SvcResult.cs
index 4f0c4f1f..a5be9a94 100644
--- a/Ryujinx/OsHle/Svc/SvcResult.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcResult.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     enum SvcResult
     {
diff --git a/Ryujinx/OsHle/Svc/SvcSystem.cs b/Ryujinx.Core/OsHle/Svc/SvcSystem.cs
similarity index 98%
rename from Ryujinx/OsHle/Svc/SvcSystem.cs
rename to Ryujinx.Core/OsHle/Svc/SvcSystem.cs
index 0570ccb0..7f593c8f 100644
--- a/Ryujinx/OsHle/Svc/SvcSystem.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcSystem.cs
@@ -1,12 +1,12 @@
 using ChocolArm64.Memory;
 using ChocolArm64.State;
-using Ryujinx.OsHle.Exceptions;
-using Ryujinx.OsHle.Handles;
-using Ryujinx.OsHle.Ipc;
+using Ryujinx.Core.OsHle.Exceptions;
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
 using System;
 using System.Threading;
 
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
     {
diff --git a/Ryujinx/OsHle/Svc/SvcThread.cs b/Ryujinx.Core/OsHle/Svc/SvcThread.cs
similarity index 97%
rename from Ryujinx/OsHle/Svc/SvcThread.cs
rename to Ryujinx.Core/OsHle/Svc/SvcThread.cs
index cc2bbb1e..a635edb1 100644
--- a/Ryujinx/OsHle/Svc/SvcThread.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcThread.cs
@@ -1,7 +1,7 @@
 using ChocolArm64.State;
-using Ryujinx.OsHle.Handles;
+using Ryujinx.Core.OsHle.Handles;
 
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
     {
diff --git a/Ryujinx/OsHle/Svc/SvcThreadSync.cs b/Ryujinx.Core/OsHle/Svc/SvcThreadSync.cs
similarity index 97%
rename from Ryujinx/OsHle/Svc/SvcThreadSync.cs
rename to Ryujinx.Core/OsHle/Svc/SvcThreadSync.cs
index f342f51d..dec13f75 100644
--- a/Ryujinx/OsHle/Svc/SvcThreadSync.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcThreadSync.cs
@@ -1,7 +1,7 @@
 using ChocolArm64.State;
-using Ryujinx.OsHle.Handles;
+using Ryujinx.Core.OsHle.Handles;
 
-namespace Ryujinx.OsHle.Svc
+namespace Ryujinx.Core.OsHle.Svc
 {
     partial class SvcHandler
     {
diff --git a/Ryujinx/OsHle/Utilities/IdPool.cs b/Ryujinx.Core/OsHle/Utilities/IdPool.cs
similarity index 96%
rename from Ryujinx/OsHle/Utilities/IdPool.cs
rename to Ryujinx.Core/OsHle/Utilities/IdPool.cs
index 836d6310..a7e181fa 100644
--- a/Ryujinx/OsHle/Utilities/IdPool.cs
+++ b/Ryujinx.Core/OsHle/Utilities/IdPool.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Utilities
+namespace Ryujinx.Core.OsHle.Utilities
 {
     class IdPool
     {
diff --git a/Ryujinx/OsHle/Utilities/IdPoolWithObj.cs b/Ryujinx.Core/OsHle/Utilities/IdPoolWithObj.cs
similarity index 97%
rename from Ryujinx/OsHle/Utilities/IdPoolWithObj.cs
rename to Ryujinx.Core/OsHle/Utilities/IdPoolWithObj.cs
index 621466a8..f0a339df 100644
--- a/Ryujinx/OsHle/Utilities/IdPoolWithObj.cs
+++ b/Ryujinx.Core/OsHle/Utilities/IdPoolWithObj.cs
@@ -3,7 +3,7 @@ using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 
-namespace Ryujinx.OsHle.Utilities
+namespace Ryujinx.Core.OsHle.Utilities
 {
     class IdPoolWithObj : IEnumerable<KeyValuePair<int, object>>
     {
diff --git a/Ryujinx/OsHle/Utilities/MemReader.cs b/Ryujinx.Core/OsHle/Utilities/MemReader.cs
similarity index 95%
rename from Ryujinx/OsHle/Utilities/MemReader.cs
rename to Ryujinx.Core/OsHle/Utilities/MemReader.cs
index 9868293a..fe92f68f 100644
--- a/Ryujinx/OsHle/Utilities/MemReader.cs
+++ b/Ryujinx.Core/OsHle/Utilities/MemReader.cs
@@ -1,6 +1,6 @@
 using ChocolArm64.Memory;
 
-namespace Ryujinx.OsHle.Utilities
+namespace Ryujinx.Core.OsHle.Utilities
 {
     class MemReader
     {
diff --git a/Ryujinx/OsHle/Utilities/MemWriter.cs b/Ryujinx.Core/OsHle/Utilities/MemWriter.cs
similarity index 94%
rename from Ryujinx/OsHle/Utilities/MemWriter.cs
rename to Ryujinx.Core/OsHle/Utilities/MemWriter.cs
index 041b0a97..21b6a3b6 100644
--- a/Ryujinx/OsHle/Utilities/MemWriter.cs
+++ b/Ryujinx.Core/OsHle/Utilities/MemWriter.cs
@@ -1,6 +1,6 @@
 using ChocolArm64.Memory;
 
-namespace Ryujinx.OsHle.Utilities
+namespace Ryujinx.Core.OsHle.Utilities
 {
     class MemWriter
     {
diff --git a/Ryujinx.Core/Ryujinx.Core.csproj b/Ryujinx.Core/Ryujinx.Core.csproj
new file mode 100644
index 00000000..7d5ad718
--- /dev/null
+++ b/Ryujinx.Core/Ryujinx.Core.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" />
+    <ProjectReference Include="..\Ryujinx.Graphics\Ryujinx.Graphics.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Ryujinx/Switch.cs b/Ryujinx.Core/Switch.cs
similarity index 54%
rename from Ryujinx/Switch.cs
rename to Ryujinx.Core/Switch.cs
index 4022061b..2b6a9045 100644
--- a/Ryujinx/Switch.cs
+++ b/Ryujinx.Core/Switch.cs
@@ -1,11 +1,11 @@
 using ChocolArm64.Memory;
-using Gal;
-using Ryujinx.Gpu;
-using Ryujinx.OsHle;
+using Ryujinx.Core.OsHle;
+using Ryujinx.Graphics.Gal;
+using Ryujinx.Graphics.Gpu;
 using System;
 using System.Runtime.InteropServices;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     public class Switch : IDisposable
     {
@@ -28,6 +28,30 @@ namespace Ryujinx
             Hid = new Hid(this);
         }
 
+        public void FinalizeAllProcesses()
+        {
+            Os.FinalizeAllProcesses();
+        }
+
+        public void LoadCart(string ExeFsDir, string RomFsFile = null)
+        {
+            Os.LoadCart(ExeFsDir, RomFsFile);
+        }
+
+        public void LoadProgram(string FileName)
+        {
+            Os.LoadProgram(FileName);
+        }
+
+        public void SendControllerButtons(HidControllerID ControllerId,
+                                          HidControllerLayouts Layout,
+                                          HidControllerKeys Buttons,
+                                          JoystickPosition LeftJoystick,
+                                          JoystickPosition RightJoystick)
+        {
+            Hid.SendControllerButtons(ControllerId, Layout, Buttons, LeftJoystick, RightJoystick);
+        }
+
         internal virtual void OnFinish(EventArgs e)
         {
             Finish?.Invoke(this, e);
diff --git a/Ryujinx/VirtualFs.cs b/Ryujinx.Core/VirtualFs.cs
similarity index 98%
rename from Ryujinx/VirtualFs.cs
rename to Ryujinx.Core/VirtualFs.cs
index 98298053..23c7285c 100644
--- a/Ryujinx/VirtualFs.cs
+++ b/Ryujinx.Core/VirtualFs.cs
@@ -1,7 +1,7 @@
 using System;
 using System.IO;
 
-namespace Ryujinx
+namespace Ryujinx.Core
 {
     class VirtualFs : IDisposable
     {
diff --git a/Ryujinx/Gal/GalPrimitiveType.cs b/Ryujinx.Graphics/Gal/GalPrimitiveType.cs
similarity index 95%
rename from Ryujinx/Gal/GalPrimitiveType.cs
rename to Ryujinx.Graphics/Gal/GalPrimitiveType.cs
index 7b6d99a0..ce084149 100644
--- a/Ryujinx/Gal/GalPrimitiveType.cs
+++ b/Ryujinx.Graphics/Gal/GalPrimitiveType.cs
@@ -1,4 +1,4 @@
-namespace Gal
+namespace Ryujinx.Graphics.Gal
 {
     public enum GalPrimitiveType
     {
diff --git a/Ryujinx/Gal/GalVertexAttrib.cs b/Ryujinx.Graphics/Gal/GalVertexAttrib.cs
similarity index 96%
rename from Ryujinx/Gal/GalVertexAttrib.cs
rename to Ryujinx.Graphics/Gal/GalVertexAttrib.cs
index bbc32633..dc38c593 100644
--- a/Ryujinx/Gal/GalVertexAttrib.cs
+++ b/Ryujinx.Graphics/Gal/GalVertexAttrib.cs
@@ -1,4 +1,4 @@
-namespace Gal
+namespace Ryujinx.Graphics.Gal
 {
     public struct GalVertexAttrib
     {
diff --git a/Ryujinx/Gal/GalVertexAttribSize.cs b/Ryujinx.Graphics/Gal/GalVertexAttribSize.cs
similarity index 93%
rename from Ryujinx/Gal/GalVertexAttribSize.cs
rename to Ryujinx.Graphics/Gal/GalVertexAttribSize.cs
index 11f0470c..d3ce60ac 100644
--- a/Ryujinx/Gal/GalVertexAttribSize.cs
+++ b/Ryujinx.Graphics/Gal/GalVertexAttribSize.cs
@@ -1,4 +1,4 @@
-namespace Gal
+namespace Ryujinx.Graphics.Gal
 {
     public enum GalVertexAttribSize
     {
diff --git a/Ryujinx/Gal/GalVertexAttribType.cs b/Ryujinx.Graphics/Gal/GalVertexAttribType.cs
similarity index 86%
rename from Ryujinx/Gal/GalVertexAttribType.cs
rename to Ryujinx.Graphics/Gal/GalVertexAttribType.cs
index c0ed59fb..358836fd 100644
--- a/Ryujinx/Gal/GalVertexAttribType.cs
+++ b/Ryujinx.Graphics/Gal/GalVertexAttribType.cs
@@ -1,4 +1,4 @@
-namespace Gal
+namespace Ryujinx.Graphics.Gal
 {
     public enum GalVertexAttribType
     {
diff --git a/Ryujinx/Gal/IGalRenderer.cs b/Ryujinx.Graphics/Gal/IGalRenderer.cs
similarity index 93%
rename from Ryujinx/Gal/IGalRenderer.cs
rename to Ryujinx.Graphics/Gal/IGalRenderer.cs
index 306d0d51..1870aca5 100644
--- a/Ryujinx/Gal/IGalRenderer.cs
+++ b/Ryujinx.Graphics/Gal/IGalRenderer.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Gal
+namespace Ryujinx.Graphics.Gal
 {
     public interface IGalRenderer
     {
diff --git a/Ryujinx/Gal/OpenGL/OpenGLRenderer.cs b/Ryujinx.Graphics/Gal/OpenGL/OpenGLRenderer.cs
similarity index 99%
rename from Ryujinx/Gal/OpenGL/OpenGLRenderer.cs
rename to Ryujinx.Graphics/Gal/OpenGL/OpenGLRenderer.cs
index 72ad6f70..7429569b 100644
--- a/Ryujinx/Gal/OpenGL/OpenGLRenderer.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OpenGLRenderer.cs
@@ -2,7 +2,7 @@ using OpenTK.Graphics.OpenGL;
 using System;
 using System.Collections.Generic;
 
-namespace Gal.OpenGL
+namespace Ryujinx.Graphics.Gal.OpenGL
 {
     public class OpenGLRenderer : IGalRenderer
     {
diff --git a/Ryujinx/Gpu/BCn.cs b/Ryujinx.Graphics/Gpu/BCn.cs
similarity index 99%
rename from Ryujinx/Gpu/BCn.cs
rename to Ryujinx.Graphics/Gpu/BCn.cs
index bf782d16..b1caf467 100644
--- a/Ryujinx/Gpu/BCn.cs
+++ b/Ryujinx.Graphics/Gpu/BCn.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Drawing;
 
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     static class BCn
     {
diff --git a/Ryujinx.Graphics/Gpu/NsGpu.cs b/Ryujinx.Graphics/Gpu/NsGpu.cs
new file mode 100644
index 00000000..133d0af2
--- /dev/null
+++ b/Ryujinx.Graphics/Gpu/NsGpu.cs
@@ -0,0 +1,53 @@
+using ChocolArm64.Memory;
+using Ryujinx.Graphics.Gal;
+
+namespace Ryujinx.Graphics.Gpu
+{
+    public class NsGpu
+    {
+        public IGalRenderer Renderer { get; private set; }
+
+        internal NsGpuMemoryMgr MemoryMgr { get; private set; }
+
+        internal NsGpuPGraph PGraph { get; private set; }
+
+        public NsGpu(IGalRenderer Renderer)
+        {
+            this.Renderer = Renderer;
+
+            MemoryMgr = new NsGpuMemoryMgr();
+
+            PGraph = new NsGpuPGraph(this);
+        }
+
+        public long GetCpuAddr(long Position)
+        {
+            return MemoryMgr.GetCpuAddr(Position);
+        }
+
+        public long MapMemory(long CpuAddr, long Size)
+        {
+            return MemoryMgr.Map(CpuAddr, Size);
+        }
+
+        public long MapMemory(long CpuAddr, long GpuAddr, long Size)
+        {
+            return MemoryMgr.Map(CpuAddr, GpuAddr, Size);
+        }
+
+        public void ProcessPushBuffer(NsGpuPBEntry[] PushBuffer, AMemory Memory)
+        {
+            PGraph.ProcessPushBuffer(PushBuffer, Memory);
+        }
+
+        public long ReserveMemory(long Size, long Align)
+        {
+            return MemoryMgr.Reserve(Size, Align);
+        }
+
+        public long ReserveMemory(long GpuAddr, long Size, long Align)
+        {
+            return MemoryMgr.Reserve(GpuAddr, Size, Align);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Ryujinx/Gpu/NsGpuEngine.cs b/Ryujinx.Graphics/Gpu/NsGpuEngine.cs
similarity index 87%
rename from Ryujinx/Gpu/NsGpuEngine.cs
rename to Ryujinx.Graphics/Gpu/NsGpuEngine.cs
index bf104569..118e2b72 100644
--- a/Ryujinx/Gpu/NsGpuEngine.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuEngine.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     enum NsGpuEngine
     {
diff --git a/Ryujinx/Gpu/NsGpuMemoryMgr.cs b/Ryujinx.Graphics/Gpu/NsGpuMemoryMgr.cs
similarity index 99%
rename from Ryujinx/Gpu/NsGpuMemoryMgr.cs
rename to Ryujinx.Graphics/Gpu/NsGpuMemoryMgr.cs
index 563a5c09..54fabc67 100644
--- a/Ryujinx/Gpu/NsGpuMemoryMgr.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuMemoryMgr.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     class NsGpuMemoryMgr
     {
diff --git a/Ryujinx/Gpu/NsGpuPBEntry.cs b/Ryujinx.Graphics/Gpu/NsGpuPBEntry.cs
similarity index 97%
rename from Ryujinx/Gpu/NsGpuPBEntry.cs
rename to Ryujinx.Graphics/Gpu/NsGpuPBEntry.cs
index 226a7f61..8063651a 100644
--- a/Ryujinx/Gpu/NsGpuPBEntry.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuPBEntry.cs
@@ -3,9 +3,9 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.IO;
 
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
-    struct NsGpuPBEntry
+    public struct NsGpuPBEntry
     {
         public NsGpuRegister Register { get; private set; }
 
diff --git a/Ryujinx/Gpu/NsGpuPGraph.cs b/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs
similarity index 99%
rename from Ryujinx/Gpu/NsGpuPGraph.cs
rename to Ryujinx.Graphics/Gpu/NsGpuPGraph.cs
index e40b6283..eb893f74 100644
--- a/Ryujinx/Gpu/NsGpuPGraph.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuPGraph.cs
@@ -1,8 +1,8 @@
 using ChocolArm64.Memory;
-using Gal;
+using Ryujinx.Graphics.Gal;
 using System.Collections.Generic;
 
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     class NsGpuPGraph
     {
diff --git a/Ryujinx/Gpu/NsGpuRegister.cs b/Ryujinx.Graphics/Gpu/NsGpuRegister.cs
similarity index 98%
rename from Ryujinx/Gpu/NsGpuRegister.cs
rename to Ryujinx.Graphics/Gpu/NsGpuRegister.cs
index 740ca9fe..319e2c01 100644
--- a/Ryujinx/Gpu/NsGpuRegister.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuRegister.cs
@@ -1,6 +1,6 @@
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
-    enum NsGpuRegister
+    public enum NsGpuRegister
     {
         BindChannel               = 0,
 
diff --git a/Ryujinx/Gpu/NsGpuTexture.cs b/Ryujinx.Graphics/Gpu/NsGpuTexture.cs
similarity index 79%
rename from Ryujinx/Gpu/NsGpuTexture.cs
rename to Ryujinx.Graphics/Gpu/NsGpuTexture.cs
index 26500c04..aac42200 100644
--- a/Ryujinx/Gpu/NsGpuTexture.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuTexture.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     struct NsGpuTexture
     {
diff --git a/Ryujinx/Gpu/NsGpuTextureFormat.cs b/Ryujinx.Graphics/Gpu/NsGpuTextureFormat.cs
similarity index 76%
rename from Ryujinx/Gpu/NsGpuTextureFormat.cs
rename to Ryujinx.Graphics/Gpu/NsGpuTextureFormat.cs
index 9bb12281..2993840b 100644
--- a/Ryujinx/Gpu/NsGpuTextureFormat.cs
+++ b/Ryujinx.Graphics/Gpu/NsGpuTextureFormat.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     enum NsGpuTextureFormat
     {
diff --git a/Ryujinx/Gpu/SwizzleAddr.cs b/Ryujinx.Graphics/Gpu/SwizzleAddr.cs
similarity index 99%
rename from Ryujinx/Gpu/SwizzleAddr.cs
rename to Ryujinx.Graphics/Gpu/SwizzleAddr.cs
index 5ad35a53..08e61eb5 100644
--- a/Ryujinx/Gpu/SwizzleAddr.cs
+++ b/Ryujinx.Graphics/Gpu/SwizzleAddr.cs
@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.Gpu
+namespace Ryujinx.Graphics.Gpu
 {
     class SwizzleAddr
     {
diff --git a/Ryujinx.Graphics/Ryujinx.Graphics.csproj b/Ryujinx.Graphics/Ryujinx.Graphics.csproj
new file mode 100644
index 00000000..657beb82
--- /dev/null
+++ b/Ryujinx.Graphics/Ryujinx.Graphics.csproj
@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="OpenTK.NETCore" Version="1.1.2749.6433" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Ryujinx.sln b/Ryujinx.sln
index 77753988..34a5f488 100644
--- a/Ryujinx.sln
+++ b/Ryujinx.sln
@@ -1,11 +1,17 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.26730.8
+VisualStudioVersion = 15.0.27130.2027
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx", "Ryujinx\Ryujinx.csproj", "{074045D4-3ED2-4711-9169-E385F2BFB5A0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "Ryujinx\Ryujinx.csproj", "{074045D4-3ED2-4711-9169-E385F2BFB5A0}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Tests", "Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Core", "Ryujinx.Core\Ryujinx.Core.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChocolArm64", "ChocolArm64\ChocolArm64.csproj", "{2345A1A7-8DEF-419B-9AFB-4DFD41D20D05}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics", "Ryujinx.Graphics\Ryujinx.Graphics.csproj", "{EAAE36AF-7781-4578-A7E0-F0EFD2025569}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -21,6 +27,18 @@ Global
 		{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2345A1A7-8DEF-419B-9AFB-4DFD41D20D05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2345A1A7-8DEF-419B-9AFB-4DFD41D20D05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2345A1A7-8DEF-419B-9AFB-4DFD41D20D05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2345A1A7-8DEF-419B-9AFB-4DFD41D20D05}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EAAE36AF-7781-4578-A7E0-F0EFD2025569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EAAE36AF-7781-4578-A7E0-F0EFD2025569}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EAAE36AF-7781-4578-A7E0-F0EFD2025569}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EAAE36AF-7781-4578-A7E0-F0EFD2025569}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/Ryujinx/Gpu/NsGpu.cs b/Ryujinx/Gpu/NsGpu.cs
deleted file mode 100644
index 6aa7332c..00000000
--- a/Ryujinx/Gpu/NsGpu.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Gal;
-
-namespace Ryujinx.Gpu
-{
-    class NsGpu
-    {
-        public IGalRenderer Renderer { get; private set; }
-
-        public NsGpuMemoryMgr MemoryMgr { get; private set; }
-
-        public NsGpuPGraph PGraph { get; private set; }
-
-        public NsGpu(IGalRenderer Renderer)
-        {
-            this.Renderer = Renderer;
-
-            MemoryMgr = new NsGpuMemoryMgr();
-
-            PGraph = new NsGpuPGraph(this);
-        }
-    }
-}
\ No newline at end of file
diff --git a/Ryujinx/OsHle/Handles/HEvent.cs b/Ryujinx/OsHle/Handles/HEvent.cs
deleted file mode 100644
index d9d0ff4c..00000000
--- a/Ryujinx/OsHle/Handles/HEvent.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Ryujinx.OsHle.Handles
-{
-    class HEvent
-    {
-
-    }
-}
\ No newline at end of file
diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj
index 9b0e7396..bc5dbe04 100644
--- a/Ryujinx/Ryujinx.csproj
+++ b/Ryujinx/Ryujinx.csproj
@@ -9,6 +9,11 @@
     <PackageReference Include="OpenTK.NETCore" Version="1.1.2749.6433" />
     <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.4.0" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" />
+    <ProjectReference Include="..\Ryujinx.Core\Ryujinx.Core.csproj" />
+    <ProjectReference Include="..\Ryujinx.Graphics\Ryujinx.Graphics.csproj" />
+  </ItemGroup>
   <ItemGroup>
     <None Update="Ryujinx.conf">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
diff --git a/Ryujinx/Ui/GLScreen.cs b/Ryujinx/Ui/GLScreen.cs
index 8101648e..9c05953b 100644
--- a/Ryujinx/Ui/GLScreen.cs
+++ b/Ryujinx/Ui/GLScreen.cs
@@ -2,10 +2,11 @@
 // to the Public Domain.
 // It is provided "as is" without express or implied warranty of any kind.
 
-using Gal;
 using OpenTK;
 using OpenTK.Graphics;
 using OpenTK.Graphics.OpenGL;
+using Ryujinx.Core;
+using Ryujinx.Graphics.Gal;
 using System;
 
 namespace Ryujinx
@@ -346,7 +347,7 @@ void main(void) {
             };
 
             //We just need one pair of JoyCon because it's emulate by the keyboard.
-            Ns.Hid.SendControllerButtons(HidControllerID.CONTROLLER_HANDHELD, HidControllerLayouts.Main, CurrentButton, LeftJoystick, RightJoystick);
+            Ns.SendControllerButtons(HidControllerID.CONTROLLER_HANDHELD, HidControllerLayouts.Main, CurrentButton, LeftJoystick, RightJoystick);
         }
 
         protected override void OnRenderFrame(FrameEventArgs e)
diff --git a/Ryujinx/Ui/Program.cs b/Ryujinx/Ui/Program.cs
index 2f29411a..7912147e 100644
--- a/Ryujinx/Ui/Program.cs
+++ b/Ryujinx/Ui/Program.cs
@@ -1,5 +1,6 @@
-using Gal;
-using Gal.OpenGL;
+using Ryujinx.Core;
+using Ryujinx.Graphics.Gal;
+using Ryujinx.Graphics.Gal.OpenGL;
 using System;
 using System.IO;
 
@@ -27,20 +28,20 @@ namespace Ryujinx
                     {
                         Logging.Info("Loading as cart with RomFS.");
 
-                        Ns.Os.LoadCart(args[0], RomFsFiles[0]);
+                        Ns.LoadCart(args[0], RomFsFiles[0]);
                     }
                     else
                     {
                         Logging.Info("Loading as cart WITHOUT RomFS.");
 
-                        Ns.Os.LoadCart(args[0]);
+                        Ns.LoadCart(args[0]);
                     }
                 }
                 else if (File.Exists(args[0]))
                 {
                     Logging.Info("Loading as homebrew.");
 
-                    Ns.Os.LoadProgram(args[0]);
+                    Ns.LoadProgram(args[0]);
                 }
             }
             else
@@ -58,7 +59,7 @@ namespace Ryujinx
                 Screen.Run(60.0);
             }
 
-            Ns.Os.FinalizeAllProcesses();
+            Ns.FinalizeAllProcesses();
 
             Ns.Dispose();
         }