1use crate::video::palette::PcePalette; 2use crate::video::vce::Vce; 3use crate::video::vdc::Vdc; 4use jgenesis_common::frontend::Color; 5 6impl Vdc { 7 pub fn dump_vram( 8 &self, 9 palette: u16, 10 out: &mut [[Color; 64]], 11 vce: &Vce, 12 pce_palette: &PcePalette, 13 ) { 14 for (tile_number, out_tile) in out[..2048].iter_mut().enumerate() { 15 let tile_addr = 16 * tile_number; 16 let tile_data = &self.vram[tile_addr..tile_addr + 16]; 17 18 for tile_row in 0..8 { 19 let cg0 = tile_data[tile_row]; 20 let cg1 = tile_data[tile_row + 8]; 21 22 for tile_col in 0..8 { 23 let shift = 7 - tile_col; 24 let color_idx = ((cg0 >> shift) & 1) 25 | (((cg0 >> (shift + 8)) & 1) << 1) 26 | (((cg1 >> shift) & 1) << 2) 27 | (((cg1 >> (shift + 8)) & 1) << 3); 28 29 let vce_color = vce.read_color((palette << 4) | color_idx); 30 let (r, g, b) = pce_palette[(vce_color & 0x1FF) as usize]; 31 out_tile[8 * tile_row + tile_col] = Color::rgb(r, g, b); 32 } 33 } 34 } 35 } 36}