Commit Graph

1845 Commits

Author SHA1 Message Date
PixelyIon
11c5f50d37 Use likelihood attributes in NCE + Fix System Version + SVC improvements
The SVCs improvements are as follows:
* Make SVC logs more concise for:
* * `SleepThread`
* * `ClearEvent`
* * `CloseHandle`
* * `ResetSignal`
* * `WaitSynchronization` (Special case for single handle)
* * `ArbitrateLock`
* * `ArbitrateUnlock`
* * `WaitProcessWideKeyAtomic`
* * `SignalProcessWideKey`
* Fix unintentional fallthrough into `yieldWithoutCoreMigration` from `yieldWithCoreMigration` in `SleepThread`
* Return `result::InvalidState` when an unsignalled handle is reset in `ResetSignal`
* Return `Result{}` (Success) in `CancelSynchronization`
* Do not return `result::InvalidCurrentMemory` in `ArbitrateLock` as it's not a failure condition
* Make `count` in `WaitProcessWideKeyAtomic` a `i32` from a `u32`, zero and all negative values result in waking all waiters
2021-03-05 14:55:34 +05:30
PixelyIon
1884d98163 Implement Address Arbiter
The entirety of the address arbiter is implemented in this commit, all three arbitration types: `WaitIfLessThan`, `DecrementAndWaitIfLessThan` and `WaitIfEqual`, and all three signal types: `Signal`, `SignalAndIncrementIfEqual` and `SignalAndModifyBasedOnWaitingThreadCountIfEqual` have been implemented. 
This allows any application which uses levent (Light Events) to function which includes titles such as ARMS.
2021-03-05 14:55:34 +05:30
PixelyIon
20bdda6a63 Support Core Migration for Running External Thread
We did not support migration of threads which were running in a non-cooperative manner, this was partially due to the dependence on per-core conditional variables rather than per-thread which made this harder to do programmatically. This has been fixed by moving to per-thread cvars and therefore the limitation can be removed, this feature is used by Unity games.
2021-03-05 14:55:34 +05:30
◱ PixelyIon
861d7e9eb2 Fix SvcClearEvent resetting behaviour
SvcClearEvent previously set the `signalled` flag directly rather than
calling `ResetSignal`, which skipped the locking necessary to make it
globally visible. Switch it to use `ResetSignal` to fix this.
2021-03-05 14:55:34 +05:30
◱ PixelyIon
a621408b9c Move to using ASCII separators for Logger
We've moved to using RS and GS from ASCII as delimiters rather than
'\n' and '|', this allows more robust parsing and increases the
readability of the log files
2021-03-05 14:55:34 +05:30
◱ PixelyIon
31db70f1d4 Lock decryption in CtrEncryptedBacking
This prevents a race where two threads could read at the same time and
end up using the wrong IV leading to garbage data being read. This
caused crashes in several games including Celeste.
2021-03-05 14:55:34 +05:30
Billy Laws
ce0e032255 Avoid constantly signalling audren DSP done event
This was causing a significant amount of sched thrashing and pinning a
core to 100% as games constantly updated audren, now change it to only
signal on buffer release.
2021-03-05 14:55:34 +05:30
◱ PixelyIon
7e7a792dc5 Use per-thread scheduler condvars and clean up AS filters
Per-thread condvars previously caused issues due to an audren bug, now
that's fixed they have a clear performance benefit.
2021-03-05 14:55:34 +05:30
PixelyIon
2bbf526419 Fix Logger Settings + Use Java 8 + Update Kotlin + Extract Native SOs 2021-03-05 14:55:34 +05:30
◱ PixelyIon
80302cf1ad Update NDK, Gradle and dependencies + Improve Settings API + Migrate to PugiXML 2021-03-05 14:55:34 +05:30
◱ PixelyIon
1f48fdd4a5 Fix Thread Insertion Optimization + Revert Per-Thread Scheduler Conditions 2021-03-05 14:55:34 +05:30
◱ PixelyIon
d5d133372f Fix Clean Exiting + Optimize Core Queues + Optimize Thread Insertion + Implement HID SendVibrationValue 2021-03-05 14:55:34 +05:30
◱ PixelyIon
98b1fd9056 Optimize Scheduler/IPC/HID + Fix Various Bugs
* Optimize Scheduler With Per-Thread Scheduler Conditions
* Optimize IPC by yielding
* Optimize HID Vibration
* Fix Priority Inheritance
* Fix `KThread` Start/Kill/Signal Races 
* Fix `YieldPending` Races in `StartThread` & `SvcHandler` 
* Fix POSIX Time -> NN CalendarTime Conversion 
* Fix HID `TouchScreen`/`NPad` Activation
2021-03-05 14:55:34 +05:30
◱ PixelyIon
ef52e22cef Improve Synchronization SVCs + Fix TLS Page Allocation Race + Fix KProcess::GetHandle<KObject> 2021-03-05 14:55:34 +05:30
◱ PixelyIon
ebadc1d1e1 Generate Stack Traces + More Robust Terminate Handler + Exit Process on Signal in Guest 2021-03-05 14:55:34 +05:30
◱ PixelyIon
14dbb5305a Fix Priority Queue + Cooperative Yielding + Conditional Variable Timeouts 2021-03-05 14:55:34 +05:30
◱ PixelyIon
33bbfb9fb7 Implement Conditional Variables 2021-03-05 14:55:34 +05:30
◱ PixelyIon
7079f11add Implement PI-Mutexes + Optimize InsertThread 2021-03-05 14:55:34 +05:30
◱ PixelyIon
7ba7cd2394 Support Priority & Affinity Mask Changes 2021-03-05 14:55:34 +05:30
◱ PixelyIon
f41bcd1e22 Implement Preemptive Scheduling 2021-03-05 14:55:34 +05:30
◱ PixelyIon
cf000f5750 Implement Cooperative Scheduling With Load Balancing 2021-03-05 14:55:34 +05:30
◱ PixelyIon
8564edcb16 Address CR Comments #2 2020-11-23 11:44:43 +05:30
◱ PixelyIon
fbf9f06244 Address CR Comments + Fix Clock Rescaling 2020-11-22 23:56:17 +05:30
◱ PixelyIon
a3dd759a1c Fix Circular Queue Destructor + Memory Infos + Improve Priority Documentation 2020-11-22 23:56:17 +05:30
Billy Laws
7167393e3c Only initialise maxEntry for active input devices
This caused the menus in Sonic Mania to be nonfunctional, futhermore,
default init is not ran for the input structs so the default max
definition in CommonHeader never actually applied.
2020-11-22 23:56:17 +05:30
◱ PixelyIon
bc5c094860 Fix CircularQueue + NPDM ACI0 & Kernel Capability Parsing 2020-11-22 23:56:17 +05:30
◱ PixelyIon
a5927c5c7b Fix Native-Initiated Exiting 2020-11-22 23:56:17 +05:30
◱ PixelyIon
d155e9cd71 Complete Exceptional Signal Handler Implementation + Fix More Destruction Behavior 2020-11-22 23:56:17 +05:30
Billy Laws
8bf08ed66f Fix CircularQueue and improve debug logging + exefs loading
CircularQueue was looping around too early resulting in the wrong
pushbuffers being used. The debug logging is useful for interpreting the
GPU method call logs.

