summaryrefslogtreecommitdiffstats
path: root/src/core/core.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Core/Common: Address Feedback.Fernando Sahmkow2020-06-281-1/+1
|
* Services/NvFlinger: Do vSync in a sepparate thread on Multicore.Fernando Sahmkow2020-06-271-2/+6
|
* Core: Split Microprofile Dynarmic timing per CoreFernando Sahmkow2020-06-271-3/+12
|
* General: Correct rebase, sync gpu and context management.Fernando Sahmkow2020-06-271-2/+1
|
* General: Move ARM_Interface into Threads.Fernando Sahmkow2020-06-271-19/+15
|
* SingleCore: Move Host Timing from a sepparate thread to main cpu thread.Fernando Sahmkow2020-06-271-0/+2
|
* GUI: Make multicore only work with Async and add GUI for multicore.Fernando Sahmkow2020-06-271-2/+9
|
* General: Fix microprofile on dynarmic/svc, fix wait tree showing which threads were running.Fernando Sahmkow2020-06-271-0/+15
|
* General: Initial Setup for Single Core.Fernando Sahmkow2020-06-271-0/+3
|
* SVC: Correct GetThreadPriority, SetThreadPriority, GetThreadCoreMask, SetThreadCoreMask, GetCurrentProcessorNumberFernando Sahmkow2020-06-271-0/+8
|
* HostTiming: Pause the hardware clock on pause.Fernando Sahmkow2020-06-271-1/+1
|
* General: Recover Prometheus project from harddrive failure Fernando Sahmkow2020-06-271-27/+30
| | | | | | | This commit: Implements CPU Interrupts, Replaces Cycle Timing for Host Timing, Reworks the Kernel's Scheduler, Introduce Idle State and Suspended State, Recreates the bootmanager, Initializes Multicore system.
* core: system: Rename GetDeviceManager -> DeviceManager.bunnei2020-04-171-4/+4
| | | | - More consistent with other system components.
* core: Construct/Destruct DeviceMemory on Init/Shutdown.bunnei2020-04-171-4/+7
|
* core: device_manager: Add a simple class to manage device RAM.bunnei2020-04-171-1/+11
|
* core: memory: Move to Core::Memory namespace.bunnei2020-04-171-2/+2
| | | | - helpful to disambiguate Kernel::Memory namespace.
* Merge pull request #3552 from jroweboy/single-contextRodrigo Locatti2020-04-021-16/+6
|\ | | | | Refactor Context management (Fixes renderdoc on opengl issues)
| * Address review and fix broken yuzu-tester buildJames Rowe2020-03-261-1/+3
| |
| * Frontend/GPU: Refactor context managementJames Rowe2020-03-251-16/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes the GraphicsContext to be managed by the GPU core. This eliminates the need for the frontends to fool around with tricky MakeCurrent/DoneCurrent calls that are dependent on the settings (such as async gpu option). This also refactors out the need to use QWidget::fromWindowContainer as that caused issues with focus and input handling. Now we use a regular QWidget and just access the native windowHandle() directly. Another change is removing the debug tool setting in FrameMailbox. Instead of trying to block the frontend until a new frame is ready, the core will now take over presentation and draw directly to the window if the renderer detects that its hooked by NSight or RenderDoc Lastly, since it was in the way, I removed ScopeAcquireWindowContext and replaced it with a simple subclass in GraphicsContext that achieves the same result
* | gdbstub: Ensure gdbstub doesn't drop packets crucial to initializationGauvain "GovanifY" Roussel-Tarbouriech2020-03-171-1/+1
|/
* video_core: Reintroduce dirty flags infrastructureReinUsesLisp2020-02-281-0/+1
|
* core: frontend: Refactor scope_acquire_window_context to scope_acquire_context.bunnei2020-02-261-0/+3
|
* System: Expose Host thread registering routines from kernel.Fernando Sahmkow2020-02-221-0/+8
|
* Merge pull request #3337 from ReinUsesLisp/vulkan-stagedbunnei2020-02-031-1/+3
|\ | | | | yuzu: Implement Vulkan frontend
| * core: Only wait for idle on gpu_core when it was initializedReinUsesLisp2020-01-291-1/+3
| | | | | | | | This fixes crashes when a Vulkan device fails to initialize.
* | System: Address FeedbackFernando Sahmkow2020-01-271-2/+2
| |
* | System: Correct PrepareReschedule.Fernando Sahmkow2020-01-261-1/+1
| |
* | Core: Refactor CpuCoreManager to CpuManager and Cpu to Core Manager.Fernando Sahmkow2020-01-261-23/+21
| | | | | | | | This commit instends on better naming the new purpose of this classes.
* | Core: Refactor CPU Management.Fernando Sahmkow2020-01-251-13/+22
|/ | | | This commit moves ARM Interface and Scheduler handling into the kernel.
* yuzu: Remove Maxwell debuggerReinUsesLisp2020-01-031-10/+0
| | | | | This was carried from Citra and wasn't really used on yuzu. It also adds some runtime overhead. This commit removes it from yuzu's codebase.
* core/memory: Introduce skeleton of Memory classLioncash2019-11-271-3/+13
| | | | | | | | | Currently, the main memory management code is one of the remaining places where we have global state. The next series of changes will aim to rectify this. This change simply introduces the main skeleton of the class that will contain all the necessary state.
* Merge pull request #2971 from FernandoS27/new-scheduler-v2David2019-10-281-0/+16
|\ | | | | Kernel: Implement a New Thread Scheduler V2
| * Kernel: Style and CorrectionsFernando Sahmkow2019-10-151-2/+3
| |
| * Correct PrepareRescheduleFernando Sahmkow2019-10-151-0/+5
| |
| * Add interfacing to the Global SchedulerFernando Sahmkow2019-10-151-0/+10
| |
* | core: Fix clang-format errors.bunnei2019-10-191-9/+10
| |
* | Fix null pointer deref.Nicolae-Andrei Cociorba2019-10-181-10/+12
| |
* | core/core: Resolve -Wreorder warningsLioncash2019-10-171-2/+2
| | | | | | | | | | Amends the initializer lists to be ordered in the same manner that they're declared within the class.
* | Merge pull request #2912 from FernandoS27/async-fixesbunnei2019-10-161-0/+2
|\ \ | |/ |/| General fixes to Async GPU
| * Core: Wait for GPU to be idle before shutting down.Fernando Sahmkow2019-10-051-0/+2
| |
* | Merge pull request #2654 from DarkLordZach/lm-log-rewritebunnei2019-10-091-3/+14
|\ \ | | | | | | lm: Rewrite logger to use core reporting services
| * | lm: Flush manager output on core shutdownZach Hilman2019-09-221-0/+2
| | |
| * | core: Add LM::Manager to systemZach Hilman2019-09-221-3/+12
| | | | | | | | | Allows centralized control over logging mechanisms.
* | | hle/service: Replace global system instance calls with instance-based onesLioncash2019-10-061-3/+4
| |/ |/| | | | | | | | | | | | | | | | | Migrates the HLE service code off the use of directly accessing the global system instance where trivially able to do so. This removes all usages of Core::CurrentProcess from the service code, only 8 occurrences of this function exist elsewhere. There's still quite a bit of "System::GetInstance()" being used, however this was able to replace a few instances.
* | core/loader: Track the NSO build ID of the current processZach Hilman2019-09-301-0/+9
|/
* Merge pull request #2683 from DarkLordZach/lock-exitDavid2019-09-221-0/+11
|\ | | | | am: Implement exit locking and self exit commands
| * core: Track system exit lock statusZach Hilman2019-09-221-0/+11
| | | | | | | | Used to determine if yuzu should confirm before pausing or stopping a game.
* | dmnt_cheat_vm: Make Cheat VM compliant to code styleZach Hilman2019-09-221-2/+1
| |
* | core: Initialize cheats after load to avoid VMManager crashZach Hilman2019-09-221-0/+5
| | | | | | This used to occur due to the VMManager being nullptr at the time cheats were registered (during load, but before it was done). This is bypassed by not accessing the VMManager for offset data until load is complete,
* | core: Update RegisterCheatList for new VMZach Hilman2019-09-221-8/+9
|/
* core: Store FileSystemController in coreZach Hilman2019-09-211-0/+24
|
* Add frametime logging for tracking performance over timefearlessTobi2019-09-101-8/+17
| | | | Co-Authored-By: jroweboy <jroweboy@gmail.com>
* service/am: Remove usages of global system accessorsLioncash2019-09-051-1/+2
| | | | | | Avoids the use of global accessors, removing the reliance on global state. This also makes dependencies explicit in the interface, as opposed to being hidden
* Merge pull request #2592 from FernandoS27/sync1bunnei2019-07-261-1/+11
|\ | | | | Implement GPU Synchronization Mechanisms & Correct NVFlinger
| * Gpu: Implement Hardware Interrupt Manager and manage GPU interruptsFernando Sahmkow2019-07-051-1/+11
| |
* | Merge pull request #2651 from DarkLordZach/apm-boost-mode-1bunnei2019-07-081-0/+12
|\ \ | | | | | | apm: Initial implementation of performance config and boost mode
| * | core: Keep instance of APM ControllerZach Hilman2019-06-291-0/+12
| | |
* | | Merge pull request #2642 from DarkLordZach/fsp-log-2bunnei2019-07-081-1/+1
|\ \ \ | |_|/ |/| | fsp-srv: Implement Access Logging Functionality
| * | fsp-srv: Implement OutputAccessLogToSdCardZach Hilman2019-06-291-1/+1
| |/ | | | | | | Allows games to log data to the SD.
* | Merge pull request #2533 from DarkLordZach/memory-frozenbunnei2019-06-281-0/+2
|\ \ | |/ |/| memory: Add class to manage and enforce memory freezing
| * core: Move Freezer class to tools namespaceZach Hilman2019-06-211-2/+2
| |
| * memory: Add class to manage and enforce memory freezingZach Hilman2019-06-211-0/+2
| |
* | glue: Correct missing bytes in ApplicationLaunchParameterZach Hilman2019-06-261-2/+0
| |
* | core: Keep track of ARPManager and register current application on bootZach Hilman2019-06-251-0/+68
| |
* | Merge pull request #2575 from DarkLordZach/process-id-typesbunnei2019-06-211-1/+2
|\ \ | | | | | | kernel: Differentiate kernel and user processes when picking ID
| * | kernel: Differentiate kernel and user processes when picking IDZach Hilman2019-06-101-1/+2
| |/ | | | | | | This allows kernel internal type processes to be assigned IDs in the KIP range while userland processes are assigned in the user range.
* | Merge pull request #2482 from DarkLordZach/prepobunnei2019-06-211-1/+8
|\ \ | |/ |/| core: Add detailed local reporting feature for development
| * loader: Move NSO module tracking to AppLoaderZach Hilman2019-05-261-10/+1
| | | | | | Also cleanup of general stuff
| * core: Add Reporter class to take/save reportsZach Hilman2019-05-251-0/+6
| |
| * core: Track load offsets of NSO modulesZach Hilman2019-05-251-0/+10
| | | | | | | | Needed for backtrace decomposition
* | core/core: Remove unnecessary includesLioncash2019-05-291-8/+0
| | | | | | | | | | The contents of these includes aren't used anywhere in this translation unit.
* | core/loader: Remove LoadKernelSystemModeLioncash2019-05-291-9/+0
| | | | | | | | This is a hold-over from Citra and doesn't apply to yuzu.
* | core/telemetry_session: Remove usages of the global system accessorLioncash2019-05-291-1/+1
|/ | | | | | | | | | | | | | | | Makes the dependency explicit in the TelemetrySession's interface instead of making it a hidden dependency. This also revealed a hidden issue with the way the telemetry session was being initialized. It was attempting to retrieve the app loader and log out title-specific information. However, this isn't always guaranteed to be possible. During the initialization phase, everything is being constructed. It doesn't mean an actual title has been selected. This is what the Load() function is for. This potentially results in dead code paths involving the app loader. Instead, we explicitly add this information when we know the app loader instance is available.
* Merge pull request #2228 from DarkLordZach/applet-manager-p1bunnei2019-04-251-33/+17
|\ | | | | applets: Add AppletManager and implement PhotoViewer and Error applets
| * core: Remove specific applets in favor of AppletManagerZach Hilman2019-04-171-33/+17
| |
* | core/core: Move process execution start to System's Load()Lioncash2019-04-121-1/+5
| | | | | | | | | | | | | | | | | | This gives us significantly more control over where in the initialization process we start execution of the main process. Previously we were running the main process before the CPU or GPU threads were initialized (not good). This amends execution to start after all of our threads are properly set up.
* | core/core: Move main process creation into Load()Lioncash2019-04-121-4/+3
| | | | | | | | | | | | | | | | | | Now that we have dependencies on the initialization order, we can move the creation of the main process to a more sensible area: where we actually load in the executable data. This allows localizing the creation and loading of the process in one location, making the initialization of the process much nicer to trace.
* | video_core/gpu: Create threads separately from initializationLioncash2019-04-121-11/+4
| | | | | | | | | | | | | | | | | | Like with CPU emulation, we generally don't want to fire off the threads immediately after the relevant classes are initialized, we want to do this after all necessary data is done loading first. This splits the thread creation into its own interface member function to allow controlling when these threads in particular get created.
* | core/cpu_core_manager: Create threads separately from initialization.Lioncash2019-04-121-3/+6
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Our initialization process is a little wonky than one would expect when it comes to code flow. We initialize the CPU last, as opposed to hardware, where the CPU obviously needs to be first, otherwise nothing else would work, and we have code that adds checks to get around this. For example, in the page table setting code, we check to see if the system is turned on before we even notify the CPU instances of a page table switch. This results in dead code (at the moment), because the only time a page table switch will occur is when the system is *not* running, preventing the emulated CPU instances from being notified of a page table switch in a convenient manner (technically the code path could be taken, but we don't emulate the process creation svc handlers yet). This moves the threads creation into its own member function of the core manager and restores a little order (and predictability) to our initialization process. Previously, in the multi-threaded cases, we'd kick off several threads before even the main kernel process was created and ready to execute (gross!). Now the initialization process is like so: Initialization: 1. Timers 2. CPU 3. Kernel 4. Filesystem stuff (kind of gross, but can be amended trivially) 5. Applet stuff (ditto in terms of being kind of gross) 6. Main process (will be moved into the loading step in a following change) 7. Telemetry (this should be initialized last in the future). 8. Services (4 and 5 should ideally be alongside this). 9. GDB (gross. Uses namespace scope state. Needs to be refactored into a class or booted altogether). 10. Renderer 11. GPU (will also have its threads created in a separate step in a following change). Which... isn't *ideal* per-se, however getting rid of the wonky intertwining of CPU state initialization out of this mix gets rid of most of the footguns when it comes to our initialization process.
* core: Store system-wide ContentProvider for the emulatorZach Hilman2019-03-271-0/+26
|
* file_sys/cheat_engine: Remove use of global system accessorsLioncash2019-03-221-2/+2
| | | | | Instead, pass in the core timing instance and make the dependency explicit in the interface.
* Merge pull request #1933 from DarkLordZach/cheat-enginebunnei2019-03-221-0/+11
|\ | | | | file_sys: Implement parser and interpreter for game memory cheats
| * vm_manager: Remove cheat-specific ranges from VMManagerZach Hilman2019-03-051-2/+4
| |
| * core: Add support for registering and controlling ownership of CheatEngineZach Hilman2019-03-051-0/+9
| |
* | kernel: Make the address arbiter instance per-processLioncash2019-03-081-1/+1
| | | | | | | | | | | | | | | | | | | | Now that we have the address arbiter extracted to its own class, we can fix an innaccuracy with the kernel. Said inaccuracy being that there isn't only one address arbiter. Each process instance contains its own AddressArbiter instance in the actual kernel. This fixes that and gets rid of another long-standing issue that could arise when attempting to create more than one process.
* | Merge pull request #2055 from bunnei/gpu-threadbunnei2019-03-071-3/+10
|\ \ | | | | | | Asynchronous GPU command processing
| * | gpu: Refactor a/synchronous implementations into their own classes.bunnei2019-03-071-2/+7
| | |
| * | gpu: Refactor to take RendererBase instead of RasterizerInterface.bunnei2019-03-071-1/+1
| | |
| * | core: Set is_powered_on before GPU is initialized.bunnei2019-03-071-1/+3
| | |
* | | Merge pull request #2190 from lioncash/ogl-globalbunnei2019-03-071-7/+7
|\ \ \ | |/ / |/| | core: Remove the global telemetry accessor function
| * | core/core: Replace direct usage of the global system telemetry accessor from Shutdown()Lioncash2019-03-041-7/+7
| |/ | | | | | | | | The telemetry instance is actually a member of the class itself, so we can access it directly instead of going through the global accessor.
* / kernel/address_arbiter: Pass in system instance to constructorLioncash2019-03-051-2/+3
|/ | | | | Allows getting rid of reliance on the global accessor functions and instead operating on the provided system instance.
* video_core: Remove usages of System::GetInstance() within the enginesLioncash2019-02-161-1/+1
| | | | | Avoids the use of the global accessor in favor of explicitly making the system a dependency within the interface.
* core_timing: Convert core timing into a classLioncash2019-02-161-5/+14
| | | | | | | | | | | Gets rid of the largest set of mutable global state within the core. This also paves a way for eliminating usages of GetInstance() on the System class as a follow-up. Note that no behavioral changes have been made, and this simply extracts the functionality into a class. This also has the benefit of making dependencies on the core timing functionality explicit within the relevant interfaces.
* core_timing: Rename CoreTiming namespace to Core::TimingLioncash2019-02-121-3/+3
| | | | | | Places all of the timing-related functionality under the existing Core namespace to keep things consistent, rather than having the timing utilities sitting in its own completely separate namespace.
* gl_shader_cache: Link loading screen with disk shader cache loadReinUsesLisp2019-02-071-2/+0
|
* gl_shader_disk_cache: Pass core system as argument and guard against games without title idsReinUsesLisp2019-02-071-1/+1
|
* rasterizer_interface: Add disk cache entry for the rasterizerReinUsesLisp2019-02-071-0/+3
|
* core/frontend/applets/web_browser: Make OpenPage() non-constLioncash2019-01-171-6/+10
| | | | | | | | This is a function that definitely doesn't always have a non-modifying behavior across all implementations, so this should be made non-const. This gets rid of the need to mark data members as mutable to work around the fact mutating data members needs to occur.
* Merge pull request #1959 from DarkLordZach/custom-rtcbunnei2019-01-101-0/+6
|\ | | | | settings: Add support for setting the RTC manually
| * settings: Use std::chrono::seconds instead of s64 for RTCZach Hilman2019-01-081-2/+1
| |
| * core: Set custom RTC differential on game bootZach Hilman2019-01-081-0/+7
| |
* | web_browser: Add bounds checking to applet interfaceZach Hilman2018-12-291-0/+5
| |
* | core: Add getter and setter for WebBrowserApplet frontendZach Hilman2018-12-281-0/+13
|/
* Merge pull request #1781 from DarkLordZach/applet-profile-selectbunnei2018-12-231-0/+11
|\ | | | | am: Implement HLE profile selector applet
| * core: Add getter/setter for ProfileSelector in SystemZach Hilman2018-12-031-0/+11
| |
* | core: Make GetGameFileFromPath function externally accessibleZach Hilman2018-12-031-3/+5
|/
* core: Relocate CPU core management to its own classLioncash2018-11-221-97/+22
| | | | | | | | | | | | | | | | | | | | | | | | Keeps the CPU-specific behavior from being spread throughout the main System class. This will also act as the home to contain member functions that perform operations on all cores. The reason for this being that the following pattern is sort of prevalent throughout sections of the codebase: If clearing the instruction cache for all 4 cores is necessary: Core::System::GetInstance().ArmInterface(0).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(1).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(2).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(3).ClearInstructionCache(); This is kind of... well, silly to copy around whenever it's needed. especially when it can be reduced down to a single line. This change also puts the basics in place to begin "ungrafting" all of the forwarding member functions from the System class that are used to access CPU state or invoke CPU-specific behavior. As such, this change itself makes no changes to the direct external interface of System. This will be covered by another changeset.
* am: Deglobalize software keyboard appletZach Hilman2018-11-181-0/+17
|
* global: Use std::optional instead of boost::optional (#1578)Frederic L2018-10-301-1/+1
| | | | | | | | | | | | | | | | * get rid of boost::optional * Remove optional references * Use std::reference_wrapper for optional references * Fix clang format * Fix clang format part 2 * Adressed feedback * Fix clang format and MacOS build
* core: Add missing const variants of getters for the System classLioncash2018-10-281-2/+26
| | | | | | Many of the Current<Thing> getters (as well as a few others) were missing const qualified variants, which makes it a pain to retrieve certain things from const qualified references to System.
* core: Remove unnecessary assert in ArmInterface()Lioncash2018-10-181-2/+1
| | | | | CpuCore already does this sort of checking, so we can just call that instead of duplicating the assertions.
* core_cpu: Make Cpu scheduler instances unique_ptrs instead of shared_ptrsLioncash2018-10-151-4/+12
|
* core: Make the live Cpu instances unique_ptrs instead of shared_ptrsLioncash2018-10-151-9/+9
| | | | | | | | There's no need for shared ownership here, as the only owning class instance of those Cpu instances is the System class itself. We can also make the thread_to_cpu map use regular pointers instead of shared_ptrs, given that the Cpu instances will always outlive the cases where they're used with that map.
* core: Make the exclusive monitor a unique_ptr instead of a shared_ptrLioncash2018-10-151-2/+3
| | | | | | Like the barrier, this is owned entirely by the System and will always outlive the encompassing state, so shared ownership semantics aren't necessary here.
* core: Make CPUBarrier a unique_ptr instead of a shared_ptrLioncash2018-10-151-3/+3
| | | | | | This will always outlive the Cpu instances, since it's destroyed after we destroy the Cpu instances on shutdown, so there's no need for shared ownership semantics here.
* filesystem: Make CreateFactories() and InstallInterface() take a VfsFilesystem instance by referenceLioncash2018-10-131-1/+1
| | | | | | | Neither of these functions alter the ownership of the provided pointer, so we can simply make the parameters a reference rather than a direct shared pointer alias. This way we also disallow passing incorrect memory values like nullptr.
* kernel/thread: Use a regular pointer for the owner/current processLioncash2018-10-101-3/+4
| | | | | | | | | | | There's no real need to use a shared pointer in these cases, and only makes object management more fragile in terms of how easy it would be to introduce cycles. Instead, just do the simple thing of using a regular pointer. Much of this is just a hold-over from citra anyways. It also doesn't make sense from a behavioral point of view for a process' thread to prolong the lifetime of the process itself (the process is supposed to own the thread, not the other way around).
* loader: Make the Load() function take a process as a regular reference, not a SharedPtrLioncash2018-09-291-1/+1
| | | | | | | | A process should never require being reference counted in this situation. If the handle to a process is freed before this function is called, it's definitely a bug with our lifetime management, so we can put the requirement in place for the API that the process must be a valid instance.
* vfs_concat/vfs_layered: Remove friend declarations from ConcatenatedVfsFileLioncash2018-09-261-1/+1
| | | | | | Given these are only added to the class to allow those functions to access the private constructor, it's a better approach to just make them static functions in the interface, to make the dependency explicit.
* Port #4182 from Citra: "Prefix all size_t with std::"fearlessTobi2018-09-151-7/+7
|
* core: Migrate current_process pointer to the kernelLioncash2018-09-071-4/+7
| | | | | | | | | | Given we now have the kernel as a class, it doesn't make sense to keep the current process pointer within the System class, as processes are related to the kernel. This also gets rid of a subtle case where memory wouldn't be freed on core shutdown, as the current_process pointer would never be reset, causing the pointed to contents to continue to live.
* core/core: Remove unnecessary sm/controller includeLioncash2018-09-061-1/+0
| | | | | | | | | | The only reason this include was necessary, was because the constructor wasn't defaulted in the cpp file and the compiler would inline it wherever it was used. However, given Controller is forward declared, all those inlined constructors would see an incomplete type, causing a compilation failure. So, we just place the constructor in the cpp file, where it can see the complete type definition, allowing us to remove this include.
* core: Use a raw pointer in GetGPUDebugContext.Markus Wick2018-09-041-2/+2
| | | | This helper is called very often. The memory ownership shall not be transfered, so just return the raw pointer.
* vfs_real: Forward declare IOFileLioncash2018-09-021-2/+3
| | | | | | Eliminates the need to rebuild some source files if the file_util header ever changes. This also uncovered some indirect inclusions, which have also been fixed.
* core/core: Replace includes with forward declarations where applicableLioncash2018-08-311-4/+15
| | | | | | | | | | | The follow-up to e2457418dae19b889b2ad85255bb95d4cd0e4bff, which replaces most of the includes in the core header with forward declarations. This makes it so that if any of the headers the core header was previously including change, then no one will need to rebuild the bulk of the core, due to core.h being quite a prevalent inclusion. This should make turnaround for changes much faster for developers.
* core: Make the main System class use the PImpl idiomLioncash2018-08-311-174/+341
| | | | | | | | | | | | | core.h is kind of a massive header in terms what it includes within itself. It includes VFS utilities, kernel headers, file_sys header, ARM-related headers, etc. This means that changing anything in the headers included by core.h essentially requires you to rebuild almost all of core. Instead, we can modify the System class to use the PImpl idiom, which allows us to move all of those headers to the cpp file and forward declare the bulk of the types that would otherwise be included, reducing compile times. This change specifically only performs the PImpl portion.
* kernel: Eliminate kernel global stateLioncash2018-08-291-4/+12
| | | | | | | | | | | | | | | | | | | | | | As means to pave the way for getting rid of global state within core, This eliminates kernel global state by removing all globals. Instead this introduces a KernelCore class which acts as a kernel instance. This instance lives in the System class, which keeps its lifetime contained to the lifetime of the System class. This also forces the kernel types to actually interact with the main kernel instance itself instead of having transient kernel state placed all over several translation units, keeping everything together. It also has a nice consequence of making dependencies much more explicit. This also makes our initialization a tad bit more correct. Previously we were creating a kernel process before the actual kernel was initialized, which doesn't really make much sense. The KernelCore class itself follows the PImpl idiom, which allows keeping all the implementation details sealed away from everything else, which forces the use of the exposed API and allows us to avoid any unnecessary inclusions within the main kernel header.
* core: Remove always true conditionals in Load()Lioncash2018-08-241-7/+4
| | | | | These conditions are always true, since the outer conditional already checks for these conditions.
* qt: Add 'Install to NAND' option to menuZach Hilman2018-08-121-0/+1
| | | | Prompts for title type on NCA files.
* loader: Join 0* files in directory if filename is 00Zach Hilman2018-08-121-1/+33
| | | | i.e. Load the concatenated 00+01 if 01 exists as well. Needed for split NAND NCAs.
* core: Namespace EmuWindowLioncash2018-08-121-2/+2
| | | | Gets the class out of the global namespace.
* loader: Add more descriptive errorsZach Hilman2018-08-101-22/+4
| | | Full list of new errors and descriptions in core/loader/loader.h
* core: Port core to VfsFilesystem for file accessZach Hilman2018-08-091-2/+6
|
* GDBStub works with both Unicorn and Dynarmic now (#941)Hedges2018-08-071-1/+4
| | | | | | * GDBStub works with both Unicorn and Dynarmic now * Tidy up
* Merge pull request #912 from lioncash/global-varbunnei2018-08-051-3/+6
|\ | | | | video_core: Eliminate the g_renderer global variable
| * renderer_base: Make Rasterizer() return the rasterizer by referenceLioncash2018-08-041-1/+1
| | | | | | | | | | | | | | All calling code assumes that the rasterizer will be in a valid state, which is a totally fine assumption. The only way the rasterizer wouldn't be is if initialization is done incorrectly or fails, which is checked against in System::Init().
| * video_core: Eliminate the g_renderer global variableLioncash2018-08-041-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We move the initialization of the renderer to the core class, while keeping the creation of it and any other specifics in video_core. This way we can ensure that the renderer is initialized and doesn't give unfettered access to the renderer. This also makes dependencies on types more explicit. For example, the GPU class doesn't need to depend on the existence of a renderer, it only needs to care about whether or not it has a rasterizer, but since it was accessing the global variable, it was also making the renderer a part of its dependency chain. By adjusting the interface, we can get rid of this dependency.
* | Merge pull request #849 from DarkLordZach/xcibunnei2018-08-041-4/+8
|\ \ | |/ |/| XCI and Encrypted NCA Support
| * Use more descriptive error codes and messagesZach Hilman2018-08-011-4/+8
| |
* | core/memory: Get rid of 3DS leftoversLioncash2018-08-031-3/+3
| | | | | | | | Removes leftover code from citra that isn't needed.
* | Merge pull request #892 from lioncash/globalbunnei2018-08-031-2/+2
|\ \ | | | | | | video_core: Make global EmuWindow instance part of the base renderer …
| * | video_core: Make global EmuWindow instance part of the base renderer classLioncash2018-08-021-2/+2
| |/ | | | | | | | | | | | | | | | | | | | | Makes the global a member of the RendererBase class. We also change this to be a reference. Passing any form of null pointer to these functions is incorrect entirely, especially given the code itself assumes that the pointer would always be in a valid state. This also makes it easier to follow the lifecycle of instances being used, as we explicitly interact the renderer with the rasterizer, rather than it just operating on a global pointer.
* | Merge pull request #894 from lioncash/objectbunnei2018-08-031-1/+0
|\ \ | | | | | | kernel: Move object class to its own source files
| * | kernel: Move object class to its own source filesLioncash2018-08-021-1/+0
| |/ | | | | | | | | | | General moving to keep kernel object types separate from the direct kernel code. Also essentially a preliminary cleanup before eliminating global kernel state in the kernel code.
* / hw: Remove unused filesLioncash2018-08-021-3/+0
|/ | | | | | None of these files are used in any meaningful way. They're just leftovers from citra. Also has the benefit of getting rid of an unused global variable.
* audio_core: Move to audout_u impl.bunnei2018-07-311-2/+0
| | | | - This is necessary so streams are created on the same thread.
* core: Add AudioCore to global state.bunnei2018-07-281-0/+2
|
* Implement exclusive monitorMerryMage2018-07-221-1/+2
|
* Merge pull request #687 from lioncash/instancebunnei2018-07-191-1/+3
|\ | | | | core: Don't construct instance of Core::System, just to access its live instance
| * core: Make System's default constructor privateLioncash2018-07-191-0/+2
| | | | | | | | | | | | This makes it a compilation error to construct additional instances of the System class directly, preventing accidental wasteful constructions over and over.
| * core: Don't construct instance of Core::System, just to access its live instanceLioncash2018-07-191-1/+1
| | | | | | | | | | | | | | | | | | This would result in a lot of allocations and related object construction, just to toss it all away immediately after the call. These are definitely not intentional, and it was intended that all of these should have been accessing the static function GetInstance() through the name itself, not constructed instances.
* | Virtual Filesystem 2: Electric Boogaloo (#676)Zach Hilman2018-07-191-1/+2
|/ | | | | | | | | | * Virtual Filesystem * Fix delete bug and documentate * Review fixes + other stuff * Fix puyo regression
* Revert "Virtual Filesystem (#597)"bunnei2018-07-081-2/+1
| | | | This reverts commit 77c684c1140f6bf3fb7d4560d06d2efb1a2ee5e2.
* Virtual Filesystem (#597)Zach Hilman2018-07-061-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add VfsFile and VfsDirectory classes * Finish abstract Vfs classes * Implement RealVfsFile (computer fs backend) * Finish RealVfsFile and RealVfsDirectory * Finished OffsetVfsFile * More changes * Fix import paths * Major refactor * Remove double const * Use experimental/filesystem or filesystem depending on compiler * Port partition_filesystem * More changes * More Overhaul * FSP_SRV fixes * Fixes and testing * Try to get filesystem to compile * Filesystem on linux * Remove std::filesystem and document/test * Compile fixes * Missing include * Bug fixes * Fixes * Rename v_file and v_dir * clang-format fix * Rename NGLOG_* to LOG_* * Most review changes * Fix TODO * Guess 'main' to be Directory by filename
* Update clang formatJames Rowe2018-07-031-2/+2
|
* Rename logging macro back to LOG_*James Rowe2018-07-031-7/+7
|
* core: Run all CPU cores separately, even in single-thread mode.bunnei2018-05-111-6/+20
|
* threading: Reschedule only on cores that are necessary.bunnei2018-05-111-0/+5
|
* core: Add a configuration setting for use_multi_core.bunnei2018-05-111-6/+26
|
* core: Support session close with multicore.bunnei2018-05-111-4/+11
|
* core: Create a thread for each CPU core, keep in lock-step with a barrier.bunnei2018-05-111-5/+25
|
* core: Move common CPU core things to its own class.bunnei2018-05-111-48/+9
|
* core: Replace remaining old non-generic logger usages with fmt-capable equivalentsLioncash2018-04-261-11/+11
| | | | | | LOG_GENERIC usages will be amended in a follow-up to keep API changes separate from interface changes, as it will require removing a parameter from the relevant function in the VMManager class.
* core: Relocate g_service_manager to the System classLioncash2018-04-211-6/+22
| | | | | Converts the service manager from a global into an instance-based variable.
* core, main.h: Abort on 32Bit ROMs (#309)N00byKing2018-04-061-0/+4
| | | | | | * core, main.h: Abort on 32Bit ROMs * main.cpp: Fix Grammar
* config: Use simplified checkbox (from Citra) for CPU JIT.bunnei2018-03-271-7/+3
|
* Clang FixesN00byKing2018-03-191-1/+2
|
* More Warning cleanupsN00byKing2018-03-191-1/+1
|
* Clean Warnings (?)N00byKing2018-03-191-1/+1
|
* Merge pull request #193 from N00byKing/3184_2_robotic_boogaloobunnei2018-03-191-4/+8
|\ | | | | Implement Pull #3184 from citra: core/arm: Improve timing accuracy before service calls in JIT (Rebased)
| * Implements citra-emu/citra#3184N00byKing2018-02-251-4/+8
| |
* | core: Move process creation out of global state.bunnei2018-03-141-1/+3
| |
* | core: Fix scheduler-shutdown related crashMerryMage2018-02-211-5/+9
| |
* | scheduler: Cleanup based on PR feedback.bunnei2018-02-191-1/+1
| |
* | kernel: Use Scheduler class for threading.bunnei2018-02-181-1/+2
| |
* | core: Use shared_ptr for cpu_core.bunnei2018-02-181-3/+3
|/
* Make a GPU class in VideoCore to contain the GPU state.Subv2018-02-121-0/+2
| | | | Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.
* Merge pull request #72 from N00byKing/patch-2bunnei2018-01-211-1/+0
|\ | | | | Implement Pull #3275 from citra: core: Don't Shutdown before we've even Init-ed
| * Update core.cppN00byKing2018-01-171-1/+0
| |
* | Port citra #3352 to yuzu (#103)River City Ransomware2018-01-201-0/+7
|/ | | | | | | | | | * Port citra #3352 to yuzu This change allows non x86_64 architectures to compile yuzu by skipping the building of dynarmic * Fixed clang-format errors * fixes more clang-format errors
* Remove gpu debugger and get yuzu qt to compileJames Rowe2018-01-131-8/+0
|
* configuration: Add cpu_core configuration optionMerryMage2018-01-121-2/+10
|
* arm_dynarmic: Implement coreMerryMage2018-01-121-1/+3
|
* CoreTiming: Reworked CoreTiming (cherry-picked from Citra #3119)B3n302018-01-091-0/+1
| | | | * CoreTiming: New CoreTiming; Add Test for CoreTiming
* unicorn: Use for arm interface on Windows.bunnei2018-01-041-8/+1
|
* arm: Remove SkyEye/Dyncom code that is ARMv6-only.bunnei2018-01-031-3/+2
|
* logging: Rename category "Core_ARM11" to "Core_ARM".bunnei2017-10-231-1/+1
|
* Merge remote-tracking branch 'upstream/master' into nxbunnei2017-10-101-3/+9
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
| * Loaders: Don't automatically set the current process every time we load an application.Subv2017-09-271-2/+4
| | | | | | | | The loaders will now just create a Kernel::Process, construct it and return it to the caller, which is responsible for setting it as the current process and configuring the global page table.
| * Kernel/Memory: Give each Process its own page table.Subv2017-09-101-1/+0
| | | | | | | | The loader is in charge of setting the newly created process's page table as the main one during the loading process.
| * Added missing parts in libnetwork (#2838)B3n302017-08-191-0/+5
|/ | | | | * Network: Set and send the game information over enet Added Callbacks for RoomMember and GetMemberList to Room in preparation for web_services.
* telemetry: Log performance, configuration, and system data.bunnei2017-07-181-0/+10
|
* Addressed Bunnei's review comments, and made some other tweaks:TheKoopaKingdom2017-06-031-6/+5
| | | | | - Deleted GetStatus() because it wasn't used anywhere outside of Core::System. - Fixed design flaw where the message bar status could be set despite the game being stopped.
* Created a whitelist of system archives to prevent false positives creating dialogs.TheKoopaKingdom2017-06-031-4/+2
|
* Made some changes from review comments:TheKoopaKingdom2017-06-031-9/+13
| | | | | | | | - Made LoadKernelSystemMode return a pair consisting of a system mode and a result code (Could use review). - Deleted ErrorOpenGL error code in favor of just having ErrorVideoCore. - Made dialog messages more clear. - Compared archive ID in fs_user.cpp to ArchiveIdCode::NCCH as opposed to hex magic. - Cleaned up some other stuff.
* Added system for handling core errors in citra-qt.TheKoopaKingdom2017-06-031-6/+18
|
* core: Keep track of telemetry for the current emulation session.bunnei2017-05-251-0/+3
|
* Kernel: Map special regions according to ExHeaderYuri Kunde Schlesner2017-05-101-2/+3
| | | | | | | This replaces the hardcoded VRAM/DSP mappings with ones made based on the ExHeader ARM11 Kernel caps list. While this has no visible effect for most applications (since they use a standard set of mappings) it does improve support for system modules and n3DS exclusives.
* Core: Make PerfStats internally lockedYuri Kunde Schlesner2017-02-271-3/+2
| | | | More ergonomic to use and will be required for upcoming changes.
* Add performance statistics to status barYuri Kunde Schlesner2017-02-271-0/+9
|
* core: Free AppLoader on shutdown to release file (#2558)Yuri Kunde Schlesner2017-02-111-9/+2
| | | Fixes #2455
* Core: reset cpu_core in Shutdown to make IsPoweredOn work properlywwylele2016-12-241-0/+1
|
* core: Replace "AppCore" nomenclature with just "CPU".bunnei2016-12-221-7/+7
|
* Address clang-format issues.bunnei2016-12-221-3/+3
|
* core: Remove HLE module, consolidate code & various cleanups.bunnei2016-12-221-7/+19
|
* core: Consolidate core and system state, remove system module & cleanups.bunnei2016-12-221-25/+87
|
* gdbstub: Remove global variable from public interfaceLioncash2016-12-151-1/+1
| | | | | | | | | Currently, this is only ever queried, so adding a function to check if the server is enabled is more sensible. If directly modifying this externally is ever desirable, it should be done by adding a function to the interface, rather than exposing implementation details directly.
* Use negative priorities to avoid special-casing the self-includeYuri Kunde Schlesner2016-09-211-1/+1
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-3/+1
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Manually tweak source formatting and then re-run clang-formatYuri Kunde Schlesner2016-09-191-2/+1
|
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-2/+3
|
* core: Add configuration option for CPU JIT.bunnei2016-09-151-7/+12
|
* Merge pull request #1762 from bunnei/globalbunnei2016-05-061-1/+1
|\ | | | | hle: Get rid of direct global access to g_reschedule
| * HLE: Rename RescheduleIsPending to IsReschedulePending.bunnei2016-05-061-1/+1
| |
| * hle: Get rid of global access to g_rescheduleLioncash2016-03-211-1/+1
| | | | | | | | | | This shouldn't be directly exposed if there's already a partial API that operates on it. We can just provide the rest of that API.
* | Common: Remove Common::make_unique, use std::make_uniqueMerryMage2016-04-051-3/+2
|/
* Improve error report from Init() functionsLittleWhite2016-03-081-2/+1
| | | | Add error popup when citra initialization failed
* core: Use unique_ptr for holding the interpreter instancesLioncash2015-12-301-6/+9
|
* Implement gdbstubpolaris-2015-10-041-0/+17
|
* Core: Cleanup core includes.Emmanuel Gil Peyrot2015-06-281-3/+0
|
* Memmap: Re-organize memory function in two filesYuri Kunde Schlesner2015-05-151-1/+0
| | | | | | | memory.cpp/h contains definitions related to acessing memory and configuring the address space mem_map.cpp/h contains higher-level definitions related to configuring the address space accoording to the kernel and allocating memory.
* Thread: Remove the idle threadYuri Kunde Schlesner2015-05-121-2/+2
| | | | Instead just use nullptr to represent no thread is active.
* Core/Memory: Give every emulated thread it's own TLS area.Subv2015-05-111-4/+0
| | | | | The TLS area for thread T with id Ti is located at TLS_AREA_VADDR + (Ti - 1) * 0x200. This allows some games like Mario Kart 7 to continue further.
* Memory: Re-organize and rename memory area address constantsYuri Kunde Schlesner2015-05-091-1/+1
|
* Common: Remove common.hYuri Kunde Schlesner2015-05-071-0/+1
|
* core: Migrate 3DS-specific CP15 register setting into InitLioncash2015-04-061-0/+5
|
* dyncom: Switch the app and system cores into the correct mode at initializationLioncash2015-02-131-5/+4
|
* arm: Adios armemuLioncash2015-02-011-12/+2
|
* Thread: Reduce use of Handles and move some funcs to inside the class.Yuri Kunde Schlesner2015-01-091-1/+1
|
* Move ThreadContext to core/core.h and deal with the falloutYuri Kunde Schlesner2015-01-091-0/+1
|
* Core: Fixed a crash and removed some unused variables.Subv2015-01-091-6/+0
| | | | ARM_Disasm only has static methods, so there's no need to have an instance of it.
* Threads: Use a dummy idle thread when no other are ready.Subv2015-01-081-1/+12
| | | | This thread will not actually execute instructions, it will only advance the timing/events and try to yield immediately to the next ready thread, if there aren't any ready threads then it will be rescheduled and start its job again.
* Core: Change default CPU to dyncom.bunnei2015-01-031-2/+2
|
* License changepurpasmart962014-12-211-1/+1
|
* Convert old logging calls to new logging macrosYuri Kunde Schlesner2014-12-131-2/+2
|
* Add static to some variablesLioncash2014-11-191-7/+7
|
* Use configuration files to enable or disable the new dyncom interpreter.archshift2014-10-281-3/+14
|
* core: Prune redundant includesarchshift2014-09-091-6/+0
|
* Core: Refactor core to use only one function for execution.bunnei2014-08-311-18/+8
| | | | | | Core: Cleaned up comment to be more readable. Citra: Changed loop to be more readable.
* GSP: Implements preliminary command synchronization via GPU interrupts.bunnei2014-08-061-8/+12
| | | | Core: Added a comment to explain the logic for the RunLoop iterations.
* Merge branch 'threading' of https://github.com/bunnei/citrabunnei2014-06-141-6/+17
|\ | | | | | | | | | | Conflicts: src/core/hle/function_wrappers.h src/core/hle/service/gsp.cpp
| * HLE: Updated all uses of NULL to nullptr (to be C++11 compliant)bunnei2014-06-131-4/+4
| |
| * Core: Cleaned up SingleStep(), updated default LCD refresh to assume each instruction is ~3 cyclesbunnei2014-06-131-11/+12
| |
| * Core: Changed HW update/thread reschedule to occur more frequently (assume each instruction is ~3 cycles)bunnei2014-06-131-2/+2
| |
| * hle: added a hokey way to force a thread reschedule during CPU single step mode (as used by the debugger)bunnei2014-06-051-1/+2
| |
| * core: changed time delay before kernel reschedule to "approximate" a screen refreshbunnei2014-05-301-3/+12
|/
* core: added Kernel::Reschedule() call to check for thread changes, shortened delay time to 100 instructionsbunnei2014-05-231-1/+6
|
* updated how we call ARM core to make things much fasterbunnei2014-05-171-3/+6
|
* cleaned up some logging messagesbunnei2014-04-111-20/+2
|
* added initial modules for setting up SysCall HLEbunnei2014-04-111-0/+18
|
* fixed project includes to use new directory structurebunnei2014-04-091-6/+8
|
* got rid of 'src' folders in each sub-projectbunnei2014-04-091-0/+58