diff options
| author | taitep <taitep@taitep.se> | 2025-12-24 13:56:41 +0100 |
|---|---|---|
| committer | taitep <taitep@taitep.se> | 2025-12-24 13:56:41 +0100 |
| commit | 09d90643726d2a86952473e27b6e5d64543e41a0 (patch) | |
| tree | 52d0ebf404675e1ae359dd77af406131a0623111 /src/main.rs | |
| parent | 3f789442c0be7d0222209d98dde21efcff7602d0 (diff) | |
EXCEPTION SYSTEM (initial version - may change later)
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 55 |
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) } } |
