<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/index.php?action=history&amp;feed=atom&amp;title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8</id>
	<title>系统调用列表 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/index.php?action=history&amp;feed=atom&amp;title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;action=history"/>
	<updated>2026-05-13T10:03:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5278&amp;oldid=prev</id>
		<title>Syphurith: suit the translation</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5278&amp;oldid=prev"/>
		<updated>2013-03-29T11:10:35Z</updated>

		<summary type="html">&lt;p&gt;suit the translation&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:10, 29 March 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l330&quot;&gt;Line 330:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 330:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;新建线程 &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CreateThread &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  R0=s32 threadpriority&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  R0=s32 threadpriority&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  R1=func entrypoint&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  R1=func entrypoint&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key 3dbrew:diff:1.41:old-5276:rev-5278:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Syphurith</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5276&amp;oldid=prev</id>
		<title>Syphurith: correct a mistake.</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5276&amp;oldid=prev"/>
		<updated>2013-03-29T11:08:35Z</updated>

		<summary type="html">&lt;p&gt;correct a mistake.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:08, 29 March 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@SVC&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= 系统调用 =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= 系统调用 =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key 3dbrew:diff:1.41:old-5275:rev-5276:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Syphurith</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5275&amp;oldid=prev</id>
		<title>Syphurith: Test Translation</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E5%88%97%E8%A1%A8&amp;diff=5275&amp;oldid=prev"/>
		<updated>2013-03-29T11:08:00Z</updated>

		<summary type="html">&lt;p&gt;Test Translation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;@SVC&lt;br /&gt;