Exefs loading was changed to check if an NSO exists before trying to
read it, preventing exceptions that get annoying while debugging.
2020-11-22 23:56:17 +05:30
Billy Laws
c161ef0cac Various accuracy improvements in services
* 'Fix' memory accounting to not measure reserved regions
* Fix some copy bugs introduced by switch to span
* Correct remap the behaviour of Modify so it actually works
2020-11-22 23:56:17 +05:30
Billy Laws
c7e5202042 Rework GPU VMM variable naming 2020-11-22 23:56:17 +05:30
Billy Laws
4c9d453008 Update formatter config for new AS and reformat 2020-11-22 23:56:17 +05:30
◱ PixelyIon
668f623256 Implement Exceptional Signal Handler + Fix Destruction Behavior
An exceptional signal handler allows us to convert an OS signal into a C++ exception, this allows us to alleviate a lot of crashes that would otherwise occur from signals being thrown during execution of games and be able to handle them gracefully.
2020-11-22 23:56:17 +05:30
◱ PixelyIon
3cde568c51 Run Guest on Main Emulator Thread + Remove Mutex/GroupMutex + Introduce PresentationEngine 2020-11-22 23:56:17 +05:30
◱ PixelyIon
779884edcf Introduce TID to Logger + Fix VMM Bug + Fix NSO Backtrace + Improve Logger 2020-11-22 23:56:17 +05:30
Billy Laws
39f0345ac7 Fix bugs introduced by refactoring
GPU VMM was mistakenly checking the alignment of the PA rather than the
VA and NvMap::Free was not accounting for the handle index starting from
one.
2020-11-22 23:56:17 +05:30
◱ PixelyIon
c65c91e1bc Implement NPDM, Core Mask SVCs + Fix VMM bug + Introduce Verbose Log Level 2020-11-22 23:56:17 +05:30
◱ PixelyIon
324381908b Implement SvcMap/UnmapPhysicalMemory + Fix W-Register Writing + Improve Accuracy of SvcGetInfo 2020-11-22 23:56:17 +05:30
◱ PixelyIon
657beea070 JVM Auto-Attach + Fix Thread Exiting + Fix Thread Signal Handler 2020-11-22 23:56:17 +05:30
◱ PixelyIon
6f2cd41470 Move .patch to start of executable (Pre-Patching) 2020-11-22 23:56:17 +05:30
◱ PixelyIon
369bd469f6 Dynamic Guest Memory Base Allocation 2020-11-22 23:56:17 +05:30
◱ PixelyIon
cffbfc8034 Skip Saving Callee-Saved Registers + Fix GetMemoryObject 2020-11-22 23:56:17 +05:30
Billy Laws
31efb5e930 Correct an NSO loader bug and use the correct address space extents 2020-11-22 23:56:17 +05:30
Billy Laws
17feb68eb5 Fix audren voice sample copying 2020-11-22 23:56:17 +05:30
◱ PixelyIon
745ea19f42 Use u64s for FmtCast + Remove Functional Casts + Fix VMM Bugs 2020-11-22 23:56:17 +05:30
◱ PixelyIon
1db76dee1e NCE3: In-Process Guest Execution 2020-11-22 23:56:17 +05:30
◱ PixelyIon
90127740f0 Rework NCE/KThread/KProcess + Remove Guest Process 2020-11-22 23:56:17 +05:30
◱ PixelyIon
878cb24389 Make fmt::ptr implicit for raw pointers + Update Submodules 2020-11-22 23:56:17 +05:30
◱ PixelyIon
02f3e37c4f Remove KProcess Memory Functions 2020-11-22 23:56:17 +05:30
◱ PixelyIon
60e82e6af0 Rework VMM + Adapt KMemory Objects to be in-process
Note: This commit isn't functional on it's own, it will require the rest of NCE3 to work
2020-11-22 23:56:17 +05:30
Willi Ye
7b13f2d387 Add visibility toggle for osc 2020-11-12 22:19:55 +05:30
Willi Ye
f479aeb4ac Add comments 2020-11-12 22:19:55 +05:30
Willi Ye
7526a985fb Use property delegate to handle preferences
* Add option to disable joystick recentering
2020-11-12 22:19:55 +05:30
Willi Ye
5c4aa95da6 Add on screen controls layout edit settings 2020-11-12 22:19:55 +05:30
Willi Ye
22140defae Rewrite adapter to handle any layout 2020-11-12 22:19:55 +05:30
Willi Ye
e023dbbf0a Add joystick press and general clean up 2020-11-12 22:19:55 +05:30
Willi Ye
3057e4b29a Add on screen controls
* Fix missing default constructor for dialog fragments
2020-11-12 22:19:55 +05:30
Billy Laws
85d5dd3619
Extend NvServices and implement IDirectory (#107)
* Fix alignment handling in NvHostAsGpu::AllocSpace

* Implement Ioctl{2,3} ioctls

These were added in HOS 3.0.0 in order to ease handling ioctl buffers.

* Introduce support for GPU address space remapping

* Fix nvdrv and am service bugs

Syncpoints are supposed to be allocated from ID 1, they were allocated
at 0 before. The ioctl functions were also missing from the service map

* Fix friend:u service name

* Stub NVGPU_IOCTL_CHANNEL_SET_TIMESLICE

* Stub IManagerForApplication::CheckAvailability

* Add OsFileSystem Directory support and add a size field to directory entries

The size field will be needed by the incoming HOS IDirectory support.

* Implement support for IDirectory

This is used by applications to list the contents of a directory.

* Address feedback
2020-11-03 15:10:42 +05:30
◱ PixelyIon
7ad86ec46f Improve span::as_string and other minor fixes 2020-10-02 15:28:48 +00:00
◱ PixelyIon
97ac45d83b Update Logger to use NDK Logger APIs + Improve Backing API + Fix FDSAN issues 2020-10-02 15:28:48 +00:00
◱ PixelyIon
4070686897 Refactor Comments + Other Minor Fixes 2020-10-02 15:28:48 +00:00
◱ PixelyIon
429af1990a Equal -> Brace Initializer + Remove Constexpr Auto for Integers 2020-10-02 15:28:48 +00:00
◱ PixelyIon
2764bd7c96 Use Vector for Kernel Handles + Remove Redundant Includes 2020-10-02 15:28:48 +00:00
◱ PixelyIon
20559c5dca Introduce Custom Span Class + IPC Buffer -> Span 2020-10-02 15:28:48 +00:00
◱ PixelyIon
4d6ae9aa26 Constexpr Maps for Service Functions 2020-10-02 15:28:48 +00:00
◱ PixelyIon
157c54f918 Implement a few HID Functions + Fix FAB handler 2020-10-02 15:28:48 +00:00
◱ PixelyIon
4970e58999 Address CR Comments (#102) 2020-09-20 20:07:33 +00:00
◱ PixelyIon
bb2c31264d Implement IOCTL2 & IOCTL3 2020-09-20 20:07:33 +00:00
◱ PixelyIon
a5fece8020 NVDRV IOCTL Refactor
Buffer -> Span + All buffers as arguments + Return -> NvStatus + Print Service Names + Function Names
2020-09-20 20:07:33 +00:00
◱ PixelyIon
70d67ef563 Constexpr Maps for NvDevice IOCTLs 2020-09-20 20:07:33 +00:00
◱ PixelyIon
20253a9573 Improve NvDevice Registration + Access 2020-09-20 20:07:33 +00:00
◱ PixelyIon
4cc3a3b2e8 Move NVDRV + IHOSBinder Internals to Discrete Components + Fix Lint 2020-09-20 20:07:33 +00:00
◱ PixelyIon
5f0073dd87 Fix Surface Deswizzling OOB writes + Fix PL README 2020-09-20 20:07:33 +00:00
Willi Ye
4076d84efc
NCA decryption (#99)
* NCA decryption
* Remove unnecessary new lines
* Remove loader error dialog
* Always show ROMs
* Address CRs
* Add subtitle padding in grid mode
2020-09-14 19:23:40 +05:30
◱ PixelyIon
65019375ca Implement Guest Touch-Screen Support 2020-09-08 12:55:33 +00:00
Billy Laws
89718804d0 Refactor service functions to return result codes 2020-09-06 19:12:18 +00:00
Billy Laws
74a150dff1 Rework service API to be cleaner with significantly less boilerplate
This patch reduces the burden of adding services significantly, rather
than having to create an enum entry and add strings in the constructor
it will all be determined at runtime through RTTI. A macro is also used
in the service creation case to reduce clutter.
2020-09-06 19:12:18 +00:00
◱ PixelyIon
21e2c826a1 Improve Accuracy of Vibration + Unify Translation + Add Comments 2020-09-06 15:31:20 +00:00
◱ PixelyIon
1a58a2e967 Implement Rumble Support for Controllers and Device Vibrators 2020-09-06 15:31:20 +00:00
Billy Laws
d8ccdd723e
Refactor Audio + Fix NV Bugs (#92)
* Fix NvHostCtrl:EventSignal event ID parsing
* Divide the audout buffer length by the sample size
* Correct audout channel quantity handling
* A few bugfixes for audio tracks
* * Correctly lock in CheckReleasedBuffers and only call the callback once
* * Check if the identifier queue is empty before accessing it's iterator
* Refactor audio to better fit the codestyle
* Explictly specify reference when using GetReference
* Fix CheckReleasedBuffers
2020-08-21 18:58:47 +05:30
◱ PixelyIon
7290a80c3e Move to Callback for Input Initialization + ConditionalVariable for Surface 2020-08-21 11:48:29 +00:00
◱ PixelyIon
07c2f2d891 Significantly Improve Accuracy of HID
This commit significantly increases the accuracy of the prior HID code due to testing on the Switch. It is now fully accurate in all supported scenarios, them being assignment mode, orientation, color writes and system properties. In addition, review comments were addressed and fixed in the PR.
2020-08-21 11:48:29 +00:00
◱ PixelyIon
ee2fdbdf6a Fix Joy-Con Pair Crash + Implement More HID Service Functions
This fixes a Joy-Con Pair bug which caused a crash when a partner device was set to none while being set as a partner. In addition, the following HID service functions were implemented:
* GetSupportedNpadStyleSet
* ActivateNpadWithRevision
* GetNpadJoyHoldType
* AcquireNpadStyleSetUpdateEventHandle
2020-08-21 11:48:29 +00:00
◱ PixelyIon
6a931b95b0 Implement C++ Support for Controller Configuration
This commit adds support to the C++ end of things for controller configuration. It isn't targeting being 1:1 to HOS for controller assignment but is rather based on intuition of how things should be.
2020-08-21 11:48:29 +00:00
◱ PixelyIon
75d485a9a7 Addition of Controller Configuration UI
This commit adds in the UI for Controller Configuration to Settings, in addition to introducing the storage and loading of aforementioned configurations to a file that can be saved/loaded at runtime. This commit also fixes updating of individual fields in Settings when changed from an external activity.
2020-08-21 11:48:29 +00:00
◱ PixelyIon
8e1f8ae7e9 Make UI fully usable using a controller
This commit focuses on making the UI completely usable using a controller so that a user won't have to switch between their device's touch screen and a controller constantly.
2020-08-21 11:48:29 +00:00
◱ PixelyIon
102f26d08e Refactor C++ Input
This commit refactors the C++ end of Input so it'll be in line with the rest of the codebase and be ready for the extension with multiple players and controller configuration.
2020-08-21 11:48:29 +00:00
◱ PixelyIon
5fec7eefd0 Refactor HID Shared Memory
This commit refactors and reorders a lot of the HID Shared Memory from the previous commits to be in line with the rest of the codebase.
2020-08-21 11:48:29 +00:00
Billy Laws
b167abcdb7 Initial Kotlin Input Implementation
This commit contains the Kotlin side of the initial Input implementation, this is based on the work done in the `hid` branch in `bylaws/skyline`.
Co-authored-by: ◱ PixelyIon <pixelyion@protonmail.com>
2020-08-21 11:48:29 +00:00
Billy Laws
0219eda2db Initial C++ Input Implementation
This commit contains the C++ side of the initial Input implementation, this is based on the work done in the `hid` branch in `bylaws/skyline`.
Co-authored-by: ◱ PixelyIon <pixelyion@protonmail.com>
2020-08-21 11:48:29 +00:00
Billy Laws
817d37600e Convert all make all hex uppercase according to codestyle 2020-08-15 10:21:41 +00:00
Billy Laws
e5264f7762 Address review comments 2020-08-15 10:21:41 +00:00
Billy Laws
ae131502c6 Fix reservation in GPU VMM
Rather than reserving a region so it *can* be used by MapAllocate
reserved actually prevents a region from being used by MapAllocate.
2020-08-15 10:21:41 +00:00
Billy Laws
ade8a711fb Format code and misc cleanup 2020-08-15 10:21:41 +00:00
Billy Laws
fcae5d54da Switch NvHostCtrlGpu to use QueryEvent 2020-08-15 10:21:41 +00:00
Billy Laws
cf60869fac Stub INotificationService 2020-08-15 10:21:41 +00:00
Billy Laws
9d90cd877c Stub IFile:Flush 2020-08-15 10:21:41 +00:00
Billy Laws
c69efed2ad Implement GetAccumulatedSuspendedTickChangedEvent 2020-08-15 10:21:41 +00:00
Billy Laws
6c9e0a943c Add some IApplicationFunctions calls used by newer games 2020-08-15 10:21:41 +00:00
Billy Laws
9e39cbaf7b Implement GetBase in IProfile 2020-08-15 10:21:41 +00:00
Billy Laws
dc6da8303e Add support for listing users in account services 2020-08-15 10:21:41 +00:00
Billy Laws
cae270a174 Use nvhost fences in IHOSBinderDriver 2020-08-15 10:21:41 +00:00
Billy Laws
94d1b40faf Add an empty ISslContext service 2020-08-15 10:21:41 +00:00
Billy Laws
7503496bb0 Implement the basis of the Maxwell 3D engine together with a macro
interpreter.

The Maxwell 3D engine handles all 3D rendering, currently only non
rendering related methods are implemented. Macros are small pieces of
code that run on the GPU and allow methods to be quickly called for
things like instanced drawing.
2020-08-15 10:21:41 +00:00
Billy Laws
68d5a48df1 Implement syncpoints and nvhost events and fix an nvmap bug
These are used to allow the CPU to synchronise with the GPU as it
reaches specific points in its command stream.

Also fixes an nvmap bug where a struct was incorrect.
2020-08-15 10:21:41 +00:00
Billy Laws
ed3ff862f6 Extend GPU VMM with unmapping/remapping support + code cleanup 2020-08-15 10:21:41 +00:00
Billy Laws
cf468c20e2 Extend the GPFIFO implementation with support for engines and fix a few
bugs

An engine is effectively a HW block in the GPU, the main one is the
Maxwell 3D which is used for 3D graphics. Engines can be bound to
individual subchannels and then methods within them can be called
through pushbuffers.

The engine side of the GPFIO is also included, it currently does nothing
but will need to be extended in the future with semaphores.
2020-08-15 10:21:41 +00:00
Billy Laws
9fd0dd848b Add support for processing GP Entries and the pushbuffers they contain
This is the backbone of the GPU, in the future this will be expanded to
support calling into engines.
2020-08-15 10:21:41 +00:00
Billy Laws
8dc9a10324 Implement the host side of host1x syncpoints
This will be extended in the future to support interfacing with the GPU.
2020-08-15 10:21:41 +00:00
Billy Laws
3c5cc33a34 Minor bug fixes in GPU VMM and add support for reading 2020-08-15 10:21:41 +00:00
Billy Laws
78712712c7 Fix a few bugs in CreateStrayLayer 2020-08-15 10:21:41 +00:00
Billy Laws
6edf89b538
Initial Savedata Implementation (#75)
* Rework VFS to support creating and writing files and introduce OsFileSystem
OsFileSystem abstracts a directory on the device using the filesystem API.
This also introduces GetEntryType and changes FileExists to use it.

* Implement the Horizon FileSystem APIs using our VFS framework
Horizon provides access to files through its IFileSystem class, we can
closely map this to our vfs::FileSystem class.

* Add support for creating application savedata
This implements basic savedata creation using the OsFileSystem API. The
data is stored in Skyline's private directory is stored in the same
format as yuzu.
2020-08-09 01:08:51 +05:30
Willi Ye
f72b81fcea
Make sure icons have a 1:1 ratio (#80)
* Make sure icons have a 1:1 ratio
* Use recyclerview padding to increase grid edge margins
* Fix race condition in searching roms
* Use notify insert for adapter
2020-08-08 23:31:21 +05:30
Willi Ye
392a1ac437 account: Remove unnecessary null termination 2020-07-21 18:29:45 +00:00
Willi Ye
1f282af87e More code style aligning
* Null terminate nickname array and correct character limit in settings perference
2020-07-21 18:29:45 +00:00
Willi Ye
93da9f2826 Align code style with project
* Return correct error code for invalid user
* Always return first icon color
2020-07-21 18:29:45 +00:00
Willi Ye
ffb9e743dd Add profile service to support custom usernames 2020-07-21 18:29:45 +00:00
Willi Ye
b86aac26d7 Align with code style and remove unnecessary code 2020-07-21 18:11:43 +00:00
Willi Ye
c3e54d1abf Redesign cards in grid view
* Refactor some classes and clean up
* Refresh style on the fly
2020-07-21 18:11:43 +00:00
Billy Laws
b23779bda1 Implement a block based GPU virtual memory manager
The GPU has it's own seperate address space to the CPU. It is able to
address 40 bit addresses and accesses the system memory. A sorted vector
has been used to store blocks as insertions are not very frequent.
2020-07-17 16:21:34 +00:00
Billy Laws
80e7b82bad Fix the LUT shift in the audio resampler
We do not need to shift back as we use a struct to hold the LUT entries.
2020-07-17 14:30:53 +00:00
Billy Laws
a3a2cb682e Truncate service names to 8 chars maximum 2020-07-17 14:30:53 +00:00
Billy Laws
8684e20a29 Treat GetAudioDeviceServiceWithRevisionInfo as GetAudioDeviceService 2020-07-17 14:30:53 +00:00
Billy Laws
3734599615 Extend the IAudioController implementation with volume stubs
This is used by ARMS.
2020-07-17 14:30:53 +00:00
Billy Laws
4cd7502df2 Implement post 4.0.0 language list features in ISettingsServer 2020-07-17 14:30:53 +00:00
Billy Laws
d1c1fa214c Stub (un)lockExit in ISelfController 2020-07-17 14:30:53 +00:00
Billy Laws
c2fadffe60 Extend time services with support for the steady clock
The steady clock has a fixed timepoint that can not change while an
application is running.
2020-07-17 14:30:53 +00:00
Billy Laws
e3313ae731 Use the device sample rate when creating an audio track in audren 2020-07-17 14:30:53 +00:00
Willi Ye
27d7839bcb MainActivity: Fix snackbar overlapping FABs 2020-07-14 09:15:57 +00:00
Willi Ye
c69e72a12e services: Add missing audio functions
* Those are needed to run playtone and audren from switch homebrew examples
2020-07-13 21:14:57 +01:00
Willi Ye
118b4d8a43 MainActivity: Fix shadows of FABs
* Don't cut them off
2020-07-09 20:19:55 +01:00
Billy Laws
6548d4914d Implement IAudioDevice for accessing audio output properties
This is used by Super Mario Odyssey in its init routine.
2020-07-09 18:42:36 +00:00
Billy Laws
f71b54b901 Stub SetRestartMessageEnabled in ISelfController
This is used by Super Mario Odyssey.
2020-07-09 18:42:36 +00:00
Billy Laws
2b4adee213 Stub gameplay recording and save data checking functions
Gameplay recording does not need to be emulated and EnsureSaveData isn't
necessary for proper save data support.
2020-07-09 18:42:36 +00:00
Billy Laws
2e60b5e60d Stub play reporting services 2020-07-09 18:42:36 +00:00
Billy Laws
378e494d82 Add an empty ssl service implementation
This stubs a single function that is needed for SMO's init.
2020-07-09 18:42:36 +00:00
Billy Laws
a2c6a2a4ff Add a base socket (bsd) services implementation
This stubs enough to pass SMO's socket init.
2020-07-09 18:42:36 +00:00
Billy Laws
2aefb4ae84 Implement network interface services
nifm:u is used by applications to enable a connection to the network.
2020-07-09 18:42:36 +00:00
Billy Laws
7102fa910e Implement nfp services 2020-07-09 18:42:36 +00:00
Billy Laws
4cf7f9288e Add an empty friend service implementation
This is used to access a users friends. It is used by Super Mario
Odyssey.
2020-07-09 18:42:36 +00:00
Billy Laws
ff5dddbd5b Extend account services to support BAAS and some user operations
These are needed by Super Mario Odyssey and several other games.
2020-07-09 18:42:36 +00:00
Billy Laws
80270637c1 Fix the spacing on lm log messages 2020-07-09 18:42:36 +00:00
Billy Laws
dae799dbb5 Implement svcClearEvent
This removes a signal from a KEvent. It is used by Mario Odyssey.
2020-07-09 18:42:36 +00:00
Billy Laws
92e3f84242 Stub SetGraphicsFirmwareMemoryMarginEnabled
This is used by most retail games released after 3.0.
2020-07-09 18:42:36 +00:00
Billy Laws
ef9760570b Extend parental control services 2020-07-09 18:42:36 +00:00
◱ PixelyIon
180ba97440 Print the sleep duration before actually sleeping 2020-07-09 14:08:58 +00:00
Billy Laws
c708c353e3 Fix block insertion
The subtraction was the wrong way round causing an underflow.
2020-07-09 14:08:58 +00:00
Billy Laws
1383e17341 Mark CodeStatic regions that are writable as CodeMutable instead
This is required for applications that attempt to map from the bss.
2020-07-09 14:08:58 +00:00
Billy Laws
2f8a217204 Use the heap size rather than the heap address when calculating the
total memory usage

Without this fix allocations are broken in Puyo Puyo Tetris.
2020-07-09 14:08:58 +00:00
Billy Laws
f1a28f7a1c Fix the behaviour of svcQueryMemory and allow getting the extents of
unmapped regions

svcQueryMemory will return a valid descriptor for anything in the
address space, from 0 to 1 << addrSpaceBits, this was handled
incorrectly before and we were only returning descriptors if the
address was in a mapped region.

If an address in an unmapped region is requested then the extents of the
unmapped region up to the address space end are returned. If the address
requested is outside of the address space then the extents of the
inaccessible address space are returned.

To facilitate this support was added to MemoryManager::Get for
generating the extents of unmapped regions using the chunk list.
2020-07-09 14:08:58 +00:00
Billy Laws
670a80d2c4 Create a memory chunk for the stack shared memory
As the stack is automatically mapped in the guest by `clone` we do not
need to explicitly map it. This adds a flag to solve the issue.

Also mark the stack as stack rather than reserved.
2020-07-09 14:08:58 +00:00
Billy Laws
7884a60679 Make regions public members of the memory class and drop the type enum
There isn't really much benefit in having a getter or an enum, so drop
it.
2020-07-09 14:08:58 +00:00
Billy Laws
eadc016525 Lock the audio buffer lock when reading released buffers
This is required to prevent races in Puyo Puyo Tetris and potentially
other games.
2020-07-09 14:08:58 +00:00
Billy Laws
6329537a9e Correct audren event handling and zero the sample buffer
Not zeroing the sample buffer causes issues when a voice is started but
is playing no samples. The system event handling was also reworked
according to Thog's info.
2020-07-09 14:08:58 +00:00
Billy Laws
24d086cbec Correctly check the usage bits in DequeueBuffer and fix it's result
The extra parameters in result are required for retail games to accept
it as valid.
2020-07-09 14:08:58 +00:00
Billy Laws
a96b8eb7a3 Add vi:u and vi:s to service list and fix the result parcel type of OpenLayer
vi:u is used by user applications and games and it has the same api as
vi:m.
2020-07-09 14:08:58 +00:00
◱ PixelyIon
9ef25a6beb IPC bug fixes
This fixes two bugs in IPC that were discovered when running Puyo Puyo
Tetris.

The CloneCurrentObject control IPC will now correctly return the handle
of the newly created object through move handles, rather than pushing it
as a result.

The size array of u16s with the sizes of each C buffer is now taken into
account when reading them. Before this change C buffers were entirely
broken.
2020-07-09 14:08:58 +00:00
Billy Laws
6e074d596c Extend applet manager services for the library applet
This commit adds stubs for the library applet and adds support for
writing to an AM IStorage.
2020-07-09 13:57:28 +00:00
Billy Laws
30936ce6dc Implement an ADPCM decoder for audren
This is used by many retail games, it only supports mono sound.

This implementation is based on Ryu's.
2020-07-09 13:56:04 +00:00
Billy Laws
b1e15efbab Use new android R APIs for hiding insets 2020-07-08 20:11:55 +00:00
Billy Laws
012be0adae Fix some warnings produced by enabling -Wall 2020-07-08 20:11:55 +00:00
Billy Laws
af709efb15 Kotlin updates for compatibility with the Android R SDK preview 2020-07-08 20:11:55 +00:00
Billy Laws
68fcb2e4e5 Extend account services and add support for PopLaunchParameters
This is needed for Puyo Puyo Tetris.
2020-07-07 16:21:13 +00:00
Billy Laws
ff1c0e254f Add an empty account services implementation
This implements the base account service and stubs
InitializeApplicationInfoV0 which is used by Puyo Puyo Tetris. Support
for the entirety of account services will be added in the future.
2020-07-06 21:04:31 +01:00
Billy Laws
3a343d3a48 Implement log services (lm)
lm is used by applications to print messages to the system log. Log
messages are made up of a header and then several fields containing
metadata or string messages.
2020-07-06 19:59:26 +00:00
Billy Laws
8985fe705f Implement IStorage services in Applet Manager
In the case of am, IStorage is used to exchange buffers of data such
as application launch parameters or an applets result. It has no
relation to fsp-srv's IStorage.
2020-07-06 19:57:00 +00:00
Billy Laws
162df93870 Add an empty pctl implementation
This is required by Puyo Puyo Tetris. It may be stubbed further if
needed in the future.
2020-07-06 20:46:38 +01:00
Billy Laws
23d6b596b2 Add an empty aoc:u implementation
This is required by Puyo Puyo Tetris, it will be extended in the future
to allow using real DLC with the emulator.
2020-07-06 19:43:17 +00:00
Billy Laws
4a88adafb6 Implement the set service together with GetAvailableLanguageCodes
The 'set' service is used to obtain user settings such as language.
This is used by Puyo Puyo Tetris.
2020-07-06 19:17:20 +00:00
Billy Laws
801382e43a Implement pl:u for accessing shared fonts
Fonts are stored in an array of TTF data with an 8 byte header
containing a magic and an XOR'd length. Instead of requiring users to
provide original Nintendo fonts we pack open source replacements.
They are generated with the scripts here
https://github.com/FearlessTobi/yuzu_system_archives. All the fonts are
licenced under the Open Font or Apache 2 License so we can include them
all freely.
2020-07-06 19:17:02 +00:00
Billy Laws
45b4811c5b Create adaptive icons for pinned games 2020-07-01 06:24:41 +00:00
Billy Laws
f2c5b96b04 Revert "Use X9 rather than LR when jumping to the guest"
This caused issues loading retail games and will be soon obsoleted by
pre-patching.
This reverts commit f381883c0b.
2020-07-01 06:24:41 +00:00
Billy Laws
a53d6266c7 Implement a basic NSP loader
An NSP (Nintendo Submission Package) is effectively a PFS0 containing
NCAs, there are also tickets and a CNMT file which contains metadata
about updates. The current implementation is very basic and only
support Control and Program NCAs which is enough for loading games.

Support for updates and dlc will be added at a later date.
2020-07-01 06:24:41 +00:00
Billy Laws
a5513bd7e6 Implement an NCA parser and loader
Nintendo Content Archives are used to store the assets, executables
and updates of applications. They support holding either a PFS0 or a
RomFS.

An NCA's ExeFS can be loaded by placing each NSO sequentially into
memory, starting with rtld which will link them together.

Currently only decrypted NCAs are supported, encryption and BKTR
handling will be added at a later time.
2020-07-01 06:24:41 +00:00
Billy Laws
db64f53cfb Implement filesystem backends for RomFS and Partition FS
RomFS is a hierarchial filesystem where each level is made up of a
linked list of files and child directories. It is used in NCAs to store
the applications icon as well as by applications themselves for
accessing assets.

Partition FS encapsulates both the HFS0 found in XCIs and the PFS0 used
for ExeFS images and NSPs, it is purely file based and has no support at
all for directories aside from the root.
2020-07-01 06:24:41 +00:00
Billy Laws
2071796696 Implement basic filesystem support in VFS
This mirrors Horizon's IFileSystem, it will be used by the nsp and nca
loaders to read their content.
https://switchbrew.org/wiki/Filesystem_services#IFileSystem
2020-07-01 06:24:41 +00:00
Billy Laws
e2bd50a1fd Implement a simple directory system in VFS
This mirrors Horizon's IDirectory:
https://switchbrew.org/wiki/Filesystem_services#IDirectory
2020-07-01 06:24:41 +00:00
Billy Laws
7114ad1734 Use the first available language entry in NACPs rather than hardcoding
American English

Without this, if an NACP didn't contain a title for a US english it
would show in the UI as blank.
2020-07-01 06:24:41 +00:00
Billy Laws
26025d9adf Implement backing modes
These are used to determine the capabilities of a backing.
2020-07-01 06:24:41 +00:00
Billy Laws
b94248cec0 Move the loader backing out of the main loader class
The presence of a backing is an implementation detail.
2020-07-01 06:24:41 +00:00
Billy Laws
3a23ec06a4 Implement NSO loader
The NSO format is used by all retail games and some homebrew. It
supports compressing sections with lz4 and dynamic linking through the
use of rtld.
2020-06-28 07:54:12 +00:00
Billy Laws
bf46293fc7 Commonise executable loading infrastructure
Mapping and writing segments into memory is now handled by a common
function that can be shared between all loaders. All they need to do now
is to pack each segment into a common struct.
2020-06-28 07:54:12 +00:00
◱ PixelyIon
e7f880e782 Clear floating point registers on guest entry
Mesosphere does this too:
fa4a96d021/libraries/libmesosphere/source/arch/arm64/kern_k_thread_context.cpp (L135)
2020-06-28 03:49:10 +00:00
Billy Laws
f381883c0b Use X9 rather than LR when jumping to the guest
The homebrew ABI expects LR to be zero otherwise on exit it will jump to
it upon exit rather than exiting. Use X9 instead to fix this.
2020-06-28 03:49:10 +00:00
Billy Laws
b823f1cd0d Correct the handle argument in svcGetThreadPriority
The thread handle is sent in w1 rather than w0.
2020-06-28 03:49:10 +00:00
Billy Laws
138e219e0c Emulate TPIDR_EL0 accesses using TLS 2020-06-28 03:49:10 +00:00
Billy Laws
c423a66020
Fixes for control IPC (#57)
* Correctly handle -WithContext IPC Requests

They should be treated the same as the non WithContext variants.

* Only send domain data on non-control IPC responses

Control IPC doesn't make use of domains so we shouldn't send extra data
in the response.

* Add the IStorage implementation to CMakeLists
2020-06-23 18:49:06 +00:00
Billy Laws
8d470d3218 Introduce basic RomFS support
This commit adds support for reading the RomFS data from an NRO and
obtaining an IStorage handle to it through 'OpenDataStorageByCurrentProcess'.
There is currently only support for reading and no support
for enlarging or writing.

Also fixup a few capitalisation issues.
2020-06-22 16:45:32 +00:00
Billy Laws
b9b889fc3c Add loader to the emulator state
This will allow accessing data from the loader within other parts of the
emulator, such as in fssrv for RomFS.
2020-06-22 16:45:32 +00:00
Billy Laws
1bb979a7e1 Introduce new loader JNI for parsing application data and port Kotlin
code to use it

This will help ease the process of implementing new formats in the
future and remove duplicated code.
2020-06-20 20:26:53 +00:00
Billy Laws
dca06f2b49 Rework loader abstractions and the NRO loader to use the vfs APIs
This will make it easier for us to implement more executable formats in
the future.
2020-06-20 20:26:53 +00:00
Billy Laws
4950dd5638 Introduce NACP class for reading control data
This contains info such as the application name and publisher.
2020-06-20 20:26:53 +00:00
Billy Laws
5c103ce9a6 Introduce basic VFS backing system together with two implementations
- The backing system provides a flexible way to access a a region of
   abstract memory.

- It is currently barebones and only has support for reading data but
   this will be expanded as necessary.

The current implementations are:
- OsBacking - A backing that abstracts a linux file descriptor
- RegionBacking - A backing that creates a region from a portion of an
   existing one
2020-06-20 20:26:53 +00:00
◱ PixelyIon
4d787c904e Improvements to UI/UX
This commit makes a few improvements to the UI/UX:
* Crop Game Icons to ImageView
* Controller Support for Game List
* EmulationActivity is fullscreen now
2020-04-24 17:09:13 +05:30
Ivar
f909c00e31 Improve README
This commit improves the README by changing the license and adding in more extensive credit + changing up other parts of it.
2020-04-24 02:33:36 +05:30
◱ PixelyIon
925d05d049 Add String Support to IPC Push/Pop
This commit does some minor renaming/reordering in IPC and adds support for strings to IPC Push/Pop. It also fixes a tiny regression with the frametime display.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
05f3e3c3ac Improve NCE and Finish Up Refactor
This commit mainly finishes up refactor by fixing everything brought up in the CR + Improving NCE somewhat and actually killing the child processes properly now.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
c76ef3730b Move to MPL-2.0
We earlier moved to LGPLv3.0 or Later. This was a mistake as what we wanted was being able to link to proprietary libraries but LGPL is the opposite and it allows linking proprietary libraries to libskyline instead. After further consideration, we've moved to MPL-2.0, it allows linking to proprietary libraries and is a standardized license as compared to adding an exception to GPL.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
1c54bff215 Make AppDialog Expand Fully and Fix Race in MainActivity::addEntries
This commit mainly fixes the issue with `AppDialog` where it didn't expand fully in landscape leading to UX issues. In addition, a race condition was fixed in `MainActivity::addEntries`, in regards to `foundCurrent` being returned incorrectly. The text in the performance counters were also made yellow and much more opaque.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
a0b9a635ca Fix Killing Guest Processes in KThread::Kill and fix TID/PID naming
This commit mainly fixes the problem with process leakage before where the guest process wouldn't be killed. In addition, it clears up the problem with naming differences with PID/TID where purely PID was used before but that term is generally used to refer to the PGID. So, `KProcess` has a `pid` member but `KThread` has a `tid` member.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
4637b4ac97 Run Android Studio Formatter on the Project
This commit fixes a lot of style errors throughout the project by letting the Android Studio Formatter fix them. This commit also splits the Circular Buffer into it's own file.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
7f78a679c3 Add Performance Statistics to EmulationActivity
This commit adds performance statistics to the emulator that can be toggled in preferences. The layout of `EmulationActivity` was also changed from `ConstraintLayout` to `RelativeLayout` due to poor performance of the former.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
fb1a158e8f Optimize Audio by using Circular Buffers, Handle Device Disconnection and Fix Some Bugs
This optimizes a lot of audio by using a circular buffer rather than queues. In addition to handling device disconnection using oboe callbacks and fix bugs in regards to audio saturation.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
4e4ed5aac0 Refactor Audio
This commit refactors a lot of audio by fixing a lot of nitpicks here and there.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
af98455ede Add Mutexes to Logger, Introduce util::MakeMagic and Refactor IPC
This commit adds mutexes to the logger so they produce a valid log file rather than breaking due to a race condition. It also introduced `util::MakeMagic` so the magic functions are far more clear. A small refactor of IPC was also done which cleared up some of the for loops.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
91644255da Add Preference For Always Showing Game Information
This commit mainly adds a preference for always showing the game information. In addition to a tiny tweak to the contributing guidelines.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
4500f54e85 Refactor Activities and Improve MainActivity
This commit mainly refactors all activities to bring them in-line with the guidelines and makes certain improvements such as using `Snackbar`s rather than `Toast`s where possible, Using `CoordinatorLayout` to allow the app bar to hide itself when possible, the app bar has also been consolidated into it's own layout file to increase layout redraw performance as existing views can be used.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
0a5460f4fc Refactor Utilities
This refactors the utilities which at the moment is only `RandomAccessDocument`.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
2ce8581aa6 Refactor + Redesign AppDialog
This commit refactors `AppDialog` by bringing it in line with the guidelines. In addition, it improves the design of it substantially by modifying the layout and making it a `BottomSheetDialogFragment`.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
ce4d295d81 Refactor Preferences and Loaders
This refactors all preferences and loaders in regards to This commit mainly refactors the adapters by adding spacing, comments and following other guidelines. In addition, preferences are now moved into their own sub-package and `LicensePreference` has a minor UI update.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
c9dcb070ad Grid Layout Support
With `RecyclerView` being used rather than `ListView` or `GridView`. It's now possible to display the items in a flexible manner and so support for a grid view in addition to the already existing list view was added in.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
d86d5c1a35 Refactor and Convert Adapters to RecyclerView.Adapter
This commit mainly refactors the adapters by adding spacing, comments and following other guidelines. In addition, it moves from using `BaseAdapter` to `RecyclerView.Adapter` which leads to much cleaner adapter classes.
a
2020-04-23 22:26:27 +05:30
◱ PixelyIon
55a9f8e937 Refactor all Game-related Kotlin Classes/Objects
This refactors most game-related classes and objects mainly adding spacing, adding comments and making improvements if possible.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
f4968793b8 Fix minor inaccuracy with VMM and mutexes
This commit fixes a tiny inaccuracy with the VMM which was a problem with block insertion, The mutexes on the other hand had a minor issue regarding owner checks.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
41ddaf7f33 Add in Licenses to Settings
This commit adds in all the licenses to the end of settings by introducing a new type of preference: "LicensePreference"
2020-04-23 22:26:27 +05:30
◱ PixelyIon
820bbaede5 Fix occurrence of multiple headers in game list + Make TinyXML2 Static
This commit mainly fixes multiple headers in the game list, which was caused by using the wrong variable for the recursive function. In addition, it makes TinyXML2 statically linked to libskyline which makes it the lone shared objects present in APKs.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
72272fa4c2 Replace xdrop/fuzzywuzzy with tdebatty/java-string-similarity
This commit replaced `xdrop/fuzzywuzzy` with `tdebatty/java-string-similarity` as the former is under an incompatible GPLv3 license.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
c37f350c02 Move from GPLv3 to LGPLv3 or later
Skyline has been licensed with GPLv3 but as we want to look into optional ads in the future, and that would require linking AdMob SDKs which are proprietary. So, we decided to move to LGPLv3 so we could keep that option open as a revenue stream. 

We've gathered consent from all contributors for the license change:
* PixelyIon - https://github.com/PixelyIon (Commit Author)
* Zephyren25 - https://github.com/zephyren25
* ByLaws - https://github.com/bylaws
* IvarWithoutBones - https://github.com/IvarWithoutBones
* Cyuubi - https://github.com/Cyuubi
* greggamesplayer - https://github.com/greggameplayer
2020-04-23 22:26:27 +05:30
◱ PixelyIon
c3c9982ddc Add Comments to Time Services + Fix IDE Case Conventions
This commit mainly just adds comments to parts of time services and fixes the case conventions in Android Studio.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
a60ab89c5d Fix Include Order
This commit fixes the include order of files throughout the code-base to be compliant with the new guidelines.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
d75d30b809 Minor Audio Refactor (and fix sm:IUserManager service name)
This makes some tiny changes to audio to make them compliant with the guidelines. In addition, to changing `IUserManager:IUserManager` to `sm:IUserManager`.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
9f0ad46903 Refactor OS/Kernel
This refactors the OS/Kernel by adding spacing and fixing/adding comments in some cases, in addition to some other minor fixes here and there.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
773ee25e5a Refactor Common
This refactored common by:
* Moving out as many constants to class/function local scopes from being declared in `common`
* Spacing out common and any function to which a constant was moved out to
* Fixing comments here and there
In addition, some naming inconsistencies were fixed as well.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
bbdd41a86c Refactor NCE
This commit mainly just refactors NCE by adding spacing and fixing other minor errors. In addition, it adds comments to `nce/guest.h` and `nce/instructions.h`.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
42d982c6fb Refactor Display Services and GPU
This commit addresses the incorrect hierarchy of the GPU and refactors them at the same time. Now, the hierarchy much closely matches HOS. This commit also introduces a texture classes, albeit they're not complete and only partially implemented.
2020-04-23 22:26:27 +05:30
◱ PixelyIon
5f072da2b8 Fix GitHub Actions Build + Move Stack to Shared Memory
This commit mainly fixes GitHub Actions builds which were broken due to an outdated version of Android NDK. In addition, it moves all stack to shared memory.
2020-04-23 22:26:27 +05:30
Max K
38f63eced3 Some small refactoring for the app (#38)
* Add Gradle versions plugin for simple dependency updates
* Update dependency versions
* Refactor MainActivity to be more Kotlin-like
* Simplify LogActivity a little
* Remove useless run calls in GameDialog
2020-04-23 22:26:27 +05:30
Billy Laws
4af37c4367 Refactor am services
Use the new service naming scheme.
Remove redundant casts and template specifiers in response.Push.
2020-04-23 22:26:27 +05:30
Billy Laws
616222a6db Refactor apm services
Use the new service naming scheme.
Switch to std::array for performanceConfig.
2020-04-23 22:26:27 +05:30
Billy Laws
52d47120a8 Refactor audio backend and services
Use the new service naming convention.
Move both audout and audren into one directory.
Close the audio stream upon emulator exit.
2020-04-23 22:26:27 +05:30
Billy Laws
2e0ac9bdd5 Refactor fatal services
Use the new service naming convention.
2020-04-23 22:26:27 +05:30
Billy Laws
644cfbe332 Refactor filesystem services
Use the new service naming convention.
2020-04-23 22:26:27 +05:30
Billy Laws
524cd26649 Refactor HID services
Use the new service naming convention.
Tidy up some unused includes.
Move constants to service namespace.
2020-04-23 22:26:27 +05:30
Billy Laws
f4620dd992 Refactor settings services
Use the new service naming convention.
2020-04-23 22:26:27 +05:30
Billy Laws
c8846ca07b Refactor service manager services
Use the new service naming convention.
Fix some small code style issues with {} on if statements
2020-04-23 22:26:27 +05:30
Billy Laws
ab33f692c6 Refactor time services
Use the new service naming convention.
Split out each sub-service into it's own file.
Fix some incorrect comments.
2020-04-23 22:26:27 +05:30
Billy Laws
704a5bdcb1 Refactor base service implementation
Remove looping support - it is slow and no services use it.
Store service name in in base service class - removes the
need for having sub-services in the service name map.
General code clean up - remove {} from single if statements etc.
2020-04-23 22:26:27 +05:30
Billy Laws
bbe61e37f2 Add support for audio renderer services
Audren is used by many games and homebrews to make use of more advanced
audio features than audout.
2020-02-16 12:53:50 +00:00
Billy Laws
ddd1fc61ef audio: Add support for resampling tracks
Uses the resampling algorithm derived from HOS by the Ryujinx team
to resample the stream on the fly to 48KHz.
It is currently used only in audout.
2020-02-16 12:53:50 +00:00
Billy Laws
93206d5a3c Add support for audio playback via audout
Adds an audio manager to state to manage the creation of audio tracks and an audout service implementation that interfaces with it.
2020-02-16 12:53:50 +00:00
◱ PixelyIon
08bbc66b09 Fix CR issues and Game Duplication + Move to Vector for Memory Map
This commit fixed the issues outlined in the CR (Mainly correlated to formatting), moves to a sorted vector from a sorted list for the memory map in addition to using binary search for sorting through rather than iteratively and fixes item duplication in the game list when directory is changed in Settings.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
66d20a9429 Fix GroupMutex and Clock Rescaling
This commit mainly fixes GroupMutex and clock rescaling. In addition, clock rescaling is no longer performed if the CNTFRQ_EL0 of the host device is same as that of the Switch (19.2MHz) which is fairly common on higher end devices.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
003e9c5a01 Fix issues with not being able to run ROMs concurrently
This commit fixes GroupMutex and by extension issues with trying to run ROMs without quitting the application in between.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
694c8ef4e2 Addition of Conditional Variables
This commit adds working conditional variables, in addition to the mutex and threading implementation. It directly depends on the memory optimization from the previous commit to be able to perform atomic operations on the mutex.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
03b65bd90a Optimize Memory Implementation using Shared Memory
This commit further improves the memory implementation by using shared memory for all allocations so we won't have to depend on a kernel call for doing any host <-> guest memory transfers.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
d02267c34f Add support for threads and mutexes
This commit adds support for threading and mutexes. However, there is also a basis of conditional variables but these don't work due to the lack of a shared memory model between the guest and host. So, conditional variables will be deferred to after the shared memory model is in place.
2020-02-15 10:25:14 +00:00
Billy Laws
2aebf04b4b guest: Add memory barrier after saving context
Forces all registers to be saved before signalling to the kernel that we
are ready; without this the kernel may read incorrect context data
causing undefined behaviour.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
00cdc1fd6f Refactor the memory implementation and add Regions
This commit does a major refactor of the memory implementation, it forms a memory map which is far cleaner than trying to access it through a handle table lookup. In addition, it creates a common interface for all memory kernel objects: KMemory from which all other kernel memory objects inherit. This allows doing resizing, permission change, etc without casting to the base memory type.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
b13002f0e1 Fix some minor inaccuracies in SVCs and Services
This commit fixes some minor inaccuracies in SVCs and some Service functions.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
36f05ee7e0 Fix svcSignalProcessWideKey and svcWaitSynchronization timeout overflow
This commit mainly just fixes svcSignalProcessWideKey and svcWaitSynchronization and their related issues.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
493a1a93ec Use .clang-tidy and remove madvise DO_FORK/DONT_FORK calls
This commit causes Android Studio to use the .clang-tidy file for configuration and removes madvise DO_FORK/DONT_FORK calls as they cause problems on many devices and are mostly unnecessary.
2020-02-15 10:25:14 +00:00
Billy Laws
81dba3da4b KProcess: Use process_{read, write}_vm to access guest memory
This is much quicker than pread/write however we now need to abide by the
regions permissions, so fallback to pread/write if read/write vm fails.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
65018aedbc Complete making the kernel thread-safe #2 + Fix Shared Memory Implementation
This commit makes the kernel completely thread-safe and fixes an issue that caused libNX games to not work due to an error with KSharedMemory. In addition, implement GroupMutex to allow the kernel threads to run in parallel but still allow them to not overlap with the JNI thread.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
de6d8d8f48 Work on making the kernel thread-safe #1 + add asynchronous ROM scanning
This commit makes the kernel thread safe in some instances (but not fully) and showcases the significantly improved performance over the ptrace method used prior. In addition, scanning for ROMs is now done asynchronously.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
970dde8c27 Move from ptrace to junction branching and make kernel multithreaded
This commit is a huge step in the direction of better performance, as we move from ptrace to junction branching and have kernel call overhead similar to that of a native kernel call! In addition, this sets the base for the kernel to go fully multi-threaded. However, the kernel is currently not thread-safe and therefore this commit currently causes a crash.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
b84859d352 Remove support for multiple guest processes
This commit removes support for more than one guest processes as it requires a fair bit of extra code to support in addition the HLE service implementations don't support it anyway.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
48d47a2b25 Move from dependency on JNI and Implement AtomicMutex
This commit is the start of moving towards a lockless and faster kernel which can run multiple independent threads with fast userspace synchronization.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
3e9bfaec0e Introduce Basic Junction Patching
This commit introduces basic junction patching or patching code to jump to a junction then execute intermediate functions and jump back.
2020-02-15 10:25:14 +00:00
◱ PixelyIon
f7ad017726 Adapt GetDefaultDisplayResolution to Push/Pop System
The PR: https://github.com/skyline-emu/skyline/pull/13 added in GetDefaultDisplayResolution but it used the older WriteValue function to write the data back. Moving to the Push/Pop system fixes this.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
abaa404baa Support creating launcher shortcuts for ROMs
This commit adds the ability to create launcher shortcuts to specific ROMs for convenience.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
4a72704c4d Associate with NRO files
This commit adds the ability to open NRO files directly from a file browser rather than the emulator itself.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
8d1545aabf Addition of Dark Theme and Compatibility with Android 10 Dark Mode
This commit adds support for Android Night Mode and adds in a dark theme for the UI.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
4ab9af04ff Add ability to open a ROM directly and Make URI Persistent
Before ROMs needed to be opened by setting the path, now they can be directly opened using the file picker. In addition, Document Tree URIs are now set to be persistent rather than being revoked after reboot.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
c5dce22a8c Fix JNI Race Condition, Fix Release Builds and Fix Searching
This commit fixes JNI race conditions by usage of a mutex, fixes a bug in release builds due to ProGuard member obfuscation and fix searching by fixing the HeaderAdapter filter.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
b3e811d488 Adapt C++ backend to changes
This commit adapts the C++ backend to the Kotlin frontend by moving to usage of file descriptors and, provides an interface to access frontend code via JNI which is used to check the state of the activity and catch events such as surface destruction. In addition, this commit fixes some minor linting errors and changes the CMake version to 3.10.2+.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
e4dc602f4d Migrate to SAF APIs for file access
This commit moves from conventional file access to using URIs and such provided by the SAF APIs.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
9db0c20c92 Move from Java to Kotlin
This commit converts all Java code to Kotlin and improves the structure and performance of most rewritten parts.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
38716989ae Improve IPC interface
This commit changes how IPC is interacted with in two ways:
* Simplify all buffers into just InputBuffer and OutputBuffer
* Use pushing/popping for data payload
2019-12-11 17:31:12 +00:00
◱ PixelyIon
745cb208a6 Optimize deswizzling implementation and support multiple formats
The deswizzling implementation currently writes linearly and reads non-linearly, this is non optimal as the MMU cannot read ahead. This flips that and reads linearly while it writes non-linearly. This is based on: 324a3624ac/nx/source/display/framebuffer.c (L189).
2019-12-11 17:31:12 +00:00
◱ PixelyIon
e11d7d9ce0 Fix threading implementation & Fix SVC logging
This commit fixes the threading implementation and fixes errors in SVC logging and improves them in general.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
1956a3bbbb Make SVCs more accurate & Improve KSharedMemory
This commit adds logging to almost all SVCs with the exception of svcGetSystemTick and adds accurate error handling to them. It also improves how KSharedMemory is handled.
2019-12-11 17:31:12 +00:00
◱ PixelyIon
26a67f70b7 Move services out of the kernel and fix service registration
In addition, this adds a constructor for "RegionInfo".
2019-12-11 17:31:12 +00:00
greggameplayer
42239ae58b Implement additional applet services and functions
This commit implements the services ISystemAppletProxy, IOverlayAppletProxy & IAppletCommonFunctions and implements the function GetDefaultDisplayResolution.
2019-11-17 22:29:58 +00:00
◱ PixelyIon
0d141b71e9 Min. API version to 26 (8.0) and use ASharedMemory
Move Minimum API version to Android 8.0 and switch from /dev/ashmem to ASharedMemory APIs.
2019-11-16 01:08:50 +05:30
◱ PixelyIon
423540328a Fix svcWaitSynchronization
svcWaitSynchronization would return the handle of the object instead of the index of it's handle earlier, this is now fixed.
2019-11-15 19:30:04 +00:00
◱ PixelyIon
b3517357e1 Fix: Crash on reading domain header from Control message
The application would crash if there was a control request from a domain message. As it would still try to read the domain header in the message.
2019-11-15 19:30:04 +00:00
◱ PixelyIon
c005d7df74 Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-15 19:30:04 +00:00
bylaws
2e0014ba7c Fix External Storage Access on Android 10 (#10)
Android 10 and above block access to the legacy java file APIs on external storage without the 'android:requestLegacyExternalStorage' flag set. This is a temporary measure while we adopt newer APIs.
2019-11-09 13:39:40 +00:00
◱ PixelyIon
19eae34315 libNX FS Initalization (v0.3)
What was added:
* libNX FS initalization
What was fixed:
* Release builds
2019-10-18 16:22:38 +05:30
◱ PixelyIon
e44809355c libNX Time Initalization
What was added:
* Time service
* CNTPCT_EL0 redirected to CNTVCT_EL0
2019-10-17 01:53:35 +05:30
◱ PixelyIon
2476c5d48a libNX HID initialization
What was added:
* HID Service
* Support for Mutexes and Conditional Variables
What was improved:
* Service API now creates one instance per Session rather than a single instance for all Sessions
* Changed std::map objects into std::unordered_map in KProcess
* Comments on enumeration values
2019-10-16 18:11:30 +05:30
◱ PixelyIon
ec71735ece Fixes and Additions for HID support
The following things were fixed:
* KSharedMemory
* KSyncObject (and how waiting on them works)
* Inclusion of Headers
What was added:
* Transfer Memory
* svcSleepThread
2019-10-13 13:34:47 +05:30
◱ PixelyIon
f7effe86ae libNX Applet Manager Initalization
This commit completes the 'am' initialization for libNX
2019-09-27 21:39:56 +05:30
◱ PixelyIon
a5d63c9bbb Add reverse name lookup services for better debugging and fix bugs 2019-09-26 22:34:20 +05:30
Ryan Teal
45f4255ff6
Implement some appletOE calls 2019-09-26 16:37:24 +01:00
◱ PixelyIon
da74d8d78c Some minor fixes
This fixes some files so release now works and removes the dependancy of "<cutils/ashmem.h>" as it isn't present on all NDK includes.
2019-09-25 15:02:17 +05:30
◱ PixelyIon
7ad2e11705 Milestone 3 - Services API
This commit adds the Services API and implements some services. It also changes the name of the application to Skyline and replaces the icon.
2019-09-25 02:28:25 +05:30
◱ PixelyIon
a54f5ff578 Milestone 2 - Memory & IPC Marshalling
This commit introduces a new memory model that supports true shared memory with separate permissions for remote and local processes, implements svcQueryMemory and completes svcGetInfo further, adds IPC support with the IpcRequest and IpcResponse classes.
2019-09-25 02:28:25 +05:30
◱ PixelyIon
9e1e06c64b Milestone 1 - Processes & Threads
Reworks the API a fair bit and adds documentation to almost everything.
2019-09-25 02:28:25 +05:30
◱ PixelyIon
62cb561888 Implement sharing of logs using Hastebin 2019-08-29 18:10:39 +05:30
◱ PixelyIon
da55a1d9ba Rearrange OS folder 2019-08-21 17:07:43 +05:30
Starlet Leonhart
7dd04afdcf Code clean up by friendly neighborhood Cyuubi 2019-08-21 02:22:45 +05:30
◱ PixelyIon
9657064740 Fix 32-bit register reading/writing
Co-Authored-By: Ryan Teal <rynteal@protonmail.com>
2019-08-19 03:37:47 +05:30
Ryan Teal
9a36d5fcf9
Remove unused include in kernel.cpp 2019-08-18 15:32:52 +01:00
Ryan Teal
d4e2079474
Fix casts in cpu.cpp 2019-08-18 14:08:02 +01:00
◱ PixelyIon
342fee841f Fix C++ entry and tiny cleanup 2019-08-18 18:31:32 +05:30
Ryan Teal
113bfd059e Halt execution after unimplemented SVC 2019-08-18 12:40:07 +01:00
◱ PixelyIon
3855daa849 Rename to LightSwitch and emu.lightswitch 2019-08-18 12:57:55 +05:30
◱ PixelyIon
449f0a0248 Addition of Remapping and Unmapping to Memory class 2019-08-18 03:48:27 +05:30
◱ PixelyIon
92c1491a84 Native Code Execution (NCE)
It's finally here, we're executing code completely natively. This is something that would completely break the project if it wasn't possible.
2019-08-17 04:34:37 +05:30
Ryan Teal
182729b247
Add logcat to the logger
Shame, Pixelylon, shame.
2019-07-26 19:31:42 +01:00
◱ PixelyIon
3bdbe41c13 Fix: Crash if log file is missing + Crash on random interrupt 2019-07-25 02:31:31 +05:30
◱ PixelyIon
696ebde527 Rewrite C++ parts and UI update
This update took way way too long to create. However, it was worthwhile. :)
2019-07-25 01:49:43 +05:30
Ryan Teal
fd2bf8ebd5
Merge branch 'master' of https://github.com/Cyuubi/Lightswitch 2019-07-09 22:36:14 +01:00
Ryan Teal
4cd7c985f0
IPC Episode 1 - Prologue 2019-07-09 22:35:51 +01:00
Starlet Leonhart
18de764e96
Fix something I keep forgetting to do in unicorn.h 2019-07-05 12:33:31 -04:00
Ryan Teal
e44f7f8feb
Basic KObject implementation 2019-07-05 13:33:58 +01:00
◱ PixelyIon
c7fafd3f72 Remove pop-up image for non-libnx NROs 2019-07-04 02:21:45 +05:30
◱ PixelyIon
4da7a9cdbc Support non-libnx NROs 2019-07-04 02:18:43 +05:30
Ryan Teal
07fb87b441
Use NRO0 verification instead of ASET verification 2019-07-03 21:02:59 +01:00
◱ PixelyIon
012b1df5d8 NRO Validation
The NRO files are now validated before they're added to the game list.
2019-07-04 01:25:06 +05:30
Ryan Teal
0eef380781
Implement GetInfo #8 IsCurrentProcessBeingDebugged 2019-07-03 20:53:51 +01:00
◱ PixelyIon
3ed3365d81 UI update: Pop-up Icons
The icons of games will now pop-up if you click on them.
2019-07-04 00:49:21 +05:30
◱ PixelyIon
ae6dddf9f6 UI update: Snackbars + NRO Metadata
This UI updates adds Snackbar notifications for actions and extracts metadata in the form of an icon, name and author from NRO files to display in the game list.

Co-Authored-By: Ryan Teal <zephyren25@users.noreply.github.com>
2019-07-04 00:14:28 +05:30
Ryan Teal
bbf02e29e5
Fix hacky icon loading method 2019-07-03 18:42:12 +01:00
Ryan Teal
f0daeebb03
Clean up imports 2019-07-03 18:28:22 +01:00
Ryan Teal
e84e0c7705
Add NRO icon loading 2019-07-03 18:27:49 +01:00
Ryan Teal
892960e8fd
Add launcher icon 2019-07-03 15:58:38 +01:00
Ryan Teal
eb8f9928ed
Add NRO TitleEntry parsing 2019-07-03 15:42:08 +01:00
◱ PixelyIon
15f8c4b5f0 Addition of a UI: Settings and NRO list
This update adds a minimal UI.
2019-07-03 04:49:45 +05:30
Starlet Leonhart
d4ddbe9b88 Add title ID in getinfo 2019-07-02 17:55:31 -04:00
Starlet Leonhart
be79abd213 Another minor code clean up, because I'm dumb 2019-07-02 17:51:34 -04:00
Starlet Leonhart
f10e4463fe Clean up again 2019-07-02 17:48:42 -04:00
Ryan Teal
13b1354a00
Implement svcGetInfo 2019-07-02 22:45:34 +01:00
Starlet Leonhart
040121340a Minor code cleanup 2019-07-02 17:43:49 -04:00
Ryan Teal
e108d4a0be
Implement svcOutputDebugString 2019-07-02 22:34:08 +01:00
Starlet Leonhart
80955679e0 Remove ARMv7 support, turns out I was talking out of my ass. 2019-07-02 17:32:20 -04:00
Starlet Leonhart
ca1eb1d7e3 Add ARMv7 libunicorn static library 2019-07-02 17:09:06 -04:00
Ryan Teal
f8605a417d
Add SVC handler 2019-07-02 21:04:52 +01:00
Ryan Teal
ffbcf0fb33
Add as include directory 2019-07-02 21:00:57 +01:00
Ryan Teal
8080760cd5
Remove unused forward declarations in cpu.cpp 2019-07-02 20:46:39 +01:00
Ryan Teal
5cece7daed
Fix Cyuubi's CPU implementation 2019-07-02 20:40:35 +01:00
Ryan Teal
67b2ee3ea5
Add TLS memory map 2019-07-02 16:30:43 +01:00
Ryan Teal
4310ffd4dd
Fix interrupt hook and memory maps 2019-06-30 22:07:10 +01:00
Starlet Leonhart
75c608fd25 Add CPU class 2019-06-30 12:42:55 -04:00
Ryan Teal
39b591bcfd
Move namespaces to core:: 2019-06-30 16:00:17 +01:00
Ryan Teal
2f24f28084
An actual memory implementation 2019-06-30 15:39:56 +01:00
Ryan Teal
64f2f90087
Add external storage permission dialog 2019-06-30 15:35:25 +01:00
Ryan Teal
856f00bf7e
Clean up main source file 2019-06-30 15:04:22 +01:00
Ryan Teal
1142e397c6
Implement NRO loader 2019-06-30 14:26:57 +01:00
Starlet Leonhart
faad5a7c72 push some bullcrap 2019-06-29 12:13:36 -04:00
Starlet Leonhart
89346359cd Port ARM64 unicorn sample 2019-06-29 10:21:59 -04:00
Starlet Leonhart
6ebee35104 Remove unneeded unicorn headers 2019-06-29 10:06:00 -04:00
◱ PixelyIon
875fe194f6 Structure Code and Link libunicorn 2019-06-29 19:05:24 +05:30
Starlet Leonhart
2e5d107f5d add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00