mirror of
https://github.com/openMSX/openMSX.git
synced 2026-06-03 10:44:22 -03:00
the MSX emulator that aims for perfection
http://openmsx.org
emulator
emulator-programming
msx
msx-computers
msx-documentation
msx-emulator
msx2
msx2plus
msxturbor
- C++ 89%
- Tcl 7.4%
- Python 2.1%
- Makefile 0.6%
- Meson 0.2%
- Other 0.7%
The dummy-drive shortcut in doSeek() set ST0_NR and immediately
called endSeek(), which clears the drive-busy bit in the main
status register. That hid the failure from any disk driver that
follows the textbook probe pattern:
1. write RECALIBRATE
2. poll the main status register for a drive-busy bit
3. if busy, issue SENSE INTERRUPT STATUS and inspect ST0
Because the shortcut completed in zero emulated time, the busy
bit was already cleared by the time step 2 ran. The driver never
reached step 3, never read ST0, and never saw the NR or any
error indication. RECALIBRATE on a non-existent drive therefore
looked indistinguishable from success.
FastCopy 3.0 on a single-drive Turbo-R (FS-A1GT) hit this and
reported "Number of drives: 2", because its drive-B detection
relies entirely on the EC bit observed via SENSE INTERRUPT
STATUS after RECALIBRATE.
Drop the early-return. Mark the drive Not Ready, then fall
through into the regular RECALIBRATE path. On a DummyDrive,
isTrack00() always returns false and step() is a no-op, so the
loop walks down its 255-step budget, holding the drive-busy bit
high the whole time while emulated time advances. When the
budget is exhausted, the existing code sets ST0_EC and ends the
seek -- the same observable behavior real hardware produces for
an absent drive, and the sequence drivers are written to detect.
SEEK on a dummy drive still "completes" silently (no EC), which
matches what the TC8566AF datasheet allows when the drive does
not acknowledge -- and drivers that care about presence use
RECALIBRATE for that check, not SEEK.
|
||
|---|---|---|
| .github | ||
| build | ||
| Contrib | ||
| doc | ||
| share | ||
| src | ||
| .gitignore | ||
| configure | ||
| GNUmakefile | ||
| meson.build | ||
| meson_options.txt | ||
| README | ||
----------------------------------------------------------------------------
openMSX - the MSX emulator that aims for perfection
----------------------------------------------------------------------------
openMSX comes with a set of HTML manuals that tell what you need to know
to install, configure and run openMSX. You can find these manuals in the
directory 'manual' inside the directory 'doc'. You can read them using
a web browser.
You can read what has changed in this and the previous releases in the
release notes. You can find the release notes of this release in the file
'release-notes.txt' in the directory 'doc'. Highlights of previous releases
can be found in 'release-history.txt'.
All source code and other works that are part of, or distributed with
openMSX are copyrighted by their respective authors. The file 'authors.txt'
contains a list of people who made works for openMSX or contributed works
to openMSX.
Some source files contain a license notice; all other source files are
licensed under the GNU Public License (GPL), of which you can find a copy
in the file 'GPL.txt'. If you got a binary release of openMSX and are
interested in the sources, please visit our home page:
https://openmsx.org/
Happy MSX-ing!
the openMSX developers
----------------------------------------------------------------------------