From 8088cb8b2003b7768e4443f5921dc0d8a8041aeb Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:21:39 +0100 Subject: [PATCH 1/3] Fix missing ret in global_asm block This caused ps2d to get stuck in a crash loop when it's vmmouse support is enabled. --- ps2d/src/vm.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ps2d/src/vm.rs b/ps2d/src/vm.rs index c04185b480..90c8cba603 100644 --- a/ps2d/src/vm.rs +++ b/ps2d/src/vm.rs @@ -50,6 +50,8 @@ cmd_inner: mov DWORD PTR [rdi + 0x0C], edx mov DWORD PTR [rdi + 0x10], esi mov DWORD PTR [rdi + 0x14], r8d + + ret ", MAGIC = const MAGIC, PORT = const PORT, From f970a9c5712cfad7c34a7b06e2c0e9c3b078107b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:22:14 +0100 Subject: [PATCH 2/3] Check for vmware backdoor support before trying to enable vmmouse --- ps2d/src/vm.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ps2d/src/vm.rs b/ps2d/src/vm.rs index 90c8cba603..9f341a2598 100644 --- a/ps2d/src/vm.rs +++ b/ps2d/src/vm.rs @@ -9,6 +9,7 @@ use core::arch::global_asm; const MAGIC: u32 = 0x564D5868; const PORT: u16 = 0x5658; +pub const GETVERSION: u32 = 10; pub const ABSPOINTER_DATA: u32 = 39; pub const ABSPOINTER_STATUS: u32 = 40; pub const ABSPOINTER_COMMAND: u32 = 41; @@ -82,6 +83,12 @@ pub fn enable(relative: bool) -> bool { eprintln!("ps2d: Enable vmmouse"); unsafe { + let (eax, ebx, _, _, _, _) = cmd(GETVERSION, 0); + if ebx != MAGIC || eax == 0xFFFFFFFF { + eprintln!("ps2d: No vmmouse support"); + return false; + } + let _ = cmd(ABSPOINTER_COMMAND, CMD_ENABLE); let (status, _, _, _, _, _) = cmd(ABSPOINTER_STATUS, 0); From 7d4dd990e09bd4d1ddb06376b367cddf522e7630 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Wed, 10 Jan 2024 20:23:04 +0100 Subject: [PATCH 3/3] Try to enable vmmouse by default This doesn't enable absolute mouse events yet as orbitral doesn't handle them correctly. --- ps2d/src/state.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ps2d/src/state.rs b/ps2d/src/state.rs index c23462a7fe..b556897645 100644 --- a/ps2d/src/state.rs +++ b/ps2d/src/state.rs @@ -49,7 +49,7 @@ impl char> Ps2d { let extra_packet = ps2.init().expect("ps2d: failed to initialize"); let vmmouse_relative = true; - let vmmouse = false; //vm::enable(vmmouse_relative); + let vmmouse = vm::enable(vmmouse_relative); let mut ps2d = Ps2d { ps2,