summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs55
1 files changed, 18 insertions, 37 deletions
diff --git a/src/main.rs b/src/main.rs
index 90fffd3..615f3bf 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -9,7 +9,8 @@ use std::{env, sync::Arc, time::Duration};
use trve::{
consts::{Byte, DWord, HWord, Word},
core::Core,
- mem::{DeviceEntry, MemAccessFault, MemConfig, MemDeviceInterface, PageNum, Ram},
+ exceptions::ExceptionType,
+ mem::{DeviceEntry, MemConfig, MemDeviceInterface, PageNum, Ram},
};
use anyhow::{Result, bail};
@@ -63,12 +64,7 @@ mod basic_uart;
struct DbgOut;
impl MemDeviceInterface for DbgOut {
- fn write_dword(
- &self,
- page: PageNum,
- offset: u16,
- value: DWord,
- ) -> Result<(), trve::mem::MemAccessFault> {
+ fn write_dword(&self, page: PageNum, offset: u16, value: DWord) -> Result<(), ExceptionType> {
eprintln!(
"Wrote DWord {value:016x} to Debug-Out page {page}, offset {offset} (byte {})",
offset * 8
@@ -76,12 +72,7 @@ impl MemDeviceInterface for DbgOut {
Ok(())
}
- fn write_word(
- &self,
- page: PageNum,
- offset: u16,
- value: Word,
- ) -> Result<(), trve::mem::MemAccessFault> {
+ fn write_word(&self, page: PageNum, offset: u16, value: Word) -> Result<(), ExceptionType> {
eprintln!(
"Wrote Word {value:08x} to Debug-Out page {page}, offset {offset} (byte {})",
offset * 4
@@ -89,12 +80,7 @@ impl MemDeviceInterface for DbgOut {
Ok(())
}
- fn write_hword(
- &self,
- page: PageNum,
- offset: u16,
- value: HWord,
- ) -> Result<(), trve::mem::MemAccessFault> {
+ fn write_hword(&self, page: PageNum, offset: u16, value: HWord) -> Result<(), ExceptionType> {
eprintln!(
"Wrote HWord {value:04x} to Debug-Out page {page}, offset {offset} (byte {})",
offset * 2
@@ -102,45 +88,40 @@ impl MemDeviceInterface for DbgOut {
Ok(())
}
- fn write_byte(
- &self,
- page: PageNum,
- offset: u16,
- value: Byte,
- ) -> Result<(), trve::mem::MemAccessFault> {
+ fn write_byte(&self, page: PageNum, offset: u16, value: Byte) -> Result<(), ExceptionType> {
eprintln!("Wrote Byte {value:02x} to Debug-Out page {page}, offset {offset}");
Ok(())
}
- fn read_dword(&self, _page: PageNum, _offset: u16) -> Result<DWord, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ fn read_dword(&self, _page: PageNum, _offset: u16) -> Result<DWord, ExceptionType> {
+ Err(ExceptionType::LoadAccessFault)
}
- fn read_word(&self, _page: PageNum, _offset: u16) -> Result<Word, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ fn read_word(&self, _page: PageNum, _offset: u16) -> Result<Word, ExceptionType> {
+ Err(ExceptionType::LoadAccessFault)
}
- fn read_hword(&self, _page: PageNum, _offset: u16) -> Result<HWord, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ fn read_hword(&self, _page: PageNum, _offset: u16) -> Result<HWord, ExceptionType> {
+ Err(ExceptionType::LoadAccessFault)
}
- fn read_byte(&self, _page: PageNum, _offset: u16) -> Result<Byte, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ fn read_byte(&self, _page: PageNum, _offset: u16) -> Result<Byte, ExceptionType> {
+ Err(ExceptionType::LoadAccessFault)
}
fn get_atomic_word(
&self,
_page: PageNum,
_offset: u16,
- ) -> Result<&std::sync::atomic::AtomicU32, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ ) -> Result<&std::sync::atomic::AtomicU32, ExceptionType> {
+ Err(ExceptionType::StoreAmoAccessFault)
}
fn get_atomic_dword(
&self,
_page: PageNum,
_offset: u16,
- ) -> Result<&std::sync::atomic::AtomicU64, trve::mem::MemAccessFault> {
- Err(MemAccessFault)
+ ) -> Result<&std::sync::atomic::AtomicU64, ExceptionType> {
+ Err(ExceptionType::StoreAmoAccessFault)
}
}