1use intel8080::cpu::CPU;
2use std::{env, error::Error, process};
3
4fn main() {
5 if let Err(e) = load_execute() {
6 println!("{}", e);
7 process::exit(1);
8 }
9}
10
11fn load_execute() -> Result<(), Box<dyn Error>> {
12 let a: Vec<String> = env::args().collect();
13 let mut c = CPU::new(0xFFFF);
14 c.bus.load_bin(&a[1], 0x100)?;
16
17 c.bus.write_word(0x0005, 0xc9);
19
20 c.pc = 0x0100;
22
23 c.bus.write_word(0x0006, 0xFF00);
26
27 c.sp = 0xFF00;
30
31 loop {
32 c.execute();
33 if c.pc == 0x0005 {
34 bdos_call(&c)
35 }
36 if c.pc == 0x0000 {
37 break;
38 } }
40 Ok(())
41}
42
43fn bdos_call(c: &CPU) {
44 if c.reg.c == 0x09 {
45 let mut a = c.reg.get_de();
46 loop {
47 let c = c.bus.read_byte(a);
48 if c as char == '$' {
49 break;
50 } else {
51 a += 1;
52 }
53 print!("{}", c as char);
54 }
55 }
56 if c.reg.c == 0x02 {
57 print!("{}", c.reg.e as char);
58 }
59}