Run Nintendo Switch homebrew & games on your Android device!
Go to file
PixelyIon c282276b74 Address CR Comments 2 (#132) + Fix Several Scheduler Bugs
The following scheduler bugs were fixed:
* It was assumed that all non-cooperative `Rotate` calls were from a preemptive yield and changed the state of `KThread::isPreempted` incorrectly which could lead to UB, an example of a scenario with it would be:
* * Preemptive thread A gets a signal to yield from cooperative thread B due to it being ready to schedule and higher priority
* * A complies with this request but there's an assumption that the signal was actually from it's preemption timer therefore it doesn't reset it (As it isn't required if the timer was responsible for the signal)
* * A receives the actual preemption signal a while later, causing UB as the signal handler is invoked twice
* `Scheduler::UpdatePriority`
* * A check for `currentIt == core->queue.begin()` existed which caused an incorrect early return 
* * The preemption timer was armed correctly when a priority transition from cooperative priority -> preemption priority occurred but not disarmed when a transition from preemption priority -> cooperative priority occurred
* * The timer was unnecessarily disarmed in the case of updating the priority of a non-running thread, this isn't as much a bug as it is just pointless
* Priority inheritance in `KProcess::MutexLock` is fundamentally broken as it performs UB with `waitThread` being accessed prior to being assigned
* When a thread sets its own priority using  `SvcSetThreadCoreMask` and its current core is no longer in the affinity mask, it wouldn't actually move to the new thread until the next time the thread is load balanced
2021-03-05 14:55:34 +05:30
.github/workflows Fix Logger Settings + Use Java 8 + Update Kotlin + Extract Native SOs 2021-03-05 14:55:34 +05:30
.idea Address CR Comments (#132) + Change Core Migration API 2021-03-05 14:55:34 +05:30
app Address CR Comments 2 (#132) + Fix Several Scheduler Bugs 2021-03-05 14:55:34 +05:30
gradle/wrapper Fix Logger Settings + Use Java 8 + Update Kotlin + Extract Native SOs 2021-03-05 14:55:34 +05:30
.gitignore Fix GroupMutex and Clock Rescaling 2020-02-15 10:25:14 +00:00
.gitmodules Update NDK, Gradle and dependencies + Improve Settings API + Migrate to PugiXML 2021-03-05 14:55:34 +05:30
build.gradle Fix Logger Settings + Use Java 8 + Update Kotlin + Extract Native SOs 2021-03-05 14:55:34 +05:30
CONTRIBUTING.md Implement C++ Support for Controller Configuration 2020-08-21 11:48:29 +00:00
gradle.properties Fix Logger Settings + Use Java 8 + Update Kotlin + Extract Native SOs 2021-03-05 14:55:34 +05:30
gradlew add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00
gradlew.bat add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00
LICENSE.md Move to MPL-2.0 2020-04-23 22:26:27 +05:30
README.md Correct 'libNX' to 'libnx' in readme as per their branding 2020-07-01 06:24:41 +00:00
settings.gradle add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00



Skyline is an experimental emulator that runs on ARMv8 Android™ devices and emulates the functionality of a Nintendo Switch™ system. It's licensed under the MPL, refer to the license file for more information.

Contact

You can contact the core developers of Skyline at our Discord. If you have any questions, feel free to ask. It's also a good place to just keep up with the emulator, as most talk regarding development goes on over there.

Credit

Ryujinx
We've used Ryujinx throughout the project for reference, the amount of accuracy of their HLE kernel implementation is what makes them such an amazing reference. In addition, the team behind the project has been really helpful with any queries we had.

Team yuzu
We have recieved a fair share of advice from the team behind yuzu. Just like the Ryujinx team, they've been really receptive and helpful for any queries we've had and have provided feedback on our code which was extremely useful during the early stages of the emulator.

Switchbrew
We've extensively used Switchbrew whether that be their wiki with it's collosal amount of information on the Switch that has saved us countless hours of time or libnx which was crucial to initial development of the emulator to ensure that our implementations were correct.

Disclaimer

  • Nintendo Switch is a trademark of Nintendo Co., Ltd.
  • Android is a trademark of Google LLC.