use intel8080::cpu::CPU;
use std::{env, error::Error, process};
fn main() {
if let Err(e) = load_execute() {
println!("{}", e);
process::exit(1);
}
}
fn load_execute() -> Result<(), Box<dyn Error>> {
let a: Vec<String> = env::args().collect();
let mut c = CPU::new(0xFFFF);
c.bus.load_bin(&a[1], 0x100)?;
c.bus.write_word(0x0005, 0xc9);
c.pc = 0x0100;
c.bus.write_word(0x0006, 0xFF00);
c.sp = 0xFF00;
loop {
c.execute();
if c.pc == 0x0005 {
bdos_call(&c)
}
if c.pc == 0x0000 {
break;
} }
Ok(())
}
fn bdos_call(c: &CPU) {
if c.reg.c == 0x09 {
let mut a = c.reg.get_de();
loop {
let c = c.bus.read_byte(a);
if c as char == '$' {
break;
} else {
a += 1;
}
print!("{}", c as char);
}
}
if c.reg.c == 0x02 {
print!("{}", c.reg.e as char);
}
}