==&lt;br /&gt;
= 系统调用 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Id&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 &lt;br /&gt;
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions) (outaddr is usually the same as the input addr0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 &lt;br /&gt;
| Result  QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 &lt;br /&gt;
| void ExitProcess(void)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 &lt;br /&gt;
| Result  GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 &lt;br /&gt;
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 &lt;br /&gt;
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 &lt;br /&gt;
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 &lt;br /&gt;
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 &lt;br /&gt;
| void ExitThread(void)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA &lt;br /&gt;
| void SleepThread(s64 nanoseconds)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB &lt;br /&gt;
| Result GetThreadPriority(s32* priority, Handle thread)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC &lt;br /&gt;
| Result SetThreadPriority(Handle thread, s32 priority)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD &lt;br /&gt;
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE &lt;br /&gt;
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF &lt;br /&gt;
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 &lt;br /&gt;
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 &lt;br /&gt;
| s32 GetCurrentProcessorNumber(void)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 &lt;br /&gt;
| Result Run(Handle process, StartupInfo* info) (This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 &lt;br /&gt;
| Result CreateMutex(Handle* mutex, bool initialLocked)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 &lt;br /&gt;
| Result ReleaseMutex(Handle mutex)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 &lt;br /&gt;
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 &lt;br /&gt;
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 &lt;br /&gt;
| Result CreateEvent(Handle* event, ResetType resettype)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 &lt;br /&gt;
| Result SignalEvent(Handle event)&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 &lt;br /&gt;
| Result ClearEvent(Handle event)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A &lt;br /&gt;
| Result CreateTimer(Handle* timer, ResetType resettype)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B &lt;br /&gt;
| Result SetTimer(Handle timer, s64 initial, s64 interval)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C &lt;br /&gt;
| Result CancelTimer(Handle timer)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D &lt;br /&gt;
| Result ClearTimer(Handle timer)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E &lt;br /&gt;
| Result CreateMemoryBlock(Handle* memblock, u32 memory, u32 size, u32 mypermission, u32 otherpermission)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F &lt;br /&gt;
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 &lt;br /&gt;
| Result UnmapMemoryBlock(Handle memblock, u32 addr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 &lt;br /&gt;
| Result CreateAddressArbiter(Handle* arbiter)&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 &lt;br /&gt;
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value)&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 &lt;br /&gt;
| Result CloseHandle(Handle handle)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 &lt;br /&gt;
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 &lt;br /&gt;
| Result WaitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds)&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 &lt;br /&gt;
| Result SignalAndWait(s32* out, Handle signal, Handle* handles, s32 handleCount, bool waitAll, s64 nanoseconds)&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 &lt;br /&gt;
| Result DuplicateHandle(Handle* out, Handle original)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 &lt;br /&gt;
| s64 GetSystemTick(void)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 &lt;br /&gt;
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A &lt;br /&gt;
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B &lt;br /&gt;
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C &lt;br /&gt;
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D &lt;br /&gt;
| Result ConnectToPort(Handle* out, const char* portName)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E &lt;br /&gt;
| Result SendSyncRequest1(Handle session) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F &lt;br /&gt;
| Result SendSyncRequest2(Handle session) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 &lt;br /&gt;
| Result SendSyncRequest3(Handle session) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 &lt;br /&gt;
| Result SendSyncRequest4(Handle session) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 &lt;br /&gt;
| Result SendSyncRequest(Handle session)&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 &lt;br /&gt;
| Result OpenProcess(Handle* process, u32 processId)&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 &lt;br /&gt;
| Result OpenThread(Handle* thread, Handle process, u32 threadId)&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 &lt;br /&gt;
| Result GetProcessId(u32* processId, Handle process)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 &lt;br /&gt;
| Result GetProcessIdOfThread(u32* processId, Handle thread)&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 &lt;br /&gt;
| Result GetThreadId(u32* threadId, Handle thread)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 &lt;br /&gt;
| Result GetResourceLimit(Handle* resourceLimit, Handle process)&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 &lt;br /&gt;
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A &lt;br /&gt;
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B &lt;br /&gt;
| Result GetThreadContext(ThreadContext* context, Handle thread) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C &lt;br /&gt;
| Break(BreakReason)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D &lt;br /&gt;
| OutputDebugString(void const, int) (Does nothing on non-debug units)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E &lt;br /&gt;
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 &lt;br /&gt;
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 &lt;br /&gt;
| Result CreateSessionToPort(Handle* session, Handle port)&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 &lt;br /&gt;
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A &lt;br /&gt;
| Result AcceptSession(Handle* session, Handle port)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B &lt;br /&gt;
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C &lt;br /&gt;
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D &lt;br /&gt;
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E &lt;br /&gt;
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F &lt;br /&gt;
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 &lt;br /&gt;
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 &lt;br /&gt;
| Result UnbindInterrupt(Interrupt name, Handle syncObject)&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 &lt;br /&gt;
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 &lt;br /&gt;
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 &lt;br /&gt;
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 &lt;br /&gt;
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig&amp;amp; config )&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 &lt;br /&gt;
| Result StopDma(Handle dma)&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 &lt;br /&gt;
| Result GetDmaState(DmaState* state, Handle dma)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 &lt;br /&gt;
| Result DebugActiveProcess(Handle* debug, u32 processID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 &lt;br /&gt;
| Result BreakDebugProcess(Handle debug)&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 &lt;br /&gt;
| Result TerminateDebugProcess(Handle debug)&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 &lt;br /&gt;
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 &lt;br /&gt;
| Result ContinueDebugEvent(Handle debug, u32 flags)&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 &lt;br /&gt;
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 &lt;br /&gt;
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 &lt;br /&gt;
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 &lt;br /&gt;
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 &lt;br /&gt;
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A &lt;br /&gt;
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B &lt;br /&gt;
| Result WriteProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C &lt;br /&gt;
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam) (Disabled on regular kernel)&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| ControlProcessMemory(Handle KProcess, unsigned int Addr0, unsigned int Addr1, unsigned int Size, unsigned int Type, unsigned int Permissions)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x72&lt;br /&gt;
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x73&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| Stubbed on regular kernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x75&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x76&lt;br /&gt;
| TerminateProcess(Handle)&lt;br /&gt;
|-&lt;br /&gt;
| 0x77&lt;br /&gt;
| (Handle KProcess, Handle KResourceLimit)&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| CreateResourceLimit(Handle *KResourceLimit)&lt;br /&gt;
|-&lt;br /&gt;
| 0x79&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A&lt;br /&gt;
| DisableExecuteNever(unsigned int Addr, unsigned int Size) (Stubbed for regular kernel beginning with [[2.0.0-2]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2) (The Type determines the usage of each param)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D&lt;br /&gt;
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF&lt;br /&gt;
| Debug related (The Syscall access control mask doesn&amp;#039;t apply for this SVC)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 新建线程 ==&lt;br /&gt;
 R0=s32 threadpriority&lt;br /&gt;
 R1=func entrypoint&lt;br /&gt;
 R2=u32 arg&lt;br /&gt;
 R3=u32 stacktop&lt;br /&gt;
 R4=s32 processorid&lt;br /&gt;
&lt;br /&gt;
 Result result=R0&lt;br /&gt;
 Handle* thread=R1&lt;br /&gt;
&lt;br /&gt;
= 类型和结构 =&lt;br /&gt;
&lt;br /&gt;
== 枚举MemoryState ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Memory state flags&lt;br /&gt;
!  Bit&lt;br /&gt;
|-&lt;br /&gt;
| FREE&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| RESERVED&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| IO&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| STATIC&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| CODE&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| PRIVATE&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| SHARED&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| CONTINUOUS&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| ALIASED&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| ALIAS&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| ALIAS CODE&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED&lt;br /&gt;
| 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 枚举PageFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Page flags&lt;br /&gt;
!  Bit&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| CHANGED&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 枚举MemoryOperation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Memory operation&lt;br /&gt;
!  Id&lt;br /&gt;
|-&lt;br /&gt;
| FREE&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| RESERVE&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| COMMIT&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| MAP&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| UNMAP&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| PROTECT&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| REGION APP&lt;br /&gt;
| 0x100&lt;br /&gt;
|-&lt;br /&gt;
| REGION SYSTEM&lt;br /&gt;
| 0x200&lt;br /&gt;
|-&lt;br /&gt;
| REGION BASE&lt;br /&gt;
| 0x300&lt;br /&gt;
|-&lt;br /&gt;
| LINEAR&lt;br /&gt;
| 0x1000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 枚举MemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Memory permission&lt;br /&gt;
!  Id&lt;br /&gt;
|-&lt;br /&gt;
| NONE&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| READ&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| WRITE&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| READWRITE&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| DONTCARE&lt;br /&gt;
| 0x10000000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 枚举ResetType ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Reset type&lt;br /&gt;
!  Id&lt;br /&gt;
|-&lt;br /&gt;
| ONESHOT&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| STICKY&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| PULSE&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 结构MemoryInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| u32&lt;br /&gt;
| Base address&lt;br /&gt;
|-&lt;br /&gt;
| u32&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| u32&lt;br /&gt;
| Permission&lt;br /&gt;
|-&lt;br /&gt;
| enum MemoryState&lt;br /&gt;
| State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 结构PageInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| u32&lt;br /&gt;
| Flags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 结构StartupInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| s32&lt;br /&gt;
| Priority&lt;br /&gt;
|-&lt;br /&gt;
| u32&lt;br /&gt;
| Stack size&lt;br /&gt;
|-&lt;br /&gt;
| s32&lt;br /&gt;
| argc&lt;br /&gt;
|-&lt;br /&gt;
| s16*&lt;br /&gt;
| argv&lt;br /&gt;
|-&lt;br /&gt;
| s16*&lt;br /&gt;
| envp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 进程 =&lt;br /&gt;
任何进程只能使用在[[NCCH#CXI|exheader]]中为本进程启用的SVCs。ARM11内核SVN句柄会在SVC模式的栈中检查系统访问控制掩码以确定SVC是否已经启用，SVC没有启用时会触发kernelpanic。每个进程都有独立的SVC模式栈，这个栈和存放其中的系统访问控制掩码是在进程启动时候初始化的。应用程序一般只有那些&amp;lt;=0x3D的SVC访问权限，不过并非所有应用程序都有&amp;lt;=0x3D的所有SVCs权限。大部分应用程序可访问的SVCs并没有被应用程序使用。&lt;br /&gt;
&lt;br /&gt;
每个进程都有各自的句柄表，表达大小存在exheader里面。在句柄表中的句柄不能被其他进程的上下文使用，因为这些句柄并不存在于其他的句柄表中。&lt;br /&gt;
&lt;br /&gt;
0xFFFF8001是当前KProcess的句柄别称，而0xFFFF8000则是当前KThread的句柄别称。&lt;br /&gt;
&lt;br /&gt;
在零售版机器上调用svcBreak只能造成调用这个SVC的进程被终止。&lt;br /&gt;
&lt;br /&gt;
= 线程 =&lt;br /&gt;
对于svcCreateThread，用于Entrypoint_Param和StackTop输入地址常常一样，不过这可以任意设置。比如主线程的Entrypoint_Param就是0值。&lt;br /&gt;
&lt;br /&gt;
用KThread句柄调用CloseHandle()会终结指定的线程。&lt;br /&gt;
&lt;br /&gt;
= 内存映射 =&lt;br /&gt;
ControlMemory和MapMemoryBlock可以在映射内存页面时使用，这两个SVCs只支持映射不可执行的R/W页面。为这两个SVCs输入的权限和参数必须&amp;lt;=3，如果要取消映射，需要使用0值。对于ControlMemory参数MemoryType的位码0xF00是内存类型，该位使用0的时候，会从exheader中ARM11内核描述的内核标记中，为使用此SVC的进程读取内存类型。ControlMemory参数MemoryType取值0x10003对应的是映射GSP[[Memory_layout|堆]]。低八位是类型：1是未映射内存，3是已经映射的内存；类型4用于备份，从Addr1到Addr0的RW内存，如果Addr1在只读区域，类型4会返回一个错误。Addr1在类型1和3中不使用。&lt;br /&gt;
&lt;br /&gt;
ControlProcessMemory映射指定进程的内存，只是唯一允许映射可执行区域内存的SVC。内存映射SVC的权限格式为bit0=R, bit1=W, bit2=X。类型6设置Addr0已经映射的内存权限到输入权限。&lt;br /&gt;
&lt;br /&gt;
MapProcessMemory映射指定KProcess由当前进程指定的StartAddr从0x00100000开始的RW内存。MapProcessMemory之后会映射指定进程的0x08000000到当前进程StartAddr+0x7f00000的内存。UnmapProcessMemory则取消MapProcessMemory映射的内存。&lt;br /&gt;
&lt;br /&gt;
= 调试 =&lt;br /&gt;
DebugActiveProcess用于调试时附加进程。这个SVC只有在目标进程的exheader的ARM11描述中设置了&amp;quot;Enable debug&amp;quot;才能调用。如果目标进程的那个标记是零，那么调用这个SVC的进程必须有设置内核标记的&amp;quot;Force debug&amp;quot;标记为一才行。&lt;br /&gt;
&lt;br /&gt;
= KernelSetState =&lt;br /&gt;
类型0为启动[[FIRM|固件]]初始化programID，然后触发启动[[FIRM|固件]]。参数0和参数2没有使用。参数1是programID低位，而programID的高位时0x00040138。&lt;br /&gt;
&lt;br /&gt;
类型3用于给启动的[[FIRM|固件]]初始化0x1000字节的缓存。参数2没用。当参数0为1时候，缓存会复制到FCRAM的0xF0000000开始的地址，参数1没用。当参数0为0，这段内核缓存会映射到进程地址参数1。&lt;br /&gt;
&lt;br /&gt;
= GetSystemInfo =&lt;br /&gt;
类型0值为26(类型1没用)会将直接由内核启动的进程总数写到输出。对于NATIVE_FIRM/SAFE_MODE_FIRM固件的ARM11内核，结果常为5，也即是进程sm，fs，pm，loader，和pxi。&lt;/div&gt;</summary>
		<author><name>Syphurith</name></author>
	</entry>
</feed>