- Added the ability to duplicate the left eye image to the right eye
(allows apps to skip rendering to the right eye framebuffer when
the 3d slider is set to 0.0)
- Deprecated gfxConfigScreen
- Use reslimit svcs to retrieve free mem (suggested by @TuxSH) - this
removes the hardcoded assumption that the process is in APPLICATION.
- The algorithm for calculating default app/linear heap sizes has been
tweaked to ensure 32MB of linear heap are available for normal apps
running on Old3DS consoles under appmemtype 0 (i.e. the default).
- Misc cleanup and error checking.
- 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...)