if $vga eq 'terminal';
print "warning: qemu doesn't support jitter\n"
if defined $jitter;
- my (@cmd) = ('qemu');
+ my (@cmd) = ('qemu-system-i386');
+ push (@cmd, '-device', 'isa-debug-exit');
+
push (@cmd, '-hda', $disks[0]) if defined $disks[0];
push (@cmd, '-hdb', $disks[1]) if defined $disks[1];
push (@cmd, '-hdc', $disks[2]) if defined $disks[2];
# Read and print out pipe data.
my ($len) = length ($buf);
- waitpid ($pid, 0), last
- if sysread ($in, $buf, 4096, $len) <= 0;
+ my ($n_read) = sysread ($in, $buf, 4096, $len);
+ waitpid ($pid, 0), last if !defined ($n_read) || $n_read <= 0;
print substr ($buf, $len);
# Remove full lines from $buf and scan them for keywords.
exit 0;
}
- return $?;
+ # Kind of a gross hack, because qemu's isa-debug-exit device
+ # only allows odd-numbered exit values, so we can't exit
+ # cleanly with 0. We use exit status 0x63 as an alternate
+ # "clean" exit status.
+ return ($? != 0x6300) && $?;
}
}