Sync memory between emulator thread and UI
This commit is contained in:
@@ -359,100 +359,3 @@ impl CharDataRenderer {
|
||||
utils::parse_palette(palette, brts)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
struct CharDataLoader {
|
||||
chardata: MemoryView,
|
||||
brightness: MemoryView,
|
||||
palettes: MemoryView,
|
||||
}
|
||||
|
||||
impl CharDataLoader {
|
||||
pub fn new(sim_id: SimId, memory: &mut MemoryMonitor) -> Self {
|
||||
Self {
|
||||
chardata: memory.view(sim_id, 0x00078000, 0x8000),
|
||||
brightness: memory.view(sim_id, 0x0005f824, 8),
|
||||
palettes: memory.view(sim_id, 0x0005f860, 16),
|
||||
}
|
||||
}
|
||||
|
||||
fn update_character(&self, image: &mut VramImage, palette: VramPalette, index: usize) {
|
||||
if index >= 2048 {
|
||||
return;
|
||||
}
|
||||
let palette = self.load_palette(palette);
|
||||
let chardata = self.chardata.borrow();
|
||||
let character = chardata.range::<u16>(index * 8, 8);
|
||||
for (row, pixels) in character.iter().enumerate() {
|
||||
for col in 0..8 {
|
||||
let char = (pixels >> (col * 2)) & 0x03;
|
||||
image.write((col, row), palette[char as usize]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn update_character_data(&self, image: &mut VramImage, palette: VramPalette) {
|
||||
let palette = self.load_palette(palette);
|
||||
let chardata = self.chardata.borrow();
|
||||
for (row, pixels) in chardata.range::<u16>(0, 8 * 2048).iter().enumerate() {
|
||||
let char_index = row / 8;
|
||||
let row_index = row % 8;
|
||||
let x = (char_index % 16) * 8;
|
||||
let y = (char_index / 16) * 8 + row_index;
|
||||
for col in 0..8 {
|
||||
let char = (pixels >> (col * 2)) & 0x03;
|
||||
image.write((x + col, y), palette[char as usize]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn load_palette(&self, palette: VramPalette) -> [u8; 4] {
|
||||
let Some(offset) = palette.offset() else {
|
||||
return utils::GENERIC_PALETTE;
|
||||
};
|
||||
let palette = self.palettes.borrow().read(offset);
|
||||
let brightnesses = self.brightness.borrow();
|
||||
let brts = brightnesses.range(0, 8);
|
||||
utils::parse_palette(palette, brts)
|
||||
}
|
||||
}
|
||||
|
||||
impl VramImageLoader for CharDataLoader {
|
||||
type Resource = CharDataResource;
|
||||
|
||||
fn id(&self) -> &str {
|
||||
concat!(module_path!(), "::CharDataLoader")
|
||||
}
|
||||
|
||||
fn add(&self, resource: &Self::Resource) -> Option<VramImage> {
|
||||
match resource {
|
||||
CharDataResource::Character { palette, index } => {
|
||||
let mut image = VramImage::new(8, 8);
|
||||
self.update_character(&mut image, *palette, *index);
|
||||
Some(image)
|
||||
}
|
||||
CharDataResource::CharacterData { palette } => {
|
||||
let mut image = VramImage::new(8 * 16, 8 * 128);
|
||||
self.update_character_data(&mut image, *palette);
|
||||
Some(image)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn update<'a>(
|
||||
&'a self,
|
||||
resources: impl Iterator<Item = (&'a Self::Resource, &'a mut VramImage)>,
|
||||
) {
|
||||
for (resource, image) in resources {
|
||||
match resource {
|
||||
CharDataResource::Character { palette, index } => {
|
||||
self.update_character(image, *palette, *index)
|
||||
}
|
||||
CharDataResource::CharacterData { palette } => {
|
||||
self.update_character_data(image, *palette)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user