From 5c008bfc0446e4631dbab64be61159af04f78dd1 Mon Sep 17 00:00:00 2001 From: taitep Date: Sat, 27 Dec 2025 21:33:39 +0100 Subject: Add exception values (what will go in mtval/stval) --- src/basic_uart.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/basic_uart.rs') diff --git a/src/basic_uart.rs b/src/basic_uart.rs index d7a11be..e5b91f3 100644 --- a/src/basic_uart.rs +++ b/src/basic_uart.rs @@ -14,7 +14,7 @@ use std::time::Duration; use nix::fcntl::fcntl; use nix::fcntl::{FcntlArg, OFlag}; use trve::consts::{Addr, Byte}; -use trve::exceptions::MemoryExceptionType; +use trve::exceptions::{MemoryException, MemoryExceptionType}; use trve::mem::MemDeviceInterface; /// byte 0: rx/tx @@ -78,20 +78,26 @@ impl BasicUart { } impl MemDeviceInterface for BasicUart { - fn write_byte(&self, addr: Addr, value: Byte) -> Result<(), MemoryExceptionType> { + fn write_byte(&self, addr: Addr, value: Byte) -> Result<(), MemoryException> { match addr { 0 => { self.write(value); Ok(()) } - _ => Err(MemoryExceptionType::AccessFault), + _ => Err(MemoryException { + type_: MemoryExceptionType::AccessFault, + addr, + }), } } - fn read_byte(&self, addr: Addr) -> Result { + fn read_byte(&self, addr: Addr) -> Result { match addr { 0 => Ok(self.read()), 1 => Ok(1 | (self.can_read() as u8) << 1), - _ => Err(MemoryExceptionType::AccessFault), + _ => Err(MemoryException { + type_: MemoryExceptionType::AccessFault, + addr, + }), } } } -- cgit v1.2.3