Changes

1,324 bytes added ,  21:59, 18 October 2023
m
no edit summary
Line 10: Line 10:  
| 0x00010082
 
| 0x00010082
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:WriteHWRegs|WriteHWRegs]]
 
| [[GSPGPU:WriteHWRegs|WriteHWRegs]]
 
|-
 
|-
 
| 0x00020084
 
| 0x00020084
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:WriteHWRegsWithMask|WriteHWRegsWithMask]]
 
| [[GSPGPU:WriteHWRegsWithMask|WriteHWRegsWithMask]]
 
|-
 
|-
 
| 0x00030082
 
| 0x00030082
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:WriteHWRegRepeat|WriteHWRegRepeat]]
 
| [[GSPGPU:WriteHWRegRepeat|WriteHWRegRepeat]]
 
|-
 
|-
 
| 0x00040080
 
| 0x00040080
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:ReadHWRegs|ReadHWRegs]]
 
| [[GSPGPU:ReadHWRegs|ReadHWRegs]]
 
|-
 
|-
 
| 0x00050200
 
| 0x00050200
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:SetBufferSwap|SetBufferSwap]]
 
| [[GSPGPU:SetBufferSwap|SetBufferSwap]]
 
|-
 
|-
 
| 0x00060082
 
| 0x00060082
 
|  
 
|  
|  
+
| No
 
| SetCommandList (Stubbed)
 
| SetCommandList (Stubbed)
 
|-
 
|-
 
| 0x000700C2
 
| 0x000700C2
 
|  
 
|  
|  
+
| No
 
| RequestDma (Stubbed)
 
| RequestDma (Stubbed)
 
|-
 
|-
Line 55: Line 55:  
| 0x000A0044
 
| 0x000A0044
 
|  
 
|  
|  
+
| No
| RegisterInterruptEvents
+
| RegisterInterruptEvents (Stubbed)
 
|-
 
|-
 
| 0x000B0040
 
| 0x000B0040
 
|  
 
|  
|  
+
| See below
 
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
 
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
 
|-
 
|-
 
| 0x000C0000
 
| 0x000C0000
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
 
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
 
|-
 
|-
 
| 0x000D0140
 
| 0x000D0140
 
|  
 
|  
|  
+
| No
 
| SetDisplayTransfer (Stubbed)
 
| SetDisplayTransfer (Stubbed)
 
|-
 
|-
 
| 0x000E0180
 
| 0x000E0180
 
|  
 
|  
|  
+
| No
 
| SetTextureCopy (Stubbed)
 
| SetTextureCopy (Stubbed)
 
|-
 
|-
 
| 0x000F0200
 
| 0x000F0200
 
|  
 
|  
|  
+
| No
 
| SetMemoryFill (Stubbed)
 
| SetMemoryFill (Stubbed)
 
|-
 
|-
 
| 0x00100040
 
| 0x00100040
 
|  
 
|  
|  
+
| No
| SetAxiConfigQoSMode
+
| [[GSPGPU:SetAxiConfigQoSMode|SetAxiConfigQoSMode]]
 
|-
 
|-
 
| 0x00110040
 
| 0x00110040
 
|  
 
|  
|  
+
| No
| SetPerfLogMode
+
| [[GSPGPU:SetPerfLogMode|SetPerfLogMode]]
 
|-
 
|-
 
| 0x00120000
 
| 0x00120000
 
|  
 
|  
|  
+
| No
| GetPerfLog
+
| [[GSPGPU:GetPerfLog|GetPerfLog]]
 
|-
 
|-
 
| 0x00130042
 
| 0x00130042
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]]
 
| [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]]
 
|-
 
|-
 
| 0x00140000
 
| 0x00140000
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:UnregisterInterruptRelayQueue|UnregisterInterruptRelayQueue]]
 
| [[GSPGPU:UnregisterInterruptRelayQueue|UnregisterInterruptRelayQueue]]
 
|-
 
|-
 
| 0x00150002
 
| 0x00150002
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:TryAcquireRight|TryAcquireRight]]
 
| [[GSPGPU:TryAcquireRight|TryAcquireRight]]
 
|-
 
|-
 
| 0x00160042
 
| 0x00160042
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:AcquireRight|AcquireRight]]
 
