summaryrefslogtreecommitdiff
path: root/src/basic_uart.rs
diff options
context:
space:
mode:
authortaitep <taitep@taitep.se>2025-12-27 21:33:39 +0100
committertaitep <taitep@taitep.se>2025-12-27 21:33:39 +0100
commit5c008bfc0446e4631dbab64be61159af04f78dd1 (patch)
tree852f7ee883f675b4c67cf424b8f7d17357e7742d /src/basic_uart.rs
parentb5d36b7969f2759147d58a80e0e5b62c215d2998 (diff)
Add exception values (what will go in mtval/stval)
Diffstat (limited to 'src/basic_uart.rs')
-rw-r--r--src/basic_uart.rs16
1 files changed, 11 insertions, 5 deletions
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<Byte, MemoryExceptionType> {
+ fn read_byte(&self, addr: Addr) -> Result<Byte, MemoryException> {
match addr {
0 => Ok(self.read()),
1 => Ok(1 | (self.can_read() as u8) << 1),
- _ => Err(MemoryExceptionType::AccessFault),
+ _ => Err(MemoryException {
+ type_: MemoryExceptionType::AccessFault,
+ addr,
+ }),
}
}
}