<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.zelda.sr/index.php?action=history&amp;feed=atom&amp;title=Design</id>
	<title>Design - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.zelda.sr/index.php?action=history&amp;feed=atom&amp;title=Design"/>
	<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;action=history"/>
	<updated>2026-05-23T00:14:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=39&amp;oldid=prev</id>
		<title>Mako at 19:54, 18 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=39&amp;oldid=prev"/>
		<updated>2026-04-18T19:54:57Z</updated>

		<summary type="html">&lt;p&gt;&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 19:54, 18 April 2026&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-l38&quot;&gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 38:&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;Naively, the [[wikipedia:Instruction_cycle|instruction cycle]] may be emulated to interpret A64 code on a per-instruction basis. While providing the most accurate CPU emulation, interpretation does, however, also carry drastic overhead in its slow and repetitive nature. jabara instead emulates A64 using [[wikipedia:Binary_translation#Dynamic_binary_translation|dynamic binary translation]] (DBT), in which [[wikipedia:Basic_block|basic blocks]] of A64 code are collectively translated to the ISA of the emulator (&quot;host&quot;) machine, providing performance often better than that of the NX within basic blocks. Existing NX emulators commonly accomplish this using the [https://github.com/lioncash/dynarmic dynarmic] [[wikipedia:Dynamic_recompilation|dynamic recompiler]]. However, due to the difficulty of using [https://isocpp.org C++] libraries in Rust codebases, as well as the aforementioned issues present in the the buildsystem of yuzu that stem partially from that of dynarmic, the [http://github.com/unicorn-engine/unicorn Unicorn] CPU emulator framework, which provides [https://github.com/unicorn-engine/unicorn/tree/master/bindings/rust/unicorn-engine Rust bindings] for its underlying [https://www.c-language.org C] implementation, was chosen for jabara. Unicorn emulates various architectures, including AArch64, using [[wikipedia:Just-in-time_compilation|just-in-time compilation]] (JIT), a DBT technique also used by dynarmic that makes Unicorn a sufficiently performant framework for Tegra X1 emulation. It is based on [https://www.qemu.org QEMU], a widely-used generic machine emulator &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ramework &lt;/del&gt;that achieves near-native performance in many scenarios.&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;Naively, the [[wikipedia:Instruction_cycle|instruction cycle]] may be emulated to interpret A64 code on a per-instruction basis. While providing the most accurate CPU emulation, interpretation does, however, also carry drastic overhead in its slow and repetitive nature. jabara instead emulates A64 using [[wikipedia:Binary_translation#Dynamic_binary_translation|dynamic binary translation]] (DBT), in which [[wikipedia:Basic_block|basic blocks]] of A64 code are collectively translated to the ISA of the emulator (&quot;host&quot;) machine, providing performance often better than that of the NX within basic blocks. Existing NX emulators commonly accomplish this using the [https://github.com/lioncash/dynarmic dynarmic] [[wikipedia:Dynamic_recompilation|dynamic recompiler]]. However, due to the difficulty of using [https://isocpp.org C++] libraries in Rust codebases, as well as the aforementioned issues present in the the buildsystem of yuzu that stem partially from that of dynarmic, the [http://github.com/unicorn-engine/unicorn Unicorn] CPU emulator framework, which provides [https://github.com/unicorn-engine/unicorn/tree/master/bindings/rust/unicorn-engine Rust bindings] for its underlying [https://www.c-language.org C] implementation, was chosen for jabara. Unicorn emulates various architectures, including AArch64, using [[wikipedia:Just-in-time_compilation|just-in-time compilation]] (JIT), a DBT technique also used by dynarmic that makes Unicorn a sufficiently performant framework for Tegra X1 emulation. It is based on [https://www.qemu.org QEMU], a widely-used generic machine emulator &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;framework &lt;/ins&gt;that achieves near-native performance in many scenarios.&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;&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels Exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to that of the caller, and may only be returned from to an EL lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, the hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor, so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels Exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to that of the caller, and may only be returned from to an EL lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, the hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor, so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-38:rev-39:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=38&amp;oldid=prev</id>
		<title>Mako at 19:46, 18 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=38&amp;oldid=prev"/>
		<updated>2026-04-18T19:46:51Z</updated>

		<summary type="html">&lt;p&gt;&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 19:46, 18 April 2026&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-l18&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&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;&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;== Foundations ==&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;== Foundations ==&lt;/div&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&quot;note&quot;&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&quot;note&quot;&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, made forking suyu unviable, and the use of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://learn.microsoft.com/en-us/dotnet/csharp/ &lt;/ins&gt;C#&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/ins&gt;and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://dotnet.microsoft.com/en-us/ &lt;/ins&gt;.NET&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/ins&gt;by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&lt;/div&gt;&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-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&amp;quot;guest&amp;quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are combinations of both LLE and HLE.&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&amp;quot;guest&amp;quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are combinations of both LLE and HLE.&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&#039;&#039;&#039;SVCs&#039;&#039;&#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&quot;note&quot;&amp;gt;In &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;official &lt;/del&gt;NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&#039;&#039;&#039;SVCs&#039;&#039;&#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&quot;note&quot;&amp;gt;In &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;officially licensed &lt;/ins&gt;NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&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;&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;=== CPU ===&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;=== CPU ===&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;AArch64 implements privilege as &lt;/del&gt;[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//developer&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;arm&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels&lt;/del&gt;] (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ELs&lt;/del&gt;) &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;numbered &amp;lt;&lt;/del&gt;code&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised &lt;/del&gt;to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;an EL identical to or higher than that &lt;/del&gt;of the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;caller&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and may only be returned from to an EL identical to or lower &lt;/del&gt;than that of the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;callee&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The &lt;/del&gt;NX &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mostly follows &lt;/del&gt;the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;&lt;/del&gt;, the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;OS at &amp;lt;code&amp;gt;EL1&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;&lt;/del&gt;, the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and the &lt;/del&gt;[https://&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;developer.arm&lt;/del&gt;.com/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;documentation&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;100935&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0100&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Switching&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;betwen&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Normal&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Secure&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;worlds- Secure Monitor&lt;/del&gt;] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;though the NX lacks &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hypervisor, so exceptions raised &lt;/del&gt;by &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;EL1&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is &lt;/del&gt;used &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;by the NX—can be ignored&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;Naively, the [&lt;/ins&gt;[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wikipedia&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Instruction_cycle|instruction cycle]] may be emulated to interpret A64 code on a per-instruction basis&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;While providing the most accurate CPU emulation, interpretation does, however, also carry drastic overhead in its slow and repetitive nature&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jabara instead emulates A64 using [[wikipedia:Binary_translation#Dynamic_binary_translation|dynamic binary translation]&lt;/ins&gt;] (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DBT&lt;/ins&gt;)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, in which [[wikipedia:Basic_block|basic blocks]] of A64 &lt;/ins&gt;code &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;are collectively translated &lt;/ins&gt;to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the ISA &lt;/ins&gt;of the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;emulator (&quot;host&quot;) machine&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;providing performance often better &lt;/ins&gt;than that of the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NX within basic blocks&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Existing &lt;/ins&gt;NX &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;emulators commonly accomplish this using &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://github.com/lioncash&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dynarmic dynarmic] [[wikipedia:Dynamic_recompilation|dynamic recompiler]]. However&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;due to &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;difficulty of using [https:/&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;isocpp.org C++] libraries in Rust codebases, as well as the aforementioned issues present in the the buildsystem of yuzu that stem partially from that of dynarmic&lt;/ins&gt;, the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[http://github.com/unicorn-engine&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;unicorn Unicorn] CPU emulator framework&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;which provides &lt;/ins&gt;[https://&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;github&lt;/ins&gt;.com/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;unicorn-engine/unicorn/tree/master&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bindings&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rust&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;unicorn&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;engine Rust bindings] for its underlying [https://www.c&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;language.org C] implementation, was chosen for jabara. Unicorn emulates various architectures, including AArch64, using [[wikipedia:Just&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;time_compilation|just&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;time compilation]&lt;/ins&gt;] &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(JIT)&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DBT technique also used &lt;/ins&gt;by &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dynarmic that makes Unicorn a sufficiently performant framework for Tegra X1 emulation. It is based on [https:&lt;/ins&gt;//&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;www&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;qemu&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;org QEMU]&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a widely-&lt;/ins&gt;used &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;generic machine emulator ramework that achieves near-native performance in many scenarios&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;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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels Exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to that of the caller, and may only be returned from to an EL lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, the hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor, so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://developer.arm.com/documentation/111182/2025-09_ASL1/Base-Instructions/SVC--Supervisor-call-?lang=en &lt;/ins&gt;SVC&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/ins&gt;&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&quot;supervisor call&quot;) &lt;/ins&gt;A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. The Rust bindings for Unicorn expose &amp;lt;code&amp;gt;[https://docs.rs/unicorn-engine/latest/unicorn_engine/struct.Unicorn.html#method.add_intr_hook Unicorn&amp;lt;&#039;a, D&amp;gt;::add_intr_hook]&amp;lt;/code&amp;gt;, which hooks guest interrupts and exceptions, passing a &amp;lt;code&amp;gt;u32&amp;lt;/code&amp;gt; interrupt code to the hook function. The interrupt codes are defined in &amp;lt;code&amp;gt;[https://git.zelda.sr/jabara/unicorn/src/commit/3811fdcb861dc7686dde0ec0a7624bb92e277647/qemu/target/arm/cpu.h#L32-L52 qemu/target/arm/cpu.h]&amp;lt;/code&amp;gt;, with &amp;lt;code&amp;gt;EXCP_SWI&amp;lt;/code&amp;gt; (&#039;&#039;&#039;s&#039;&#039;&#039;oft&#039;&#039;&#039;w&#039;&#039;&#039;are &#039;&#039;&#039;i&#039;&#039;&#039;nterrupt) being the code used for guest exceptions. If a caught interrupt is a software interrupt, the details of the exception raised are available via the Exception Syndrome Register for the current Exception level; for &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; exceptions, this is &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, so the &amp;lt;code&amp;gt;[https://developer.arm.com/documentation/111180/2025-09_ASL1/AArch64-Registers/ESR-EL1--Exception-Syndrome-Register--EL1-?lang=en ESR_EL1]&amp;lt;/code&amp;gt; (Exception Syndrome Register (EL1)) register must be read. &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; exceptions can be identified by an &amp;lt;code&amp;gt;[https://developer.arm.com/documentation/111180/2025-09_ASL1/AArch64-Registers/ESR-EL1--Exception-Syndrome-Register--EL1-?lang=en#fieldset_0-31_26 EC]&amp;lt;/code&amp;gt; (Exception Class) value of &amp;lt;code&amp;gt;0b010101&amp;lt;/code&amp;gt; (&quot;&amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; instruction execution in AArch64 state&quot;), located at bits &amp;lt;code&amp;gt;26&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;31&amp;lt;/code&amp;gt;, and an &amp;lt;code&amp;gt;[https://developer.arm.com/documentation/111180/2025-09_ASL1/AArch64-Registers/ESR-EL1--Exception-Syndrome-Register--EL1-?lang=en#fieldset_0-25_25 IL]&amp;lt;/code&amp;gt; (Instruction Length) value of &amp;lt;code&amp;gt;0b1&amp;lt;/code&amp;gt; (&quot;32-bit instruction trapped&quot;), located at bit &amp;lt;code&amp;gt;25&amp;lt;/code&amp;gt;. The immediate argument, &amp;lt;code&amp;gt;[https://developer.arm.com/documentation/111182/2025-09_ASL1/Base-Instructions/SVC--Supervisor-call-?lang=en#imm imm16]&amp;lt;/code&amp;gt;, of a caught &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; exception is encoded in the &amp;lt;code&amp;gt;[https://developer.arm.com/documentation/111180/2025-09_ASL1/AArch64-Registers/ESR-EL1--Exception-Syndrome-Register--EL1-?lang=en#fieldset_0-24_0_11 ISS]&amp;lt;/code&amp;gt; (Instruction Specific Syndrome) field, located at bits &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;imm16&amp;lt;/code&amp;gt; is then used to uniquely identify the called SVC, allowing the correct SVC implementation in jabara to be called. Exception Syndrome Registers are not exposed by Unicorn&#039;s AArch64 API, so Unicorn was forked to [https://git.zelda.sr/jabara/unicorn jabara/unicorn] to add this functionality, exposing an &amp;lt;code&amp;gt;ESR&amp;lt;/code&amp;gt; read-only pseudoregister that accesses the Exception Syndrome Register for the current Exception level, always &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; in jabara. This allows SVCs to be implemented per immediate (&amp;lt;code&amp;gt;imm16&amp;lt;/code&amp;gt;) in native Rust code, callable by the guest machine with the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; instruction&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;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;&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;== Notes ==&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;== Notes ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-37:rev-38:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=37&amp;oldid=prev</id>
		<title>Mako at 06:03, 12 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=37&amp;oldid=prev"/>
		<updated>2026-04-12T06:03:30Z</updated>

		<summary type="html">&lt;p&gt;&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 06:03, 12 April 2026&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-l38&quot;&gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 38:&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to or higher than that of the caller, and may only be returned from to an EL identical to or lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, the hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &lt;/del&gt;so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to or higher than that of the caller, and may only be returned from to an EL identical to or lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, the hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt;so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&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;&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-36:rev-37:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=36&amp;oldid=prev</id>
		<title>Mako at 09:25, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=36&amp;oldid=prev"/>
		<updated>2026-04-10T09:25:49Z</updated>

		<summary type="html">&lt;p&gt;&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 09:25, 10 April 2026&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-l31&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&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;The primary goal of NX emulation is to implement enough of the NX&amp;#039;s [[wikipedia:System_on_a_chip|system on a chip]] (SoC), the [[wikipedia:Tegra#Tegra_X1|Tegra X1]], and the NX operating system, Horizon OS (&amp;#039;&amp;#039;&amp;#039;HOS&amp;#039;&amp;#039;&amp;#039;), to allow [[wikipedia:User_space_and_kernel_space|userland]] NX applications to run.&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;The primary goal of NX emulation is to implement enough of the NX&amp;#039;s [[wikipedia:System_on_a_chip|system on a chip]] (SoC), the [[wikipedia:Tegra#Tegra_X1|Tegra X1]], and the NX operating system, Horizon OS (&amp;#039;&amp;#039;&amp;#039;HOS&amp;#039;&amp;#039;&amp;#039;), to allow [[wikipedia:User_space_and_kernel_space|userland]] NX applications to run.&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&quot;guest&quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a combination &lt;/del&gt;of both LLE and HLE.&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&quot;guest&quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;combinations &lt;/ins&gt;of both LLE and HLE.&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;&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&amp;#039;&amp;#039;&amp;#039;SVCs&amp;#039;&amp;#039;&amp;#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&amp;#039;&amp;#039;&amp;#039;SVCs&amp;#039;&amp;#039;&amp;#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-35:rev-36:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=35&amp;oldid=prev</id>
		<title>Mako at 09:24, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=35&amp;oldid=prev"/>
		<updated>2026-04-10T09:24:20Z</updated>

		<summary type="html">&lt;p&gt;&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 09:24, 10 April 2026&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-l38&quot;&gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 38:&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&amp;#039;&amp;#039;&amp;#039;AArch64&amp;#039;&amp;#039;&amp;#039;) is used by HOS, so the target of jabara&amp;#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &amp;#039;&amp;#039;&amp;#039;A64&amp;#039;&amp;#039;&amp;#039;.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to or higher than that of the caller, and may only be returned from to an EL identical to or lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a &lt;/del&gt;hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor. so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to or higher than that of the caller, and may only be returned from to an EL identical to or lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor. so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&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;&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-34:rev-35:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=34&amp;oldid=prev</id>
		<title>Mako at 09:23, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=34&amp;oldid=prev"/>
		<updated>2026-04-10T09:23:01Z</updated>

		<summary type="html">&lt;p&gt;&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 09:23, 10 April 2026&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-l34&quot;&gt;Line 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&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;&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&amp;#039;&amp;#039;&amp;#039;SVCs&amp;#039;&amp;#039;&amp;#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&amp;#039;&amp;#039;&amp;#039;SVCs&amp;#039;&amp;#039;&amp;#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach avoids codebase clutter and allows kernel methods and SVCs to be implemented in an optimally performant matter.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;=== CPU ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;The Tegra X1 contains four [[wikipedia:ARM_Cortex-A57|ARM Cortex-A57]] cores used by the NX, as well as four unused [[wikipedia:ARM_Cortex-A53|ARM Cortex-A53]] cores. The Cortex-A57 implements the [[wikipedia:ARM_architecture_family#Armv8-A|Armv8-A]] instruction set architecture (ISA). Only its 64-bit mode (&#039;&#039;&#039;AArch64&#039;&#039;&#039;) is used by HOS, so the target of jabara&#039;s CPU emulation is to emulate an AArch64 core. The instruction set used by AArch64 is known as &#039;&#039;&#039;A64&#039;&#039;&#039;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;AArch64 implements privilege as [https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels exception levels] (ELs) numbered &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. In this exception model, exceptions may only be raised to an EL identical to or higher than that of the caller, and may only be returned from to an EL identical to or lower than that of the callee. The NX mostly follows the typical AArch64 EL software model in which userland code runs at &amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;, the OS at &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;, a hypervisor at &amp;lt;code&amp;gt;EL2&amp;lt;/code&amp;gt;, and the [https://developer.arm.com/documentation/100935/0100/Switching-betwen-the-Normal-and-Secure-worlds- Secure Monitor] at &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;, though the NX lacks a hypervisor. so exceptions raised by &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; are taken directly to &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt;. Because jabara emulates HOS itself, its implementation of HOS functionality can be thought of as &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; code—however, as this code is entirely invisible to the guest system, it is not actually running at any EL. Exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; must hence be handled by jabara, and higher ELs—of which only &amp;lt;code&amp;gt;EL3&amp;lt;/code&amp;gt; is used by the NX—can be ignored.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;In AArch64, SVCs are implemented as exceptions raised to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; A64 instruction. As raising execution to &amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt; is required for userland (&amp;lt;code&amp;gt;EL0&amp;lt;/code&amp;gt;) applications to call kernel (&amp;lt;code&amp;gt;EL1&amp;lt;/code&amp;gt;) functionality, SVCs are used for all userland calls to kernel code, and hence must be implemented in jabara in order to run userland NX applications.&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;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;&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;== Notes ==&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;== Notes ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-33:rev-34:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=33&amp;oldid=prev</id>
		<title>Mako at 08:39, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=33&amp;oldid=prev"/>
		<updated>2026-04-10T08:39:14Z</updated>

		<summary type="html">&lt;p&gt;&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 08:39, 10 April 2026&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-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&amp;quot;guest&amp;quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are a combination of both LLE and HLE.&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE). In the simplest sense, the emulated (&amp;quot;guest&amp;quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are a combination of both LLE and HLE.&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&#039;&#039;&#039;SVCs&#039;&#039;&#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&quot;note&quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach allows kernel methods and SVCs to be implemented in an optimally performant matter &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and avoids codebase clutter&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&#039;&#039;&#039;SVCs&#039;&#039;&#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&quot;note&quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;avoids codebase clutter and &lt;/ins&gt;allows kernel methods and SVCs to be implemented in an optimally performant matter.&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;&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;== Notes ==&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;== Notes ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-32:rev-33:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=32&amp;oldid=prev</id>
		<title>Mako at 08:37, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=32&amp;oldid=prev"/>
		<updated>2026-04-10T08:37:15Z</updated>

		<summary type="html">&lt;p&gt;&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 08:37, 10 April 2026&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-l18&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&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;&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;== Foundations ==&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;== Foundations ==&lt;/div&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;group=&quot;note&quot;&lt;/ins&gt;&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-31:rev-32:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=31&amp;oldid=prev</id>
		<title>Mako at 08:35, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=31&amp;oldid=prev"/>
		<updated>2026-04-10T08:35:47Z</updated>

		<summary type="html">&lt;p&gt;&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 08:35, 10 April 2026&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-l18&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&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;&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;== Foundations ==&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;== Foundations ==&lt;/div&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu,&lt;/del&gt;&amp;lt;ref &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;group=&quot;note&quot;&lt;/del&gt;&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, &lt;/ins&gt;made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&lt;/div&gt;&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-l29&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&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;&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;=== Overview ===&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;=== Overview ===&lt;/div&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE).&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;The primary goal of NX emulation is to implement enough of the NX&#039;s [[wikipedia:System_on_a_chip|system on a chip]] (SoC), the [[wikipedia:Tegra#Tegra_X1|Tegra X1]], and the NX operating system, Horizon OS (&#039;&#039;&#039;HOS&#039;&#039;&#039;), to allow [[wikipedia:User_space_and_kernel_space|userland]] NX applications to run.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. In the simplest sense, the emulated (&quot;guest&quot;) machine transforms input data into output data. LLE and HLE differ in that LLE emulators emulate the processes by which input data are transformed, while HLE emulators only emulate the visible results (i.e. corresponding output to given input). Many modern emulators are a combination of both LLE and HLE.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;All existing NX emulators are at least in part HLE. However, unlike existing NX emulators, which contain aspects of LLE in that they generally attempt to recreate kernel classes and their functionality with relative accuracy, jabara takes an approach much closer to pure HLE, implementing kernel functionality only accurately enough such that its behavior as exposed by the HOS [https://switchbrew.org/wiki/SVC supervisor calls] (&#039;&#039;&#039;SVCs&#039;&#039;&#039;) is accurate to what is expected by their userland callers.&amp;lt;ref group=&quot;note&quot;&amp;gt;In official NX applications, the only direct caller of HOS SVCs is the Nintendo SDK (&amp;lt;code&amp;gt;nnsdk&amp;lt;/code&amp;gt;).&amp;lt;/ref&amp;gt; This approach allows kernel methods and SVCs to be implemented in an optimally performant matter and avoids codebase clutter&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;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;&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;== Notes ==&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;== Notes ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-30:rev-31:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=30&amp;oldid=prev</id>
		<title>Mako at 07:14, 10 April 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=30&amp;oldid=prev"/>
		<updated>2026-04-10T07:14:01Z</updated>

		<summary type="html">&lt;p&gt;&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 07:14, 10 April 2026&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-l18&quot;&gt;Line 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 18:&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;&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;== Foundations ==&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;== Foundations ==&lt;/div&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu, made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu or Ryujinx, was considered. However, the complex and outdated buildsystem of yuzu, and, by extension, that of forks such as suyu,&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;ref group=&quot;note&quot;&amp;gt;suyu is currently unmaintained and [https://eden-emu.dev Eden] is its most current active fork. However, suyu was current at the time this development decision was made.&amp;lt;/ref&amp;gt; &lt;/ins&gt;made forking suyu unviable, and the use of C# and .NET by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&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;&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&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;To best benefit users and developers, jabara was chosen to be a [[wikipedia:Free_and_open-source_software|free and open source]] software project in order to allow free modification and redistribution and encourage community contribution. jabara is licensed under the [https://www.gnu.org/licenses/gpl-3.0.en.html GNU GPLv3] and can be used under the terms of any later version of the GPL. Nintendo has a history of issuing DMCA takedown requests to emulation projects,&amp;lt;ref&amp;gt;https://consumerrights.wiki/w/Nintendo#History_against_console_emulation&amp;lt;/ref&amp;gt; especially to public GitHub repositories, so the decision was made to selfhost the relevant Git repositories on an instance of [https://forgejo.org Forgejo]. The public Git forge can be accessed at https://git.zelda.sr.&lt;/div&gt;&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-l25&quot;&gt;Line 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 25:&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;&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;[[JabaraWiki:About|This wiki]], an instance of [https://www.mediawiki.org MediaWiki], was created during development to organize project design on this article. By release, this wiki will also document emulator features and provide various emulator setup and TASing guides.&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;[[JabaraWiki:About|This wiki]], an instance of [https://www.mediawiki.org MediaWiki], was created during development to organize project design on this article. By release, this wiki will also document emulator features and provide various emulator setup and TASing guides.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;== Emulation ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;=== Overview ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;== Notes ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&amp;lt;references group=&quot;note&quot; /&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&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;== References ==&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;== References ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key jabara_wiki:diff:1.41:old-29:rev-30:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
</feed>