summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs9
-rw-r--r--src/mem.rs36
-rw-r--r--src/state.rs8
3 files changed, 34 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs
index 48ce998..bbf89b6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,12 +3,12 @@ pub mod mem;
pub mod state;
use crate::core::*;
+use crate::mem::Memory;
+use crate::state::CpuState;
use std::collections::HashSet;
use std::io;
use std::io::Write;
use std::process::exit;
-use crate::mem::Memory;
-use crate::state::CpuState;
const MEMORY_SIZE: usize = 64 * 1024 * 1024;
const REGISTER_NAME_WIDTH: u32 = 0b11111;
@@ -201,8 +201,7 @@ fn handle_instruction(state: &mut CpuState) {
// ecall
eprintln!(
"TRAP! syscall {} with gp state {:?}",
- state.registers[17],
- pc
+ state.registers[17], pc
);
} // ecall (ebreak not implemented)
0b0101111 => {
@@ -321,4 +320,4 @@ fn handle_instruction(state: &mut CpuState) {
}
state.pc += 4;
-} \ No newline at end of file
+}
diff --git a/src/mem.rs b/src/mem.rs
index 297c54c..8d0e9dc 100644
--- a/src/mem.rs
+++ b/src/mem.rs
@@ -19,7 +19,7 @@ impl Memory {
virtual_addr: usize::MAX,
real_addr: i * PAGE_SIZE,
permission: 0,
- allocated: 0
+ allocated: 0,
}
}
Memory {
@@ -43,7 +43,10 @@ impl Memory {
pub fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option<usize> {
for (i, page) in self.pages.iter().enumerate() {
- if page.virtual_addr == virtual_addr && permission >= page.permission && page.allocated == 1 {
+ if page.virtual_addr == virtual_addr
+ && permission >= page.permission
+ && page.allocated == 1
+ {
return Some(i);
}
}
@@ -52,7 +55,10 @@ impl Memory {
pub fn ro_lookup(&self, virtual_addr: usize, permission: usize) -> Option<usize> {
for (i, page) in self.pages.iter().enumerate() {
- if page.virtual_addr == virtual_addr && page.permission == permission && page.allocated == 1 {
+ if page.virtual_addr == virtual_addr
+ && page.permission == permission
+ && page.allocated == 1
+ {
return Some(i);
}
}
@@ -81,10 +87,15 @@ impl Memory {
Err(())
}
}
-
- pub fn read_multiple_bytes(&self, address: usize, size: usize, permission: usize) -> Result<Box<[u8]>, ()> {
+
+ pub fn read_multiple_bytes(
+ &self,
+ address: usize,
+ size: usize,
+ permission: usize,
+ ) -> Result<Box<[u8]>, ()> {
let mut ret = [];
- for addr in address..address+size {
+ for addr in address..address + size {
if let Ok(byte) = self.read(addr, permission) {
ret[addr - address] = byte;
} else {
@@ -93,13 +104,18 @@ impl Memory {
}
Ok(Box::new(ret))
}
-
- pub fn write_multiple_bytes(&mut self, address: usize, bytes: &[u8], permission: usize) -> Result<(), ()> {
+
+ pub fn write_multiple_bytes(
+ &mut self,
+ address: usize,
+ bytes: &[u8],
+ permission: usize,
+ ) -> Result<(), ()> {
for addr in address..address + bytes.len() {
if let Err(_) = self.write(addr, permission, bytes[addr - address]) {
return Err(());
- }
+ }
}
Ok(())
}
-} \ No newline at end of file
+}
diff --git a/src/state.rs b/src/state.rs
index adf6a5b..8a6c332 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -1,12 +1,12 @@
-use std::collections::HashSet;
use crate::mem::Memory;
+use std::collections::HashSet;
pub struct CpuState {
pub memory: Memory,
pub registers: [u32; 32],
pub f_registers: [f32; 32],
pub pc: u32,
- pub reservations: HashSet<usize>
+ pub reservations: HashSet<usize>,
}
impl CpuState {
@@ -16,7 +16,7 @@ impl CpuState {
registers: [0u32; 32],
f_registers: [0f32; 32],
pc: 0,
- reservations: HashSet::new()
+ reservations: HashSet::new(),
}
}
@@ -30,4 +30,4 @@ impl CpuState {
self.reservations.insert(*index);
}
}
-} \ No newline at end of file
+}