EXCEPTION SYSTEM (initial version - may change later)
This commit is contained in:
55
src/main.rs
55
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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user