Index: qemu-0.9.0/hw/ide.c =================================================================== --- qemu-0.9.0.orig/hw/ide.c +++ qemu-0.9.0/hw/ide.c @@ -586,7 +586,9 @@ static void ide_transfer_start(IDEState s->end_transfer_func = end_transfer_func; s->data_ptr = buf; s->data_end = buf + size; - s->status |= DRQ_STAT; + /* don't violate the HSM */ + if (!(s->status & ERR_STAT)) + s->status |= DRQ_STAT; } static void ide_transfer_stop(IDEState *s) @@ -1805,6 +1807,7 @@ static void ide_ioport_write(void *opaqu /* overlapping commands not supported */ if (s->feature & 0x02) goto abort_cmd; + s->status = READY_STAT; s->atapi_dma = s->feature & 1; s->nsector = 1; ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,