emu: dos exit service.
Just calls process::exit() for now
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user