diff --git a/crates/prometeu-abi/src/lib.rs b/crates/prometeu-abi/src/lib.rs index 12c506b2..1fe2775e 100644 --- a/crates/prometeu-abi/src/lib.rs +++ b/crates/prometeu-abi/src/lib.rs @@ -4,6 +4,7 @@ pub mod model; pub mod log; pub mod telemetry; pub mod debugger_protocol; +pub mod syscalls; // Tipos da VM que fazem parte do contrato (ex.: inspeção de pilha pelo debugger) pub mod virtual_machine { diff --git a/crates/prometeu-core/src/hardware/syscalls.rs b/crates/prometeu-abi/src/syscalls.rs similarity index 100% rename from crates/prometeu-core/src/hardware/syscalls.rs rename to crates/prometeu-abi/src/syscalls.rs diff --git a/crates/prometeu-core/src/hardware/mod.rs b/crates/prometeu-core/src/hardware/mod.rs index f27a8bef..fe54217c 100644 --- a/crates/prometeu-core/src/hardware/mod.rs +++ b/crates/prometeu-core/src/hardware/mod.rs @@ -6,7 +6,6 @@ mod input_signal; mod audio; mod memory_banks; pub mod hardware; -pub mod syscalls; pub use crate::model::HandleId; pub use asset::AssetManager; @@ -16,19 +15,18 @@ pub use gfx::Gfx; pub use input_signal::InputSignals; pub use memory_banks::MemoryBanks; pub use pad::Pad; -pub use syscalls::Syscall; pub use touch::Touch; pub trait HardwareBridge { fn gfx(&self) -> &Gfx; fn gfx_mut(&mut self) -> &mut Gfx; - + fn audio(&self) -> &Audio; fn audio_mut(&mut self) -> &mut Audio; - + fn pad(&self) -> &Pad; fn pad_mut(&mut self) -> &mut Pad; - + fn touch(&self) -> &Touch; fn touch_mut(&mut self) -> &mut Touch; diff --git a/crates/prometeu-core/src/prometeu_os/prometeu_os.rs b/crates/prometeu-core/src/prometeu_os/prometeu_os.rs index 7fb6ec2d..73ae29a6 100644 --- a/crates/prometeu-core/src/prometeu_os/prometeu_os.rs +++ b/crates/prometeu-core/src/prometeu_os/prometeu_os.rs @@ -1,5 +1,5 @@ use crate::fs::{FsBackend, FsState, VirtualFS}; -use crate::hardware::syscalls::Syscall; +use crate::abi::syscalls::Syscall; use crate::hardware::{HardwareBridge, InputSignals}; use crate::log::{LogLevel, LogService, LogSource}; use crate::model::{BankType, Cartridge, Color}; diff --git a/crates/prometeu-core/src/virtual_machine/host_context.rs b/crates/prometeu-core/src/virtual_machine/host_context.rs index 7d6d288b..e9e3342c 100644 --- a/crates/prometeu-core/src/virtual_machine/host_context.rs +++ b/crates/prometeu-core/src/virtual_machine/host_context.rs @@ -20,12 +20,12 @@ impl<'a> HostContext<'a> { } pub trait HostContextProvider { - fn make_ctx<'a>(&'a mut self) -> HostContext<'a>; + fn make_ctx(&mut self) -> HostContext; } impl HostContextProvider for T { #[inline] - fn make_ctx<'a>(&'a mut self) -> HostContext<'a> { + fn make_ctx(&'_ mut self) -> HostContext { HostContext::new(Some(self)) } } diff --git a/crates/prometeu-core/src/virtual_machine/verifier.rs b/crates/prometeu-core/src/virtual_machine/verifier.rs index 9b038182..5cc3bf60 100644 --- a/crates/prometeu-core/src/virtual_machine/verifier.rs +++ b/crates/prometeu-core/src/virtual_machine/verifier.rs @@ -2,6 +2,7 @@ use crate::virtual_machine::bytecode::decoder::{decode_at, DecodeError}; use prometeu_bytecode::opcode::OpCode; use prometeu_bytecode::FunctionMeta; use std::collections::{HashMap, HashSet, VecDeque}; +use crate::abi::syscalls::Syscall; #[derive(Debug, Clone, PartialEq, Eq)] pub enum VerifierError { @@ -96,7 +97,7 @@ impl Verifier { } OpCode::Syscall => { let id = u32::from_le_bytes(instr.imm[0..4].try_into().unwrap()); - let syscall = crate::hardware::syscalls::Syscall::from_u32(id).ok_or_else(|| { + let syscall = Syscall::from_u32(id).ok_or_else(|| { VerifierError::InvalidSyscallId { pc: func_start + pc, id } })?; (syscall.args_count() as u16, syscall.results_count() as u16) diff --git a/crates/prometeu-core/src/virtual_machine/virtual_machine.rs b/crates/prometeu-core/src/virtual_machine/virtual_machine.rs index c0d747b0..27378c94 100644 --- a/crates/prometeu-core/src/virtual_machine/virtual_machine.rs +++ b/crates/prometeu-core/src/virtual_machine/virtual_machine.rs @@ -1,4 +1,3 @@ -use crate::hardware::HardwareBridge; use crate::virtual_machine::call_frame::CallFrame; use crate::virtual_machine::scope_frame::ScopeFrame; use crate::virtual_machine::Value; @@ -830,7 +829,7 @@ impl VirtualMachine { let id = u32::from_le_bytes(instr.imm[0..4].try_into().unwrap()); - let syscall = crate::hardware::syscalls::Syscall::from_u32(id).ok_or_else(|| { + let syscall = crate::abi::syscalls::Syscall::from_u32(id).ok_or_else(|| { self.trap(prometeu_bytecode::abi::TRAP_INVALID_SYSCALL, OpCode::Syscall as u16, format!("Unknown syscall: 0x{:08X}", id), pc_at_syscall) })?; @@ -932,11 +931,9 @@ mod tests { }]); vm } - use crate::hardware::HardwareBridge; use crate::virtual_machine::{expect_int, HostReturn, Value, VmFault}; use prometeu_bytecode::abi::SourceSpan; use prometeu_bytecode::FunctionMeta; - use url::Host; struct MockNative; impl NativeInterface for MockNative {