| [[GSPGPU:AcquireRight|AcquireRight]]
 
|-
 
|-
 
| 0x00170000
 
| 0x00170000
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:ReleaseRight|ReleaseRight]]
 
| [[GSPGPU:ReleaseRight|ReleaseRight]]
 
|-
 
|-
 
| 0x00180000
 
| 0x00180000
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:ImportDisplayCaptureInfo|ImportDisplayCaptureInfo]]
 
| [[GSPGPU:ImportDisplayCaptureInfo|ImportDisplayCaptureInfo]]
 
|-
 
|-
 
| 0x00190000
 
| 0x00190000
 
|  
 
|  
|  
+
| See below
 
| [[GSPGPU:SaveVramSysArea|SaveVramSysArea]]
 
| [[GSPGPU:SaveVramSysArea|SaveVramSysArea]]
 
|-
 
|-
 
| 0x001A0000
 
| 0x001A0000
 
|  
 
|  
|  
+
| See below
 
| [[GSPGPU:RestoreVramSysArea|RestoreVramSysArea]]
 
| [[GSPGPU:RestoreVramSysArea|RestoreVramSysArea]]
 
|-
 
|-
 
| 0x001B0000
 
| 0x001B0000
 
|  
 
|  
|  
+
| Yes
 
| [[GSPGPU:ResetGpuCore|ResetGpuCore]]
 
| [[GSPGPU:ResetGpuCore|ResetGpuCore]]
 
|-
 
|-
 
| 0x001C0040
 
| 0x001C0040
 
|  
 
|  
|  
+
| No
 
| [[GSPGPU:SetLedForceOff|SetLedForceOff]]
 
| [[GSPGPU:SetLedForceOff|SetLedForceOff]]
 
|-
 
|-
 
| 0x001D0040
 
| 0x001D0040
 
|  
 
|  
|  
+
| No
 
| SetTestCommand (Stubbed)
 
| SetTestCommand (Stubbed)
 
|-
 
|-
 
| 0x001E0080
 
| 0x001E0080
 
|  
 
|  
|  
+
| No
| SetInternalPriorities
+
| [[GSPGPU:SetInternalPriorities|SetInternalPriorities]]
 
|-
 
|-
 
| 0x001F0082
 
| 0x001F0082
 
| [[8.0.0-18]]
 
| [[8.0.0-18]]
|  
+
| No
 
| [[GSPGPU:StoreDataCache|StoreDataCache]]
 
| [[GSPGPU:StoreDataCache|StoreDataCache]]
 
|}
 
|}
    
The GSP module starts a thread for handling commands for each service session, a maximum of 4 processes can use this service at once. Official applications have an optional code-path which [[GSPGPU:WriteHWRegs|writes]] to registers during initialization, this is normally not used however.
 
The GSP module starts a thread for handling commands for each service session, a maximum of 4 processes can use this service at once. Official applications have an optional code-path which [[GSPGPU:WriteHWRegs|writes]] to registers during initialization, this is normally not used however.
 +
 +
If a process has acquired rights, attempting to [[GSPGPU:SetLcdForceBlack|set LCDs to black]] from another process will fail.
 +
Saving/restoring VRAM requires bit0 of process [[GSPGPU:RegisterInterruptRelayQueue|flags]] to be set.
    
= GSP service "gsp::Lcd" =
 
= GSP service "gsp::Lcd" =
Line 175: Line 178:  
| 0x00010040
 
| 0x00010040
 
|  
 
|  
| ?
+
| [[GSPLCD:EnableABL|EnableABL]]
 
|-
 
|-
 
| 0x00020040
 
| 0x00020040
 
|  
 
|  
| ?
+
| [[GSPLCD:DisableABL|DisableABL]]
 
|-
 
|-
 
| 0x00030080
 
| 0x00030080
 
|  
 
|  
| ?
+
| [[GSPLCD:SetRSLut|SetRSLut]]
 
|-
 
|-
 
| 0x000400C0
 
| 0x000400C0
 
|  
 
|  
| ?
+
| [[GSPLCD:SetRSParams|SetRSParams]]
 
|-
 
|-
 
| 0x00050140
 
| 0x00050140
 
|  
 
