summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authortaitep <taitep@taitep.se>2025-12-24 13:56:41 +0100
committertaitep <taitep@taitep.se>2025-12-24 13:56:41 +0100
commit09d90643726d2a86952473e27b6e5d64543e41a0 (patch)
tree52d0ebf404675e1ae359dd77af406131a0623111 /src/main.rs
parent3f789442c0be7d0222209d98dde21efcff7602d0 (diff)
EXCEPTION SYSTEM (initial version - may change later)
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)
}
}