pr 00.1 move syscall to abi
This commit is contained in:
parent
90095bb21e
commit
567ab21709
@ -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 {
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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};
|
||||
|
||||
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user