asmodeus 0.1.0

Complete assembler and emulator for Asmodeus architecture
use asmachina::MachineW;
use crate::error::AsmodeusError;
use crate::cli::Args;
use crate::debug::{print_machine_state, print_program_output};
use crate::ascii_art::{print_success, print_info};

pub fn run_program(machine_code: &[u16], args: &Args) -> Result<(), AsmodeusError> {
    if args.verbose {
        print_info("Creating Asmachina emulator...");
    }
    
    let mut machine = MachineW::new();
    
    if args.verbose {
        print_info("Loading program into memory...");
    }
    
    machine.load_program(machine_code)?;
    
    if args.verbose {
        print_info("Starting execution...");
        println!();
    }
    
    machine.run().map_err(|e| {
        AsmodeusError::MachineError(e)
    })?;
    
    print_success("Program execution completed successfully.");
    println!();
    print_machine_state(&machine);
    
    let output_buffer = machine.get_output_buffer();
    print_program_output(output_buffer);
    
    Ok(())
}