We have to set up 'media_changed' after guest start so floppy driver could detect that there is no media in drive. For this purpose we call 'fdctrl_change_cb' instead of 'fd_revalidate' in 'fdctrl_connect_drives'. 'fd_revalidate' is called inside 'fdctrl_change_cb'.
In 'fdctrl_handle_seek' we always set current track because we don't care if there is media inserted or not. Signed-off-by: Pavel Hrdina <phrd...@redhat.com> --- hw/fdc.c | 8 ++------ 1 files changed, 2 insertions(+), 6 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index cb4cd25..337b35a 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -1617,11 +1617,7 @@ static void fdctrl_handle_seek(FDCtrl *fdctrl, int direction) /* The seek command just sends step pulses to the drive and doesn't care if * there is a medium inserted of if it's banging the head against the drive. */ - if (fdctrl->fifo[2] > cur_drv->max_track) { - cur_drv->track = cur_drv->max_track; - } else { - cur_drv->track = fdctrl->fifo[2]; - } + cur_drv->track = fdctrl->fifo[2]; /* Raise Interrupt */ fdctrl_raise_irq(fdctrl, FD_SR0_SEEK); } @@ -1878,7 +1874,7 @@ static int fdctrl_connect_drives(FDCtrl *fdctrl) } fd_init(drive); - fd_revalidate(drive); + fdctrl_change_cb(drive, 0); if (drive->bs) { bdrv_set_dev_ops(drive->bs, &fdctrl_block_ops, drive); } -- 1.7.7.6