|  
| ?
+
| [[GSPLCD:SetABLArea|SetABLArea]]
 
|-
 
|-
 
| 0x00060140
 
| 0x00060140
Line 199: Line 202:  
| 0x00070080
 
| 0x00070080
 
|  
 
|  
| ?
+
| [[GSPLCD:SetInertia|SetInertia]]
 
|-
 
|-
 
| 0x000800C0
 
| 0x000800C0
 
|  
 
|  
| ?
+
| [[GSPLCD:SetDitherMode|SetDitherMode]]
 
|-
 
|-
 
| 0x00090140
 
| 0x00090140
 
|  
 
|  
| ?
+
| [[GSPLCD:SetDitherParams|SetDitherParams]]
 
|-
 
|-
 
| 0x000A0080
 
| 0x000A0080
 
|  
 
|  
| ?
+
| [[GSPLCD:SetBrightnessRaw|SetBrightnessRaw]]
 
|-
 
|-
 
| 0x000B0080
 
| 0x000B0080
 
|  
 
|  
| ?
+
| [[GSPLCD:SetBrightness|SetBrightness]]
 
|-
 
|-
 
| 0x000C0040
 
| 0x000C0040
 
|  
 
|  
| ?
+
| [[GSPLCD:ReloadConfig|ReloadConfig]]
 
|-
 
|-
 
| 0x000D0040
 
| 0x000D0040
 
|  
 
|  
| ?
+
| [[GSPLCD:RestoreConfig|RestoreConfig]]
 
|-
 
|-
 
| 0x000E0000
 
| 0x000E0000
 
|  
 
|  
| ?
+
| [[GSPLCD:GetPowerState|GetPowerState]]
 
|-
 
|-
 
| 0x000F0000
 
| 0x000F0000
Line 251: Line 254:  
| 0x00140000
 
| 0x00140000
 
| [[8.0.0-18]]
 
| [[8.0.0-18]]
| This only returns an error. Uninitialized data(not set by this command itself) is also written to u8 cmdreply_word[2].
+
| [[GSPLCD:GetVendor|GetVendor]] New3DS-only, stubbed on Old3DS: This only returns an error. Uninitialized data(not set by this command itself) is also written to u8 cmdreply_word[2].
 
|-
 
|-
| 0x00150000
+
| 0x00150040
 
| [[8.0.0-18]]
 
| [[8.0.0-18]]
| This only returns an error. Uninitialized data(not set by this command itself) is also written to u32 cmdreply_word[2].
+
| [[GSPLCD:GetBrightness|GetBrightness]] New3DS-only, stubbed on Old3DS: This only returns an error. Uninitialized data(not set by this command itself) is also written to u32 cmdreply_word[2].
 
|}
 
|}
   Line 269: Line 272:  
| Support for the new LINEAR memory region was implemented(for cache commands and vaddr->physaddr conversion). Support for the new process-mem 0x1E800000 region(however the GPU can't actually access this memory) was added for vaddr->physaddr conversion. Originally GSP module ignored vaddr->physaddr conversion errors(like with vaddrs outside of the handled ranges) and just wrote physaddr value0 to the GPU registers, however now GSP module returns an error for that instead(see [[GSP_Shared_Memory#Command_Buffer_Header|here]] regarding errors being written to GSP shared-mem). New services commands were added too, see above.
 
| Support for the new LINEAR memory region was implemented(for cache commands and vaddr->physaddr conversion). Support for the new process-mem 0x1E800000 region(however the GPU can't actually access this memory) was added for vaddr->physaddr conversion. Originally GSP module ignored vaddr->physaddr conversion errors(like with vaddrs outside of the handled ranges) and just wrote physaddr value0 to the GPU registers, however now GSP module returns an error for that instead(see [[GSP_Shared_Memory#Command_Buffer_Header|here]] regarding errors being written to GSP shared-mem). New services commands were added too, see above.
 
|}
 
|}
 +
 +
=New3DS=
 +
There's separate GSP-module titles for Old3DS and New3DS. PTM CheckNew3DS is only used by the New3DS title, for copying that flag into a state field. Elsewhere that field is checked for running additional code only on New3DS, for processing various state / using [[QTM_Services|QTM]] commands.
51

edits