pr 00.1 move syscall to abi

This commit is contained in:
bQUARKz 2026-02-03 19:17:46 +00:00
parent 90095bb21e
commit 567ab21709
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
7 changed files with 10 additions and 13 deletions

View File

@ -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 {

View File

@ -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;

View File

@ -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};

View File

@ -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<T: HardwareBridge> HostContextProvider for T {
#[inline]
fn make_ctx<'a>(&'a mut self) -> HostContext<'a> {
fn make_ctx(&'_ mut self) -> HostContext {
HostContext::new(Some(self))
}
}

View File

@ -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)

View File

@ -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 {