emu: dos exit service.

Just calls process::exit() for now
This commit is contained in:
2021-03-06 23:46:14 -08:00
parent e1a6feb6f5
commit eeaf713470

View File

@@ -1,9 +1,23 @@
use emu::pc::Bus;
use emu::i8088::{i8088, read_hi};
use emu::i8088::{i8088, read_hi, read_lo, segoff_to_addr};
pub fn interrupt(cpu: &mut i8088, _bus: &mut Bus) {
pub fn interrupt(cpu: &mut i8088, bus: &mut Bus) {
let svc = read_hi(cpu.a);
match svc {
0x09 => print_string(cpu, bus),
0x4C => exit(read_lo(cpu.a)),
_ => unimplemented!("dos service: AH={:02X}h\ncpu: {:#X?}", svc, cpu)
}
}
fn print_string(cpu: &i8088, bus: &Bus) {
let addr = segoff_to_addr(cpu.ds, cpu.d);
for byte in bus.ram[addr..].iter().take_while(|byte| **byte as char != '$') {
print!("{}", *byte as char);
}
}
fn exit(code: u8) {
println!("");
std::process::exit(code as i32);
}