diff options
| author | taitep <taitep@taitep.se> | 2025-12-27 21:33:39 +0100 |
|---|---|---|
| committer | taitep <taitep@taitep.se> | 2025-12-27 21:33:39 +0100 |
| commit | 5c008bfc0446e4631dbab64be61159af04f78dd1 (patch) | |
| tree | 852f7ee883f675b4c67cf424b8f7d17357e7742d /src/basic_uart.rs | |
| parent | b5d36b7969f2759147d58a80e0e5b62c215d2998 (diff) | |
Add exception values (what will go in mtval/stval)
Diffstat (limited to 'src/basic_uart.rs')
| -rw-r--r-- | src/basic_uart.rs | 16 |
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, + }), } } } |
