<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.zelda.sr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mako</id>
	<title>jabara Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.zelda.sr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mako"/>
	<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/wiki/Special:Contributions/Mako"/>
	<updated>2026-05-23T00:15:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=39</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=39"/>
		<updated>2026-04-18T19:54:57Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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 [https://learn.microsoft.com/en-us/dotnet/csharp/ C#] and [https://dotnet.microsoft.com/en-us/ .NET] by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&amp;quot;note&amp;quot;&amp;gt;In officially licensed 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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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 (&amp;quot;host&amp;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 framework that achieves near-native performance in many scenarios.&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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;[https://developer.arm.com/documentation/111182/2025-09_ASL1/Base-Instructions/SVC--Supervisor-call-?lang=en SVC]&amp;lt;/code&amp;gt; (&amp;quot;supervisor call&amp;quot;) 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. 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; (&amp;quot;&amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; instruction execution in AArch64 state&amp;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; (&amp;quot;32-bit instruction trapped&amp;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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=38</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=38"/>
		<updated>2026-04-18T19:46:51Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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 [https://learn.microsoft.com/en-us/dotnet/csharp/ C#] and [https://dotnet.microsoft.com/en-us/ .NET] by Ryujinx made forking Ryujinx undesirable. To avoid having to work with such codebases, jabara became an entirely separate emulation project.&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&amp;quot;note&amp;quot;&amp;gt;In officially licensed 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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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 (&amp;quot;host&amp;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 ramework that achieves near-native performance in many scenarios.&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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;[https://developer.arm.com/documentation/111182/2025-09_ASL1/Base-Instructions/SVC--Supervisor-call-?lang=en SVC]&amp;lt;/code&amp;gt; (&amp;quot;supervisor call&amp;quot;) 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. 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; (&amp;quot;&amp;lt;code&amp;gt;SVC&amp;lt;/code&amp;gt; instruction execution in AArch64 state&amp;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; (&amp;quot;32-bit instruction trapped&amp;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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=37</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=37"/>
		<updated>2026-04-12T06:03:30Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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, 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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=36</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=36"/>
		<updated>2026-04-10T09:25:49Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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. 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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=35</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=35"/>
		<updated>2026-04-10T09:24:20Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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. 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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=34</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=34"/>
		<updated>2026-04-10T09:23:01Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=33</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=33"/>
		<updated>2026-04-10T08:39:14Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=32</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=32"/>
		<updated>2026-04-10T08:37:15Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&gt;
Implementing TAS functionality in a fork of an existing NX emulator, such as, at the time, suyu&amp;lt;ref group=&amp;quot;note&amp;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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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 allows kernel methods and SVCs to be implemented in an optimally performant matter and avoids codebase clutter.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=31</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=31"/>
		<updated>2026-04-10T08:35:47Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&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=&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 allows kernel methods and SVCs to be implemented in an optimally performant matter and avoids codebase clutter.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=30</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=30"/>
		<updated>2026-04-10T07:14:01Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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,&amp;lt;ref group=&amp;quot;note&amp;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; 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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== Emulation ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
Two general approaches exist to system emulation: low-level emulation (LLE) and high-level emulation (HLE).&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=29</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=29"/>
		<updated>2026-04-10T06:56:02Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to develop Switch emulation software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=28</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=28"/>
		<updated>2026-04-10T06:55:21Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
This article does not intend to be a reference source for Nintendo Switch emulation, nor does it detail the complete operation and function of jabara (the only comprehensive resource on jabara&#039;s internals is its [https://git.zelda.sr/jabara/jabara source code]); rather, it is written in the hope that it proves useful as a general outline for the development process of a Switch emulator. As the lack of any other such detailed resources at the time led to the design and development of jabara being difficult and time-consuming, this article was written with the intent of being a helpful starting point for others seeking to emulate Switch software.&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=27</id>
		<title>Contribution guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=27"/>
		<updated>2026-04-03T01:54:04Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains guidelines for contributing code to [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Source access ==&lt;br /&gt;
jabara is developed on a dedicated [https://forgejo.org Forgejo] instance hosted at [https://git.zelda.sr git.zelda.sr]. The primary repository is located under the [https://git.zelda.sr/jabara jabara] organization at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&gt;
== Submitting changes ==&lt;br /&gt;
Contributions to jabara should be made as pull requests to the repository. (Guidelines TBD)&lt;br /&gt;
&lt;br /&gt;
== Git guidelines ==&lt;br /&gt;
Git commit messages should follow the [https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits] conventions. Here are a few well-formed examples:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chore: flatten imports and re-export `Cpu`&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix(docs): use `align` instead of `style`&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first release, changelogs will be kept as described by [https://keepachangelog.com/en/1.1.0/ Keep a Changelog] in the file `CHANGELOG.md`.&lt;br /&gt;
&lt;br /&gt;
== Code guidelines ==&lt;br /&gt;
&lt;br /&gt;
All comments should make use of [[wikipedia:Markdown|Markdown]] formatting where applicable.&lt;br /&gt;
&lt;br /&gt;
If referencing external sources for &amp;lt;code&amp;gt;jabara_core&amp;lt;/code&amp;gt; implementation details (e.g. [https://switchbrew.org/wiki/Main_Page SwitchBrew], source code of emulators such as [https://git.greemdev.net/projects/Ryubing Ryujinx] or [https://git.eden-emu.dev/eden-emu/eden Eden]), include a comment linking to the source referenced.&lt;br /&gt;
&lt;br /&gt;
Check for [https://doc.rust-lang.org/stable/clippy/index.html Clippy] lints by running &amp;lt;code&amp;gt;cargo clippy&amp;lt;/code&amp;gt; and apply suggested changes, if any. If there is good reason not to apply a suggestion, add an &amp;lt;code&amp;gt;#[allow(clippy::some_lint)]&amp;lt;/code&amp;gt; attribute to the smallest possible region (e.g. the function containing the offending code), along with a comment explaining your decision.&lt;br /&gt;
&lt;br /&gt;
Ensure that all code has been formatted with [https://rust-lang.github.io/rustfmt/ Rustfmt] before committing. This can be done by configuring your editor to autoformat on save or by running &amp;lt;code&amp;gt;cargo fmt&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
You can disallow local commits with clippy lints or formatting issues by creating a pre-commit hook. Create an executable file at &amp;lt;code&amp;gt;.git/hooks/pre-commit&amp;lt;/code&amp;gt; with the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
cargo clippy -- -Dwarnings&lt;br /&gt;
cargo fmt --check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation guideines ==&lt;br /&gt;
Lint all Markdown documentation with &amp;lt;code&amp;gt;[https://github.com/davidanson/markdownlint markdownlint]&amp;lt;/code&amp;gt; before committing.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=26</id>
		<title>Contribution guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=26"/>
		<updated>2026-04-03T01:49:16Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains guidelines for contributing code to [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Source access ==&lt;br /&gt;
jabara is developed on a dedicated [https://forgejo.org Forgejo] instance hosted at [https://git.zelda.sr git.zelda.sr]. The primary repository is located under the [https://git.zelda.sr/jabara jabara] organization at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&gt;
== Submitting changes ==&lt;br /&gt;
Contributions to jabara should be made as pull requests to the repository. (Guidelines TBD)&lt;br /&gt;
&lt;br /&gt;
== Git guidelines ==&lt;br /&gt;
Git commit messages should follow the [https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits] conventions. Here are a few well-formed examples:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chore: flatten imports and re-export `Cpu`&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix(docs): use `align` instead of `style`&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first release, changelogs will be kept as described by [https://keepachangelog.com/en/1.1.0/ Keep a Changelog] in the file `CHANGELOG.md`.&lt;br /&gt;
&lt;br /&gt;
== Code guidelines ==&lt;br /&gt;
&lt;br /&gt;
Check for [https://doc.rust-lang.org/stable/clippy/index.html Clippy] lints by running &amp;lt;code&amp;gt;cargo clippy&amp;lt;/code&amp;gt; and apply suggested changes, if any. If there is good reason not to apply a suggestion, add an &amp;lt;code&amp;gt;#[allow(clippy::some_lint)]&amp;lt;/code&amp;gt; attribute to the smallest possible region (e.g. the function containing the offending code), along with a comment explaining your decision.&lt;br /&gt;
&lt;br /&gt;
Ensure that all code has been formatted with [https://rust-lang.github.io/rustfmt/ Rustfmt] before committing. This can be done by configuring your editor to autoformat on save or by running &amp;lt;code&amp;gt;cargo fmt&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
You can disallow local commits with clippy lints or formatting issues by creating a pre-commit hook. Create an executable file at &amp;lt;code&amp;gt;.git/hooks/pre-commit&amp;lt;/code&amp;gt; with the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
cargo clippy -- -Dwarnings&lt;br /&gt;
cargo fmt --check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation guideines ==&lt;br /&gt;
Lint all Markdown documentation with &amp;lt;code&amp;gt;[https://github.com/davidanson/markdownlint markdownlint]&amp;lt;/code&amp;gt; before committing.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=25</id>
		<title>Contribution guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=25"/>
		<updated>2026-04-03T01:41:49Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains guidelines for contributing code to [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Source access ==&lt;br /&gt;
jabara is developed on a dedicated [https://forgejo.org Forgejo] instance hosted at [https://git.zelda.sr git.zelda.sr]. The primary repository is located under the [https://git.zelda.sr/jabara jabara] organization at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&gt;
== Submitting changes ==&lt;br /&gt;
Contributions to jabara should be made as pull requests to the repository. (Guidelines TBD)&lt;br /&gt;
&lt;br /&gt;
== Git guidelines ==&lt;br /&gt;
Git commit messages should follow the [https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits] conventions. Here are a few well-formed examples:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chore: flatten imports and re-export `Cpu`&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix(docs): use `align` instead of `style`&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first release, changelogs will be kept as described by [https://keepachangelog.com/en/1.1.0/ Keep a Changelog].&lt;br /&gt;
&lt;br /&gt;
== Code guidelines ==&lt;br /&gt;
&lt;br /&gt;
Check for [https://doc.rust-lang.org/stable/clippy/index.html Clippy] lints by running &amp;lt;code&amp;gt;cargo clippy&amp;lt;/code&amp;gt; and apply suggested changes, if any. If there is good reason not to apply a suggestion, add an &amp;lt;code&amp;gt;#[allow(clippy::some_lint)]&amp;lt;/code&amp;gt; attribute to the smallest possible region (e.g. the function containing the offending code), along with a comment explaining your decision.&lt;br /&gt;
&lt;br /&gt;
Ensure that all code has been formatted with [https://rust-lang.github.io/rustfmt/ Rustfmt] before committing. This can be done by configuring your editor to autoformat on save or by running &amp;lt;code&amp;gt;cargo fmt&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
You can disallow local commits with clippy lints or formatting issues by creating a pre-commit hook. Create an executable file at &amp;lt;code&amp;gt;.git/hooks/pre-commit&amp;lt;/code&amp;gt; with the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
cargo clippy -- -Dwarnings&lt;br /&gt;
cargo fmt --check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=23</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=23"/>
		<updated>2026-04-01T17:59:27Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=22</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=22"/>
		<updated>2026-03-27T07:25:10Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=21</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=21"/>
		<updated>2026-03-27T04:09:46Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Foundations ==&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=20</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=20"/>
		<updated>2026-03-27T03:44:05Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&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;br /&gt;
&lt;br /&gt;
Due to the high performance required to efficiently emulate NX software and the portability desired of the project, the use of a low-level, [[wikipedia:Compiled_language|compiled programming language]] to develop jabara was imperative. [https://rust-lang.org Rust] was chosen for its efficiency, memory safety, portability, and robust feature set. Following initial branding, a basic Rust crate (package) structure was created and the main project repository was set up on git.zelda.sr at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&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;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=JabaraWiki:General_disclaimer&amp;diff=19</id>
		<title>JabaraWiki:General disclaimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=JabaraWiki:General_disclaimer&amp;diff=19"/>
		<updated>2026-03-25T18:04:46Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned [[wikipedia:Nintendo_Switch|Nintendo Switch]] (&#039;&#039;&#039;NX&#039;&#039;&#039;) software.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=JabaraWiki:General_disclaimer&amp;diff=18</id>
		<title>JabaraWiki:General disclaimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=JabaraWiki:General_disclaimer&amp;diff=18"/>
		<updated>2026-03-25T18:04:10Z</updated>

		<summary type="html">&lt;p&gt;Mako: Created page with &amp;quot;jabara is not a cheating tool and is not intended to give unfair advantages to real-time attack (&amp;#039;&amp;#039;&amp;#039;RTA&amp;#039;&amp;#039;&amp;#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&amp;#039;&amp;#039;&amp;#039;&amp;quot;dumped&amp;quot;&amp;#039;&amp;#039;&amp;#039;) copies of owned NX software.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=JabaraWiki:About&amp;diff=17</id>
		<title>JabaraWiki:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=JabaraWiki:About&amp;diff=17"/>
		<updated>2026-03-25T18:03:09Z</updated>

		<summary type="html">&lt;p&gt;Mako: Created page with &amp;quot;The &amp;#039;&amp;#039;&amp;#039;jabara Wiki&amp;#039;&amp;#039;&amp;#039; is a wiki providing documentation on the features and design of jabara, a Nintendo Switch emulator.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;jabara Wiki&#039;&#039;&#039; is a wiki providing documentation on the features and design of [[jabara]], a [[wikipedia:Nintendo_Switch|Nintendo Switch]] emulator.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=16</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=16"/>
		<updated>2026-03-25T07:53:44Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that constitutes a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=15</id>
		<title>Contribution guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Contribution_guidelines&amp;diff=15"/>
		<updated>2026-03-25T07:47:41Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains guidelines for contributing code to [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Source access ==&lt;br /&gt;
jabara is developed on a dedicated [https://forgejo.org Forgejo] instance hosted at [https://git.zelda.sr git.zelda.sr]. The primary repository is located under the [https://git.zelda.sr/jabara jabara] organization at [https://git.zelda.sr/jabara/jabara jabara/jabara].&lt;br /&gt;
&lt;br /&gt;
== Submitting changes ==&lt;br /&gt;
Contributions to jabara should be made as pull requests to the repository. (Guidelines TBD)&lt;br /&gt;
&lt;br /&gt;
== Git guidelines ==&lt;br /&gt;
Git commit messages should follow the [https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits] conventions. Here are a few well-formed examples:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;chore: flatten imports and re-export `Cpu`&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;fix(docs): use `align` instead of `style`&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the first release, changelogs will be kept as described by [https://keepachangelog.com/en/1.1.0/ Keep a Changelog].&lt;br /&gt;
&lt;br /&gt;
== Code guidelines ==&lt;br /&gt;
Ensure that all code has been formatted with [https://rust-lang.github.io/rustfmt/ Rustfmt] before committing. This can be done by configuring your editor to autoformat on save or by running &amp;lt;code&amp;gt;cargo fmt&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
You can disallow local commits with formatting issues by creating a pre-commit hook. Create an executable file at &amp;lt;code&amp;gt;.git/hooks/pre-commit&amp;lt;/code&amp;gt; with the following content:&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
cargo fmt --check&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=14</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=14"/>
		<updated>2026-03-25T06:04:40Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions or [[wikipedia:Microsoft_Windows|Windows]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that uniquely identifies a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=13</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=13"/>
		<updated>2026-03-25T06:00:25Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions, [[wikipedia:Microsoft_Windows|Windows]], or [[wikipedia:MacOS|macOS]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that uniquely identifies a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Design&amp;diff=12</id>
		<title>Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Design&amp;diff=12"/>
		<updated>2026-03-25T05:59:02Z</updated>

		<summary type="html">&lt;p&gt;Mako: Created page with &amp;quot;This page is a living document that details the design and development process of jabara.  == Purpose == jabara is a Nintendo Switch (codename &amp;#039;&amp;#039;&amp;#039;NX&amp;#039;&amp;#039;&amp;#039;) emulator designed to provide robust tool-assisted speedrun and superplay (generally, &amp;#039;&amp;#039;&amp;#039;TAS&amp;#039;&amp;#039;&amp;#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a living document that details the design and development process of [[jabara]].&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
jabara is a [[wikipedia:Nintendo_Switch|Nintendo Switch]] (codename &#039;&#039;&#039;NX&#039;&#039;&#039;) emulator designed to provide robust [[wikipedia:Tool-assisted_speedrun|tool-assisted speedrun and superplay]] (generally, &#039;&#039;&#039;TAS&#039;&#039;&#039;) functionality for Switch games. Its use case differs from existing NX emulators (e.g. [https://eden-emu.dev Eden], [https://ryujinx.app Ryujinx]) in that it is designed primarily for TAS creation and playback with optimized real-time gameplay as a secondary target.&lt;br /&gt;
&lt;br /&gt;
jabara is not a cheating tool and is not intended to give unfair advantages to [[wikipedia:Speedrunning#Real-time_attack|real-time attack]] (&#039;&#039;&#039;RTA&#039;&#039;&#039;) speedrunners. jabara is not a tool for piracy or copyright violation and may only be used with legally extracted (&#039;&#039;&#039;&amp;quot;dumped&amp;quot;&#039;&#039;&#039;) copies of owned NX software.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
jabara cannot be used to emulate the [[wikipedia:Nintendo_Switch_2|Nintendo Switch 2]].&lt;br /&gt;
&lt;br /&gt;
jabara can be used on [[wikipedia:X86-64|x86-64]] and [[wikipedia:AArch64|AArch64]] machines running any modern version of most [[wikipedia:Linux|Linux]] distributions, [[wikipedia:Microsoft_Windows|Windows]], and [[wikipedia:MacOS|macOS]]. Support for mobile devices is not planned.&lt;br /&gt;
&lt;br /&gt;
jabara aims to provide a wide variety of tools for creating and replaying TASes. Among others, tools offered for TAS developers (&#039;&#039;&#039;TASers&#039;&#039;&#039;) include frame advance, [[wikipedia:Saved_game#Save_states|savestates]], input manipulation, memory viewing, system state and [[wikipedia:Random_number_generation|random number generation]] (&#039;&#039;&#039;RNG&#039;&#039;&#039;) manipulation, and [[wikipedia:Debugger|debugging]]. All information that uniquely identifies a particular TAS may be recorded to a movie file that can be used to deterministically replay the TAS on any instance of jabara, assuming all necessary game data are present and unchanged.&lt;br /&gt;
&lt;br /&gt;
Support for physical input devices such as controllers or keyboards is an eventual goal to make jabara viable for real-time gameplay.&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=10</id>
		<title>Jabara</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=10"/>
		<updated>2026-03-24T17:59:57Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:jabara}}&lt;br /&gt;
&#039;&#039;&#039;jabara&#039;&#039;&#039; is a work-in-progress [[wikipedia:Free_and_open-source_software|free and open source]] emulator of the [[wikipedia:Nintendo_Switch|Nintendo Switch]], written in [[wikipedia:Rust_(programming_language)|Rust]].&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=6</id>
		<title>Jabara</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=6"/>
		<updated>2026-03-24T17:45:12Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:jabara}}&lt;br /&gt;
&#039;&#039;&#039;jabara&#039;&#039;&#039; is a work-in-progress [[wikipedia:Free_and_open-source_software|free and open source]] emulator for the [[wikipedia:Nintendo_Switch|Nintendo Switch]], written in [[wikipedia:Rust_(programming_language)|Rust]].&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=User:Mako&amp;diff=5</id>
		<title>User:Mako</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=User:Mako&amp;diff=5"/>
		<updated>2026-03-24T17:43:18Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;3&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=User:Mako&amp;diff=4</id>
		<title>User:Mako</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=User:Mako&amp;diff=4"/>
		<updated>2026-03-24T17:43:03Z</updated>

		<summary type="html">&lt;p&gt;Mako: Created page with &amp;quot;:3&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:3&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=3</id>
		<title>Jabara</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=3"/>
		<updated>2026-03-24T17:42:06Z</updated>

		<summary type="html">&lt;p&gt;Mako: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:jabara}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;jabara&#039;&#039;&#039; is a work-in-progress [[wikipedia:Free_and_open-source_software|free and open source]] emulator for the [[wikipedia:Nintendo_Switch|Nintendo Switch]], written in [[wikipedia:Rust_(programming_language)|Rust]].&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
	<entry>
		<id>https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=2</id>
		<title>Jabara</title>
		<link rel="alternate" type="text/html" href="https://wiki.zelda.sr/index.php?title=Jabara&amp;diff=2"/>
		<updated>2026-03-24T17:39:53Z</updated>

		<summary type="html">&lt;p&gt;Mako: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;jabara&amp;#039;&amp;#039;&amp;#039; is a work-in-progress free and open source emulator for the Nintendo Switch, written in Rust.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;jabara&#039;&#039;&#039; is a work-in-progress [[wikipedia:Free_and_open-source_software|free and open source]] emulator for the [[wikipedia:Nintendo_Switch|Nintendo Switch]], written in [[wikipedia:Rust_(programming_language)|Rust]].&lt;/div&gt;</summary>
		<author><name>Mako</name></author>
	</entry>
</feed>