From a68d72621cc314bfdfce7f1df286c2ae8ff80bfa Mon Sep 17 00:00:00 2001 From: Mwa Date: Fri, 6 Mar 2026 22:12:38 +0100 Subject: [PATCH] added 8 to scancode to match tkinter --- Cargo.lock | 60 -------------------------------------------------- Cargo.toml | 2 +- sim_rs.tar.xz | Bin 3796 -> 3872 bytes src/cpu.rs | 11 ++++++--- src/main.rs | 3 ++- 5 files changed, 11 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 266ce2f..a53f851 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,22 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "ab_glyph" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" - [[package]] name = "ahash" version = "0.8.12" @@ -1107,15 +1091,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "owned_ttf_parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" -dependencies = [ - "ttf-parser", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -1378,12 +1353,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -1396,9 +1365,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ - "ab_glyph", "log", - "memmap2", "smithay-client-toolkit", "tiny-skia", ] @@ -1645,12 +1612,6 @@ version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - [[package]] name = "ultraviolet" version = "0.9.2" @@ -1777,7 +1738,6 @@ dependencies = [ "cc", "downcast-rs", "rustix 1.1.4", - "scoped-tls", "smallvec", "wayland-sys", ] @@ -1828,19 +1788,6 @@ dependencies = [ "wayland-scanner", ] -[[package]] -name = "wayland-protocols-plasma" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" -dependencies = [ - "bitflags 2.11.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - [[package]] name = "wayland-protocols-wlr" version = "0.3.11" @@ -1871,9 +1818,6 @@ version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" dependencies = [ - "dlib", - "log", - "once_cell", "pkg-config", ] @@ -2273,10 +2217,6 @@ dependencies = [ "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", "web-sys", "web-time", "windows-sys 0.52.0", diff --git a/Cargo.toml b/Cargo.toml index d50881a..71cd995 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,5 +5,5 @@ edition = "2024" [dependencies] pixels = "0.15.0" -winit = "0.30.13" +winit = { version = "0.30.13", default-features = false, features = ["x11", "x11-dl", "x11rb", "ahash", "bytemuck", "memmap2", "rwh_06", "sctk", "sctk-adwaita"] } winit_input_helper = "0.17.0" diff --git a/sim_rs.tar.xz b/sim_rs.tar.xz index 1a6b2d466eab66d6ff9a9f3283b0a3159378a7bf..1a541dd863c874d68b3cb6c4b2d98c78b3768a72 100644 GIT binary patch literal 3872 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 K000001X)_LqENg5 diff --git a/src/cpu.rs b/src/cpu.rs index 1304388..df556e3 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -290,11 +290,16 @@ impl<'a, 'b> Computer<'a, 'b> { } self.pc = (addr + self.pc as u32) as usize; } - Instruction::Call(addr) => { + Instruction::Call(mut addr) => { self.sp -= 1; self.ram[self.sp] = ((self.pc << 2) + 4) as u32; - self.pc += addr as usize; - self.pc &= 0x3FFFFFFF; //wrapping on 30 bit pc + + if addr & (1 << 28) != 0 { + addr += 7 << 29; + } else if unlikely(addr == 0) { + sleep(Duration::from_hours(1)); + } + self.pc = (addr + self.pc as u32) as usize; } Instruction::Ret() => { self.pc = (self.ram[self.sp] >> 2) as usize; diff --git a/src/main.rs b/src/main.rs index 996be20..7d0fbba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ use pixels::{Error, Pixels, SurfaceTexture}; use winit::dpi::LogicalSize; use winit::event::{Event, WindowEvent}; use winit::event_loop::EventLoop; +use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; use winit::platform::scancode::PhysicalKeyExtScancode; use winit::window::Window; use winit_input_helper::WinitInputHelper; @@ -89,7 +90,7 @@ fn main() -> Result<(), Error> { match event.state { winit::event::ElementState::Pressed => { if let Some(val) = event.physical_key.to_scancode() { - kbref.store(val, std::sync::atomic::Ordering::Relaxed); + kbref.store(val + 8, std::sync::atomic::Ordering::Relaxed); } } winit::event::ElementState::Released => {