1use crate::{memory::write_bytes, send_sync_ptr::SendSyncPtr};
2use rustc_hash::FxHashMap;
3
4pub struct Image {
5 entry: u32,
6 segments: FxHashMap<u32, Vec<u8>>,
7}
8
9impl Image {
10 pub fn new<'a, T>(entry: u32, iter: T) -> Self
11 where
12 T: IntoIterator<Item = (u32, &'a [u8])>,
13 {
14 Self {
15 entry,
16 segments: iter
17 .into_iter()
18 .map(|(addr, data)| (addr, data.to_vec()))
19 .collect(),
20 }
21 }
22
23 pub fn load(&mut self, pc: &mut u32, ptr: SendSyncPtr<u8>) {
24 *pc = self.entry;
25 for (addr, data) in self.segments.iter() {
26 unsafe {
27 write_bytes(ptr.as_ptr(), *addr, data);
28 }
29 }
30 }
31}