mod translation;
pub mod ttr;
use crate::core::cpu::CpuCore;
use crate::core::memory::AddressBus;
pub use translation::translate;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MmuFaultKind {
ConfigurationError,
IllegalOperation,
AccessLevelViolation,
BusError,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MmuFault {
pub kind: MmuFaultKind,
pub address: u32,
}
pub type MmuResult<T> = Result<T, MmuFault>;
pub fn translate_address<B: AddressBus>(
cpu: &mut CpuCore,
bus: &mut B,
logical: u32,
write: bool,
supervisor: bool,
instruction: bool,
) -> MmuResult<u32> {
translate(cpu, bus, logical, write, supervisor, instruction)
}