Color encode OVERLAPPED sections and set version to 1.0
This commit is contained in:
parent
3e0da33bb8
commit
1aaf59f036
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "psxreadmap"
|
name = "psxreadmap"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
|
@ -413,10 +413,15 @@ impl ConsoleUI {
|
||||||
|
|
||||||
let section_list = List::new(data.section_info.iter().map(
|
let section_list = List::new(data.section_info.iter().map(
|
||||||
|section| {
|
|section| {
|
||||||
ListItem::new(section.name.clone())
|
let mut new_item = ListItem::new(section.name.clone());
|
||||||
|
|
||||||
|
if let Some(color) = section.color_share {
|
||||||
|
new_item = new_item.style(Style::default().fg(color));
|
||||||
|
}
|
||||||
|
new_item
|
||||||
}).collect::<Vec<_>>()).style(Style::default().fg(Color::White))
|
}).collect::<Vec<_>>()).style(Style::default().fg(Color::White))
|
||||||
.block(Self::create_default_border("Section"))
|
.block(Self::create_default_border("Section"))
|
||||||
.highlight_style(Style::default().bg(Color::White));
|
.highlight_style(Style::default().add_modifier(Modifier::REVERSED|Modifier::BOLD));
|
||||||
|
|
||||||
let top_section = Self::get_selected_top_section(section_selection, data);
|
let top_section = Self::get_selected_top_section(section_selection, data);
|
||||||
let mut info_data: &dyn NamedMemoryArea = top_section;
|
let mut info_data: &dyn NamedMemoryArea = top_section;
|
||||||
|
@ -522,6 +527,7 @@ impl ConsoleUIData {
|
||||||
pub const RAM_SIZE:usize = 2*1024*1024;
|
pub const RAM_SIZE:usize = 2*1024*1024;
|
||||||
|
|
||||||
pub fn from(memory_map: MemoryMap) -> Result<Self, Error> {
|
pub fn from(memory_map: MemoryMap) -> Result<Self, Error> {
|
||||||
|
const COLORS:[Color;4] = [Color::Red, Color::Green, Color::Blue, Color::Yellow];
|
||||||
fn get_last_section_end_adr(memory_map: &MemoryMap) -> u64 {
|
fn get_last_section_end_adr(memory_map: &MemoryMap) -> u64 {
|
||||||
if let Some(section) = memory_map.sections.last() {
|
if let Some(section) = memory_map.sections.last() {
|
||||||
return section.adr + section.size as u64;
|
return section.adr + section.size as u64;
|
||||||
|
@ -530,38 +536,65 @@ impl ConsoleUIData {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut new_self = ConsoleUIData::default();
|
let mut new_self = ConsoleUIData::default();
|
||||||
|
let mut color_idx = 0;
|
||||||
let highest_adr = get_last_section_end_adr(&memory_map);
|
let highest_adr = get_last_section_end_adr(&memory_map);
|
||||||
let program_size = (highest_adr - Self::RAM_BASE_ADDRESS) as usize;
|
let program_size = (highest_adr - Self::RAM_BASE_ADDRESS) as usize;
|
||||||
|
|
||||||
new_self.section_info.push(SectionInfo{
|
new_self.section_info.push(SectionInfo{
|
||||||
name: String::from("<overall usage>"),
|
name: String::from("<overall usage>"),
|
||||||
symbols: memory_map.global,
|
symbols: memory_map.global,
|
||||||
start_adr: Self::RAM_BASE_ADDRESS,
|
start_adr: Self::RAM_BASE_ADDRESS,
|
||||||
size: program_size,
|
size: program_size,
|
||||||
max_size: Self::RAM_SIZE
|
max_size: Self::RAM_SIZE,
|
||||||
|
color_share: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
for section in memory_map.sections {
|
for section in memory_map.sections {
|
||||||
new_self.section_info.push(SectionInfo{
|
new_self.section_info.push(SectionInfo{
|
||||||
name: section.name,
|
name: section.name,
|
||||||
symbols: section.symbols,
|
symbols: section.symbols,
|
||||||
start_adr: section.adr,
|
start_adr: section.adr,
|
||||||
size: section.size,
|
size: section.size,
|
||||||
max_size: program_size
|
max_size: program_size,
|
||||||
|
color_share: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut iter = new_self.section_info.iter_mut().peekable();
|
||||||
|
while let Some(section) = iter.next() {
|
||||||
|
if let Some(next_section) = iter.peek_mut() {
|
||||||
|
if section.start_adr == next_section.start_adr {
|
||||||
|
let color = {
|
||||||
|
if let Some(color) = section.color_share {
|
||||||
|
color
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
// next color
|
||||||
|
let color = COLORS[color_idx];
|
||||||
|
|
||||||
|
color_idx = (color_idx + 1)%COLORS.len();
|
||||||
|
color
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
section.color_share = Some(color);
|
||||||
|
next_section.color_share = Some(color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(new_self)
|
Ok(new_self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
struct SectionInfo {
|
struct SectionInfo {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub symbols: Vec<Symbol>,
|
pub symbols: Vec<Symbol>,
|
||||||
pub start_adr: u64,
|
pub start_adr: u64,
|
||||||
pub size: usize,
|
pub size: usize,
|
||||||
pub max_size: usize,
|
pub max_size: usize,
|
||||||
|
pub color_share: Option<Color>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SectionInfo {
|
impl SectionInfo {
|
||||||
|
|
Loading…
Reference in New Issue