\ No newline at end of file
diff --git a/doc/implementors/clap/derive/trait.ValueEnum.js b/doc/implementors/clap/derive/trait.ValueEnum.js
index fc375706..612d20a5 100644
--- a/doc/implementors/clap/derive/trait.ValueEnum.js
+++ b/doc/implementors/clap/derive/trait.ValueEnum.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"noentiendo_desktop":[["impl ValueEnum for PlatformArg"],["impl ValueEnum for SystemArg"],["impl ValueEnum for KeyMappingArg"]]
+"noentiendo_desktop":[["impl ValueEnum for KeyMappingArg"],["impl ValueEnum for SystemArg"],["impl ValueEnum for PlatformArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js
index b97db724..4640f43a 100644
--- a/doc/implementors/core/clone/trait.Clone.js
+++ b/doc/implementors/core/clone/trait.Clone.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Clone for Color"],["impl Clone for RomFile"],["impl<T: Clone + PartialEq> Clone for KeyState<T>"],["impl Clone for KeyPosition"],["impl Clone for C64Keys"],["impl Clone for VirtualKey"],["impl Clone for PetKeys"],["impl Clone for KeySymbol"],["impl Clone for JoystickState"],["impl Clone for WindowConfig"]],
-"noentiendo_desktop":[["impl Clone for KeyMappingArg"],["impl Clone for SystemArg"],["impl Clone for PlatformArg"]]
+"libnoentiendo":[["impl Clone for KeySymbol"],["impl Clone for WindowConfig"],["impl Clone for RomFile"],["impl<T: Clone + PartialEq> Clone for KeyState<T>"],["impl Clone for JoystickState"],["impl Clone for Color"],["impl Clone for VirtualKey"],["impl Clone for KeyPosition"],["impl Clone for PetKeys"],["impl Clone for C64Keys"]],
+"noentiendo_desktop":[["impl Clone for SystemArg"],["impl Clone for KeyMappingArg"],["impl Clone for PlatformArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js
index 89a589da..34399ebe 100644
--- a/doc/implementors/core/cmp/trait.Eq.js
+++ b/doc/implementors/core/cmp/trait.Eq.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Eq for PetKeys"],["impl Eq for KeySymbol"],["impl Eq for VirtualKey"],["impl Eq for Color"],["impl Eq for ActiveInterrupt"],["impl Eq for C64Keys"],["impl Eq for KeyPosition"]],
-"noentiendo_desktop":[["impl Eq for PlatformArg"],["impl Eq for SystemArg"],["impl Eq for KeyMappingArg"]]
+"libnoentiendo":[["impl Eq for PetKeys"],["impl Eq for C64Keys"],["impl Eq for ActiveInterrupt"],["impl Eq for KeyPosition"],["impl Eq for VirtualKey"],["impl Eq for Color"],["impl Eq for KeySymbol"]],
+"noentiendo_desktop":[["impl Eq for PlatformArg"],["impl Eq for KeyMappingArg"],["impl Eq for SystemArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/cmp/trait.Ord.js b/doc/implementors/core/cmp/trait.Ord.js
index 4838e8c0..a5e5250f 100644
--- a/doc/implementors/core/cmp/trait.Ord.js
+++ b/doc/implementors/core/cmp/trait.Ord.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"noentiendo_desktop":[["impl Ord for SystemArg"],["impl Ord for KeyMappingArg"],["impl Ord for PlatformArg"]]
+"noentiendo_desktop":[["impl Ord for KeyMappingArg"],["impl Ord for PlatformArg"],["impl Ord for SystemArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js
index 0fa45172..6e917a5b 100644
--- a/doc/implementors/core/cmp/trait.PartialEq.js
+++ b/doc/implementors/core/cmp/trait.PartialEq.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl<T: PartialEq + PartialEq> PartialEq<KeyState<T>> for KeyState<T>"],["impl PartialEq<PetKeys> for PetKeys"],["impl PartialEq<JoystickState> for JoystickState"],["impl PartialEq<ActiveInterrupt> for ActiveInterrupt"],["impl PartialEq<VirtualKey> for VirtualKey"],["impl PartialEq<Color> for Color"],["impl PartialEq<C64Keys> for C64Keys"],["impl PartialEq<WindowConfig> for WindowConfig"],["impl PartialEq<KeySymbol> for KeySymbol"],["impl PartialEq<KeyPosition> for KeyPosition"]],
-"noentiendo_desktop":[["impl PartialEq<KeyMappingArg> for KeyMappingArg"],["impl PartialEq<PlatformArg> for PlatformArg"],["impl PartialEq<SystemArg> for SystemArg"]]
+"libnoentiendo":[["impl PartialEq<ActiveInterrupt> for ActiveInterrupt"],["impl PartialEq<KeySymbol> for KeySymbol"],["impl<T: PartialEq + PartialEq> PartialEq<KeyState<T>> for KeyState<T>"],["impl PartialEq<Color> for Color"],["impl PartialEq<WindowConfig> for WindowConfig"],["impl PartialEq<KeyPosition> for KeyPosition"],["impl PartialEq<JoystickState> for JoystickState"],["impl PartialEq<C64Keys> for C64Keys"],["impl PartialEq<VirtualKey> for VirtualKey"],["impl PartialEq<PetKeys> for PetKeys"]],
+"noentiendo_desktop":[["impl PartialEq<KeyMappingArg> for KeyMappingArg"],["impl PartialEq<SystemArg> for SystemArg"],["impl PartialEq<PlatformArg> for PlatformArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/cmp/trait.PartialOrd.js b/doc/implementors/core/cmp/trait.PartialOrd.js
index a0324fa4..3e32f79c 100644
--- a/doc/implementors/core/cmp/trait.PartialOrd.js
+++ b/doc/implementors/core/cmp/trait.PartialOrd.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"noentiendo_desktop":[["impl PartialOrd<SystemArg> for SystemArg"],["impl PartialOrd<PlatformArg> for PlatformArg"],["impl PartialOrd<KeyMappingArg> for KeyMappingArg"]]
+"noentiendo_desktop":[["impl PartialOrd<PlatformArg> for PlatformArg"],["impl PartialOrd<SystemArg> for SystemArg"],["impl PartialOrd<KeyMappingArg> for KeyMappingArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/default/trait.Default.js b/doc/implementors/core/default/trait.Default.js
index 63c9ba5b..9ee2a3a8 100644
--- a/doc/implementors/core/default/trait.Default.js
+++ b/doc/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Default for NullPort"],["impl Default for SystemInfo"],["impl Default for NullMemory"],["impl<T: Default + PartialEq> Default for KeyState<T>"],["impl Default for BranchMemory"]]
+"libnoentiendo":[["impl Default for SystemInfo"],["impl Default for NullMemory"],["impl Default for NullPort"],["impl<T: Default + PartialEq> Default for KeyState<T>"],["impl Default for BranchMemory"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/fmt/trait.Debug.js b/doc/implementors/core/fmt/trait.Debug.js
index 7cdc2f17..32d9a04f 100644
--- a/doc/implementors/core/fmt/trait.Debug.js
+++ b/doc/implementors/core/fmt/trait.Debug.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Debug for RomFile"],["impl<T: Debug + PartialEq> Debug for KeyState<T>"],["impl Debug for VirtualKey"],["impl Debug for WindowConfig"],["impl Debug for KeySymbol"],["impl Debug for JoystickState"],["impl Debug for SystemInfo"],["impl Debug for C64Keys"],["impl Debug for Color"],["impl Debug for ActiveInterrupt"],["impl Debug for PetKeys"],["impl Debug for KeyPosition"]],
-"noentiendo_desktop":[["impl Debug for PlatformArg"],["impl Debug for KeyMappingArg"],["impl Debug for Args"],["impl Debug for SystemArg"]]
+"libnoentiendo":[["impl Debug for PetKeys"],["impl Debug for RomFile"],["impl Debug for KeySymbol"],["impl Debug for WindowConfig"],["impl Debug for JoystickState"],["impl<T: Debug + PartialEq> Debug for KeyState<T>"],["impl Debug for C64Keys"],["impl Debug for Color"],["impl Debug for VirtualKey"],["impl Debug for SystemInfo"],["impl Debug for KeyPosition"],["impl Debug for ActiveInterrupt"]],
+"noentiendo_desktop":[["impl Debug for SystemArg"],["impl Debug for PlatformArg"],["impl Debug for KeyMappingArg"],["impl Debug for Args"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/hash/trait.Hash.js b/doc/implementors/core/hash/trait.Hash.js
index 6f73de62..90e394c3 100644
--- a/doc/implementors/core/hash/trait.Hash.js
+++ b/doc/implementors/core/hash/trait.Hash.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Hash for Color"],["impl Hash for PetKeys"],["impl Hash for C64Keys"],["impl Hash for KeyPosition"],["impl Hash for KeySymbol"],["impl Hash for VirtualKey"]]
+"libnoentiendo":[["impl Hash for KeySymbol"],["impl Hash for PetKeys"],["impl Hash for KeyPosition"],["impl Hash for C64Keys"],["impl Hash for VirtualKey"],["impl Hash for Color"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.Copy.js b/doc/implementors/core/marker/trait.Copy.js
index a837f072..436c9cf2 100644
--- a/doc/implementors/core/marker/trait.Copy.js
+++ b/doc/implementors/core/marker/trait.Copy.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Copy for PetKeys"],["impl Copy for KeyPosition"],["impl Copy for C64Keys"],["impl Copy for JoystickState"],["impl Copy for Color"],["impl Copy for WindowConfig"],["impl Copy for KeySymbol"],["impl Copy for VirtualKey"]],
-"noentiendo_desktop":[["impl Copy for SystemArg"],["impl Copy for PlatformArg"],["impl Copy for KeyMappingArg"]]
+"libnoentiendo":[["impl Copy for C64Keys"],["impl Copy for VirtualKey"],["impl Copy for KeySymbol"],["impl Copy for WindowConfig"],["impl Copy for Color"],["impl Copy for PetKeys"],["impl Copy for JoystickState"],["impl Copy for KeyPosition"]],
+"noentiendo_desktop":[["impl Copy for PlatformArg"],["impl Copy for SystemArg"],["impl Copy for KeyMappingArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js
index eefe9289..bf8ff2a6 100644
--- a/doc/implementors/core/marker/trait.Freeze.js
+++ b/doc/implementors/core/marker/trait.Freeze.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
"libnoentiendo":[["impl Freeze for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl Freeze for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Freeze for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl Freeze for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl Freeze for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl Freeze for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl Freeze for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl Freeze for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl Freeze for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Freeze for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Freeze for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Freeze for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Freeze for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Freeze for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Freeze for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Freeze for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Freeze for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Freeze for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Freeze for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Freeze for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Freeze for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Freeze for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Freeze for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Freeze for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Freeze for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Freeze for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Freeze for KeyState<T>",1,["libnoentiendo::keyboard::KeyState"]],["impl Freeze for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Freeze for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Freeze for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Freeze for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Freeze for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Freeze for Color",1,["libnoentiendo::platform::Color"]],["impl Freeze for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Freeze for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Freeze for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Freeze for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl Freeze for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Freeze for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl Freeze for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Freeze for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Freeze for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl Freeze for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Freeze for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl Freeze for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Freeze for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl Freeze for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Freeze for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Freeze for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl Freeze for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl Freeze for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Freeze for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Freeze for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl Freeze for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Freeze for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl Freeze for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl Freeze for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl Freeze for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Freeze for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Freeze for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl Freeze for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl Freeze for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Freeze for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Freeze for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Freeze for Args",1,["noentiendo_desktop::Args"]]]
+"noentiendo_desktop":[["impl Freeze for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Freeze for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Freeze for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Freeze for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js
index e8f50a24..0d5450e6 100644
--- a/doc/implementors/core/marker/trait.Send.js
+++ b/doc/implementors/core/marker/trait.Send.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl !Send for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !Send for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Send for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !Send for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !Send for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !Send for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !Send for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !Send for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !Send for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Send for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Send for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Send for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Send for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Send for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Send for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Send for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Send for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Send for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Send for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Send for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Send for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Send for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Send for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Send for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Send for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Send for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Send for KeyState<T>where\n T: Send,",1,["libnoentiendo::keyboard::KeyState"]],["impl Send for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Send for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Send for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Send for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Send for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Send for Color",1,["libnoentiendo::platform::Color"]],["impl Send for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Send for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Send for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Send for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !Send for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Send for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !Send for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Send for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Send for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !Send for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Send for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !Send for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Send for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !Send for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Send for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Send for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !Send for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !Send for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Send for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Send for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !Send for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Send for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !Send for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !Send for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !Send for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Send for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Send for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !Send for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl Send for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Send for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Send for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Send for Args",1,["noentiendo_desktop::Args"]]]
+"libnoentiendo":[["impl !Send for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !Send for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Send for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !Send for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !Send for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !Send for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !Send for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !Send for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !Send for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Send for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Send for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Send for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Send for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Send for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Send for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Send for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Send for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Send for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Send for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Send for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Send for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Send for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Send for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Send for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Send for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Send for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Send for KeyState<T>where\n T: Send,",1,["libnoentiendo::keyboard::KeyState"]],["impl Send for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Send for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Send for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Send for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Send for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Send for Color",1,["libnoentiendo::platform::Color"]],["impl Send for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Send for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Send for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Send for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !Send for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Send for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !Send for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Send for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Send for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !Send for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Send for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !Send for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Send for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !Send for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Send for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Send for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !Send for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !Send for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Send for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Send for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !Send for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Send for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !Send for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !Send for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !Send for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Send for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Send for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !Send for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
+"noentiendo_desktop":[["impl Send for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Send for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Send for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Send for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js
index 7e084563..f7d0650f 100644
--- a/doc/implementors/core/marker/trait.StructuralEq.js
+++ b/doc/implementors/core/marker/trait.StructuralEq.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl StructuralEq for KeyPosition"],["impl StructuralEq for Color"],["impl StructuralEq for ActiveInterrupt"],["impl StructuralEq for C64Keys"],["impl StructuralEq for VirtualKey"],["impl StructuralEq for KeySymbol"],["impl StructuralEq for PetKeys"]],
-"noentiendo_desktop":[["impl StructuralEq for PlatformArg"],["impl StructuralEq for KeyMappingArg"],["impl StructuralEq for SystemArg"]]
+"libnoentiendo":[["impl StructuralEq for ActiveInterrupt"],["impl StructuralEq for C64Keys"],["impl StructuralEq for KeyPosition"],["impl StructuralEq for KeySymbol"],["impl StructuralEq for VirtualKey"],["impl StructuralEq for Color"],["impl StructuralEq for PetKeys"]],
+"noentiendo_desktop":[["impl StructuralEq for PlatformArg"],["impl StructuralEq for SystemArg"],["impl StructuralEq for KeyMappingArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js
index cff3dc05..aac9199d 100644
--- a/doc/implementors/core/marker/trait.StructuralPartialEq.js
+++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl StructuralPartialEq for PetKeys"],["impl StructuralPartialEq for C64Keys"],["impl StructuralPartialEq for ActiveInterrupt"],["impl StructuralPartialEq for WindowConfig"],["impl StructuralPartialEq for KeyPosition"],["impl StructuralPartialEq for VirtualKey"],["impl<T: PartialEq> StructuralPartialEq for KeyState<T>"],["impl StructuralPartialEq for Color"],["impl StructuralPartialEq for KeySymbol"],["impl StructuralPartialEq for JoystickState"]],
-"noentiendo_desktop":[["impl StructuralPartialEq for KeyMappingArg"],["impl StructuralPartialEq for PlatformArg"],["impl StructuralPartialEq for SystemArg"]]
+"libnoentiendo":[["impl StructuralPartialEq for WindowConfig"],["impl StructuralPartialEq for JoystickState"],["impl StructuralPartialEq for C64Keys"],["impl StructuralPartialEq for VirtualKey"],["impl StructuralPartialEq for PetKeys"],["impl<T: PartialEq> StructuralPartialEq for KeyState<T>"],["impl StructuralPartialEq for KeyPosition"],["impl StructuralPartialEq for ActiveInterrupt"],["impl StructuralPartialEq for KeySymbol"],["impl StructuralPartialEq for Color"]],
+"noentiendo_desktop":[["impl StructuralPartialEq for KeyMappingArg"],["impl StructuralPartialEq for SystemArg"],["impl StructuralPartialEq for PlatformArg"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js
index d5045c69..d20ce715 100644
--- a/doc/implementors/core/marker/trait.Sync.js
+++ b/doc/implementors/core/marker/trait.Sync.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl !Sync for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !Sync for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Sync for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !Sync for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !Sync for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !Sync for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !Sync for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !Sync for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !Sync for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Sync for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Sync for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Sync for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Sync for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Sync for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Sync for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Sync for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Sync for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Sync for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Sync for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Sync for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Sync for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Sync for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Sync for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Sync for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Sync for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Sync for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Sync for KeyState<T>where\n T: Sync,",1,["libnoentiendo::keyboard::KeyState"]],["impl Sync for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Sync for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Sync for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Sync for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Sync for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Sync for Color",1,["libnoentiendo::platform::Color"]],["impl Sync for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Sync for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Sync for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Sync for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !Sync for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Sync for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !Sync for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Sync for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Sync for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !Sync for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Sync for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !Sync for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Sync for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !Sync for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Sync for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Sync for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !Sync for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !Sync for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Sync for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Sync for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !Sync for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Sync for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !Sync for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !Sync for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !Sync for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Sync for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Sync for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !Sync for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl Sync for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Sync for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Sync for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Sync for Args",1,["noentiendo_desktop::Args"]]]
+"libnoentiendo":[["impl !Sync for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !Sync for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Sync for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !Sync for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !Sync for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !Sync for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !Sync for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !Sync for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !Sync for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Sync for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Sync for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Sync for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Sync for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Sync for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Sync for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Sync for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Sync for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Sync for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Sync for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Sync for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Sync for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Sync for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Sync for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Sync for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Sync for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Sync for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Sync for KeyState<T>where\n T: Sync,",1,["libnoentiendo::keyboard::KeyState"]],["impl Sync for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Sync for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Sync for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Sync for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Sync for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Sync for Color",1,["libnoentiendo::platform::Color"]],["impl Sync for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Sync for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Sync for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Sync for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !Sync for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Sync for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !Sync for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Sync for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Sync for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !Sync for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Sync for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !Sync for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Sync for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !Sync for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Sync for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Sync for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !Sync for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !Sync for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Sync for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Sync for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !Sync for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Sync for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !Sync for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !Sync for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !Sync for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Sync for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Sync for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !Sync for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
+"noentiendo_desktop":[["impl Sync for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Sync for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Sync for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Sync for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js
index 79e55fda..b6c1e661 100644
--- a/doc/implementors/core/marker/trait.Unpin.js
+++ b/doc/implementors/core/marker/trait.Unpin.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Unpin for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl Unpin for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Unpin for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl Unpin for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl Unpin for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl Unpin for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl Unpin for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl Unpin for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl Unpin for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Unpin for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Unpin for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Unpin for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Unpin for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Unpin for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Unpin for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Unpin for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Unpin for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Unpin for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Unpin for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Unpin for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Unpin for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Unpin for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Unpin for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Unpin for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Unpin for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Unpin for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Unpin for KeyState<T>where\n T: Unpin,",1,["libnoentiendo::keyboard::KeyState"]],["impl Unpin for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Unpin for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Unpin for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Unpin for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Unpin for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Unpin for Color",1,["libnoentiendo::platform::Color"]],["impl Unpin for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Unpin for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Unpin for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Unpin for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl Unpin for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Unpin for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl Unpin for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Unpin for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Unpin for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl Unpin for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Unpin for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl Unpin for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Unpin for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl Unpin for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Unpin for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Unpin for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl Unpin for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl Unpin for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Unpin for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Unpin for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl Unpin for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Unpin for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl Unpin for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl Unpin for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl Unpin for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Unpin for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Unpin for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl Unpin for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl Unpin for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Unpin for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Unpin for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Unpin for Args",1,["noentiendo_desktop::Args"]]]
+"libnoentiendo":[["impl Unpin for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl Unpin for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl Unpin for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl Unpin for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl Unpin for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl Unpin for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl Unpin for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl Unpin for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl Unpin for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl Unpin for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl Unpin for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl Unpin for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl Unpin for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl Unpin for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl Unpin for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl Unpin for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl Unpin for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl Unpin for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl Unpin for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl Unpin for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl Unpin for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl Unpin for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl Unpin for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl Unpin for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl Unpin for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl Unpin for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> Unpin for KeyState<T>where\n T: Unpin,",1,["libnoentiendo::keyboard::KeyState"]],["impl Unpin for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl Unpin for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl Unpin for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl Unpin for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl Unpin for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl Unpin for Color",1,["libnoentiendo::platform::Color"]],["impl Unpin for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl Unpin for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl Unpin for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl Unpin for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl Unpin for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl Unpin for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl Unpin for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl Unpin for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl Unpin for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl Unpin for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl Unpin for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl Unpin for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl Unpin for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl Unpin for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl Unpin for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl Unpin for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl Unpin for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl Unpin for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl Unpin for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl Unpin for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl Unpin for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl Unpin for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl Unpin for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl Unpin for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl Unpin for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl Unpin for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl Unpin for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl Unpin for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
+"noentiendo_desktop":[["impl Unpin for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl Unpin for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl Unpin for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl Unpin for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/ops/bit/trait.BitOr.js b/doc/implementors/core/ops/bit/trait.BitOr.js
index 11ff948a..ad41c44f 100644
--- a/doc/implementors/core/ops/bit/trait.BitOr.js
+++ b/doc/implementors/core/ops/bit/trait.BitOr.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"libnoentiendo":[["impl<T: PartialEq> BitOr<KeyState<T>> for KeyState<T>"]]
+"libnoentiendo":[["impl<T: PartialEq> BitOr<KeyState<T>> for KeyState<T>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index b38ed175..9919a3b5 100644
--- a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl !RefUnwindSafe for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !RefUnwindSafe for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl RefUnwindSafe for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !RefUnwindSafe for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !RefUnwindSafe for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !RefUnwindSafe for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !RefUnwindSafe for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !RefUnwindSafe for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !RefUnwindSafe for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl RefUnwindSafe for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl RefUnwindSafe for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl RefUnwindSafe for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl RefUnwindSafe for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl RefUnwindSafe for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl RefUnwindSafe for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl RefUnwindSafe for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl RefUnwindSafe for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl RefUnwindSafe for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl RefUnwindSafe for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl RefUnwindSafe for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl RefUnwindSafe for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl RefUnwindSafe for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl RefUnwindSafe for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl RefUnwindSafe for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl RefUnwindSafe for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl RefUnwindSafe for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> RefUnwindSafe for KeyState<T>where\n T: RefUnwindSafe,",1,["libnoentiendo::keyboard::KeyState"]],["impl RefUnwindSafe for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl RefUnwindSafe for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl RefUnwindSafe for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl RefUnwindSafe for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl RefUnwindSafe for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl RefUnwindSafe for Color",1,["libnoentiendo::platform::Color"]],["impl RefUnwindSafe for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl RefUnwindSafe for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl RefUnwindSafe for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl RefUnwindSafe for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !RefUnwindSafe for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl RefUnwindSafe for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !RefUnwindSafe for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl RefUnwindSafe for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl RefUnwindSafe for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !RefUnwindSafe for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl RefUnwindSafe for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !RefUnwindSafe for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl RefUnwindSafe for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !RefUnwindSafe for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl RefUnwindSafe for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl RefUnwindSafe for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !RefUnwindSafe for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !RefUnwindSafe for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl RefUnwindSafe for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl RefUnwindSafe for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !RefUnwindSafe for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl RefUnwindSafe for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !RefUnwindSafe for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !RefUnwindSafe for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !RefUnwindSafe for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl RefUnwindSafe for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl RefUnwindSafe for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !RefUnwindSafe for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl RefUnwindSafe for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl RefUnwindSafe for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl RefUnwindSafe for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl RefUnwindSafe for Args",1,["noentiendo_desktop::Args"]]]
+"libnoentiendo":[["impl !RefUnwindSafe for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !RefUnwindSafe for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl RefUnwindSafe for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !RefUnwindSafe for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !RefUnwindSafe for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !RefUnwindSafe for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !RefUnwindSafe for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !RefUnwindSafe for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !RefUnwindSafe for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl RefUnwindSafe for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl RefUnwindSafe for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl RefUnwindSafe for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl RefUnwindSafe for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl RefUnwindSafe for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl RefUnwindSafe for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl RefUnwindSafe for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl RefUnwindSafe for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl RefUnwindSafe for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl RefUnwindSafe for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl RefUnwindSafe for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl RefUnwindSafe for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl RefUnwindSafe for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl RefUnwindSafe for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl RefUnwindSafe for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl RefUnwindSafe for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl RefUnwindSafe for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> RefUnwindSafe for KeyState<T>where\n T: RefUnwindSafe,",1,["libnoentiendo::keyboard::KeyState"]],["impl RefUnwindSafe for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl RefUnwindSafe for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl RefUnwindSafe for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl RefUnwindSafe for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl RefUnwindSafe for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl RefUnwindSafe for Color",1,["libnoentiendo::platform::Color"]],["impl RefUnwindSafe for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl RefUnwindSafe for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl RefUnwindSafe for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl RefUnwindSafe for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !RefUnwindSafe for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl RefUnwindSafe for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !RefUnwindSafe for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl RefUnwindSafe for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl RefUnwindSafe for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !RefUnwindSafe for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl RefUnwindSafe for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !RefUnwindSafe for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl RefUnwindSafe for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !RefUnwindSafe for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl RefUnwindSafe for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl RefUnwindSafe for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !RefUnwindSafe for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !RefUnwindSafe for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl RefUnwindSafe for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl RefUnwindSafe for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !RefUnwindSafe for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl RefUnwindSafe for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !RefUnwindSafe for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !RefUnwindSafe for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !RefUnwindSafe for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl RefUnwindSafe for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl RefUnwindSafe for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !RefUnwindSafe for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
+"noentiendo_desktop":[["impl RefUnwindSafe for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl RefUnwindSafe for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl RefUnwindSafe for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl RefUnwindSafe for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 3672f558..7b1824db 100644
--- a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,4 +1,4 @@
(function() {var implementors = {
-"libnoentiendo":[["impl !UnwindSafe for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !UnwindSafe for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl UnwindSafe for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !UnwindSafe for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !UnwindSafe for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !UnwindSafe for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !UnwindSafe for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !UnwindSafe for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !UnwindSafe for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl UnwindSafe for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl UnwindSafe for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl UnwindSafe for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl UnwindSafe for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl UnwindSafe for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl UnwindSafe for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl UnwindSafe for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl UnwindSafe for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl UnwindSafe for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl UnwindSafe for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl UnwindSafe for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl UnwindSafe for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl UnwindSafe for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl UnwindSafe for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl UnwindSafe for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl UnwindSafe for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl UnwindSafe for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> UnwindSafe for KeyState<T>where\n T: UnwindSafe,",1,["libnoentiendo::keyboard::KeyState"]],["impl UnwindSafe for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl UnwindSafe for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl UnwindSafe for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl UnwindSafe for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl UnwindSafe for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl UnwindSafe for Color",1,["libnoentiendo::platform::Color"]],["impl UnwindSafe for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl UnwindSafe for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl UnwindSafe for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl UnwindSafe for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !UnwindSafe for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl UnwindSafe for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !UnwindSafe for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl UnwindSafe for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl UnwindSafe for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !UnwindSafe for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl UnwindSafe for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !UnwindSafe for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl UnwindSafe for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !UnwindSafe for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl UnwindSafe for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl UnwindSafe for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !UnwindSafe for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !UnwindSafe for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl UnwindSafe for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl UnwindSafe for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !UnwindSafe for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl UnwindSafe for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !UnwindSafe for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !UnwindSafe for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !UnwindSafe for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl UnwindSafe for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl UnwindSafe for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !UnwindSafe for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
-"noentiendo_desktop":[["impl UnwindSafe for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl UnwindSafe for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl UnwindSafe for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl UnwindSafe for Args",1,["noentiendo_desktop::Args"]]]
+"libnoentiendo":[["impl !UnwindSafe for Mos6502",1,["libnoentiendo::cpu::Mos6502"]],["impl !UnwindSafe for BankedMemory",1,["libnoentiendo::memory::banked::BankedMemory"]],["impl UnwindSafe for BlockMemory",1,["libnoentiendo::memory::block::BlockMemory"]],["impl !UnwindSafe for BranchMemory",1,["libnoentiendo::memory::branch::BranchMemory"]],["impl !UnwindSafe for Mos6510Port",1,["libnoentiendo::memory::mos6510::Mos6510Port"]],["impl !UnwindSafe for Cia",1,["libnoentiendo::memory::mos652x::cia::Cia"]],["impl !UnwindSafe for Pia",1,["libnoentiendo::memory::mos652x::pia::Pia"]],["impl !UnwindSafe for Via",1,["libnoentiendo::memory::mos652x::via::Via"]],["impl !UnwindSafe for PortRegisters",1,["libnoentiendo::memory::mos652x::PortRegisters"]],["impl UnwindSafe for TimerOutput",1,["libnoentiendo::memory::mos652x::TimerOutput"]],["impl UnwindSafe for TimerClockSource",1,["libnoentiendo::memory::mos652x::TimerClockSource"]],["impl UnwindSafe for Timer",1,["libnoentiendo::memory::mos652x::Timer"]],["impl UnwindSafe for ShiftRegister",1,["libnoentiendo::memory::mos652x::ShiftRegister"]],["impl UnwindSafe for InterruptRegister",1,["libnoentiendo::memory::mos652x::InterruptRegister"]],["impl UnwindSafe for NullMemory",1,["libnoentiendo::memory::null::NullMemory"]],["impl UnwindSafe for NullPort",1,["libnoentiendo::memory::ports::NullPort"]],["impl UnwindSafe for ActiveInterrupt",1,["libnoentiendo::memory::ActiveInterrupt"]],["impl UnwindSafe for SystemInfo",1,["libnoentiendo::memory::SystemInfo"]],["impl UnwindSafe for C64Keys",1,["libnoentiendo::keyboard::commodore::C64Keys"]],["impl UnwindSafe for C64KeyboardAdapter",1,["libnoentiendo::keyboard::commodore::C64KeyboardAdapter"]],["impl UnwindSafe for C64SymbolAdapter",1,["libnoentiendo::keyboard::commodore::C64SymbolAdapter"]],["impl UnwindSafe for C64VirtualAdapter",1,["libnoentiendo::keyboard::commodore::C64VirtualAdapter"]],["impl UnwindSafe for KeyPosition",1,["libnoentiendo::keyboard::positions::KeyPosition"]],["impl UnwindSafe for KeySymbol",1,["libnoentiendo::keyboard::symbols::KeySymbol"]],["impl UnwindSafe for SymbolAdapter",1,["libnoentiendo::keyboard::symbols::SymbolAdapter"]],["impl UnwindSafe for VirtualKey",1,["libnoentiendo::keyboard::virtualkey::VirtualKey"]],["impl<T> UnwindSafe for KeyState<T>where\n T: UnwindSafe,",1,["libnoentiendo::keyboard::KeyState"]],["impl UnwindSafe for KeyMappingStrategy",1,["libnoentiendo::keyboard::KeyMappingStrategy"]],["impl UnwindSafe for TextPlatform",1,["libnoentiendo::platform::text::TextPlatform"]],["impl UnwindSafe for TextPlatformProvider",1,["libnoentiendo::platform::text::TextPlatformProvider"]],["impl UnwindSafe for WinitPlatform",1,["libnoentiendo::platform::winit::WinitPlatform"]],["impl UnwindSafe for WinitPlatformProvider",1,["libnoentiendo::platform::winit::WinitPlatformProvider"]],["impl UnwindSafe for Color",1,["libnoentiendo::platform::Color"]],["impl UnwindSafe for JoystickState",1,["libnoentiendo::platform::JoystickState"]],["impl UnwindSafe for WindowConfig",1,["libnoentiendo::platform::WindowConfig"]],["impl UnwindSafe for RomFile",1,["libnoentiendo::roms::RomFile"]],["impl UnwindSafe for BasicSystemBuilder",1,["libnoentiendo::systems::basic::BasicSystemBuilder"]],["impl !UnwindSafe for BasicSystem",1,["libnoentiendo::systems::basic::BasicSystem"]],["impl UnwindSafe for C64SystemRoms",1,["libnoentiendo::systems::c64::roms::C64SystemRoms"]],["impl !UnwindSafe for C64BankSwitching",1,["libnoentiendo::systems::c64::C64BankSwitching"]],["impl UnwindSafe for C64SystemConfig",1,["libnoentiendo::systems::c64::C64SystemConfig"]],["impl UnwindSafe for C64SystemBuilder",1,["libnoentiendo::systems::c64::C64SystemBuilder"]],["impl !UnwindSafe for C64System",1,["libnoentiendo::systems::c64::C64System"]],["impl UnwindSafe for Easy6502SystemBuilder",1,["libnoentiendo::systems::easy::Easy6502SystemBuilder"]],["impl !UnwindSafe for Easy6502System",1,["libnoentiendo::systems::easy::Easy6502System"]],["impl UnwindSafe for KlausSystemBuilder",1,["libnoentiendo::systems::klaus::KlausSystemBuilder"]],["impl !UnwindSafe for KlausSystem",1,["libnoentiendo::systems::klaus::KlausSystem"]],["impl UnwindSafe for PetSystemRoms",1,["libnoentiendo::systems::pet::roms::PetSystemRoms"]],["impl UnwindSafe for PetKeys",1,["libnoentiendo::systems::pet::keyboard::PetKeys"]],["impl !UnwindSafe for PetPia1PortA",1,["libnoentiendo::systems::pet::PetPia1PortA"]],["impl !UnwindSafe for PetPia1PortB",1,["libnoentiendo::systems::pet::PetPia1PortB"]],["impl UnwindSafe for PetSystemConfig",1,["libnoentiendo::systems::pet::PetSystemConfig"]],["impl UnwindSafe for PetSystemBuilder",1,["libnoentiendo::systems::pet::PetSystemBuilder"]],["impl !UnwindSafe for PetSystem",1,["libnoentiendo::systems::pet::PetSystem"]],["impl UnwindSafe for Vic20SystemRoms",1,["libnoentiendo::systems::vic::Vic20SystemRoms"]],["impl !UnwindSafe for VicVia1PortA",1,["libnoentiendo::systems::vic::VicVia1PortA"]],["impl !UnwindSafe for VicVia2PortB",1,["libnoentiendo::systems::vic::VicVia2PortB"]],["impl !UnwindSafe for VicVia2PortA",1,["libnoentiendo::systems::vic::VicVia2PortA"]],["impl UnwindSafe for Vic20SystemConfig",1,["libnoentiendo::systems::vic::Vic20SystemConfig"]],["impl UnwindSafe for Vic20SystemBuilder",1,["libnoentiendo::systems::vic::Vic20SystemBuilder"]],["impl !UnwindSafe for Vic20System",1,["libnoentiendo::systems::vic::Vic20System"]]],
+"noentiendo_desktop":[["impl UnwindSafe for SystemArg",1,["noentiendo_desktop::SystemArg"]],["impl UnwindSafe for PlatformArg",1,["noentiendo_desktop::PlatformArg"]],["impl UnwindSafe for KeyMappingArg",1,["noentiendo_desktop::KeyMappingArg"]],["impl UnwindSafe for Args",1,["noentiendo_desktop::Args"]]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/serde/de/trait.Deserialize.js b/doc/implementors/serde/de/trait.Deserialize.js
index 1e6280db..7288e9ab 100644
--- a/doc/implementors/serde/de/trait.Deserialize.js
+++ b/doc/implementors/serde/de/trait.Deserialize.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"libnoentiendo":[["impl<'de> Deserialize<'de> for VirtualKey"],["impl<'de> Deserialize<'de> for PetKeys"],["impl<'de> Deserialize<'de> for C64Keys"]]
+"libnoentiendo":[["impl<'de> Deserialize<'de> for C64Keys"],["impl<'de> Deserialize<'de> for VirtualKey"],["impl<'de> Deserialize<'de> for PetKeys"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/implementors/serde/ser/trait.Serialize.js b/doc/implementors/serde/ser/trait.Serialize.js
index 830f2f2b..f578c5fa 100644
--- a/doc/implementors/serde/ser/trait.Serialize.js
+++ b/doc/implementors/serde/ser/trait.Serialize.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"libnoentiendo":[["impl Serialize for VirtualKey"],["impl Serialize for PetKeys"],["impl Serialize for C64Keys"]]
+"libnoentiendo":[["impl Serialize for VirtualKey"],["impl Serialize for C64Keys"],["impl Serialize for PetKeys"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/doc/libnoentiendo/all.html b/doc/libnoentiendo/all.html
index 7e68da60..f2c49e78 100644
--- a/doc/libnoentiendo/all.html
+++ b/doc/libnoentiendo/all.html
@@ -1 +1 @@
-List of all items in this crate
\ No newline at end of file
diff --git a/doc/libnoentiendo/cpu/index.html b/doc/libnoentiendo/cpu/index.html
index 01af64b5..caf2c9a7 100644
--- a/doc/libnoentiendo/cpu/index.html
+++ b/doc/libnoentiendo/cpu/index.html
@@ -1,3 +1,3 @@
-libnoentiendo::cpu - Rust
Handle interrupts by setting the applicable flags, pushing the program counter
-onto the stack, and loading the interrupt vector into the program counter.
\ No newline at end of file
diff --git a/doc/libnoentiendo/cpu/struct.Mos6502.html b/doc/libnoentiendo/cpu/struct.Mos6502.html
index 315a4a13..39e9e49e 100644
--- a/doc/libnoentiendo/cpu/struct.Mos6502.html
+++ b/doc/libnoentiendo/cpu/struct.Mos6502.html
@@ -1,19 +1,19 @@
-Mos6502 in libnoentiendo::cpu - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/cpu/trait.InterruptHandler.html b/doc/libnoentiendo/cpu/trait.InterruptHandler.html
index ce89663c..f3cfce9c 100644
--- a/doc/libnoentiendo/cpu/trait.InterruptHandler.html
+++ b/doc/libnoentiendo/cpu/trait.InterruptHandler.html
@@ -1,6 +1,6 @@
-InterruptHandler in libnoentiendo::cpu - Rust
Handle interrupts by setting the applicable flags, pushing the program counter
onto the stack, and loading the interrupt vector into the program counter.
\ No newline at end of file
diff --git a/doc/libnoentiendo/cpu/trait.MemoryIO.html b/doc/libnoentiendo/cpu/trait.MemoryIO.html
index 8860fbbb..01bcd23e 100644
--- a/doc/libnoentiendo/cpu/trait.MemoryIO.html
+++ b/doc/libnoentiendo/cpu/trait.MemoryIO.html
@@ -1,12 +1,12 @@
-MemoryIO in libnoentiendo::cpu - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/cpu/trait.Stack.html b/doc/libnoentiendo/cpu/trait.Stack.html
index 04e9bed8..e1acf2df 100644
--- a/doc/libnoentiendo/cpu/trait.Stack.html
+++ b/doc/libnoentiendo/cpu/trait.Stack.html
@@ -1,12 +1,12 @@
-Stack in libnoentiendo::cpu - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/index.html b/doc/libnoentiendo/index.html
index f91de76a..43a66119 100644
--- a/doc/libnoentiendo/index.html
+++ b/doc/libnoentiendo/index.html
@@ -1,4 +1,4 @@
-libnoentiendo - Rust
Various representations of keyboard scancodes are required in different parts of the codebase. Each platform typically has its own definition of a scancode (e.g. JavaScript’s event.code or Winit’s VirtualKeyCode), and each emulated system has a different set of keys (e.g. the Commodore key on the VIC-20 or the standalone " key on the PET).
A memory::Memory implementation can be read from and written to, but it can also be polled for interrupts. This is used for the PIA, VIA, and other chips that interface over memory but also trigger interrupts. The memory module provides implementations for various types of memory and other memory-mapped devices. Mappings are handled using memory::BranchMemory.
A platform::Platform consumes a system and runs it. Platforms provide access to the video output, keyboard input, system random number generator, and other details via a platform::PlatformProvider. Some platforms run synchronously (taking over the thread) while others run asynchronously with the help of an event loop (such as when compiling to WASM). Platforms are defined in the platform module.
-Currently, available platforms include TextPlatform for simple headless text-based operation, WinitPlatform for a graphical window on a desktop environment, and CanvasPlatform for drawing to a <canvas> element on the web. In the future, platforms for mobile apps are planned, in addition to a platform for running on a microcontroller (e.g. the RP2040).
ROM file loading and unloading is different on different platforms: desktop platforms typically load ROMs from a file, while WebAssembly platforms need to load ROMs from a Uint8Array. ROM file definition and loading is handled in the roms module, with specific roms::DiskLoadable and roms::JsValueLoadable traits for these two cases. Loaded ROMs are represented with a roms::RomFile object, which can be passed to memory::BlockMemory::from_file.
\ No newline at end of file
+Currently, available platforms include TextPlatform for simple headless text-based operation, WinitPlatform for a graphical window on a desktop environment, and CanvasPlatform for drawing to a <canvas> element on the web. In the future, platforms for mobile apps are planned, in addition to a platform for running on a microcontroller (e.g. the RP2040).
ROM file loading and unloading is different on different platforms: desktop platforms typically load ROMs from a file, while WebAssembly platforms need to load ROMs from a Uint8Array. ROM file definition and loading is handled in the roms module, with specific roms::DiskLoadable and roms::JsValueLoadable traits for these two cases. Loaded ROMs are represented with a roms::RomFile object, which can be passed to memory::BlockMemory::from_file.
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/commodore/enum.C64Keys.html b/doc/libnoentiendo/keyboard/commodore/enum.C64Keys.html
index c0effa05..d1e4d646 100644
--- a/doc/libnoentiendo/keyboard/commodore/enum.C64Keys.html
+++ b/doc/libnoentiendo/keyboard/commodore/enum.C64Keys.html
@@ -1,4 +1,4 @@
-C64Keys in libnoentiendo::keyboard::commodore - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/commodore/index.html b/doc/libnoentiendo/keyboard/commodore/index.html
index 63d92ef4..b1d99329 100644
--- a/doc/libnoentiendo/keyboard/commodore/index.html
+++ b/doc/libnoentiendo/keyboard/commodore/index.html
@@ -1,2 +1,2 @@
-libnoentiendo::keyboard::commodore - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/commodore/struct.C64KeyboardAdapter.html b/doc/libnoentiendo/keyboard/commodore/struct.C64KeyboardAdapter.html
index 15710598..9e6ae2b1 100644
--- a/doc/libnoentiendo/keyboard/commodore/struct.C64KeyboardAdapter.html
+++ b/doc/libnoentiendo/keyboard/commodore/struct.C64KeyboardAdapter.html
@@ -1,14 +1,14 @@
-C64KeyboardAdapter in libnoentiendo::keyboard::commodore - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/commodore/struct.C64SymbolAdapter.html b/doc/libnoentiendo/keyboard/commodore/struct.C64SymbolAdapter.html
index 022732dd..3159a2b0 100644
--- a/doc/libnoentiendo/keyboard/commodore/struct.C64SymbolAdapter.html
+++ b/doc/libnoentiendo/keyboard/commodore/struct.C64SymbolAdapter.html
@@ -1,14 +1,14 @@
-C64SymbolAdapter in libnoentiendo::keyboard::commodore - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/commodore/struct.C64VirtualAdapter.html b/doc/libnoentiendo/keyboard/commodore/struct.C64VirtualAdapter.html
index 7ad99560..8f43b0df 100644
--- a/doc/libnoentiendo/keyboard/commodore/struct.C64VirtualAdapter.html
+++ b/doc/libnoentiendo/keyboard/commodore/struct.C64VirtualAdapter.html
@@ -1,13 +1,13 @@
-C64VirtualAdapter in libnoentiendo::keyboard::commodore - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/enum.KeyMappingStrategy.html b/doc/libnoentiendo/keyboard/enum.KeyMappingStrategy.html
index e7496e15..1106b1ea 100644
--- a/doc/libnoentiendo/keyboard/enum.KeyMappingStrategy.html
+++ b/doc/libnoentiendo/keyboard/enum.KeyMappingStrategy.html
@@ -1,4 +1,4 @@
-KeyMappingStrategy in libnoentiendo::keyboard - Rust
Preserve symbols one-to-one. This is more intuitive, but may cause issues
with some software. This approach will rewrite the state of the modifier
keys to convey the symbols being pressed.
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/enum.KeyPosition.html b/doc/libnoentiendo/keyboard/enum.KeyPosition.html
index d0e83f1c..ed2e251f 100644
--- a/doc/libnoentiendo/keyboard/enum.KeyPosition.html
+++ b/doc/libnoentiendo/keyboard/enum.KeyPosition.html
@@ -1,4 +1,4 @@
-KeyPosition in libnoentiendo::keyboard - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/enum.KeySymbol.html b/doc/libnoentiendo/keyboard/enum.KeySymbol.html
index ee0a9cfc..342c4572 100644
--- a/doc/libnoentiendo/keyboard/enum.KeySymbol.html
+++ b/doc/libnoentiendo/keyboard/enum.KeySymbol.html
@@ -1,5 +1,5 @@
-KeySymbol in libnoentiendo::keyboard - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/enum.VirtualKey.html b/doc/libnoentiendo/keyboard/enum.VirtualKey.html
index 08cf9d06..d1bcb1e7 100644
--- a/doc/libnoentiendo/keyboard/enum.VirtualKey.html
+++ b/doc/libnoentiendo/keyboard/enum.VirtualKey.html
@@ -1,29 +1,29 @@
-VirtualKey in libnoentiendo::keyboard - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/index.html b/doc/libnoentiendo/keyboard/index.html
index 968c4a58..0b62fb63 100644
--- a/doc/libnoentiendo/keyboard/index.html
+++ b/doc/libnoentiendo/keyboard/index.html
@@ -1,4 +1,4 @@
-libnoentiendo::keyboard - Rust
Various representations of keyboard scancodes are required in different parts of the codebase. Each platform typically has its own definition of a scancode (e.g. JavaScript’s event.code or Winit’s VirtualKeyCode), and each emulated system has a different set of keys (e.g. the Commodore key on the VIC-20 or the standalone " key on the PET).
Various representations of keyboard scancodes are required in different parts of the codebase. Each platform typically has its own definition of a scancode (e.g. JavaScript’s event.code or Winit’s VirtualKeyCode), and each emulated system has a different set of keys (e.g. the Commodore key on the VIC-20 or the standalone " key on the PET).
Utilities for handling keyboard input are defined in the keyboard module. This module defines a keyboard::KeyPosition enum to represent the physical keys which appear on a modern host keyboard and a keyboard::KeySymbol enum to represent the symbols which can be typed with a modern host keyboard. It also defines a keyboard::KeyState<T> struct to represent the set of currently-pressed keys in some representation T.
Mapping between different keyboard representations is handled using keyboard::KeyAdapter<F, T> implementations. These exist for four different scenarios:
Represents a mapping from a key state of one type to a key state of another type.
Mappings can be symbolic (preserve symbols across the mapping, and rewrite
modifier keys as needed) or physical (maintain a one-to-one mapping from
-physical keys to physical keys).
\ No newline at end of file
+physical keys to physical keys).
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/struct.KeyState.html b/doc/libnoentiendo/keyboard/struct.KeyState.html
index d273ba10..558b261e 100644
--- a/doc/libnoentiendo/keyboard/struct.KeyState.html
+++ b/doc/libnoentiendo/keyboard/struct.KeyState.html
@@ -1,27 +1,27 @@
-KeyState in libnoentiendo::keyboard - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/struct.SymbolAdapter.html b/doc/libnoentiendo/keyboard/struct.SymbolAdapter.html
index 95130d28..b4642328 100644
--- a/doc/libnoentiendo/keyboard/struct.SymbolAdapter.html
+++ b/doc/libnoentiendo/keyboard/struct.SymbolAdapter.html
@@ -1,14 +1,14 @@
-SymbolAdapter in libnoentiendo::keyboard - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/keyboard/trait.KeyAdapter.html b/doc/libnoentiendo/keyboard/trait.KeyAdapter.html
index 04829d46..61c81a07 100644
--- a/doc/libnoentiendo/keyboard/trait.KeyAdapter.html
+++ b/doc/libnoentiendo/keyboard/trait.KeyAdapter.html
@@ -1,10 +1,10 @@
-KeyAdapter in libnoentiendo::keyboard - Rust
Represents a mapping from a key state of one type to a key state of another type.
Mappings can be symbolic (preserve symbols across the mapping, and rewrite
modifier keys as needed) or physical (maintain a one-to-one mapping from
physical keys to physical keys).
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/enum.ActiveInterrupt.html b/doc/libnoentiendo/memory/enum.ActiveInterrupt.html
index 8c571bef..38938d8a 100644
--- a/doc/libnoentiendo/memory/enum.ActiveInterrupt.html
+++ b/doc/libnoentiendo/memory/enum.ActiveInterrupt.html
@@ -1,4 +1,4 @@
-ActiveInterrupt in libnoentiendo::memory - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/index.html b/doc/libnoentiendo/memory/index.html
index 411ddc38..d9557e81 100644
--- a/doc/libnoentiendo/memory/index.html
+++ b/doc/libnoentiendo/memory/index.html
@@ -1,4 +1,4 @@
-libnoentiendo::memory - Rust
A memory::Memory implementation can be read from and written to, but it can also be polled for interrupts. This is used for the PIA, VIA, and other chips that interface over memory but also trigger interrupts. The memory module provides implementations for various types of memory and other memory-mapped devices. Mappings are handled using memory::BranchMemory.
A memory::Memory implementation can be read from and written to, but it can also be polled for interrupts. This is used for the PIA, VIA, and other chips that interface over memory but also trigger interrupts. The memory module provides implementations for various types of memory and other memory-mapped devices. Mappings are handled using memory::BranchMemory.
Represents the memory banking features found in the Commodore 64 and other
devices. Multiple memory implementations are all mapped to the same
address space. The active implementation is selected by external logic.
A Port that can be read from, written to, reset, or polled for interrupts.
-Used in the MOS 6520 PIA and the 6522 VIA.
\ No newline at end of file
+Used in the MOS 6520 PIA and the 6522 VIA.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/enum.TimerClockSource.html b/doc/libnoentiendo/memory/mos652x/enum.TimerClockSource.html
index 4b608786..d2f0814a 100644
--- a/doc/libnoentiendo/memory/mos652x/enum.TimerClockSource.html
+++ b/doc/libnoentiendo/memory/mos652x/enum.TimerClockSource.html
@@ -1,4 +1,4 @@
-TimerClockSource in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/enum.TimerOutput.html b/doc/libnoentiendo/memory/mos652x/enum.TimerOutput.html
index c893e5f0..d66fe06a 100644
--- a/doc/libnoentiendo/memory/mos652x/enum.TimerOutput.html
+++ b/doc/libnoentiendo/memory/mos652x/enum.TimerOutput.html
@@ -1,4 +1,4 @@
-TimerOutput in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/index.html b/doc/libnoentiendo/memory/mos652x/index.html
index de4585c2..bf5f9dd9 100644
--- a/doc/libnoentiendo/memory/mos652x/index.html
+++ b/doc/libnoentiendo/memory/mos652x/index.html
@@ -1,7 +1,7 @@
-libnoentiendo::memory::mos652x - Rust
The manner in which the timer will output signals to the port, if at all.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.Cia.html b/doc/libnoentiendo/memory/mos652x/struct.Cia.html
index 17191a73..ffcab1bf 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.Cia.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.Cia.html
@@ -1,19 +1,19 @@
-Cia in libnoentiendo::memory::mos652x - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.InterruptRegister.html b/doc/libnoentiendo/memory/mos652x/struct.InterruptRegister.html
index 0588b867..ad14b6fa 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.InterruptRegister.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.InterruptRegister.html
@@ -1,22 +1,22 @@
-InterruptRegister in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.Pia.html b/doc/libnoentiendo/memory/mos652x/struct.Pia.html
index 41e713c9..8ff699e2 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.Pia.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.Pia.html
@@ -1,20 +1,20 @@
-Pia in libnoentiendo::memory::mos652x - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.PortRegisters.html b/doc/libnoentiendo/memory/mos652x/struct.PortRegisters.html
index c0166413..2301b8fa 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.PortRegisters.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.PortRegisters.html
@@ -1,17 +1,17 @@
-PortRegisters in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.ShiftRegister.html b/doc/libnoentiendo/memory/mos652x/struct.ShiftRegister.html
index 21551d14..b6c6e41a 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.ShiftRegister.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.ShiftRegister.html
@@ -1,14 +1,14 @@
-ShiftRegister in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.Timer.html b/doc/libnoentiendo/memory/mos652x/struct.Timer.html
index 2f2d7622..7646f186 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.Timer.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.Timer.html
@@ -1,14 +1,14 @@
-Timer in libnoentiendo::memory::mos652x - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/mos652x/struct.Via.html b/doc/libnoentiendo/memory/mos652x/struct.Via.html
index 0c1c4e34..c3ca8e73 100644
--- a/doc/libnoentiendo/memory/mos652x/struct.Via.html
+++ b/doc/libnoentiendo/memory/mos652x/struct.Via.html
@@ -1,20 +1,20 @@
-Via in libnoentiendo::memory::mos652x - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.BankedMemory.html b/doc/libnoentiendo/memory/struct.BankedMemory.html
index f678fc31..a4d815c2 100644
--- a/doc/libnoentiendo/memory/struct.BankedMemory.html
+++ b/doc/libnoentiendo/memory/struct.BankedMemory.html
@@ -1,22 +1,22 @@
-BankedMemory in libnoentiendo::memory - Rust
Represents the memory banking features found in the Commodore 64 and other
devices. Multiple memory implementations are all mapped to the same
address space. The active implementation is selected by external logic.
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.BlockMemory.html b/doc/libnoentiendo/memory/struct.BlockMemory.html
index f31d8dce..8fd3f405 100644
--- a/doc/libnoentiendo/memory/struct.BlockMemory.html
+++ b/doc/libnoentiendo/memory/struct.BlockMemory.html
@@ -1,26 +1,26 @@
-BlockMemory in libnoentiendo::memory - Rust
Represents a simple block of contiguous memory, with no additional hardware.
This can be used to represent both RAM and ROM.
Reading from this memory is side-effect free.
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.BranchMemory.html b/doc/libnoentiendo/memory/struct.BranchMemory.html
index b08c3d11..4244caf2 100644
--- a/doc/libnoentiendo/memory/struct.BranchMemory.html
+++ b/doc/libnoentiendo/memory/struct.BranchMemory.html
@@ -1,24 +1,24 @@
-BranchMemory in libnoentiendo::memory - Rust
Maps several Memory objects into a single contiguous address space.
Each mapped object is assigned a starting address, and reads and writes
will have the starting address subtracted from them before being passed
to the underlying Memory object.
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.Mos6510Port.html b/doc/libnoentiendo/memory/struct.Mos6510Port.html
index ec898fcd..90bab6a8 100644
--- a/doc/libnoentiendo/memory/struct.Mos6510Port.html
+++ b/doc/libnoentiendo/memory/struct.Mos6510Port.html
@@ -1,19 +1,19 @@
-Mos6510Port in libnoentiendo::memory - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.NullMemory.html b/doc/libnoentiendo/memory/struct.NullMemory.html
index 4e00cf1f..7655b076 100644
--- a/doc/libnoentiendo/memory/struct.NullMemory.html
+++ b/doc/libnoentiendo/memory/struct.NullMemory.html
@@ -1,20 +1,20 @@
-NullMemory in libnoentiendo::memory - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
-Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.NullPort.html b/doc/libnoentiendo/memory/struct.NullPort.html
index 6ce00f5c..06b02b78 100644
--- a/doc/libnoentiendo/memory/struct.NullPort.html
+++ b/doc/libnoentiendo/memory/struct.NullPort.html
@@ -1,17 +1,17 @@
-NullPort in libnoentiendo::memory - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/struct.SystemInfo.html b/doc/libnoentiendo/memory/struct.SystemInfo.html
index c0a23c54..428c7c87 100644
--- a/doc/libnoentiendo/memory/struct.SystemInfo.html
+++ b/doc/libnoentiendo/memory/struct.SystemInfo.html
@@ -1,16 +1,16 @@
-SystemInfo in libnoentiendo::memory - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/trait.Memory.html b/doc/libnoentiendo/memory/trait.Memory.html
index bc25f285..bb113e13 100644
--- a/doc/libnoentiendo/memory/trait.Memory.html
+++ b/doc/libnoentiendo/memory/trait.Memory.html
@@ -1,18 +1,18 @@
-Memory in libnoentiendo::memory - Rust
Reset this memory to its initial state, e.g. after a system reboot.
Sometimes this will clear the contents of the memory, like with RAM.
Other times this is a no-op, e.g. for ROM.
\ No newline at end of file
diff --git a/doc/libnoentiendo/memory/trait.Port.html b/doc/libnoentiendo/memory/trait.Port.html
index 05ae5c20..fe33a5ae 100644
--- a/doc/libnoentiendo/memory/trait.Port.html
+++ b/doc/libnoentiendo/memory/trait.Port.html
@@ -1,15 +1,15 @@
-Port in libnoentiendo::memory - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/index.html b/doc/libnoentiendo/platform/index.html
index b8fd8be2..61fe162f 100644
--- a/doc/libnoentiendo/platform/index.html
+++ b/doc/libnoentiendo/platform/index.html
@@ -1,4 +1,4 @@
-libnoentiendo::platform - Rust
A platform::Platform consumes a system and runs it. Platforms provide access to the video output, keyboard input, system random number generator, and other details via a platform::PlatformProvider. Some platforms run synchronously (taking over the thread) while others run asynchronously with the help of an event loop (such as when compiling to WASM). Platforms are defined in the platform module.
+
A platform::Platform consumes a system and runs it. Platforms provide access to the video output, keyboard input, system random number generator, and other details via a platform::PlatformProvider. Some platforms run synchronously (taking over the thread) while others run asynchronously with the help of an event loop (such as when compiling to WASM). Platforms are defined in the platform module.
Currently, available platforms include TextPlatform for simple headless text-based operation, WinitPlatform for a graphical window on a desktop environment, and CanvasPlatform for drawing to a <canvas> element on the web. In the future, platforms for mobile apps are planned, in addition to a platform for running on a microcontroller (e.g. the RP2040).
Represents a platform which exclusively operates over text mode,
without any visible graphical output. This reads from and writes to the
@@ -7,4 +7,4 @@
from the platform.
A Platform provides platform-specific functionality to the emulator.
It handles starting and ticking the system, and provides a PlatformProvider
-to the system for screen/keyboard/etc. access.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.Color.html b/doc/libnoentiendo/platform/struct.Color.html
index 0ddafa4d..dbb63cad 100644
--- a/doc/libnoentiendo/platform/struct.Color.html
+++ b/doc/libnoentiendo/platform/struct.Color.html
@@ -1,28 +1,28 @@
-Color in libnoentiendo::platform - Rust
Convert the given color to a 32-bit integer, where the top 8 bits are
unset (0), the next 8 bits are red, the next 8 bits are green, and the
last 8 bits are blue.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.JoystickState.html b/doc/libnoentiendo/platform/struct.JoystickState.html
index 8b71b559..00fb3a33 100644
--- a/doc/libnoentiendo/platform/struct.JoystickState.html
+++ b/doc/libnoentiendo/platform/struct.JoystickState.html
@@ -1,23 +1,23 @@
-JoystickState in libnoentiendo::platform - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.TextPlatform.html b/doc/libnoentiendo/platform/struct.TextPlatform.html
index 2072740c..dc91181a 100644
--- a/doc/libnoentiendo/platform/struct.TextPlatform.html
+++ b/doc/libnoentiendo/platform/struct.TextPlatform.html
@@ -1,16 +1,16 @@
-TextPlatform in libnoentiendo::platform - Rust
Represents a platform which exclusively operates over text mode,
without any visible graphical output. This reads from and writes to the
terminal.
This platform runs synchronously.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.TextPlatformProvider.html b/doc/libnoentiendo/platform/struct.TextPlatformProvider.html
index c4690a2a..1b72df63 100644
--- a/doc/libnoentiendo/platform/struct.TextPlatformProvider.html
+++ b/doc/libnoentiendo/platform/struct.TextPlatformProvider.html
@@ -1,22 +1,22 @@
-TextPlatformProvider in libnoentiendo::platform - Rust
Request that the platform create a window of the specified size,
with the specified scale factor. If a window already exists, the platform
-should resize it to the new size.
Display the given string to the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
-various ways to display this, such as a terminal message or a pop-up.
Read a string input from the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
various ways to prompt for this, such as a terminal prompt or a pop-up
-dialog.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.WindowConfig.html b/doc/libnoentiendo/platform/struct.WindowConfig.html
index ef3e3ca8..5f4486c6 100644
--- a/doc/libnoentiendo/platform/struct.WindowConfig.html
+++ b/doc/libnoentiendo/platform/struct.WindowConfig.html
@@ -1,21 +1,21 @@
-WindowConfig in libnoentiendo::platform - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.WinitPlatform.html b/doc/libnoentiendo/platform/struct.WinitPlatform.html
index 20b27ffd..267e3a91 100644
--- a/doc/libnoentiendo/platform/struct.WinitPlatform.html
+++ b/doc/libnoentiendo/platform/struct.WinitPlatform.html
@@ -1,14 +1,14 @@
-WinitPlatform in libnoentiendo::platform - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/struct.WinitPlatformProvider.html b/doc/libnoentiendo/platform/struct.WinitPlatformProvider.html
index a2c9765d..622ea82e 100644
--- a/doc/libnoentiendo/platform/struct.WinitPlatformProvider.html
+++ b/doc/libnoentiendo/platform/struct.WinitPlatformProvider.html
@@ -1,26 +1,26 @@
-WinitPlatformProvider in libnoentiendo::platform - Rust
Request that the platform create a window of the specified size,
with the specified scale factor. If a window already exists, the platform
-should resize it to the new size.
Display the given string to the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
-various ways to display this, such as a terminal message or a pop-up.
Read a string input from the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
various ways to prompt for this, such as a terminal prompt or a pop-up
-dialog.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/trait.AsyncPlatform.html b/doc/libnoentiendo/platform/trait.AsyncPlatform.html
index d58c6410..3755d9ee 100644
--- a/doc/libnoentiendo/platform/trait.AsyncPlatform.html
+++ b/doc/libnoentiendo/platform/trait.AsyncPlatform.html
@@ -1,26 +1,26 @@
-AsyncPlatform in libnoentiendo::platform - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/trait.Platform.html b/doc/libnoentiendo/platform/trait.Platform.html
index a6ce0ac1..264f2e3d 100644
--- a/doc/libnoentiendo/platform/trait.Platform.html
+++ b/doc/libnoentiendo/platform/trait.Platform.html
@@ -1,7 +1,7 @@
-Platform in libnoentiendo::platform - Rust
A Platform provides platform-specific functionality to the emulator.
It handles starting and ticking the system, and provides a PlatformProvider
to the system for screen/keyboard/etc. access.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/trait.PlatformProvider.html b/doc/libnoentiendo/platform/trait.PlatformProvider.html
index 744deb9b..1bf5b7e4 100644
--- a/doc/libnoentiendo/platform/trait.PlatformProvider.html
+++ b/doc/libnoentiendo/platform/trait.PlatformProvider.html
@@ -1,27 +1,27 @@
-PlatformProvider in libnoentiendo::platform - Rust
Request that the platform create a window of the specified size,
with the specified scale factor. If a window already exists, the platform
should resize it to the new size.
Display the given string to the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
various ways to display this, such as a terminal message or a pop-up.
Read a string input from the user, “out-of-band” from any other
graphics. This is used for text-mode systems. Implementations may choose
various ways to prompt for this, such as a terminal prompt or a pop-up
dialog.
\ No newline at end of file
diff --git a/doc/libnoentiendo/platform/trait.SyncPlatform.html b/doc/libnoentiendo/platform/trait.SyncPlatform.html
index 5839f514..97d9388a 100644
--- a/doc/libnoentiendo/platform/trait.SyncPlatform.html
+++ b/doc/libnoentiendo/platform/trait.SyncPlatform.html
@@ -1,5 +1,5 @@
-SyncPlatform in libnoentiendo::platform - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/roms/index.html b/doc/libnoentiendo/roms/index.html
index c913c872..18d48fc0 100644
--- a/doc/libnoentiendo/roms/index.html
+++ b/doc/libnoentiendo/roms/index.html
@@ -1,3 +1,3 @@
-libnoentiendo::roms - Rust
ROM file loading and unloading is different on different platforms: desktop platforms typically load ROMs from a file, while WebAssembly platforms need to load ROMs from a Uint8Array. ROM file definition and loading is handled in the roms module, with specific roms::DiskLoadable and roms::JsValueLoadable traits for these two cases. Loaded ROMs are represented with a roms::RomFile object, which can be passed to memory::BlockMemory::from_file.
ROM file loading and unloading is different on different platforms: desktop platforms typically load ROMs from a file, while WebAssembly platforms need to load ROMs from a Uint8Array. ROM file definition and loading is handled in the roms module, with specific roms::DiskLoadable and roms::JsValueLoadable traits for these two cases. Loaded ROMs are represented with a roms::RomFile object, which can be passed to memory::BlockMemory::from_file.
Represents a value which can be loaded from a file.
\ No newline at end of file
diff --git a/doc/libnoentiendo/roms/struct.RomFile.html b/doc/libnoentiendo/roms/struct.RomFile.html
index 103195e5..417b6db1 100644
--- a/doc/libnoentiendo/roms/struct.RomFile.html
+++ b/doc/libnoentiendo/roms/struct.RomFile.html
@@ -1,32 +1,32 @@
-RomFile in libnoentiendo::roms - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/roms/trait.DiskLoadable.html b/doc/libnoentiendo/roms/trait.DiskLoadable.html
index 51353814..2e3ac3ff 100644
--- a/doc/libnoentiendo/roms/trait.DiskLoadable.html
+++ b/doc/libnoentiendo/roms/trait.DiskLoadable.html
@@ -1,6 +1,6 @@
-DiskLoadable in libnoentiendo::roms - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/basic/index.html b/doc/libnoentiendo/systems/basic/index.html
index f71a24d4..3bcf352b 100644
--- a/doc/libnoentiendo/systems/basic/index.html
+++ b/doc/libnoentiendo/systems/basic/index.html
@@ -1 +1 @@
-libnoentiendo::systems::basic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/basic/struct.BasicSystem.html b/doc/libnoentiendo/systems/basic/struct.BasicSystem.html
index 9f1fb697..95b4252c 100644
--- a/doc/libnoentiendo/systems/basic/struct.BasicSystem.html
+++ b/doc/libnoentiendo/systems/basic/struct.BasicSystem.html
@@ -1,18 +1,18 @@
-BasicSystem in libnoentiendo::systems::basic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/basic/struct.BasicSystemBuilder.html b/doc/libnoentiendo/systems/basic/struct.BasicSystemBuilder.html
index b4417d56..cb9cfc7f 100644
--- a/doc/libnoentiendo/systems/basic/struct.BasicSystemBuilder.html
+++ b/doc/libnoentiendo/systems/basic/struct.BasicSystemBuilder.html
@@ -1,18 +1,18 @@
-BasicSystemBuilder in libnoentiendo::systems::basic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/index.html b/doc/libnoentiendo/systems/c64/index.html
index 95874127..899b4ca0 100644
--- a/doc/libnoentiendo/systems/c64/index.html
+++ b/doc/libnoentiendo/systems/c64/index.html
@@ -1,2 +1,2 @@
-libnoentiendo::systems::c64 - Rust
The set of ROM files required to run a Commodore 64 system.
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/struct.C64BankSwitching.html b/doc/libnoentiendo/systems/c64/struct.C64BankSwitching.html
index bd07214b..f9eb784f 100644
--- a/doc/libnoentiendo/systems/c64/struct.C64BankSwitching.html
+++ b/doc/libnoentiendo/systems/c64/struct.C64BankSwitching.html
@@ -1,16 +1,16 @@
-C64BankSwitching in libnoentiendo::systems::c64 - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/struct.C64System.html b/doc/libnoentiendo/systems/c64/struct.C64System.html
index 3fff1674..fc6ba210 100644
--- a/doc/libnoentiendo/systems/c64/struct.C64System.html
+++ b/doc/libnoentiendo/systems/c64/struct.C64System.html
@@ -1,18 +1,18 @@
-C64System in libnoentiendo::systems::c64 - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/struct.C64SystemBuilder.html b/doc/libnoentiendo/systems/c64/struct.C64SystemBuilder.html
index 2ceadee2..09143987 100644
--- a/doc/libnoentiendo/systems/c64/struct.C64SystemBuilder.html
+++ b/doc/libnoentiendo/systems/c64/struct.C64SystemBuilder.html
@@ -1,18 +1,18 @@
-C64SystemBuilder in libnoentiendo::systems::c64 - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/struct.C64SystemConfig.html b/doc/libnoentiendo/systems/c64/struct.C64SystemConfig.html
index 7cb4f623..b8df0692 100644
--- a/doc/libnoentiendo/systems/c64/struct.C64SystemConfig.html
+++ b/doc/libnoentiendo/systems/c64/struct.C64SystemConfig.html
@@ -1,20 +1,20 @@
-C64SystemConfig in libnoentiendo::systems::c64 - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/c64/struct.C64SystemRoms.html b/doc/libnoentiendo/systems/c64/struct.C64SystemRoms.html
index 6d856828..62193681 100644
--- a/doc/libnoentiendo/systems/c64/struct.C64SystemRoms.html
+++ b/doc/libnoentiendo/systems/c64/struct.C64SystemRoms.html
@@ -1,4 +1,4 @@
-C64SystemRoms in libnoentiendo::systems::c64 - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/easy/index.html b/doc/libnoentiendo/systems/easy/index.html
index 74826c10..146df1a0 100644
--- a/doc/libnoentiendo/systems/easy/index.html
+++ b/doc/libnoentiendo/systems/easy/index.html
@@ -1,2 +1,2 @@
-libnoentiendo::systems::easy - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/easy/struct.Easy6502System.html b/doc/libnoentiendo/systems/easy/struct.Easy6502System.html
index de2146f5..47e8ee5b 100644
--- a/doc/libnoentiendo/systems/easy/struct.Easy6502System.html
+++ b/doc/libnoentiendo/systems/easy/struct.Easy6502System.html
@@ -1,19 +1,19 @@
-Easy6502System in libnoentiendo::systems::easy - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/easy/struct.Easy6502SystemBuilder.html b/doc/libnoentiendo/systems/easy/struct.Easy6502SystemBuilder.html
index 25d55c51..fc9a0612 100644
--- a/doc/libnoentiendo/systems/easy/struct.Easy6502SystemBuilder.html
+++ b/doc/libnoentiendo/systems/easy/struct.Easy6502SystemBuilder.html
@@ -1,18 +1,18 @@
-Easy6502SystemBuilder in libnoentiendo::systems::easy - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/index.html b/doc/libnoentiendo/systems/index.html
index 7537bf42..d1ee3613 100644
--- a/doc/libnoentiendo/systems/index.html
+++ b/doc/libnoentiendo/systems/index.html
@@ -1,2 +1,2 @@
-libnoentiendo::systems - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/klaus/index.html b/doc/libnoentiendo/systems/klaus/index.html
index d1a9a3e5..1e8c7241 100644
--- a/doc/libnoentiendo/systems/klaus/index.html
+++ b/doc/libnoentiendo/systems/klaus/index.html
@@ -1 +1 @@
-libnoentiendo::systems::klaus - Rust
A factory for creating a system that runs Klaus Dormann’s 6502 CPU test suite.
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/klaus/struct.KlausSystem.html b/doc/libnoentiendo/systems/klaus/struct.KlausSystem.html
index c8497316..011caa45 100644
--- a/doc/libnoentiendo/systems/klaus/struct.KlausSystem.html
+++ b/doc/libnoentiendo/systems/klaus/struct.KlausSystem.html
@@ -1,18 +1,18 @@
-KlausSystem in libnoentiendo::systems::klaus - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/klaus/struct.KlausSystemBuilder.html b/doc/libnoentiendo/systems/klaus/struct.KlausSystemBuilder.html
index 71434355..10d4fc6e 100644
--- a/doc/libnoentiendo/systems/klaus/struct.KlausSystemBuilder.html
+++ b/doc/libnoentiendo/systems/klaus/struct.KlausSystemBuilder.html
@@ -1,18 +1,18 @@
-KlausSystemBuilder in libnoentiendo::systems::klaus - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/enum.PetKeys.html b/doc/libnoentiendo/systems/pet/enum.PetKeys.html
index bb33ddc2..f914c36f 100644
--- a/doc/libnoentiendo/systems/pet/enum.PetKeys.html
+++ b/doc/libnoentiendo/systems/pet/enum.PetKeys.html
@@ -1,4 +1,4 @@
-PetKeys in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/index.html b/doc/libnoentiendo/systems/pet/index.html
index 6a781c18..3f596be6 100644
--- a/doc/libnoentiendo/systems/pet/index.html
+++ b/doc/libnoentiendo/systems/pet/index.html
@@ -1,6 +1,6 @@
-libnoentiendo::systems::pet - Rust
Port A on the first PIA.
This is used for generating the 60Hz interrupt (which is fired when the
screen drawing reaches the last line), and for setting the active
row of the keyboard matrix.
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetPia1PortA.html b/doc/libnoentiendo/systems/pet/struct.PetPia1PortA.html
index 2faf5386..f3db348b 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetPia1PortA.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetPia1PortA.html
@@ -1,18 +1,18 @@
-PetPia1PortA in libnoentiendo::systems::pet - Rust
Port A on the first PIA.
This is used for generating the 60Hz interrupt (which is fired when the
screen drawing reaches the last line), and for setting the active
row of the keyboard matrix.
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetPia1PortB.html b/doc/libnoentiendo/systems/pet/struct.PetPia1PortB.html
index 8706c511..0746f116 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetPia1PortB.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetPia1PortB.html
@@ -1,20 +1,20 @@
-PetPia1PortB in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetSystem.html b/doc/libnoentiendo/systems/pet/struct.PetSystem.html
index 3b6c55cd..729cd5fc 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetSystem.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetSystem.html
@@ -1,18 +1,18 @@
-PetSystem in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetSystemBuilder.html b/doc/libnoentiendo/systems/pet/struct.PetSystemBuilder.html
index 9a941062..37084733 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetSystemBuilder.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetSystemBuilder.html
@@ -1,18 +1,18 @@
-PetSystemBuilder in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetSystemConfig.html b/doc/libnoentiendo/systems/pet/struct.PetSystemConfig.html
index 1ca0239d..10eee889 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetSystemConfig.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetSystemConfig.html
@@ -1,20 +1,20 @@
-PetSystemConfig in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/pet/struct.PetSystemRoms.html b/doc/libnoentiendo/systems/pet/struct.PetSystemRoms.html
index b1b33b96..069b235c 100644
--- a/doc/libnoentiendo/systems/pet/struct.PetSystemRoms.html
+++ b/doc/libnoentiendo/systems/pet/struct.PetSystemRoms.html
@@ -1,4 +1,4 @@
-PetSystemRoms in libnoentiendo::systems::pet - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/trait.System.html b/doc/libnoentiendo/systems/trait.System.html
index 5baa6124..d79847a1 100644
--- a/doc/libnoentiendo/systems/trait.System.html
+++ b/doc/libnoentiendo/systems/trait.System.html
@@ -1,10 +1,10 @@
-System in libnoentiendo::systems - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/trait.SystemBuilder.html b/doc/libnoentiendo/systems/trait.SystemBuilder.html
index 8b7a4fff..c844b069 100644
--- a/doc/libnoentiendo/systems/trait.SystemBuilder.html
+++ b/doc/libnoentiendo/systems/trait.SystemBuilder.html
@@ -1,14 +1,14 @@
-SystemBuilder in libnoentiendo::systems - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/index.html b/doc/libnoentiendo/systems/vic/index.html
index 91db9d71..ba859acb 100644
--- a/doc/libnoentiendo/systems/vic/index.html
+++ b/doc/libnoentiendo/systems/vic/index.html
@@ -1,5 +1,5 @@
-libnoentiendo::systems::vic - Rust
Port B on the second VIA chip.
This is used to set the active columns on the keyboard matrix,
-and to read the third pin of the joystick.
\ No newline at end of file
+and to read the third pin of the joystick.
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.Vic20System.html b/doc/libnoentiendo/systems/vic/struct.Vic20System.html
index d7713c05..36d85281 100644
--- a/doc/libnoentiendo/systems/vic/struct.Vic20System.html
+++ b/doc/libnoentiendo/systems/vic/struct.Vic20System.html
@@ -1,18 +1,18 @@
-Vic20System in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.Vic20SystemBuilder.html b/doc/libnoentiendo/systems/vic/struct.Vic20SystemBuilder.html
index 9b377ff8..07c1da35 100644
--- a/doc/libnoentiendo/systems/vic/struct.Vic20SystemBuilder.html
+++ b/doc/libnoentiendo/systems/vic/struct.Vic20SystemBuilder.html
@@ -1,18 +1,18 @@
-Vic20SystemBuilder in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.Vic20SystemConfig.html b/doc/libnoentiendo/systems/vic/struct.Vic20SystemConfig.html
index 63589b7b..6fa28f98 100644
--- a/doc/libnoentiendo/systems/vic/struct.Vic20SystemConfig.html
+++ b/doc/libnoentiendo/systems/vic/struct.Vic20SystemConfig.html
@@ -1,20 +1,20 @@
-Vic20SystemConfig in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.Vic20SystemRoms.html b/doc/libnoentiendo/systems/vic/struct.Vic20SystemRoms.html
index 49e9eb8b..6efec2e2 100644
--- a/doc/libnoentiendo/systems/vic/struct.Vic20SystemRoms.html
+++ b/doc/libnoentiendo/systems/vic/struct.Vic20SystemRoms.html
@@ -1,28 +1,28 @@
-Vic20SystemRoms in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.VicVia1PortA.html b/doc/libnoentiendo/systems/vic/struct.VicVia1PortA.html
index 7aca94ff..8f5214d8 100644
--- a/doc/libnoentiendo/systems/vic/struct.VicVia1PortA.html
+++ b/doc/libnoentiendo/systems/vic/struct.VicVia1PortA.html
@@ -1,17 +1,17 @@
-VicVia1PortA in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.VicVia2PortA.html b/doc/libnoentiendo/systems/vic/struct.VicVia2PortA.html
index 7c8563ea..34ac6a59 100644
--- a/doc/libnoentiendo/systems/vic/struct.VicVia2PortA.html
+++ b/doc/libnoentiendo/systems/vic/struct.VicVia2PortA.html
@@ -1,22 +1,22 @@
-VicVia2PortA in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/libnoentiendo/systems/vic/struct.VicVia2PortB.html b/doc/libnoentiendo/systems/vic/struct.VicVia2PortB.html
index 9b62365a..0bb45d46 100644
--- a/doc/libnoentiendo/systems/vic/struct.VicVia2PortB.html
+++ b/doc/libnoentiendo/systems/vic/struct.VicVia2PortB.html
@@ -1,18 +1,18 @@
-VicVia2PortB in libnoentiendo::systems::vic - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/all.html b/doc/noentiendo_desktop/all.html
index b997c1c9..7de9889f 100644
--- a/doc/noentiendo_desktop/all.html
+++ b/doc/noentiendo_desktop/all.html
@@ -1 +1 @@
-List of all items in this crate
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/enum.KeyMappingArg.html b/doc/noentiendo_desktop/enum.KeyMappingArg.html
index 677f9679..321b2633 100644
--- a/doc/noentiendo_desktop/enum.KeyMappingArg.html
+++ b/doc/noentiendo_desktop/enum.KeyMappingArg.html
@@ -1,25 +1,25 @@
-KeyMappingArg in noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/enum.PlatformArg.html b/doc/noentiendo_desktop/enum.PlatformArg.html
index f17fee4a..9f7fa97b 100644
--- a/doc/noentiendo_desktop/enum.PlatformArg.html
+++ b/doc/noentiendo_desktop/enum.PlatformArg.html
@@ -1,25 +1,25 @@
-PlatformArg in noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/enum.SystemArg.html b/doc/noentiendo_desktop/enum.SystemArg.html
index 77746e67..0a40baf3 100644
--- a/doc/noentiendo_desktop/enum.SystemArg.html
+++ b/doc/noentiendo_desktop/enum.SystemArg.html
@@ -1,29 +1,29 @@
-SystemArg in noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/fn.main.html b/doc/noentiendo_desktop/fn.main.html
index 6b752f9c..a2824533 100644
--- a/doc/noentiendo_desktop/fn.main.html
+++ b/doc/noentiendo_desktop/fn.main.html
@@ -1 +1 @@
-main in noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/index.html b/doc/noentiendo_desktop/index.html
index 825182d6..ccee7213 100644
--- a/doc/noentiendo_desktop/index.html
+++ b/doc/noentiendo_desktop/index.html
@@ -1 +1 @@
-noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/noentiendo_desktop/struct.Args.html b/doc/noentiendo_desktop/struct.Args.html
index e6f01f89..e1dd3de1 100644
--- a/doc/noentiendo_desktop/struct.Args.html
+++ b/doc/noentiendo_desktop/struct.Args.html
@@ -1,33 +1,33 @@
-Args in noentiendo_desktop - Rust
\ No newline at end of file
diff --git a/doc/search-index.js b/doc/search-index.js
index e9c56bc1..d60fac0f 100644
--- a/doc/search-index.js
+++ b/doc/search-index.js
@@ -1,6 +1,6 @@
var searchIndex = JSON.parse('{\
-"libnoentiendo":{"doc":"noentiendo","t":"AAAAAAIIDILLLLLKLLMLKLKLKLKLKLKLMLLLLLLLKLKLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNIEEDENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDNNNNNNNENNNNLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNDEDDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLEDDDNIDNNDDIDLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLKKLLLLLLLKKLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLNNDNDNNDDNNDDEENDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIDDIIIDDDDDLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLMLLLLLLLLLLLKLLKLLKLLLMKLLLLLLLLLMLLLLLLKLLKLLKLLKLLMKLLMKKLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLMIDLLLLLLLKLLLLLLLLLLIIAKAAAAKKKADDLLLLLLLLLLLLLLLLLLLLLLLLDDDDDMLLLLLLLLLLLMLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNEDDDDDDNNNNNNNNNNNNNNNNNNNNNMLLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDMLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["cpu","keyboard","memory","platform","roms","systems","InterruptHandler","MemoryIO","Mos6502","Stack","borrow","borrow_mut","downcast","from","get_info","interrupt","interrupt","into","memory","new","pop","pop","pop_word","pop_word","push","push","push_word","push_word","read","read","read_word","read_word","registers","reset","tick","try_from","try_into","type_id","upcast","vzip","write","write","write_word","write_word","A","Apostrophe","B","Backslash","Backspace","Backspace","C","CapsLock","CapsLock","Char","Comma","Commodore","CommodorePet","D","Delete","Delete","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","DownArrow","DownArrow","E","End","End","Enter","Equals","Escape","Escape","F","F1","F1","F10","F10","F11","F11","F12","F12","F2","F2","F3","F3","F4","F4","F5","F5","F6","F6","F7","F7","F8","F8","F9","F9","G","Grave","H","Home","Home","I","Insert","Insert","Interrupt","J","K","KeyAdapter","KeyMappingStrategy","KeyPosition","KeyState","KeySymbol","L","LAlt","LAlt","LControl","LControl","LShift","LShift","LSuper","LSuper","LeftArrow","LeftArrow","LeftBracket","M","Menu","Menu","Minus","N","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumDivide","NumEnter","NumLock","NumLock","NumMinus","NumMultiply","NumPeriod","NumPlus","O","P","PageDown","PageDown","PageUp","PageUp","Pause","Pause","Period","Physical","PrintScreen","PrintScreen","Q","R","RAlt","RAlt","RControl","RControl","RShift","RShift","RSuper","RSuper","Return","RightArrow","RightArrow","RightBracket","S","ScrollLock","ScrollLock","Semicolon","Slash","Space","SymbolAdapter","Symbolic","T","Tab","U","UpArrow","UpArrow","V","VirtualKey","W","X","Y","Z","bitor","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","commodore","default","deserialize","downcast","downcast","downcast","downcast","downcast","downcast","eq","eq","eq","eq","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_hash","get_hash","get_hash","hash","hash","hash","into","into","into","into","into","into","is_pressed","map","map","new","press","pressed","release","serialize","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","A","Asterisk","At","B","C","C64KeyboardAdapter","C64Keys","C64SymbolAdapter","C64VirtualAdapter","ClrHome","Colon","Comma","Commodore","Control","CursorLeftRight","CursorUpDown","D","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","E","Equals","F","F1","F3","F5","F7","G","H","I","InsertDelete","J","K","L","LShift","LeftArrow","M","Minus","N","O","P","Period","Plus","Pound","Q","R","RShift","Restore","Return","RunStop","S","Semicolon","ShiftLock","Slash","Space","T","U","UpArrow","V","W","X","Y","Z","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deserialize","downcast","downcast","downcast","downcast","eq","equivalent","fmt","from","from","from","from","get_hash","hash","into","into","into","into","map","map","map","serialize","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","ActiveInterrupt","BankedMemory","BlockMemory","BranchMemory","IRQ","Memory","Mos6510Port","NMI","None","NullMemory","NullPort","Port","SystemInfo","bank","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cycle_count","default","default","default","default","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","eq","equivalent","fmt","fmt","from","from","from","from","from","from","from","from","from_file","into","into","into","into","into","into","into","into","map","mos652x","new","new","new","new","new","poll","poll","poll","poll","poll","poll","poll","poll","ram","read","read","read","read","read","read","read","read","reset","reset","reset","reset","reset","reset","reset","reset","rom","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_warnings","with_warnings","write","write","write","write","write","write","write","write","Chained","ChainedCount","Cia","Count","InterruptRegister","None","Phi2","Pia","PortRegisters","Pulse","PulseCount","ShiftRegister","Timer","TimerClockSource","TimerOutput","Toggle","Via","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from","from","from","from","interrupt_enable","into","into","into","into","into","into","into","into","into","is_enabled","new","new","new","new","new","new","poll","poll","poll","poll","poll","read","read","read","read","read_enable","read_flags","reset","reset","reset","reset","reset","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","write","write","write_enable","AsyncPlatform","Color","JoystickState","Platform","PlatformProvider","SyncPlatform","TextPlatform","TextPlatformProvider","WindowConfig","WinitPlatform","WinitPlatformProvider","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","down","downcast","downcast","downcast","downcast","downcast","downcast","downcast","empty","eq","eq","eq","equivalent","fire","fmt","fmt","fmt","from","from","from","from","from","from","from","get_hash","get_joystick_state","get_joystick_state","get_joystick_state","get_key_state","get_key_state","get_key_state","get_virtual_key_state","get_virtual_key_state","get_virtual_key_state","hash","height","input","input","input","into","into","into","into","into","into","into","left","new","new","new","new","new","new","print","print","print","provider","provider","provider","random","random","random","request_window","request_window","request_window","right","run","run","run","scale","setup","tick","to_owned","to_owned","to_owned","to_rgb","to_rgba","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","up","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","width","DiskLoadable","RomFile","borrow","borrow_mut","clone","clone_into","downcast","fmt","from","from_file","from_file","get_data","into","new","to_owned","try_from","try_into","type_id","upcast","vzip","System","SystemBuilder","basic","build","c64","easy","klaus","pet","render","reset","tick","vic","BasicSystem","BasicSystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","C64BankSwitching","C64System","C64SystemBuilder","C64SystemConfig","C64SystemRoms","basic","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","character","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from_disk","into","into","into","into","into","kernal","mapping","new","poll","read","render","reset","reset","tick","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","write","Easy6502System","Easy6502SystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","KlausSystem","KlausSystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","A","Ampersand","Apostrophe","At","B","Backslash","C","ClrHome","Colon","Comma","CursorLeftRight","CursorUpDown","D","Dollar","DoubleQuote","E","Exclamation","F","G","GreaterThan","H","Hash","I","InsertDelete","J","K","L","LShift","LeftArrow","LeftBracket","LeftParen","LessThan","M","N","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumDivide","NumEquals","NumMinus","NumMultiply","NumPeriod","NumPlus","O","P","Percent","PetKeys","PetPia1PortA","PetPia1PortB","PetSystem","PetSystemBuilder","PetSystemConfig","PetSystemRoms","Q","Question","R","RShift","Return","Reverse","RightBracket","RightParen","RunStop","S","Semicolon","Space","T","U","Unused","UpArrow","V","W","X","Y","Z","basic","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","character","clone","clone_into","deserialize","downcast","downcast","downcast","downcast","downcast","downcast","downcast","editor","eq","equivalent","fmt","from","from","from","from","from","from","from","from_disk","get_hash","get_keyboard_row","hash","into","into","into","into","into","into","into","kernal","mapping","new","new","poll","poll","read","read","render","reset","reset","reset","serialize","tick","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","Vic20System","Vic20SystemBuilder","Vic20SystemConfig","Vic20SystemRoms","VicVia1PortA","VicVia2PortA","VicVia2PortB","basic","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cartridge","character","downcast","downcast","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from","from","from_disk","get_joy_pin_3","get_keyboard_col","into","into","into","into","into","into","into","kernal","mapping","new","new","new","poll","poll","poll","read","read","read","render","reset","reset","reset","reset","tick","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","write"],"q":["libnoentiendo","","","","","","libnoentiendo::cpu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::keyboard","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::keyboard::commodore","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::memory::mos652x","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::platform","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::roms","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems","","","","","","","","","","","","libnoentiendo::systems::basic","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems::c64","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems::easy","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems::klaus","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems::pet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libnoentiendo::systems::vic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The cpu::Mos6502 represents a 6502 processor and …","Various representations of keyboard scancodes are required …","A memory::Memory implementation can be read from and …","A platform::Platform consumes a system and runs it. …","ROM file loading and unloading is different on different …","Systems are created by a systems::SystemBuilder. A system …","Handle interrupts by setting the applicable flags, pushing …","Read and write from the system’s memory.","The MOS 6502 CPU and its associated memory.","Push and pop values from the stack.","","","","Returns the argument unchanged.","Return a SystemInfo struct containing the current system …","","","Calls U::from(self).","","","Pop a byte from the stack.","","Pop a word (little-endian) from the stack.","","Push a byte onto the stack.","","Push a word (little-endian) onto the stack.","","Read a byte from the given address in memory.","","Read a word (little-endian) from the given address in …","","","","Execute a single instruction.","","","","","","Write a byte to the given address in memory.","","Write a word (little-endian) to the given address in …","","","","","","","","","","","Alphanumeric or symbol keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Represents a mapping from a key state of one type to a key …","Represents different approaches to mapping key states, to …","A representation for a position on a modern keyboard. …","A set of keys that are currently pressed. Parameter T is …","A representation for a symbol on a modern keyboard.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Preserve physical keys one-to-one. This is most …","","","","","","","","","","","","","","","","","","","","","","","An adapter that maps physical key positions to symbols.","Preserve symbols one-to-one. This is more intuitive, but …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Keys and adapters for the Commodore 64, VIC-20, and other …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the given key is currently pressed.","Map the current state of the keyboard with symbols of type …","","Creates a new, empty key state.","Adds a key to the set of pressed keys.","Return the set of pressed keys.","Removes a key from the set of pressed keys.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","An adapter for mapping positions on a standard keyboard to …","Keys found on a VIC-20 or Commodore 64 keyboard.","An adapter for mapping symbols pressed on a standard …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Represents the state of the interrupts on the system.","Represents the memory banking features found in the …","Represents a simple block of contiguous memory, with no …","Maps several Memory objects into a single contiguous …","An IRQ (maskable interrupt request) is active.","Represents a contiguous block of memory which can be read, …","Represents the port built into a MOS 6510 processor, …","An NMI (non-maskable interrupt) is active.","No interrupts are active.","Memory that does nothing when read or written to.","A Port that does nothing.","A Port that can be read from, written to, reset, or polled …","Information about the system that Memory implementations …","Add a new memory implementation to the banked memory.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a BlockMemory of the given size which loads its …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Map a new Memory object to the given starting address in …","The various interface adapters (6520, 6522, 6526) for the …","Create a new, empty banked memory.","Create a new MOS 6510 port with the given port.","Create a new BranchMemory with no mappings.","Create a new NullMemory that will not warn when read or …","Create a new NullPort that will not warn when read or …","Poll the port for interrupts. A port may trigger an …","Poll this memory to see if an interrupt has been triggered.","","","","","","","Create a BlockMemory of the given size which clears its …","Read a byte from the port. This is implementation-defined, …","Read a byte from this memory at the given address. …","","","","","","","Reset the port to its initial state, analogous to a system …","Reset this memory to its initial state, e.g. after a …","","","","","","","Create a BlockMemory of the given size which does not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new NullMemory that will warn when read or …","Create a new NullPort that will warn when read or written …","Write a byte to the port. This is implementation-defined.","Write a byte to this memory at the given address.","","","","","","","Count underflows of the other timer.","Count underflows of the other timer, but only if the CNT …","The MOS 6526 Complex Interface Adapter (CIA). Contains two …","Use pulses on the external CNT pin.","Registers for interrupt flags and interrupt enable bits. …","The timer will not output to the port.","Use the internal system clock.","The MOS 6520 Peripheral Interface Adapter (PIA), …","A port and its associated registers on the MOS 6522 VIA or …","The timer will output a single pulse on PB6 or PB7.","The timer will output a set number of pulses.","The shift register used by the MOS 6522 VIA and MOS 6526 …","A timer circuit on the MOS 6522 VIA or MOS 6526 CIA.","The source of the timer’s clock, which controls the rate …","The manner in which the timer will output signals to the …","The timer will toggle the output on PB6 or PB7.","The MOS 6522 Versatile Interface Adapter (VIA). Contains …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","The current state of which interrupts are enabled. If a …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Is the specified interrupt enabled?","","Create a new PIA with the two given port implementations.","","","","","","","","Poll the underlying port for interrupts.","Poll the timer (decrement the counter, fire the interrupt …","","","","Read from the port, respecting the DDR.","Read the value of the interrupt enable register.","Read the apparent value of the interrupt register, based …","","","","Reset the port to its initial state.","Reset the shift register’s internal state.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Write to the port, respecting the DDR.","Write to the interrupt enable register.","A platform which can be run asynchronously.","Represents an RGB color with 8 bits per channel.","Represents the current state of the connected joystick.","A Platform provides platform-specific functionality to the …","","A platform which can be run synchronously.","Represents a platform which exclusively operates over text …","","Represents the configuration of a GUI window that the …","A platform implementation for desktop platforms using …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new JoystickState with all buttons released.","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Get the current state of the connected joystick. If no …","","","Get the current state of the user’s physical keyboard.","","","Get the state of a virtual keyboard (emulating the target …","","","","","Read a string input from the user, “out-of-band” from …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","Display the given string to the user, “out-of-band” …","","","","","","Return a random number between 0 and 255. This exists as …","","","Request that the platform create a window of the specified …","","","","","","","","","","","","","Convert the given color to a 32-bit integer, where the top …","Convert the given color to an array of 4 bytes, where the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Represents a value which can be loaded from a file.","Represents a predefined, immutable ROM file. Useful for …","","","","","","","Returns the argument unchanged.","Creates a ROM file by loading the contents of a file.","","Returns the contents of the ROM file.","Calls U::from(self).","Creates a new ROM file from the given data.","","","","","","","A representation of an emulated system.","","","Create a new system from the given roms, configuration, …","","","","","Render the current state of the system to the given …","Reset the system’s state.","Advance the system by one tick.","","A system which only operates in text mode, for basic …","A factory for creating a BasicSystem.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Bank switching implementation performed using the 6510’s …","The Commodore 64 system.","A factory for creating a Commodore 64 system.","Configuration for a Commodore 64 system.","The set of ROM files required to run a Commodore 64 system.","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernel ROM. Contains the operating system.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A port of the “Easy6502” system from …","A factory for the Easy6502 system.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","A system used to run Klaus Dormann’s 6502 CPU test suite.","A factory for creating a system that runs Klaus Dormann’…","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The keys found on the PET’s “Graphics” keyboard. …","Port A on the first PIA. This is used for generating the …","Port B on the first PIA. This is used for reading the …","The Commodore PET system.","A factory for the Commodore PET.","Configuration for a Commodore PET system.","The set of ROM files required to run a PET system.","","","","","","","","","","","","","","","","","","","","","","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","","","","","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","","","","","","Editor ROM. Contains the screen editor functions.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernal ROM. Contains the operating system.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The VIC-20 system by Commodore.","A factory for creating a VIC-20 system.","Configuration for a VIC-20 system.","The set of ROM files required to run a VIC-20 system.","Port A on the first VIA chip. This is used to read the …","Port A on the second VIA chip. This is used to read the …","Port B on the second VIA chip. This is used to set the …","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","","","","","Cartridge ROM. Contains the contents of a cartridge, if …","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Load the ROM files from files.","Return a reference to the joystick’s pin 3 state.","Return a reference to the keyboard column’s current …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernal ROM. Contains the operating system and editor …","","","","Create a new instance of the port, with the given keyboard …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,82,1,1,1,1,83,1,83,1,83,1,83,1,84,1,84,1,1,1,1,1,1,1,1,1,84,1,84,1,13,13,13,13,13,14,13,13,14,14,13,15,15,13,13,14,13,13,13,13,13,13,13,13,13,13,13,14,13,13,14,13,13,13,14,13,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,13,13,13,14,13,13,14,14,13,13,0,0,0,0,0,13,13,14,13,14,13,14,13,14,13,14,13,13,13,14,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,13,13,13,13,13,13,13,14,13,14,13,14,13,73,13,14,13,13,13,14,13,14,13,14,13,14,14,13,14,13,13,13,14,13,13,13,0,73,13,13,13,13,14,13,0,13,13,13,13,12,85,73,13,14,15,12,85,73,13,14,15,12,13,14,15,12,13,14,15,12,0,12,15,85,73,13,14,15,12,13,14,15,12,13,14,15,13,14,15,12,85,73,13,14,15,12,13,14,15,13,14,15,85,73,13,14,15,12,12,86,85,12,12,12,12,15,13,14,15,12,85,73,13,14,15,12,85,73,13,14,15,12,85,73,13,14,15,12,85,73,13,14,15,12,85,73,13,14,15,12,23,23,23,23,23,0,0,0,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,87,88,89,23,87,88,89,23,23,23,23,87,88,89,23,23,23,23,87,88,89,23,23,23,87,88,89,23,87,88,89,23,23,87,88,89,23,87,88,89,23,87,88,89,23,87,88,89,23,87,88,89,23,0,0,0,0,28,0,0,28,28,0,0,0,0,24,24,31,35,25,26,27,28,2,24,31,35,25,26,27,28,2,2,25,26,27,2,24,31,35,25,26,27,28,2,28,28,28,2,24,31,35,25,26,27,28,2,31,24,31,35,25,26,27,28,2,25,0,24,35,25,26,27,34,4,24,31,35,25,26,27,31,34,4,24,31,35,25,26,27,34,4,24,31,35,25,26,27,31,24,31,35,25,26,27,28,2,24,31,35,25,26,27,28,2,24,31,35,25,26,27,28,2,24,31,35,25,26,27,28,2,24,31,35,25,26,27,28,2,26,27,34,4,24,31,35,25,26,27,90,90,0,90,0,91,90,0,0,91,91,0,0,0,0,91,0,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,38,39,40,41,42,91,90,43,44,38,38,39,40,41,42,43,44,39,40,41,42,43,39,40,41,42,38,38,39,40,41,42,44,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,91,90,43,44,38,39,40,41,42,38,0,0,0,0,0,0,0,0,0,0,0,51,48,52,49,45,46,47,51,48,52,49,45,46,47,45,46,47,45,46,47,46,51,48,52,49,45,46,47,46,45,46,47,45,46,45,46,47,51,48,52,49,45,46,47,45,57,48,49,57,48,49,57,48,49,45,47,57,48,49,51,48,52,49,45,46,47,46,51,48,52,49,45,47,57,48,49,92,51,52,57,48,49,57,48,49,46,93,51,52,47,94,94,45,46,47,45,45,51,48,52,49,45,46,47,51,48,52,49,45,46,47,51,48,52,49,45,46,47,46,51,48,52,49,45,46,47,51,48,52,49,45,46,47,47,0,0,30,30,30,30,30,30,30,95,30,30,30,30,30,30,30,30,30,30,0,0,0,96,0,0,0,0,58,58,58,0,0,0,97,62,97,62,97,97,62,97,62,97,62,62,62,62,97,62,97,62,97,62,97,62,97,62,0,0,0,0,0,63,63,65,64,98,66,63,65,64,98,66,98,63,63,65,64,98,66,63,65,64,98,66,63,63,65,64,98,66,63,64,65,65,65,66,65,66,66,63,65,64,98,66,63,65,64,98,66,63,65,64,98,66,63,65,64,98,66,63,65,64,98,66,65,0,0,99,67,99,67,99,99,67,99,67,99,67,67,67,67,99,67,99,67,99,67,99,67,99,67,0,0,100,68,100,68,100,100,68,100,68,100,68,68,68,68,100,68,100,68,100,68,100,68,100,68,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,0,0,0,0,0,0,0,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,69,69,72,74,70,101,75,71,69,72,74,70,101,75,71,101,69,71,71,71,69,72,74,70,101,75,71,69,71,71,71,69,72,74,70,101,75,71,69,71,72,71,69,72,74,70,101,75,71,69,70,72,74,72,74,72,74,75,72,74,75,71,75,71,69,72,74,70,101,75,71,69,72,74,70,101,75,71,69,72,74,70,101,75,71,69,72,74,70,101,75,71,69,72,74,70,101,75,71,72,74,0,0,0,0,0,0,0,76,76,78,79,80,77,102,81,76,78,79,80,77,102,81,102,76,76,76,78,79,80,77,102,81,76,78,79,80,77,102,81,76,78,79,76,78,79,80,77,102,81,76,77,78,79,80,78,79,80,78,79,80,81,78,79,80,81,81,76,78,79,80,77,102,81,76,78,79,80,77,102,81,76,78,79,80,77,102,81,76,78,79,80,77,102,81,76,78,79,80,77,102,81,78,79,80],"f":[0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[1,2],[[3,3]],[[1,3,3]],[[]],0,[[[5,[4]]],1],[[],6],[1,6],[[],7],[1,7],[6],[[1,6]],[7],[[1,7]],[7,6],[[1,7],6],[7,7],[[1,7],7],0,[1],[1,6],[[],8],[[],8],[[],9],[[],10],[[]],[[7,6]],[[1,7,6]],[[7,7]],[[1,7,7]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[12,[11]],[12,[11]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[13,13],[14,14],[15,15],[[[12,[[0,[16,11]]]]],[[12,[[0,[16,11]]]]]],[[]],[[]],[[]],[[]],0,[[],[[12,[[0,[17,11]]]]]],[[],[[8,[15]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[13,13],3],[[14,14],3],[[15,15],3],[[[12,[[0,[11,11]]]],12],3],[[],3],[[],3],[[],3],[[13,18],19],[[14,18],19],[[15,18],19],[[[12,[[0,[20,11]]]],18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[],21],[[],21],[[],21],[13],[14],[15],[[]],[[]],[[]],[[]],[[]],[[]],[[[12,[11]],11],3],[12,12],[12,[[12,[14]]]],[[],[[12,[11]]]],[[[12,[11]],11]],[[[12,[11]]],22],[[[12,[11]],11]],[15,8],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[23,23],[[]],[[],[[8,[23]]]],[[]],[[]],[[]],[[]],[[23,23],3],[[],3],[[23,18],19],[[]],[[]],[[]],[[]],[[],21],[23],[[]],[[]],[[]],[[]],[12,[[12,[23]]]],[12,[[12,[23]]]],[12,[[12,[23]]]],[23,8],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[24,[5,[4]]],24],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],25],[[],26],[[],27],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[28,28],3],[[],3],[[28,18],19],[[2,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[29,30],31],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[25,29,[5,[4]]],25],0,[[[33,[[32,[29]]]]],24],[[[5,[34]]],35],[[],25],[[],26],[[],27],[[36,2],3],[[36,2],28],[[24,36,2],28],[[31,36,2],28],[[35,36,2],28],[[25,36,2],28],[[26,36,2],28],[[27,36,2],3],[29,31],[[],6],[7,6],[[24,7],6],[[31,7],6],[[35,7],6],[[25,7],6],[[26,7],6],[27,6],[[]],[[]],[24],[31],[35],[25],[26],[27],[29,31],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[37,26],[37,27],[6],[[7,6]],[[24,7,6]],[[31,7,6]],[[35,7,6]],[[25,7,6]],[[26,7,6]],[[27,6]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[38,6],3],[[[5,[34]],[5,[34]]],39],[[[5,[34]],[5,[34]]],40],[[[5,[34]],[5,[34]]],41],[[[5,[34]]],42],[[],43],[[],44],[[39,36,2],28],[[40,36,2],28],[[41,36,2],28],[[42,36,2],3],[[43,36,2],3],[[39,7],6],[[40,7],6],[[41,7],6],[42,6],[38,6],[[38,6],6],[39],[40],[41],[42],[44],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[39,7,6]],[[40,7,6]],[[41,7,6]],[[42,6]],[[38,6]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[45,45],[46,46],[47,47],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],46],[[45,45],3],[[46,46],3],[[47,47],3],[[],3],0,[[45,18],19],[[46,18],19],[[47,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],21],[[],46],[48,46],[49,46],[[],[[12,[13]]]],[48,[[12,[13]]]],[49,[[12,[13]]]],[[],[[12,[15]]]],[48,[[12,[15]]]],[49,[[12,[15]]]],[45],0,[[],50],[48,50],[49,50],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],51],[[],48],[[],52],[[[54,[[53,[[10,[47]]]]]],[54,[[53,[[12,[55]]]]]],[54,[[53,[46]]]]],49],[[6,6,6],45],[[36,36,56],47],[37],[[48,37]],[[49,37]],[[],[[54,[57]]]],[51,[[54,[57]]]],[52,[[54,[57]]]],[[],6],[48,6],[49,6],[47],[[48,47]],[[49,47]],0,[[[5,[58]]]],[[51,[5,[58]]]],[[52,[5,[58]]]],0,[[],[[60,[[5,[59]]]]]],[5,[[60,[[5,[59]]]]]],[[]],[[]],[[]],[45,36],[45],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[30,30],[[]],[[]],[[30,18],19],[[]],[37],[37,30],[30,[[22,[6]]]],[[]],[[[22,[6]]],30],[[]],[[],8],[[],8],[[],9],[[],10],[[]],0,0,0,[[[54,[57]]],[[5,[58]]]],0,0,0,0,[47],[[]],[[],61],0,0,0,[[]],[[]],[[]],[[]],[[30,[54,[57]]],[[5,[58]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[62,47]],[62],[62,61],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[63,64,[54,[57]]],[[5,[58]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],63],[[]],[[]],[[]],[[]],[[]],0,0,[[],65],[[65,36,2],3],[65,6],[[66,47]],[65],[66],[66,61],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[65,6]],0,0,[[]],[[]],[[]],[[]],[[30,[54,[57]]],[[5,[58]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[67,47]],[67],[67,61],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[30,[54,[57]]],[[5,[58]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[68,47]],[68],[68,61],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[69,70,[54,[57]]],[[5,[58]]]],0,[71,71],[[]],[[],[[8,[71]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[71,71],3],[[],3],[[71,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],69],[[],21],[72,[[33,[[32,[6]]]]]],[71],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],72],[[[33,[[32,[6]]]],73,[54,[57]]],74],[[72,36,2],3],[[74,36,2],3],[72,6],[74,6],[[75,47]],[72],[74],[75],[71,8],[75,61],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[72,6]],[[74,6]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[76,77,[54,[57]]],[[5,[58]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[37]]],76],[78,[[33,[[32,[3]]]]]],[79,[[33,[[32,[6]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[54,[57]]],78],[[[33,[[32,[3]]]]],79],[[[33,[[32,[6]]]],73,[54,[57]]],80],[[78,36,2],3],[[79,36,2],3],[[80,36,2],3],[78,6],[79,6],[80,6],[[81,47]],[78],[79],[80],[81],[81,61],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[78,6]],[[79,6]],[[80,6]]],"p":[[3,"Mos6502"],[3,"SystemInfo"],[15,"bool"],[8,"Memory"],[3,"Box"],[15,"u8"],[15,"u16"],[4,"Result"],[3,"TypeId"],[4,"Option"],[8,"PartialEq"],[3,"KeyState"],[4,"KeyPosition"],[4,"KeySymbol"],[4,"VirtualKey"],[8,"Clone"],[8,"Default"],[3,"Formatter"],[6,"Result"],[8,"Debug"],[15,"u64"],[3,"Vec"],[4,"C64Keys"],[3,"BankedMemory"],[3,"BranchMemory"],[3,"NullMemory"],[3,"NullPort"],[4,"ActiveInterrupt"],[15,"usize"],[3,"RomFile"],[3,"BlockMemory"],[3,"Cell"],[3,"Rc"],[8,"Port"],[3,"Mos6510Port"],[15,"u32"],[15,"str"],[3,"InterruptRegister"],[3,"Cia"],[3,"Pia"],[3,"Via"],[3,"PortRegisters"],[3,"Timer"],[3,"ShiftRegister"],[3,"Color"],[3,"JoystickState"],[3,"WindowConfig"],[3,"TextPlatformProvider"],[3,"WinitPlatformProvider"],[3,"String"],[3,"TextPlatform"],[3,"WinitPlatform"],[3,"Mutex"],[3,"Arc"],[4,"VirtualKeyCode"],[15,"f64"],[8,"PlatformProvider"],[8,"System"],[8,"Future"],[3,"Pin"],[3,"Duration"],[3,"BasicSystem"],[3,"C64SystemRoms"],[3,"C64SystemConfig"],[3,"C64BankSwitching"],[3,"C64System"],[3,"Easy6502System"],[3,"KlausSystem"],[3,"PetSystemRoms"],[3,"PetSystemConfig"],[4,"PetKeys"],[3,"PetPia1PortA"],[4,"KeyMappingStrategy"],[3,"PetPia1PortB"],[3,"PetSystem"],[3,"Vic20SystemRoms"],[3,"Vic20SystemConfig"],[3,"VicVia1PortA"],[3,"VicVia2PortB"],[3,"VicVia2PortA"],[3,"Vic20System"],[8,"InterruptHandler"],[8,"Stack"],[8,"MemoryIO"],[3,"SymbolAdapter"],[8,"KeyAdapter"],[3,"C64KeyboardAdapter"],[3,"C64SymbolAdapter"],[3,"C64VirtualAdapter"],[4,"TimerClockSource"],[4,"TimerOutput"],[8,"Platform"],[8,"SyncPlatform"],[8,"AsyncPlatform"],[8,"DiskLoadable"],[8,"SystemBuilder"],[3,"BasicSystemBuilder"],[3,"C64SystemBuilder"],[3,"Easy6502SystemBuilder"],[3,"KlausSystemBuilder"],[3,"PetSystemBuilder"],[3,"Vic20SystemBuilder"]]},\
-"noentiendo_desktop":{"doc":"","t":"DNNNENNNENENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMFLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Args","Basic","C64","Easy","KeyMappingArg","Klaus","Pet","Physical","PlatformArg","Symbolic","SystemArg","Text","Vic","Winit","augment_args","augment_args_for_update","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","cmp","downcast","downcast","downcast","downcast","eq","eq","eq","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from_arg_matches","from_arg_matches_mut","into","into","into","into","into_app","into_app_for_update","key_mapping","main","partial_cmp","partial_cmp","partial_cmp","platform","rom_path","system","to_owned","to_owned","to_owned","to_possible_value","to_possible_value","to_possible_value","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","update_from_arg_matches","update_from_arg_matches_mut","value_variants","value_variants","value_variants","vzip","vzip","vzip","vzip"],"q":["noentiendo_desktop","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,2,2,2,0,2,2,4,0,4,0,3,2,3,9,9,2,3,4,9,2,3,4,9,2,3,4,2,3,4,2,3,4,2,3,4,9,2,3,4,2,3,4,2,3,4,9,2,3,4,9,9,9,2,3,4,9,9,9,9,0,2,3,4,9,9,9,2,3,4,2,3,4,2,3,4,9,2,3,4,9,2,3,4,9,2,3,4,9,9,9,2,3,4,2,3,4,9],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,1],[1,1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[3,3],[4,4],[[]],[[]],[[]],[[2,2],5],[[3,3],5],[[4,4],5],[[]],[[]],[[]],[[]],[[2,2],6],[[3,3],6],[[4,4],6],[[],6],[[],6],[[],6],[[2,7],8],[[3,7],8],[[4,7],8],[[9,7],8],[[]],[[]],[[]],[[]],[10,[[12,[9,11]]]],[10,[[12,[9,11]]]],[[]],[[]],[[]],[[]],[[],1],[[],1],0,[[]],[[2,2],[[13,[5]]]],[[3,3],[[13,[5]]]],[[4,4],[[13,[5]]]],0,0,0,[[]],[[]],[[]],[2,[[13,[14]]]],[3,[[13,[14]]]],[4,[[13,[14]]]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],15],[[],15],[[],15],[[],15],[[],13],[[],13],[[],13],[[],13],[[9,10],[[12,[11]]]],[[9,10],[[12,[11]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"p":[[6,"Command"],[4,"SystemArg"],[4,"PlatformArg"],[4,"KeyMappingArg"],[4,"Ordering"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Args"],[3,"ArgMatches"],[3,"Error"],[4,"Result"],[4,"Option"],[3,"PossibleValue"],[3,"TypeId"]]}\
+"libnoentiendo":{"doc":"noentiendo","t":"AAAAAAIIDILLLLLKLLMLKLKLKLKLKLKLMLLLLLLLKLKLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNIEEDENNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDNNNNNNNENNNNLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNDEDDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLEDDDNIDNNDDIDLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLKKLLLLLLLKKLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLNNDNDNNDDNNDDEENDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIDDIIIDDDDDLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLMLLLLLLLLLLLKLLKLLKLLLMKLLLLLLLLLMLLLLLLKLLKLLKLLKLLMKLLMKKLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLMIDLLLLLLLKLLLLLLLLLLIIAKAAAAKKKADDLLLLLLLLLLLLLLLLLLLLLLLLDDDDDMLLLLLLLLLLLMLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNEDDDDDDNNNNNNNNNNNNNNNNNNNNNMLLLLLLLLLLLLLLLMLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDMLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["cpu","keyboard","memory","platform","roms","systems","InterruptHandler","MemoryIO","Mos6502","Stack","borrow","borrow_mut","downcast","from","get_info","interrupt","interrupt","into","memory","new","pop","pop","pop_word","pop_word","push","push","push_word","push_word","read","read","read_word","read_word","registers","reset","tick","try_from","try_into","type_id","upcast","vzip","write","write","write_word","write_word","A","Apostrophe","B","Backslash","Backspace","Backspace","C","CapsLock","CapsLock","Char","Comma","Commodore","CommodorePet","D","Delete","Delete","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","DownArrow","DownArrow","E","End","End","Enter","Equals","Escape","Escape","F","F1","F1","F10","F10","F11","F11","F12","F12","F2","F2","F3","F3","F4","F4","F5","F5","F6","F6","F7","F7","F8","F8","F9","F9","G","Grave","H","Home","Home","I","Insert","Insert","Interrupt","J","K","KeyAdapter","KeyMappingStrategy","KeyPosition","KeyState","KeySymbol","L","LAlt","LAlt","LControl","LControl","LShift","LShift","LSuper","LSuper","LeftArrow","LeftArrow","LeftBracket","M","Menu","Menu","Minus","N","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumDivide","NumEnter","NumLock","NumLock","NumMinus","NumMultiply","NumPeriod","NumPlus","O","P","PageDown","PageDown","PageUp","PageUp","Pause","Pause","Period","Physical","PrintScreen","PrintScreen","Q","R","RAlt","RAlt","RControl","RControl","RShift","RShift","RSuper","RSuper","Return","RightArrow","RightArrow","RightBracket","S","ScrollLock","ScrollLock","Semicolon","Slash","Space","SymbolAdapter","Symbolic","T","Tab","U","UpArrow","UpArrow","V","VirtualKey","W","X","Y","Z","bitor","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","commodore","default","deserialize","downcast","downcast","downcast","downcast","downcast","downcast","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_hash","get_hash","get_hash","hash","hash","hash","into","into","into","into","into","into","is_pressed","map","map","new","press","pressed","release","serialize","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","A","Asterisk","At","B","C","C64KeyboardAdapter","C64Keys","C64SymbolAdapter","C64VirtualAdapter","ClrHome","Colon","Comma","Commodore","Control","CursorLeftRight","CursorUpDown","D","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","E","Equals","F","F1","F3","F5","F7","G","H","I","InsertDelete","J","K","L","LShift","LeftArrow","M","Minus","N","O","P","Period","Plus","Pound","Q","R","RShift","Restore","Return","RunStop","S","Semicolon","ShiftLock","Slash","Space","T","U","UpArrow","V","W","X","Y","Z","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deserialize","downcast","downcast","downcast","downcast","eq","equivalent","equivalent","fmt","from","from","from","from","get_hash","hash","into","into","into","into","map","map","map","serialize","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","ActiveInterrupt","BankedMemory","BlockMemory","BranchMemory","IRQ","Memory","Mos6510Port","NMI","None","NullMemory","NullPort","Port","SystemInfo","bank","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cycle_count","default","default","default","default","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","eq","equivalent","equivalent","fmt","fmt","from","from","from","from","from","from","from","from","from_file","into","into","into","into","into","into","into","into","map","mos652x","new","new","new","new","new","poll","poll","poll","poll","poll","poll","poll","poll","ram","read","read","read","read","read","read","read","read","reset","reset","reset","reset","reset","reset","reset","reset","rom","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_warnings","with_warnings","write","write","write","write","write","write","write","write","Chained","ChainedCount","Cia","Count","InterruptRegister","None","Phi2","Pia","PortRegisters","Pulse","PulseCount","ShiftRegister","Timer","TimerClockSource","TimerOutput","Toggle","Via","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from","from","from","from","interrupt_enable","into","into","into","into","into","into","into","into","into","is_enabled","new","new","new","new","new","new","poll","poll","poll","poll","poll","read","read","read","read","read_enable","read_flags","reset","reset","reset","reset","reset","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","write","write","write_enable","AsyncPlatform","Color","JoystickState","Platform","PlatformProvider","SyncPlatform","TextPlatform","TextPlatformProvider","WindowConfig","WinitPlatform","WinitPlatformProvider","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","down","downcast","downcast","downcast","downcast","downcast","downcast","downcast","empty","eq","eq","eq","equivalent","equivalent","fire","fmt","fmt","fmt","from","from","from","from","from","from","from","get_hash","get_joystick_state","get_joystick_state","get_joystick_state","get_key_state","get_key_state","get_key_state","get_virtual_key_state","get_virtual_key_state","get_virtual_key_state","hash","height","input","input","input","into","into","into","into","into","into","into","left","new","new","new","new","new","new","print","print","print","provider","provider","provider","random","random","random","request_window","request_window","request_window","right","run","run","run","scale","setup","tick","to_owned","to_owned","to_owned","to_rgb","to_rgba","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","up","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","width","DiskLoadable","RomFile","borrow","borrow_mut","clone","clone_into","downcast","fmt","from","from_file","from_file","get_data","into","new","to_owned","try_from","try_into","type_id","upcast","vzip","System","SystemBuilder","basic","build","c64","easy","klaus","pet","render","reset","tick","vic","BasicSystem","BasicSystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","C64BankSwitching","C64System","C64SystemBuilder","C64SystemConfig","C64SystemRoms","basic","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","character","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from_disk","into","into","into","into","into","kernal","mapping","new","poll","read","render","reset","reset","tick","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","write","Easy6502System","Easy6502SystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","KlausSystem","KlausSystemBuilder","borrow","borrow","borrow_mut","borrow_mut","build","downcast","downcast","from","from","into","into","render","reset","tick","try_from","try_from","try_into","try_into","type_id","type_id","upcast","upcast","vzip","vzip","A","Ampersand","Apostrophe","At","B","Backslash","C","ClrHome","Colon","Comma","CursorLeftRight","CursorUpDown","D","Dollar","DoubleQuote","E","Exclamation","F","G","GreaterThan","H","Hash","I","InsertDelete","J","K","L","LShift","LeftArrow","LeftBracket","LeftParen","LessThan","M","N","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumDivide","NumEquals","NumMinus","NumMultiply","NumPeriod","NumPlus","O","P","Percent","PetKeys","PetPia1PortA","PetPia1PortB","PetSystem","PetSystemBuilder","PetSystemConfig","PetSystemRoms","Q","Question","R","RShift","Return","Reverse","RightBracket","RightParen","RunStop","S","Semicolon","Space","T","U","Unused","UpArrow","V","W","X","Y","Z","basic","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","character","clone","clone_into","deserialize","downcast","downcast","downcast","downcast","downcast","downcast","downcast","editor","eq","equivalent","equivalent","fmt","from","from","from","from","from","from","from","from_disk","get_hash","get_keyboard_row","hash","into","into","into","into","into","into","into","kernal","mapping","new","new","poll","poll","read","read","render","reset","reset","reset","serialize","tick","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","Vic20System","Vic20SystemBuilder","Vic20SystemConfig","Vic20SystemRoms","VicVia1PortA","VicVia2PortA","VicVia2PortB","basic","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cartridge","character","downcast","downcast","downcast","downcast","downcast","downcast","downcast","from","from","from","from","from","from","from","from_disk","get_joy_pin_3","get_keyboard_col","into","into","into","into","into","into","into","kernal","mapping","new","new","new","poll","poll","poll","read","read","read","render","reset","reset","reset","reset","tick","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","upcast","upcast","upcast","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","write","write"],"q":[[0,"libnoentiendo"],[6,"libnoentiendo::cpu"],[44,"libnoentiendo::keyboard"],[304,"libnoentiendo::keyboard::commodore"],[428,"libnoentiendo::memory"],[576,"libnoentiendo::memory::mos652x"],[712,"libnoentiendo::platform"],[858,"libnoentiendo::roms"],[878,"libnoentiendo::systems"],[890,"libnoentiendo::systems::basic"],[916,"libnoentiendo::systems::c64"],[985,"libnoentiendo::systems::easy"],[1011,"libnoentiendo::systems::klaus"],[1037,"libnoentiendo::systems::pet"],[1220,"libnoentiendo::systems::vic"]],"d":["The cpu::Mos6502 represents a 6502 processor and …","Various representations of keyboard scancodes are required …","A memory::Memory implementation can be read from and …","A platform::Platform consumes a system and runs it. …","ROM file loading and unloading is different on different …","Systems are created by a systems::SystemBuilder. A system …","Handle interrupts by setting the applicable flags, pushing …","Read and write from the system’s memory.","The MOS 6502 CPU and its associated memory.","Push and pop values from the stack.","","","","Returns the argument unchanged.","Return a SystemInfo struct containing the current system …","","","Calls U::from(self).","","","Pop a byte from the stack.","","Pop a word (little-endian) from the stack.","","Push a byte onto the stack.","","Push a word (little-endian) onto the stack.","","Read a byte from the given address in memory.","","Read a word (little-endian) from the given address in …","","","","Execute a single instruction.","","","","","","Write a byte to the given address in memory.","","Write a word (little-endian) to the given address in …","","","","","","","","","","","Alphanumeric or symbol keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Represents a mapping from a key state of one type to a key …","Represents different approaches to mapping key states, to …","A representation for a position on a modern keyboard. …","A set of keys that are currently pressed. Parameter T is …","A representation for a symbol on a modern keyboard.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Preserve physical keys one-to-one. This is most …","","","","","","","","","","","","","","","","","","","","","","","An adapter that maps physical key positions to symbols.","Preserve symbols one-to-one. This is more intuitive, but …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Keys and adapters for the Commodore 64, VIC-20, and other …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if the given key is currently pressed.","Map the current state of the keyboard with symbols of type …","","Creates a new, empty key state.","Adds a key to the set of pressed keys.","Return the set of pressed keys.","Removes a key from the set of pressed keys.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","An adapter for mapping positions on a standard keyboard to …","Keys found on a VIC-20 or Commodore 64 keyboard.","An adapter for mapping symbols pressed on a standard …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Represents the state of the interrupts on the system.","Represents the memory banking features found in the …","Represents a simple block of contiguous memory, with no …","Maps several Memory objects into a single contiguous …","An IRQ (maskable interrupt request) is active.","Represents a contiguous block of memory which can be read, …","Represents the port built into a MOS 6510 processor, …","An NMI (non-maskable interrupt) is active.","No interrupts are active.","Memory that does nothing when read or written to.","A Port that does nothing.","A Port that can be read from, written to, reset, or polled …","Information about the system that Memory implementations …","Add a new memory implementation to the banked memory.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a BlockMemory of the given size which loads its …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Map a new Memory object to the given starting address in …","The various interface adapters (6520, 6522, 6526) for the …","Create a new, empty banked memory.","Create a new MOS 6510 port with the given port.","Create a new BranchMemory with no mappings.","Create a new NullMemory that will not warn when read or …","Create a new NullPort that will not warn when read or …","Poll the port for interrupts. A port may trigger an …","Poll this memory to see if an interrupt has been triggered.","","","","","","","Create a BlockMemory of the given size which clears its …","Read a byte from the port. This is implementation-defined, …","Read a byte from this memory at the given address. …","","","","","","","Reset the port to its initial state, analogous to a system …","Reset this memory to its initial state, e.g. after a …","","","","","","","Create a BlockMemory of the given size which does not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new NullMemory that will warn when read or …","Create a new NullPort that will warn when read or written …","Write a byte to the port. This is implementation-defined.","Write a byte to this memory at the given address.","","","","","","","Count underflows of the other timer.","Count underflows of the other timer, but only if the CNT …","The MOS 6526 Complex Interface Adapter (CIA). Contains two …","Use pulses on the external CNT pin.","Registers for interrupt flags and interrupt enable bits. …","The timer will not output to the port.","Use the internal system clock.","The MOS 6520 Peripheral Interface Adapter (PIA), …","A port and its associated registers on the MOS 6522 VIA or …","The timer will output a single pulse on PB6 or PB7.","The timer will output a set number of pulses.","The shift register used by the MOS 6522 VIA and MOS 6526 …","A timer circuit on the MOS 6522 VIA or MOS 6526 CIA.","The source of the timer’s clock, which controls the rate …","The manner in which the timer will output signals to the …","The timer will toggle the output on PB6 or PB7.","The MOS 6522 Versatile Interface Adapter (VIA). Contains …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","The current state of which interrupts are enabled. If a …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Is the specified interrupt enabled?","","Create a new PIA with the two given port implementations.","","","","","","","","Poll the underlying port for interrupts.","Poll the timer (decrement the counter, fire the interrupt …","","","","Read from the port, respecting the DDR.","Read the value of the interrupt enable register.","Read the apparent value of the interrupt register, based …","","","","Reset the port to its initial state.","Reset the shift register’s internal state.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Write to the port, respecting the DDR.","Write to the interrupt enable register.","A platform which can be run asynchronously.","Represents an RGB color with 8 bits per channel.","Represents the current state of the connected joystick.","A Platform provides platform-specific functionality to the …","","A platform which can be run synchronously.","Represents a platform which exclusively operates over text …","","Represents the configuration of a GUI window that the …","A platform implementation for desktop platforms using …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new JoystickState with all buttons released.","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Get the current state of the connected joystick. If no …","","","Get the current state of the user’s physical keyboard.","","","Get the state of a virtual keyboard (emulating the target …","","","","","Read a string input from the user, “out-of-band” from …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","Display the given string to the user, “out-of-band” …","","","","","","Return a random number between 0 and 255. This exists as …","","","Request that the platform create a window of the specified …","","","","","","","","","","","","","Convert the given color to a 32-bit integer, where the top …","Convert the given color to an array of 4 bytes, where the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Represents a value which can be loaded from a file.","Represents a predefined, immutable ROM file. Useful for …","","","","","","","Returns the argument unchanged.","Creates a ROM file by loading the contents of a file.","","Returns the contents of the ROM file.","Calls U::from(self).","Creates a new ROM file from the given data.","","","","","","","A representation of an emulated system.","","","Create a new system from the given roms, configuration, …","","","","","Render the current state of the system to the given …","Reset the system’s state.","Advance the system by one tick.","","A system which only operates in text mode, for basic …","A factory for creating a BasicSystem.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Bank switching implementation performed using the 6510’s …","The Commodore 64 system.","A factory for creating a Commodore 64 system.","Configuration for a Commodore 64 system.","The set of ROM files required to run a Commodore 64 system.","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernel ROM. Contains the operating system.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A port of the “Easy6502” system from …","A factory for the Easy6502 system.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","A system used to run Klaus Dormann’s 6502 CPU test suite.","A factory for creating a system that runs Klaus Dormann’…","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The keys found on the PET’s “Graphics” keyboard. …","Port A on the first PIA. This is used for generating the …","Port B on the first PIA. This is used for reading the …","The Commodore PET system.","A factory for the Commodore PET.","Configuration for a Commodore PET system.","The set of ROM files required to run a PET system.","","","","","","","","","","","","","","","","","","","","","","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","","","","","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","","","","","","Editor ROM. Contains the screen editor functions.","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernal ROM. Contains the operating system.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The VIC-20 system by Commodore.","A factory for creating a VIC-20 system.","Configuration for a VIC-20 system.","The set of ROM files required to run a VIC-20 system.","Port A on the first VIA chip. This is used to read the …","Port A on the second VIA chip. This is used to read the …","Port B on the second VIA chip. This is used to set the …","Basic ROM. Contains the BASIC interpreter.","","","","","","","","","","","","","","","","Cartridge ROM. Contains the contents of a cartridge, if …","Character ROM. Used to generate the 8x8 character bitmaps.","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Load the ROM files from files.","Return a reference to the joystick’s pin 3 state.","Return a reference to the keyboard column’s current …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Kernal ROM. Contains the operating system and editor …","","","","Create a new instance of the port, with the given keyboard …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,90,1,1,1,1,91,1,91,1,91,1,91,1,92,1,92,1,1,1,1,1,1,1,1,1,92,1,92,1,13,13,13,13,13,14,13,13,14,14,13,15,15,13,13,14,13,13,13,13,13,13,13,13,13,13,13,14,13,13,14,13,13,13,14,13,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,14,13,13,13,13,14,13,13,14,14,13,13,0,0,0,0,0,13,13,14,13,14,13,14,13,14,13,14,13,13,13,14,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,13,13,13,13,13,13,13,14,13,14,13,14,13,81,13,14,13,13,13,14,13,14,13,14,13,14,14,13,14,13,13,13,14,13,13,13,0,81,13,13,13,13,14,13,0,13,13,13,13,12,93,81,13,14,15,12,93,81,13,14,15,12,13,14,15,12,13,14,15,12,0,12,15,93,81,13,14,15,12,13,14,15,12,13,13,14,14,15,15,13,14,15,12,93,81,13,14,15,12,13,14,15,13,14,15,93,81,13,14,15,12,12,94,93,12,12,12,12,15,13,14,15,12,93,81,13,14,15,12,93,81,13,14,15,12,93,81,13,14,15,12,93,81,13,14,15,12,93,81,13,14,15,12,29,29,29,29,29,0,0,0,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,95,96,97,29,95,96,97,29,29,29,29,95,96,97,29,29,29,29,29,95,96,97,29,29,29,95,96,97,29,95,96,97,29,29,95,96,97,29,95,96,97,29,95,96,97,29,95,96,97,29,95,96,97,29,0,0,0,0,34,0,0,34,34,0,0,0,0,30,30,37,41,31,32,33,34,2,30,37,41,31,32,33,34,2,2,31,32,33,2,30,37,41,31,32,33,34,2,34,34,34,34,2,30,37,41,31,32,33,34,2,37,30,37,41,31,32,33,34,2,31,0,30,41,31,32,33,40,4,30,37,41,31,32,33,37,40,4,30,37,41,31,32,33,40,4,30,37,41,31,32,33,37,30,37,41,31,32,33,34,2,30,37,41,31,32,33,34,2,30,37,41,31,32,33,34,2,30,37,41,31,32,33,34,2,30,37,41,31,32,33,34,2,32,33,40,4,30,37,41,31,32,33,98,98,0,98,0,99,98,0,0,99,99,0,0,0,0,99,0,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,44,45,46,47,48,99,98,49,50,44,44,45,46,47,48,49,50,45,46,47,48,49,45,46,47,48,44,44,45,46,47,48,50,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,99,98,49,50,44,45,46,47,48,44,0,0,0,0,0,0,0,0,0,0,0,57,54,58,55,51,52,53,57,54,58,55,51,52,53,51,52,53,51,52,53,52,57,54,58,55,51,52,53,52,51,52,53,51,51,52,51,52,53,57,54,58,55,51,52,53,51,63,54,55,63,54,55,63,54,55,51,53,63,54,55,57,54,58,55,51,52,53,52,57,54,58,55,51,53,63,54,55,100,57,58,63,54,55,63,54,55,52,101,57,58,53,102,102,51,52,53,51,51,57,54,58,55,51,52,53,57,54,58,55,51,52,53,57,54,58,55,51,52,53,52,57,54,58,55,51,52,53,57,54,58,55,51,52,53,53,0,0,36,36,36,36,36,36,36,103,36,36,36,36,36,36,36,36,36,36,0,0,0,104,0,0,0,0,64,64,64,0,0,0,105,70,105,70,105,105,70,105,70,105,70,70,70,70,105,70,105,70,105,70,105,70,105,70,0,0,0,0,0,71,71,73,72,106,74,71,73,72,106,74,106,71,71,73,72,106,74,71,73,72,106,74,71,71,73,72,106,74,71,72,73,73,73,74,73,74,74,71,73,72,106,74,71,73,72,106,74,71,73,72,106,74,71,73,72,106,74,71,73,72,106,74,73,0,0,107,75,107,75,107,107,75,107,75,107,75,75,75,75,107,75,107,75,107,75,107,75,107,75,0,0,108,76,108,76,108,108,76,108,76,108,76,76,76,76,108,76,108,76,108,76,108,76,108,76,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,77,80,82,78,109,83,79,77,80,82,78,109,83,79,109,77,79,79,79,77,80,82,78,109,83,79,77,79,79,79,79,77,80,82,78,109,83,79,77,79,80,79,77,80,82,78,109,83,79,77,78,80,82,80,82,80,82,83,80,82,83,79,83,79,77,80,82,78,109,83,79,77,80,82,78,109,83,79,77,80,82,78,109,83,79,77,80,82,78,109,83,79,77,80,82,78,109,83,79,80,82,0,0,0,0,0,0,0,84,84,86,87,88,85,110,89,84,86,87,88,85,110,89,110,84,84,84,86,87,88,85,110,89,84,86,87,88,85,110,89,84,86,87,84,86,87,88,85,110,89,84,85,86,87,88,86,87,88,86,87,88,89,86,87,88,89,89,84,86,87,88,85,110,89,84,86,87,88,85,110,89,84,86,87,88,85,110,89,84,86,87,88,85,110,89,84,86,87,88,85,110,89,86,87,88],"f":[0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[1,2],[[3,3]],[[1,3,3]],[[]],0,[[[5,[4]]],1],[[],6],[1,6],[[],7],[1,7],[6],[[1,6]],[7],[[1,7]],[7,6],[[1,7],6],[7,7],[[1,7],7],0,[1],[1,6],[[],8],[[],8],[[],9],[[],10],[[]],[[7,6]],[[1,7,6]],[[7,7]],[[1,7,7]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[12,[11]],[12,[11]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[13,13],[14,14],[15,15],[[[12,[[0,[16,11]]]]],[[12,[[0,[16,11]]]]]],[[]],[[]],[[]],[[]],0,[[],[[12,[[0,[17,11]]]]]],[18,[[8,[15]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[13,13],3],[[14,14],3],[[15,15],3],[[[12,[[0,[11,11]]]],[12,[[0,[11,11]]]]],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[],3],[[13,19],20],[[14,19],20],[[15,19],20],[[[12,[[0,[21,11]]]],19],20],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[22,23]],24],25],[[[0,[22,23]],24],25],[[[0,[22,23]],24],25],[[13,26]],[[14,26]],[[15,26]],[[]],[[]],[[]],[[]],[[]],[[]],[[[12,[11]],11],3],[12,12],[[[12,[13]]],[[12,[14]]]],[[],[[12,[11]]]],[[[12,[11]],11]],[[[12,[11]]],[[27,[11]]]],[[[12,[11]],11]],[[15,28],8],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[29,29],[[]],[18,[[8,[29]]]],[[]],[[]],[[]],[[]],[[29,29],3],[[],3],[[],3],[[29,19],20],[[]],[[]],[[]],[[]],[[[0,[22,23]],24],25],[[29,26]],[[]],[[]],[[]],[[]],[[[12,[13]]],[[12,[29]]]],[[[12,[14]]],[[12,[29]]]],[[[12,[15]]],[[12,[29]]]],[[29,28],8],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[30,[5,[4]]],30],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],31],[[],32],[[],33],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[34,34],3],[[],3],[[],3],[[34,19],20],[[2,19],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[35,36],37],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[31,35,[5,[4]]],31],0,[[[39,[[38,[35]]]]],30],[[[5,[40]]],41],[[],31],[[],32],[[],33],[[42,2],3],[[42,2],34],[[30,42,2],34],[[37,42,2],34],[[41,42,2],34],[[31,42,2],34],[[32,42,2],34],[[33,42,2],3],[35,37],[[],6],[7,6],[[30,7],6],[[37,7],6],[[41,7],6],[[31,7],6],[[32,7],6],[33,6],[[]],[[]],[30],[37],[41],[31],[32],[33],[35,37],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[43,32],[43,33],[6],[[7,6]],[[30,7,6]],[[37,7,6]],[[41,7,6]],[[31,7,6]],[[32,7,6]],[[33,6]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[44,6],3],[[[5,[40]],[5,[40]]],45],[[[5,[40]],[5,[40]]],46],[[[5,[40]],[5,[40]]],47],[[[5,[40]]],48],[[],49],[[],50],[[45,42,2],34],[[46,42,2],34],[[47,42,2],34],[[48,42,2],3],[[49,42,2],3],[[45,7],6],[[46,7],6],[[47,7],6],[48,6],[44,6],[[44,6],6],[45],[46],[47],[48],[50],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[45,7,6]],[[46,7,6]],[[47,7,6]],[[48,6]],[[44,6]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[51,51],[52,52],[53,53],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],52],[[51,51],3],[[52,52],3],[[53,53],3],[[],3],[[],3],0,[[51,19],20],[[52,19],20],[[53,19],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[22,23]],24],25],[[],52],[54,52],[55,52],[[],[[12,[13]]]],[54,[[12,[13]]]],[55,[[12,[13]]]],[[],[[12,[15]]]],[54,[[12,[15]]]],[55,[[12,[15]]]],[[51,26]],0,[[],56],[54,56],[55,56],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],57],[[],54],[[],58],[[[60,[[59,[[10,[53]]]]]],[60,[[59,[[12,[61]]]]]],[60,[[59,[52]]]]],55],[[6,6,6],51],[[42,42,62],53],[43],[[54,43]],[[55,43]],[[],[[60,[63]]]],[57,[[60,[63]]]],[58,[[60,[63]]]],[[],6],[54,6],[55,6],[53],[[54,53]],[[55,53]],0,[[[5,[64]]]],[[57,[5,[64]]]],[[58,[5,[64]]]],0,[[],[[66,[[5,[65]]]]]],[[[5,[64]]],[[66,[[5,[65]]]]]],[[]],[[]],[[]],[51,42],[51,[[67,[6]]]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[36,36],[[]],[[]],[[36,19],20],[[]],[43],[43,36],[36,[[27,[6]]]],[[]],[[[27,[6]]],36],[[]],[[],8],[[],8],[[],9],[[],10],[[]],0,0,0,[[[60,[63]]],[[5,[64]]]],0,0,0,0,[[[68,[6]],53]],[[]],[[],69],0,0,0,[[]],[[]],[[]],[[]],[[36,[60,[63]]],[[5,[64]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[70,[68,[6]],53]],[70],[70,69],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[71,72,[60,[63]]],[[5,[64]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],71],[[]],[[]],[[]],[[]],[[]],0,0,[[[67,[[39,[[38,[35]]]]]]],73],[[73,42,2],3],[73,6],[[74,[68,[6]],53]],[73],[74],[74,69],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[73,6]],0,0,[[]],[[]],[[]],[[]],[[36,[60,[63]]],[[5,[64]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[75,[68,[6]],53]],[75],[75,69],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[36,[60,[63]]],[[5,[64]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[76,[68,[6]],53]],[76],[76,69],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],10],[[],10],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[77,78,[60,[63]]],[[5,[64]]]],0,[79,79],[[]],[18,[[8,[79]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[79,79],3],[[],3],[[],3],[[79,19],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],77],[[[0,[22,23]],24],25],[80,[[39,[[38,[6]]]]]],[[79,26]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],80],[[[39,[[38,[6]]]],81,[60,[63]]],82],[[80,42,2],3],[[82,42,2],3],[80,6],[82,6],[[83,[68,[6]],53]],[80],[82],[83],[[79,28],8],[83,69],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[80,6]],[[82,6]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[84,85,[60,[63]]],[[5,[64]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[43]]],84],[86,[[39,[[38,[3]]]]]],[87,[[39,[[38,[6]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[[60,[63]]],86],[[[39,[[38,[3]]]]],87],[[[39,[[38,[6]]]],81,[60,[63]]],88],[[86,42,2],3],[[87,42,2],3],[[88,42,2],3],[86,6],[87,6],[88,6],[[89,[68,[6]],53]],[86],[87],[88],[89],[89,69],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[86,6]],[[87,6]],[[88,6]]],"c":[],"p":[[3,"Mos6502"],[3,"SystemInfo"],[15,"bool"],[8,"Memory"],[3,"Box"],[15,"u8"],[15,"u16"],[4,"Result"],[3,"TypeId"],[4,"Option"],[8,"PartialEq"],[3,"KeyState"],[4,"KeyPosition"],[4,"KeySymbol"],[4,"VirtualKey"],[8,"Clone"],[8,"Default"],[8,"Deserializer"],[3,"Formatter"],[6,"Result"],[8,"Debug"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[8,"Hasher"],[3,"Vec"],[8,"Serializer"],[4,"C64Keys"],[3,"BankedMemory"],[3,"BranchMemory"],[3,"NullMemory"],[3,"NullPort"],[4,"ActiveInterrupt"],[15,"usize"],[3,"RomFile"],[3,"BlockMemory"],[3,"Cell"],[3,"Rc"],[8,"Port"],[3,"Mos6510Port"],[15,"u32"],[15,"str"],[3,"InterruptRegister"],[3,"Cia"],[3,"Pia"],[3,"Via"],[3,"PortRegisters"],[3,"Timer"],[3,"ShiftRegister"],[3,"Color"],[3,"JoystickState"],[3,"WindowConfig"],[3,"TextPlatformProvider"],[3,"WinitPlatformProvider"],[3,"String"],[3,"TextPlatform"],[3,"WinitPlatform"],[3,"Mutex"],[3,"Arc"],[4,"VirtualKeyCode"],[15,"f64"],[8,"PlatformProvider"],[8,"System"],[8,"Future"],[3,"Pin"],[15,"array"],[15,"slice"],[3,"Duration"],[3,"BasicSystem"],[3,"C64SystemRoms"],[3,"C64SystemConfig"],[3,"C64BankSwitching"],[3,"C64System"],[3,"Easy6502System"],[3,"KlausSystem"],[3,"PetSystemRoms"],[3,"PetSystemConfig"],[4,"PetKeys"],[3,"PetPia1PortA"],[4,"KeyMappingStrategy"],[3,"PetPia1PortB"],[3,"PetSystem"],[3,"Vic20SystemRoms"],[3,"Vic20SystemConfig"],[3,"VicVia1PortA"],[3,"VicVia2PortB"],[3,"VicVia2PortA"],[3,"Vic20System"],[8,"InterruptHandler"],[8,"Stack"],[8,"MemoryIO"],[3,"SymbolAdapter"],[8,"KeyAdapter"],[3,"C64KeyboardAdapter"],[3,"C64SymbolAdapter"],[3,"C64VirtualAdapter"],[4,"TimerClockSource"],[4,"TimerOutput"],[8,"Platform"],[8,"SyncPlatform"],[8,"AsyncPlatform"],[8,"DiskLoadable"],[8,"SystemBuilder"],[3,"BasicSystemBuilder"],[3,"C64SystemBuilder"],[3,"Easy6502SystemBuilder"],[3,"KlausSystemBuilder"],[3,"PetSystemBuilder"],[3,"Vic20SystemBuilder"]]},\
+"noentiendo_desktop":{"doc":"","t":"DNNNENNNENENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMFLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Args","Basic","C64","Easy","KeyMappingArg","Klaus","Pet","Physical","PlatformArg","Symbolic","SystemArg","Text","Vic","Winit","augment_args","augment_args_for_update","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","cmp","downcast","downcast","downcast","downcast","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from_arg_matches","from_arg_matches_mut","into","into","into","into","into_app","into_app_for_update","key_mapping","main","partial_cmp","partial_cmp","partial_cmp","platform","rom_path","system","to_owned","to_owned","to_owned","to_possible_value","to_possible_value","to_possible_value","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","upcast","upcast","upcast","upcast","update_from_arg_matches","update_from_arg_matches_mut","value_variants","value_variants","value_variants","vzip","vzip","vzip","vzip"],"q":[[0,"noentiendo_desktop"]],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,2,2,2,0,2,2,4,0,4,0,3,2,3,9,9,2,3,4,9,2,3,4,9,2,3,4,2,3,4,2,3,4,2,3,4,9,2,3,4,2,2,3,3,4,4,2,3,4,9,2,3,4,9,9,9,2,3,4,9,9,9,9,0,2,3,4,9,9,9,2,3,4,2,3,4,2,3,4,9,2,3,4,9,2,3,4,9,2,3,4,9,9,9,2,3,4,2,3,4,9],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,1],[1,1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[2,2],[3,3],[4,4],[[]],[[]],[[]],[[2,2],5],[[3,3],5],[[4,4],5],[[]],[[]],[[]],[[]],[[2,2],6],[[3,3],6],[[4,4],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[2,7],8],[[3,7],8],[[4,7],8],[[9,7],8],[[]],[[]],[[]],[[]],[10,[[12,[9,11]]]],[10,[[12,[9,11]]]],[[]],[[]],[[]],[[]],[[],1],[[],1],0,[[]],[[2,2],[[13,[5]]]],[[3,3],[[13,[5]]]],[[4,4],[[13,[5]]]],0,0,0,[[]],[[]],[[]],[2,[[13,[14]]]],[3,[[13,[14]]]],[4,[[13,[14]]]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],15],[[],15],[[],15],[[],15],[[],13],[[],13],[[],13],[[],13],[[9,10],[[12,[11]]]],[[9,10],[[12,[11]]]],[[],[[16,[2]]]],[[],[[16,[3]]]],[[],[[16,[4]]]],[[]],[[]],[[]],[[]]],"c":[],"p":[[6,"Command"],[4,"SystemArg"],[4,"PlatformArg"],[4,"KeyMappingArg"],[4,"Ordering"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Args"],[3,"ArgMatches"],[3,"Error"],[4,"Result"],[4,"Option"],[3,"PossibleValue"],[3,"TypeId"],[15,"slice"]]}\
}');
if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/doc/settings.html b/doc/settings.html
index 3fbbfdb7..fdb33696 100644
--- a/doc/settings.html
+++ b/doc/settings.html
@@ -1 +1 @@
-Rustdoc settings
use crate::cpu::fetch::Fetch;
use crate::cpu::registers::{flags, Alu};
use crate::cpu::{InterruptHandler, MemoryIO, Mos6502, Stack};
@@ -861,12 +1143,293 @@
Ok(2)
}
- _ => {
- println!("Unimplemented opcode: {opcode:02X}");
+ // === ILLEGAL OPCODES ===
+ // TODO: Verify cycle counts
+ 0x04 | 0x0C | 0x14 | 0x1A | 0x1C | 0x34 | 0x3A | 0x3C | 0x44 | 0x54 | 0x5A | 0x5C | 0x64
+ | 0x74 | 0x7A | 0x7C | 0x80 | 0x82 | 0x89 | 0xC2 | 0xD4 | 0xDA | 0xDC | 0xE2 | 0xF4
+ | 0xFA | 0xFC => {
+ // NOP
+ match opcode {
+ 0x1A | 0x3A | 0x5A | 0x7A | 0xDA | 0xFA => {
+ // No address
+ Ok(2)
+ }
+ _ => {
+ // Address
+ let (_value, cycles) = self.fetch_operand_value(opcode);
+ Ok(cycles)
+ }
+ }
+ }
+
+ 0x02 | 0x12 | 0x22 | 0x32 | 0x42 | 0x52 | 0x62 | 0x72 | 0x92 | 0xB2 | 0xD2 | 0xF2 => {
+ // STP or KIL or JAM or HLT depending on who you ask
+ println!("Execution stopped");
Err(())
}
+
+ 0x03 | 0x07 | 0x0F | 0x13 | 0x17 | 0x1B | 0x1F => {
+ // SLO: ASL -> ORA
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+ self.registers.sr.write(flags::CARRY, value & 0x80 != 0);
+
+ let result = value << 1;
+ self.write(address, result);
+
+ self.registers.a |= result;
+ self.registers.sr.set_nz(self.registers.a);
+
+ Ok(cycles + 2)
+ }
+
+ 0x23 | 0x27 | 0x2F | 0x33 | 0x37 | 0x3B | 0x3F => {
+ // RLA: ROL -> AND
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+
+ let result = (value << 1) | (self.registers.sr.read(flags::CARRY) as u8);
+ self.registers.sr.write(flags::CARRY, result & 0x80 != 0);
+ self.write(address, result);
+
+ self.registers.a &= result;
+ self.registers.sr.set_nz(self.registers.a);
+
+ Ok(cycles + 2)
+ }
+
+ 0x43 | 0x47 | 0x4F | 0x53 | 0x57 | 0x5B | 0x5F => {
+ // SRE: LSR -> EOR
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+ let result = value >> 1;
+
+ self.registers.sr.write(flags::CARRY, value & 0x01 != 0);
+ self.write(address, result);
+
+ self.registers.a ^= result;
+ self.registers.sr.set_nz(self.registers.a);
+
+ Ok(cycles + 2)
+ }
+
+ 0x63 | 0x67 | 0x6F | 0x73 | 0x77 | 0x7B | 0x7F => {
+ // RRA: ROR -> ADC
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+ let result = value >> 1 | (self.registers.sr.read(flags::CARRY) as u8) << 7;
+
+ self.registers.sr.write(flags::CARRY, value & 0x01 != 0);
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ self.registers.alu_add(result);
+
+ Ok(cycles)
+ }
+
+ 0x83 | 0x87 | 0x8F | 0x97 => {
+ // SAX: AND -> STA
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.registers.x & self.registers.a;
+ self.registers.sr.set_nz(value);
+ self.write(address, value);
+
+ Ok(cycles)
+ }
+
+ 0xA3 | 0xA7 | 0xAF | 0xB3 | 0xB7 | 0xBF => {
+ // LAX: LDA & LDX
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ self.registers.a = value;
+ self.registers.x = value;
+ self.registers.sr.set_nz(value);
+
+ Ok(cycles)
+ }
+
+ 0xC3 | 0xC7 | 0xCF | 0xD3 | 0xD7 | 0xDB | 0xDF => {
+ // DCP: DEC + SEC
+ self.registers.sr.set(flags::CARRY);
+
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+ let result = value.wrapping_sub(1);
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0xE3 | 0xE7 | 0xEF | 0xF3 | 0xF7 | 0xFB | 0xFF => {
+ // ISC: INC => SBC
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = self.read(address);
+ let result = value.wrapping_add(1);
+ self.registers.alu_subtract(value);
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0x0B | 0x2B => {
+ // ANC: AND byte with accumulator. If result is negative then carry is set.
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let new_val = self.registers.a & value;
+ self.registers.sr.write(flags::CARRY, new_val & 0x80 != 0);
+
+ Ok(cycles)
+ }
+
+ 0x4B => {
+ // ALR: AND + LSR
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let new_val = (self.registers.a & value) >> 1;
+
+ self.registers.sr.write(flags::CARRY, new_val & 0x01 != 0);
+ self.registers.sr.set_nz(new_val);
+
+ Ok(cycles)
+ }
+
+ 0x6B => {
+ // ARR: AND + ROR
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let new_val = self.registers.a & value;
+
+ let new_val = (new_val >> 1) | (self.registers.sr.read(flags::CARRY) as u8) << 7;
+
+ self.registers.sr.write(flags::CARRY, new_val & 0x40 != 0);
+ self
+ .registers
+ .sr
+ .write(flags::OVERFLOW, new_val & 0x20 != 0);
+ self.registers.sr.set_nz(new_val);
+
+ Ok(cycles)
+ }
+
+ 0x8B => {
+ // XAA: AND X + AND immediate
+ // Oooo she's highly unstable xx "Do not use" or whatever
+
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let magic: u8;
+ #[cfg(not(target_arch = "wasm32"))]
+ {
+ magic = rand::random::<u8>();
+ }
+ #[cfg(target_arch = "wasm32")]
+ {
+ magic = 0xFF;
+ }
+ self.registers.a |= magic;
+ self.registers.a &= self.registers.x & value;
+ self.registers.sr.set_nz(self.registers.a);
+
+ Ok(cycles)
+ }
+
+ 0xCB => {
+ // AXS: AND -> DEX -> STX
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ self.registers.x &= self.registers.a;
+
+ self.registers.alu_compare(self.registers.x, value);
+ self.registers.x = self.registers.x.wrapping_sub(value);
+
+ Ok(cycles)
+ }
+
+ 0xEB => {
+ // SBC (same as official sbc)
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ self.registers.alu_subtract(value);
+ Ok(cycles)
+ }
+
+ 0x9C => {
+ // SHY: (Y & (high(addr) + 1)) -> addr
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = (address >> 8) as u8;
+ let result = self.registers.y & (value.wrapping_add(1));
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0x9E => {
+ // SHX: (X & (high(addr) + 1)) -> addr
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = (address >> 8) as u8;
+ let result = self.registers.x & (value.wrapping_add(1));
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0x93 | 0x9F => {
+ // AHX: (A & X & (high(addr) + 1)) -> addr
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = (address >> 8) as u8;
+ let result = self.registers.a & self.registers.x & (value.wrapping_add(1));
+ self.registers.sr.set_nz(result);
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0x9B => {
+ // TAS: TSX with accumulator and AHX
+ // A AND X -> SP
+ // A AND X AND (H+1) -> M
+ self.registers.sp.set(self.registers.a & self.registers.x);
+
+ let (address, cycles) = self.fetch_operand_address(opcode);
+ let value = (address >> 8) as u8;
+ let result = self.registers.a & self.registers.x & (value.wrapping_add(1));
+ self.write(address, result);
+
+ Ok(cycles + 2)
+ }
+
+ 0xBB => {
+ // LAS: LDA + TSX unholy matrimony
+ // M AND SP -> A, X, SP
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let result = value & self.registers.sp.get();
+
+ self.registers.a = result;
+ self.registers.x = result;
+ self.registers.sp.set(result);
+ self.registers.sr.set_nz(result);
+
+ Ok(cycles)
+ }
+
+ 0xAB => {
+ // ATX or LXA: XAA but instead of and X we store in X
+ let (value, cycles) = self.fetch_operand_value(opcode);
+ let magic: u8;
+ #[cfg(not(target_arch = "wasm32"))]
+ {
+ magic = rand::random::<u8>();
+ }
+ #[cfg(target_arch = "wasm32")]
+ {
+ magic = 0xFF;
+ }
+ self.registers.a |= magic;
+ self.registers.a &= value;
+ self.registers.x = self.registers.a;
+ self.registers.sr.set_nz(self.registers.a);
+
+ Ok(cycles)
+ }
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/cpu/fetch.rs.html b/doc/src/libnoentiendo/cpu/fetch.rs.html
index e5e02d74..0e9a5fab 100644
--- a/doc/src/libnoentiendo/cpu/fetch.rs.html
+++ b/doc/src/libnoentiendo/cpu/fetch.rs.html
@@ -1,4 +1,4 @@
-fetch.rs - source
use crate::cpu::{MemoryIO, Mos6502};
/// Fetch values or addresses from memory, optionally dependent on the current
/// opcode.
@@ -149,7 +150,8 @@
}
}
- fn fetch_operand_address(&mut self, opcode: u8) -> (u16, u8) {
+ #[allow(clippy::manual_range_patterns)]
+ fn fetch_operand_address(&mut self, opcode: u8) -> (u16, u8) {
match opcode & 0x1F {
0x00 | 0x02 | 0x09 | 0x0B => panic!("Immediate operand has no address"),
0x01 | 0x03 => {
@@ -206,5 +208,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/cpu/mod.rs.html b/doc/src/libnoentiendo/cpu/mod.rs.html
index d79a354d..4f453f77 100644
--- a/doc/src/libnoentiendo/cpu/mod.rs.html
+++ b/doc/src/libnoentiendo/cpu/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
mod execute;
mod fetch;
mod registers;
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
@@ -356,5 +356,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/cpu/registers.rs.html b/doc/src/libnoentiendo/cpu/registers.rs.html
index 9b730fdc..2ac931e3 100644
--- a/doc/src/libnoentiendo/cpu/registers.rs.html
+++ b/doc/src/libnoentiendo/cpu/registers.rs.html
@@ -1,4 +1,4 @@
-registers.rs - source
/// The registers inside of a MOS 6502 processor.
+
/// The registers inside of a MOS 6502 processor.
#[derive(Default)]
pub struct Registers {
/// The accumulator register, used in ALU operations.
@@ -606,5 +606,4 @@
self.sr = StatusRegister::new();
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/keyboard/commodore.rs.html b/doc/src/libnoentiendo/keyboard/commodore.rs.html
index 9bde456a..33a227bc 100644
--- a/doc/src/libnoentiendo/keyboard/commodore.rs.html
+++ b/doc/src/libnoentiendo/keyboard/commodore.rs.html
@@ -1,4 +1,4 @@
-commodore.rs - source
use serde::{Deserialize, Serialize};
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState, KeySymbol};
@@ -862,5 +862,4 @@
);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/keyboard/mod.rs.html b/doc/src/libnoentiendo/keyboard/mod.rs.html
index 399daa50..0ea38e86 100644
--- a/doc/src/libnoentiendo/keyboard/mod.rs.html
+++ b/doc/src/libnoentiendo/keyboard/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
/// Keys and adapters for the Commodore 64, VIC-20, and other Commodore machines.
+
/// Keys and adapters for the Commodore 64, VIC-20, and other Commodore machines.
pub mod commodore;
/// Keys used for positional keyboard mapping.
@@ -180,5 +180,4 @@
/// keys to convey the symbols being pressed.
Symbolic,
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/keyboard/positions.rs.html b/doc/src/libnoentiendo/keyboard/positions.rs.html
index a740b1f3..d1eb5043 100644
--- a/doc/src/libnoentiendo/keyboard/positions.rs.html
+++ b/doc/src/libnoentiendo/keyboard/positions.rs.html
@@ -1,4 +1,4 @@
-positions.rs - source
/// A representation for a position on a modern keyboard.
+
/// A representation for a position on a modern keyboard.
/// Source: <https://en.wikipedia.org/wiki/Keyboard_layout#/media/File:Qwerty.svg>
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum KeyPosition {
@@ -248,5 +248,4 @@
Num0,
NumPeriod,
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/keyboard/symbols.rs.html b/doc/src/libnoentiendo/keyboard/symbols.rs.html
index c1b77116..ec05c478 100644
--- a/doc/src/libnoentiendo/keyboard/symbols.rs.html
+++ b/doc/src/libnoentiendo/keyboard/symbols.rs.html
@@ -1,4 +1,4 @@
-symbols.rs - source
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState};
+
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState};
/// A representation for a symbol on a modern keyboard.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
@@ -1046,5 +1046,4 @@
assert_eq!(&vec![KeySymbol::Interrupt], symbols.pressed());
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/keyboard/virtualkey.rs.html b/doc/src/libnoentiendo/keyboard/virtualkey.rs.html
index f05e0f13..7954d07a 100644
--- a/doc/src/libnoentiendo/keyboard/virtualkey.rs.html
+++ b/doc/src/libnoentiendo/keyboard/virtualkey.rs.html
@@ -1,4 +1,4 @@
-virtualkey.rs - source
use serde::{Deserialize, Serialize};
use crate::systems::pet::PetKeys;
@@ -22,5 +22,4 @@
CommodorePet(PetKeys),
// ...
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/lib.rs.html b/doc/src/libnoentiendo/lib.rs.html
index 9d4e250c..86f282c8 100644
--- a/doc/src/libnoentiendo/lib.rs.html
+++ b/doc/src/libnoentiendo/lib.rs.html
@@ -1,4 +1,4 @@
-lib.rs - source
#![doc = include_str!("../README.md")]
#![allow(clippy::new_without_default)]
/// The [`cpu::Mos6502`] represents a 6502 processor and associated memory.
@@ -78,5 +78,4 @@
#[cfg(target_arch = "wasm32")]
pub use wasm::*;
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/banked.rs.html b/doc/src/libnoentiendo/memory/banked.rs.html
index 4f80ea38..9df2f5c6 100644
--- a/doc/src/libnoentiendo/memory/banked.rs.html
+++ b/doc/src/libnoentiendo/memory/banked.rs.html
@@ -1,4 +1,4 @@
-banked.rs - source
use std::{cell::Cell, rc::Rc};
use super::{ActiveInterrupt, Memory, SystemInfo};
@@ -138,5 +138,4 @@
highest
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/block.rs.html b/doc/src/libnoentiendo/memory/block.rs.html
index 08d78c3f..d10b5587 100644
--- a/doc/src/libnoentiendo/memory/block.rs.html
+++ b/doc/src/libnoentiendo/memory/block.rs.html
@@ -1,4 +1,4 @@
-block.rs - source
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
use crate::roms::RomFile;
/// Represents a simple block of contiguous memory, with no additional hardware.
@@ -290,5 +290,4 @@
BlockMemory::from_file(0x03, file);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/branch.rs.html b/doc/src/libnoentiendo/memory/branch.rs.html
index 16623ac7..e8f18fcf 100644
--- a/doc/src/libnoentiendo/memory/branch.rs.html
+++ b/doc/src/libnoentiendo/memory/branch.rs.html
@@ -1,4 +1,4 @@
-branch.rs - source
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
/// Maps several Memory objects into a single contiguous address space.
/// Each mapped object is assigned a starting address, and reads and writes
@@ -430,5 +430,4 @@
assert_eq!(0xFF, memory.read(0x0234));
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mod.rs.html b/doc/src/libnoentiendo/memory/mod.rs.html
index afa01cc6..f8ec4659 100644
--- a/doc/src/libnoentiendo/memory/mod.rs.html
+++ b/doc/src/libnoentiendo/memory/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
mod banked;
mod block;
mod branch;
mod mos6510;
@@ -106,5 +106,4 @@
/// implementation-dependent reason.
fn poll(&mut self, cycles: u32, info: &SystemInfo) -> ActiveInterrupt;
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mos6510.rs.html b/doc/src/libnoentiendo/memory/mos6510.rs.html
index ac2f26a8..66dd668d 100644
--- a/doc/src/libnoentiendo/memory/mos6510.rs.html
+++ b/doc/src/libnoentiendo/memory/mos6510.rs.html
@@ -1,4 +1,4 @@
-mos6510.rs - source
use super::{ActiveInterrupt, Memory, Port, SystemInfo};
+
use super::{ActiveInterrupt, Memory, Port, SystemInfo};
/// Represents the port built into a MOS 6510 processor, mapped to memory addresses 0x0000 (for the DDR) and 0x0001 (for the port itself).
pub struct Mos6510Port {
@@ -116,5 +116,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mos652x/cia.rs.html b/doc/src/libnoentiendo/memory/mos652x/cia.rs.html
index 06489cdf..96e2077f 100644
--- a/doc/src/libnoentiendo/memory/mos652x/cia.rs.html
+++ b/doc/src/libnoentiendo/memory/mos652x/cia.rs.html
@@ -1,4 +1,4 @@
-cia.rs - source
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mos652x/mod.rs.html b/doc/src/libnoentiendo/memory/mos652x/mod.rs.html
index 842e0474..53b2e448 100644
--- a/doc/src/libnoentiendo/memory/mos652x/mod.rs.html
+++ b/doc/src/libnoentiendo/memory/mos652x/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
mod cia;
mod pia;
mod via;
@@ -574,5 +574,4 @@
self.interrupt_enable = 0;
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mos652x/pia.rs.html b/doc/src/libnoentiendo/memory/mos652x/pia.rs.html
index 64dad9b1..68da9235 100644
--- a/doc/src/libnoentiendo/memory/mos652x/pia.rs.html
+++ b/doc/src/libnoentiendo/memory/mos652x/pia.rs.html
@@ -1,4 +1,4 @@
-pia.rs - source
use crate::memory::{ActiveInterrupt, Memory, Port, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, Port, SystemInfo};
// MOS 6520
@@ -382,5 +382,4 @@
assert_eq!(0b01010000, pia.read(0x00));
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/mos652x/via.rs.html b/doc/src/libnoentiendo/memory/mos652x/via.rs.html
index 4e16ac43..549358bf 100644
--- a/doc/src/libnoentiendo/memory/mos652x/via.rs.html
+++ b/doc/src/libnoentiendo/memory/mos652x/via.rs.html
@@ -1,4 +1,4 @@
-via.rs - source
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/null.rs.html b/doc/src/libnoentiendo/memory/null.rs.html
index d8b7000e..190175a2 100644
--- a/doc/src/libnoentiendo/memory/null.rs.html
+++ b/doc/src/libnoentiendo/memory/null.rs.html
@@ -1,4 +1,4 @@
-null.rs - source
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
/// Memory that does nothing when read or written to.
#[derive(Default)]
@@ -108,5 +108,4 @@
assert_eq!(memory.read(0x0000), 0);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/memory/ports.rs.html b/doc/src/libnoentiendo/memory/ports.rs.html
index e9af4638..f9cb6e80 100644
--- a/doc/src/libnoentiendo/memory/ports.rs.html
+++ b/doc/src/libnoentiendo/memory/ports.rs.html
@@ -1,4 +1,4 @@
-ports.rs - source
use crate::memory::SystemInfo;
/// A Port that can be read from, written to, reset, or polled for interrupts.
/// Used in the MOS 6520 PIA and the 6522 VIA.
@@ -144,5 +144,4 @@
assert_eq!(port.read(), 0);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/platform/mod.rs.html b/doc/src/libnoentiendo/platform/mod.rs.html
index 24e7d63b..5c10b74f 100644
--- a/doc/src/libnoentiendo/platform/mod.rs.html
+++ b/doc/src/libnoentiendo/platform/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
use crate::keyboard::{KeyPosition, KeyState, VirtualKey};
+
use crate::keyboard::{KeyPosition, KeyState, VirtualKey};
use crate::systems::System;
use async_trait::async_trait;
use std::sync::Arc;
@@ -280,5 +280,4 @@
/// (such as the web) have a different source of randomness.
fn random(&self) -> u8;
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/platform/text.rs.html b/doc/src/libnoentiendo/platform/text.rs.html
index 4fd2c54c..d23ecd26 100644
--- a/doc/src/libnoentiendo/platform/text.rs.html
+++ b/doc/src/libnoentiendo/platform/text.rs.html
@@ -1,4 +1,4 @@
-text.rs - source
use crate::keyboard::{KeyPosition, KeyState, VirtualKey};
+
use crate::keyboard::{KeyPosition, KeyState, VirtualKey};
use crate::platform::{Platform, PlatformProvider, SyncPlatform, WindowConfig};
use crate::systems::System;
use crate::time::FixedTimeStep;
@@ -158,5 +158,4 @@
rand::random()
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/platform/winit/keyboard.rs.html b/doc/src/libnoentiendo/platform/winit/keyboard.rs.html
index 841a847b..817f2233 100644
--- a/doc/src/libnoentiendo/platform/winit/keyboard.rs.html
+++ b/doc/src/libnoentiendo/platform/winit/keyboard.rs.html
@@ -1,4 +1,4 @@
-keyboard.rs - source
use winit::event::VirtualKeyCode;
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState};
@@ -264,5 +264,4 @@
mapped
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/platform/winit/mod.rs.html b/doc/src/libnoentiendo/platform/winit/mod.rs.html
index 8519c4d0..5e643cf0 100644
--- a/doc/src/libnoentiendo/platform/winit/mod.rs.html
+++ b/doc/src/libnoentiendo/platform/winit/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState, VirtualKey};
+
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState, VirtualKey};
mod keyboard;
use crate::platform::{JoystickState, Platform, PlatformProvider, SyncPlatform, WindowConfig};
use crate::systems::System;
@@ -490,5 +490,4 @@
rand::random()
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/roms/disk.rs.html b/doc/src/libnoentiendo/roms/disk.rs.html
index 0e66b993..d5491b0c 100644
--- a/doc/src/libnoentiendo/roms/disk.rs.html
+++ b/doc/src/libnoentiendo/roms/disk.rs.html
@@ -1,4 +1,4 @@
-disk.rs - source
use crate::roms::RomFile;
use std::{fs::File, io::Read};
/// Represents a value which can be loaded from a file.
@@ -34,5 +34,4 @@
RomFile::new(data)
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/roms/mod.rs.html b/doc/src/libnoentiendo/roms/mod.rs.html
index a8a1e526..43762bcd 100644
--- a/doc/src/libnoentiendo/roms/mod.rs.html
+++ b/doc/src/libnoentiendo/roms/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/basic.rs.html b/doc/src/libnoentiendo/systems/basic.rs.html
index 9bbe5f2e..34f90b31 100644
--- a/doc/src/libnoentiendo/systems/basic.rs.html
+++ b/doc/src/libnoentiendo/systems/basic.rs.html
@@ -1,4 +1,4 @@
-basic.rs - source
use instant::Duration;
use crate::cpu::Mos6502;
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
@@ -204,5 +204,4 @@
fn render(&mut self, _framebuffer: &mut [u8], _config: WindowConfig) {}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/c64/keyboard.rs.html b/doc/src/libnoentiendo/systems/c64/keyboard.rs.html
index b407a70a..89cea152 100644
--- a/doc/src/libnoentiendo/systems/c64/keyboard.rs.html
+++ b/doc/src/libnoentiendo/systems/c64/keyboard.rs.html
@@ -1,4 +1,4 @@
-keyboard.rs - source
use crate::keyboard::commodore::C64Keys;
/// The keyboard matrix found on a Commodore 64.
/// Source: <https://www.c64-wiki.com/wiki/Keyboard>.
@@ -60,5 +60,4 @@
],
]
};
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/c64/mod.rs.html b/doc/src/libnoentiendo/systems/c64/mod.rs.html
index 913d75b6..46f8d71f 100644
--- a/doc/src/libnoentiendo/systems/c64/mod.rs.html
+++ b/doc/src/libnoentiendo/systems/c64/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/c64/roms.rs.html b/doc/src/libnoentiendo/systems/c64/roms.rs.html
index 64c5b0cb..f4a1452a 100644
--- a/doc/src/libnoentiendo/systems/c64/roms.rs.html
+++ b/doc/src/libnoentiendo/systems/c64/roms.rs.html
@@ -1,4 +1,4 @@
-roms.rs - source
use crate::roms::RomFile;
#[cfg(target_arch = "wasm32")]
use js_sys::Reflect;
@@ -130,5 +130,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/c64/vic_ii.rs.html b/doc/src/libnoentiendo/systems/c64/vic_ii.rs.html
index 26130a25..b52b155a 100644
--- a/doc/src/libnoentiendo/systems/c64/vic_ii.rs.html
+++ b/doc/src/libnoentiendo/systems/c64/vic_ii.rs.html
@@ -1,4 +1,4 @@
-vic_ii.rs - source
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
use crate::platform::{Color, WindowConfig};
use std::cell::RefCell;
use std::rc::Rc;
@@ -914,5 +914,4 @@
ActiveInterrupt::None
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/easy.rs.html b/doc/src/libnoentiendo/systems/easy.rs.html
index 78af71af..1e18c276 100644
--- a/doc/src/libnoentiendo/systems/easy.rs.html
+++ b/doc/src/libnoentiendo/systems/easy.rs.html
@@ -1,4 +1,4 @@
-easy.rs - source
use instant::Duration;
use crate::cpu::{MemoryIO, Mos6502};
use crate::keyboard::KeyPosition;
@@ -268,5 +268,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/klaus.rs.html b/doc/src/libnoentiendo/systems/klaus.rs.html
index c39fde5f..bc891c4b 100644
--- a/doc/src/libnoentiendo/systems/klaus.rs.html
+++ b/doc/src/libnoentiendo/systems/klaus.rs.html
@@ -1,4 +1,4 @@
-klaus.rs - source
use instant::{Duration, Instant};
use crate::cpu::Mos6502;
use crate::memory::BlockMemory;
@@ -96,5 +96,4 @@
fn render(&mut self, _framebuffer: &mut [u8], _window: WindowConfig) {}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/mod.rs.html b/doc/src/libnoentiendo/systems/mod.rs.html
index c94678f1..f4823799 100644
--- a/doc/src/libnoentiendo/systems/mod.rs.html
+++ b/doc/src/libnoentiendo/systems/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
use crate::platform::{PlatformProvider, WindowConfig};
+
use crate::platform::{PlatformProvider, WindowConfig};
use instant::Duration;
use std::sync::Arc;
@@ -62,5 +62,4 @@
/// Render the current state of the system to the given framebuffer.
fn render(&mut self, framebuffer: &mut [u8], window: WindowConfig);
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/pet/keyboard.rs.html b/doc/src/libnoentiendo/systems/pet/keyboard.rs.html
index 25c0ba39..2f7fbea6 100644
--- a/doc/src/libnoentiendo/systems/pet/keyboard.rs.html
+++ b/doc/src/libnoentiendo/systems/pet/keyboard.rs.html
@@ -1,4 +1,4 @@
-keyboard.rs - source
use serde::{Deserialize, Serialize};
use crate::keyboard::{KeyAdapter, KeyPosition, KeyState, KeySymbol, VirtualKey};
@@ -914,5 +914,4 @@
);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/pet/mod.rs.html b/doc/src/libnoentiendo/systems/pet/mod.rs.html
index 73c12d6d..02a0fbb6 100644
--- a/doc/src/libnoentiendo/systems/pet/mod.rs.html
+++ b/doc/src/libnoentiendo/systems/pet/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
use crate::cpu::{MemoryIO, Mos6502};
use crate::keyboard::{KeyAdapter, KeyMappingStrategy, SymbolAdapter};
use crate::memory::mos652x::{Pia, Via};
use crate::memory::{BlockMemory, BranchMemory, NullMemory, NullPort, Port, SystemInfo};
@@ -506,5 +506,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/pet/roms.rs.html b/doc/src/libnoentiendo/systems/pet/roms.rs.html
index 9466705a..a8ee362a 100644
--- a/doc/src/libnoentiendo/systems/pet/roms.rs.html
+++ b/doc/src/libnoentiendo/systems/pet/roms.rs.html
@@ -1,4 +1,4 @@
-roms.rs - source
use crate::roms::RomFile;
#[cfg(target_arch = "wasm32")]
use js_sys::{Reflect, Uint8Array};
@@ -138,5 +138,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/vic/chip.rs.html b/doc/src/libnoentiendo/systems/vic/chip.rs.html
index b867c303..52e77602 100644
--- a/doc/src/libnoentiendo/systems/vic/chip.rs.html
+++ b/doc/src/libnoentiendo/systems/vic/chip.rs.html
@@ -1,4 +1,4 @@
-chip.rs - source
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
+
use crate::memory::{ActiveInterrupt, Memory, SystemInfo};
use crate::platform::{Color, PlatformProvider, WindowConfig};
use std::cell::RefCell;
use std::rc::Rc;
@@ -1030,5 +1030,4 @@
assert_eq!(0x1FFF, VicChip::vic_to_cpu_address(0x3FFF));
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/vic/keyboard.rs.html b/doc/src/libnoentiendo/systems/vic/keyboard.rs.html
index e921e260..5d43db7f 100644
--- a/doc/src/libnoentiendo/systems/vic/keyboard.rs.html
+++ b/doc/src/libnoentiendo/systems/vic/keyboard.rs.html
@@ -1,4 +1,4 @@
-keyboard.rs - source
use crate::keyboard::commodore::C64Keys;
/// The keyboard matrix in a VIC-20 system.
/// Source: <https://www.lemon64.com/forum/viewtopic.php?t=68210&sid=8b976b9f8699fc3588c5622b43a1f4b1>
@@ -60,5 +60,4 @@
],
]
};
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/systems/vic/mod.rs.html b/doc/src/libnoentiendo/systems/vic/mod.rs.html
index 801201ff..2109f061 100644
--- a/doc/src/libnoentiendo/systems/vic/mod.rs.html
+++ b/doc/src/libnoentiendo/systems/vic/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
use crate::cpu::Mos6502;
use crate::keyboard::commodore::C64VirtualAdapter;
use crate::keyboard::{
commodore::{C64KeyboardAdapter, C64SymbolAdapter},
@@ -654,5 +654,4 @@
.redraw_screen(&mut self.cpu.memory, framebuffer);
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/libnoentiendo/time.rs.html b/doc/src/libnoentiendo/time.rs.html
index c8d82db3..8649fcc4 100644
--- a/doc/src/libnoentiendo/time.rs.html
+++ b/doc/src/libnoentiendo/time.rs.html
@@ -1,4 +1,4 @@
-time.rs - source
use std::thread;
use instant::{Duration, Instant};
@@ -156,5 +156,4 @@
}
}
}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/src/noentiendo_desktop/main.rs.html b/doc/src/noentiendo_desktop/main.rs.html
index 1924d067..404948b2 100644
--- a/doc/src/noentiendo_desktop/main.rs.html
+++ b/doc/src/noentiendo_desktop/main.rs.html
@@ -1,4 +1,4 @@
-main.rs - source
\ No newline at end of file
diff --git a/doc/static.files/COPYRIGHT-002d5dd09d9a4f50.txt b/doc/static.files/COPYRIGHT-23e9bde6c69aea69.txt
similarity index 97%
rename from doc/static.files/COPYRIGHT-002d5dd09d9a4f50.txt
rename to doc/static.files/COPYRIGHT-23e9bde6c69aea69.txt
index 34e48134..1447df79 100644
--- a/doc/static.files/COPYRIGHT-002d5dd09d9a4f50.txt
+++ b/doc/static.files/COPYRIGHT-23e9bde6c69aea69.txt
@@ -1,3 +1,5 @@
+# REUSE-IgnoreStart
+
These documentation pages include resources by third parties. This copyright
file applies only to those resources. The following third party resources are
included, and carry their own copyright notices and license terms:
@@ -44,3 +46,5 @@ included, and carry their own copyright notices and license terms:
See SourceSerif4-LICENSE.md.
This copyright file is intended to be distributed with rustdoc output.
+
+# REUSE-IgnoreEnd
diff --git a/doc/static.files/FiraSans-LICENSE-1761dca11ffc8f19.txt b/doc/static.files/FiraSans-LICENSE-db4b642586e02d97.txt
similarity index 99%
rename from doc/static.files/FiraSans-LICENSE-1761dca11ffc8f19.txt
rename to doc/static.files/FiraSans-LICENSE-db4b642586e02d97.txt
index ff9afab0..d7e9c149 100644
--- a/doc/static.files/FiraSans-LICENSE-1761dca11ffc8f19.txt
+++ b/doc/static.files/FiraSans-LICENSE-db4b642586e02d97.txt
@@ -1,3 +1,5 @@
+// REUSE-IgnoreStart
+
Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
with Reserved Font Name < Fira >,
@@ -92,3 +94,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+
+// REUSE-IgnoreEnd
diff --git a/doc/static.files/NanumBarunGothic-LICENSE-2fe9ce67ec95245d.txt b/doc/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt
similarity index 99%
rename from doc/static.files/NanumBarunGothic-LICENSE-2fe9ce67ec95245d.txt
rename to doc/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt
index 0bf46682..4b3edc29 100644
--- a/doc/static.files/NanumBarunGothic-LICENSE-2fe9ce67ec95245d.txt
+++ b/doc/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt
@@ -1,3 +1,5 @@
+// REUSE-IgnoreStart
+
Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/),
with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic,
@@ -97,3 +99,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+
+// REUSE-IgnoreEnd
diff --git a/doc/static.files/SourceCodePro-LICENSE-f554967dca0cf1dd.txt b/doc/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt
similarity index 99%
rename from doc/static.files/SourceCodePro-LICENSE-f554967dca0cf1dd.txt
rename to doc/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt
index 07542572..0d2941e1 100644
--- a/doc/static.files/SourceCodePro-LICENSE-f554967dca0cf1dd.txt
+++ b/doc/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt
@@ -1,3 +1,5 @@
+// REUSE-IgnoreStart
+
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
@@ -91,3 +93,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+
+// REUSE-IgnoreEnd
diff --git a/doc/static.files/SourceSerif4-LICENSE-971e190366a5901b.md b/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md
similarity index 95%
rename from doc/static.files/SourceSerif4-LICENSE-971e190366a5901b.md
rename to doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md
index 5871e1f3..175fa4f4 100644
--- a/doc/static.files/SourceSerif4-LICENSE-971e190366a5901b.md
+++ b/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md
@@ -1,3 +1,6 @@
+
+
+Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
@@ -91,3 +94,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+
+
diff --git a/doc/static.files/ayu-be46fdc453a55015.css b/doc/static.files/ayu-be46fdc453a55015.css
deleted file mode 100644
index 1cad9034..00000000
--- a/doc/static.files/ayu-be46fdc453a55015.css
+++ /dev/null
@@ -1 +0,0 @@
- :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--source-sidebar-background-selected:#14191f;--source-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#source-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.source .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#source-sidebar div.files>a:hover,details.dir-entry summary:hover,#source-sidebar div.files>a:focus,details.dir-entry summary:focus,#source-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);}
\ No newline at end of file
diff --git a/doc/static.files/ayu-fd19013d6ce078bf.css b/doc/static.files/ayu-fd19013d6ce078bf.css
new file mode 100644
index 00000000..ba3aa60e
--- /dev/null
+++ b/doc/static.files/ayu-fd19013d6ce078bf.css
@@ -0,0 +1 @@
+ :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#src-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.src .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus,#src-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);}
\ No newline at end of file
diff --git a/doc/static.files/dark-0a43001d3fc2282c.css b/doc/static.files/dark-0a43001d3fc2282c.css
new file mode 100644
index 00000000..81032b2f
--- /dev/null
+++ b/doc/static.files/dark-0a43001d3fc2282c.css
@@ -0,0 +1 @@
+:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}
\ No newline at end of file
diff --git a/doc/static.files/dark-cf923f49f397b216.css b/doc/static.files/dark-cf923f49f397b216.css
deleted file mode 100644
index 70f9f118..00000000
--- a/doc/static.files/dark-cf923f49f397b216.css
+++ /dev/null
@@ -1 +0,0 @@
-:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--source-sidebar-background-selected:#333;--source-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}
\ No newline at end of file
diff --git a/doc/static.files/light-1596385f77d47ef2.css b/doc/static.files/light-1596385f77d47ef2.css
new file mode 100644
index 00000000..50adde5b
--- /dev/null
+++ b/doc/static.files/light-1596385f77d47ef2.css
@@ -0,0 +1 @@
+:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}
\ No newline at end of file
diff --git a/doc/static.files/light-db279b6232be9c13.css b/doc/static.files/light-db279b6232be9c13.css
deleted file mode 100644
index f0080dbe..00000000
--- a/doc/static.files/light-db279b6232be9c13.css
+++ /dev/null
@@ -1 +0,0 @@
-:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--source-sidebar-background-selected:#fff;--source-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}
\ No newline at end of file
diff --git a/doc/static.files/main-0795b7d26be81095.js b/doc/static.files/main-0795b7d26be81095.js
new file mode 100644
index 00000000..87b43389
--- /dev/null
+++ b/doc/static.files/main-0795b7d26be81095.js
@@ -0,0 +1,12 @@
+"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss(getVar("static-root-path")+getVar("settings-css"));loadScript(getVar("static-root-path")+getVar("settings-js"));preLoadCss(getVar("static-root-path")+getVar("theme-light-css"));preLoadCss(getVar("static-root-path")+getVar("theme-dark-css"));preLoadCss(getVar("static-root-path")+getVar("theme-ayu-css"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="
"+searchState.loadingText+"
";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointermove=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \
+the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \
+ restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \
+ enum, trait, type, macro, \
+ and const.","Search functions by type signature (e.g., vec -> usize or \
+ -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \
+ your request: \"string\"","Look for functions that accept or return \
+ slices and \
+ arrays by writing \
+ square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"
";searchState.showResults(search)},};function getPageId(){if(window.location.hash){const tmp=window.location.hash.replace(/^#/,"");if(tmp.length>0){return tmp}}return null}const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();switchDisplayedElement(null);if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=script?script.getAttribute("data-ignore-extern-crates"):"";for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.indexOf(lib)!==-1){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}});const pageId=getPageId();if(pageId!==null){expandSection(pageId)}}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}let oldSidebarScrollPosition=null;window.rustdocMobileScrollLock=function(){const mobile_topbar=document.querySelector(".mobile-topbar");if(window.innerWidth<=window.RUSTDOC_MOBILE_BREAKPOINT){oldSidebarScrollPosition=window.scrollY;document.body.style.width=`${document.body.offsetWidth}px`;document.body.style.position="fixed";document.body.style.top=`-${oldSidebarScrollPosition}px`;if(mobile_topbar){mobile_topbar.style.top=`${oldSidebarScrollPosition}px`;mobile_topbar.style.position="relative"}}else{oldSidebarScrollPosition=null}};window.rustdocMobileScrollUnlock=function(){const mobile_topbar=document.querySelector(".mobile-topbar");if(oldSidebarScrollPosition!==null){document.body.style.width="";document.body.style.position="";document.body.style.top="";if(mobile_topbar){mobile_topbar.style.top="";mobile_topbar.style.position=""}window.scrollTo(0,oldSidebarScrollPosition);oldSidebarScrollPosition=null}};function showSidebar(){window.hideAllModals(false);window.rustdocMobileScrollLock();const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){window.rustdocMobileScrollUnlock();const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.innerWidth>window.RUSTDOC_MOBILE_BREAKPOINT&&oldSidebarScrollPosition!==null){hideSidebar()}if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else if(e.getAttribute("title")!==undefined){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("title")));wrapper.appendChild(titleContent)}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(event.relatedTarget,e)){hideTooltip(true)}}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}showTooltip(this)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){hideTooltip(true)}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \
- the rustdoc book.";const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
";const infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \
- restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \
- enum, trait, type, macro, \
- and const.","Search functions by type signature (e.g., vec -> usize or \
- -> vec)","Search multiple things at once by splitting your query with comma (e.g., \
- str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \
- your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="