[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Regression with floppy drive controller
From: |
Philippe Mathieu-Daudé |
Subject: |
[Qemu-devel] Regression with floppy drive controller |
Date: |
Tue, 20 Aug 2019 12:25:52 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
[cross posting QEMU & SeaBIOS]
Hello,
I'v been looking at a QEMU bug report [1] which bisection resulted in a
SeaBIOS commit:
4a6dbcea3e412fe12effa2f812f50dd7eae90955 is the first bad commit
commit 4a6dbcea3e412fe12effa2f812f50dd7eae90955
Author: Nikolay Nikolov <address@hidden>
Date: Sun Feb 4 17:27:01 2018 +0200
floppy: Use timer_check() in floppy_wait_irq()
Use timer_check() instead of using floppy_motor_counter in BDA for the
timeout check in floppy_wait_irq().
The problem with using floppy_motor_counter was that, after it reaches
0, it immediately stops the floppy motors, which is not what is
supposed to happen on real hardware. Instead, after a timeout (like in
the end of every floppy operation, regardless of the result - success,
timeout or error), the floppy motors must be kept spinning for
additional 2 seconds (the FLOPPY_MOTOR_TICKS). So, now the
floppy_motor_counter is initialized to 255 (the max value) in the
beginning of the floppy operation. For IRQ timeouts, a different
timeout is used, specified by the new FLOPPY_IRQ_TIMEOUT constant
(currently set to 5 seconds - a fairly conservative value, but should
work reliably on most floppies).
After the floppy operation, floppy_drive_pio() resets the
floppy_motor_counter to 2 seconds (FLOPPY_MOTOR_TICKS).
This is also consistent with what other PC BIOSes do.
This commit improve behavior with real hardware, so maybe QEMU is not
modelling something or modelling it incorrectly?
Regards,
Phil.
PD: How to reproduce:
- Download Windows 98 SE floppy image from [2]
- Run QEMU using the 'isapc' machine:
$ qemu-system-i386 -M isapc \
-fda Windows\ 98\ Second\ Edition\ Boot.img
SeaBIOS (version rel-1.11.0-11-g4a6dbce-prebuilt.qemu.org)
Booting from Floppy...
Boot failed: could not read the boot disk
[1] https://bugs.launchpad.net/qemu/+bug/1840719
[2] https://winworldpc.com/download/417d71c2-ae18-c39a-11c3-a4e284a2c3a5
- [Qemu-devel] Regression with floppy drive controller,
Philippe Mathieu-Daudé <=
- Re: [Qemu-devel] Regression with floppy drive controller, John Snow, 2019/08/20
- Re: [Qemu-devel] Regression with floppy drive controller, Philippe Mathieu-Daudé, 2019/08/20
- Re: [Qemu-devel] Regression with floppy drive controller, Philippe Mathieu-Daudé, 2019/08/20
- Re: [Qemu-devel] [SeaBIOS] Re: Regression with floppy drive controller, Dr. David Alan Gilbert, 2019/08/20
- Re: [Qemu-devel] [SeaBIOS] Re: Regression with floppy drive controller, Philippe Mathieu-Daudé, 2019/08/20
- Re: [Qemu-devel] [SeaBIOS] Re: Regression with floppy drive controller, Philippe Mathieu-Daudé, 2019/08/20
- Re: [Qemu-devel] [SeaBIOS] Re: Regression with floppy drive controller, Dr. David Alan Gilbert, 2019/08/20
- Re: [Qemu-devel] Regression with floppy drive controller, Philippe Mathieu-Daudé, 2019/08/20
- Re: [Qemu-devel] Regression with floppy drive controller, Eduardo Habkost, 2019/08/20
- Re: [Qemu-devel] Regression with floppy drive controller, Gerd Hoffmann, 2019/08/21