- Added osKernelConfig_s/osSharedConfig_s structs
- Added OS_KernelConfig/OS_SharedConfig macros for accessing the pages
- Replaced 0x1FF8nnnn hardcoded addresses with struct accesses
- Added osIsHeadsetConnected function
- Refactored and rewritten RTC time support with the correct algorithm
(many thanks to @TuxSH for reverse engineering the PTM sysmodule):
- Fully added and documented the osTimeRef_s structure
- This replaces the previous internal datetime_t struct type
- Added osGetTimeRef function:
- This replaces the previous internal getSysTime function
- Added missing barrier to the lock free reading algorithm
- osGetTime rewritten to implement the drift-correction algorithm
- **This introduces a dependency to __aeabi_ldivmod**
- __libctru_gtod rewritten to reuse osGetTime
- Added data memory barriers where required to ensure intercore safety
- Changed LightLock to handle 0 during locking instead of silently failing
(this means trivially initialized/zerofilled LightLocks are now supported)
- DSP wrapper is now in charge of handling sleep/awake/cancel events
- Added DSP hook mechanism (similar to APT hook)
- The DSP component now gets automatically unloaded/reloaded as needed
- NDSP now uses DSP hook instead of APT hook to manage lifetime
- Moved sleep/wakeup component management logic into NDSP
- APT now calls into DSP wrapper in order to arbitrate access to the DSP
- Launching libapplets no longer relinquishes DSP rights - this means
music can now be played in the background during libapplet activity
- GSPGPU changes:
- gspInit now properly initializes the event queue, GSP shared memory
and first-time initialization - previously this was done in gfxInit.
- Removed gspInitEventHandler/gspExitEventHandler in line with above.
- Added gspPresentBuffer for pushing a framebuffer to the internal
GSP swap queue (previously this was an internal function in gfx.c).
- Added defines for screen IDs and screen dimensions.
- Removed sharedGspCmdBuf param from gspSubmitGxCommand (now uses
the correct GSP shared memory address automatically).
- Removed gxCmdBuf global variable (no longer needed as per above).
- Removed GSPGPU_REBASE_REG (leftover from early 3DS homebrew).
- GFX changes:
- Documentation overhaul and code cleanup.
- Simplified implementation using the enhanced GSPGPU service wrapper.
- Top left/right framebuffers now form a single allocation instead of
being split into two separate allocations.
- Fixed LCD configuration mode when framebuffers are on VRAM.
- Removed the ability to forcefully swap the screens: gspPresentBuffer
is now always used (i.e. GSP shared mem). The 'immediate' parameter
of gfxConfigScreen now does nothing, and gfxSwapBuffers/Gpu now do
the same thing.
- Removed gfx{TopLeft,TopRight,Bottom}Framebuffers global variables
(please use gfxGetFramebuffer instead as originally intended...)
- APT parameter handling now follows official sw a bit more closely
(with the APT thread acting as a filter which then relays the
status to the main thread using a LightEvent)
- RUNFLAG_APTREINIT (hax 2.x) handling code has been simplified and
made (hopefully) more robust
- Fixed sleep handling when the app is inactive (i.e. app is suspended)
- APT debug callback now guarded by an #ifdef (LIBCTRU_APT_DEBUG)
- Removed old Citra response cmdheader workaround
- Other miscellaneous fixes I probably forgot to talk about