asmodeus 0.1.0

Complete assembler and emulator for Asmodeus architecture
pub fn print_program_output(output_buffer: &[u16]) {
    if output_buffer.is_empty() {
        return;
    }
    
    println!();
    
    let title = "OUTPUT";
    let has_multiple_values = output_buffer.len() > 1;
    
    let mut content_lines = Vec::new();
    let mut max_content_len = title.len();
    
    for (i, &value) in output_buffer.iter().enumerate() {
        let line = if has_multiple_values {
            format!("[{}] {} (0x{:04X})", i, value, value)
        } else {
            format!("{} (0x{:04X})", value, value)
        };
        max_content_len = max_content_len.max(line.len());
        content_lines.push(line);
    }
   
    let padding = 4;
    let minimum_content_len = 20;
    let box_width = (max_content_len + padding).max(minimum_content_len);
    
    let create_border = |left: &str, middle: &str, right: &str| -> String {
        format!("{}{}{}", left, middle.repeat(box_width - 2), right)
    };
    
    let center_text = |text: &str, color: &str| -> String {
        let padding = (box_width - 2 - text.len()) / 2;
        let remaining = box_width - 2 - text.len() - padding;
        format!("{}{}{}{}\x1b[0m│",
                " ".repeat(padding),
                color,
                text,
                " ".repeat(remaining))
    };
    
    let format_line = |original_content: &str, colored_content: &str| -> String {
        let content_len = original_content.len();
        let padding = (box_width - 2 - content_len) / 2;
        let remaining = box_width - 2 - content_len - padding;
        format!("{}{}{}\x1b[0m│",
                " ".repeat(padding),
                colored_content,
                " ".repeat(remaining))
    };
    
    println!("{}", create_border("", "", ""));
    println!("{}", center_text(title, "\x1b[1m\x1b[38;5;249m"));
    println!("{}", create_border("", "", ""));
    
    for (i, line) in content_lines.iter().enumerate() {
        let colored_line = if has_multiple_values {
            let value = output_buffer[i];
            format!("\x1b[1m\x1b[38;5;240m[{}]\x1b[0m \x1b[1m\x1b[38;5;117m{} (0x{:04X})\x1b[0m", 
                   i, value, value)
        } else {
            let value = output_buffer[0];
            format!("\x1b[1m\x1b[38;5;117m{} (0x{:04X})\x1b[0m", value, value)
        };
        println!("{}", format_line(line, &colored_line));
    }
    println!("{}", create_border("", "", ""));
}