OpenMSX Git (2017/03/27) is complie. OpenMSX is an open source MSX emulator which is free according to the Debian Free Software Guidelines, available under the GNU General Public License.For copyright reasons the emulator cannot be distributed with original BIOS ROM images. OpenMSX includes C-BIOS a minimal implementation of the MSX BIOS, allowing to play quite some games without the need to have an original MSX BIOS ROM image. You can also use your own BIOS ROM image if you please.
OpenMSX Git Changelog:
* Don't allow reading/writing from/to disk when disk isn't rotating
We already checked this, but only at the start of a command. Not when the motor
is turned off in the middle of a command.
Apparently dsk-pro does this to avoid writing the CRC bytes on a write-sector
command. See cbsfox' comment in this forum post:
https://www.msx.org/forum/msx-talk/software/pdi-to-dmk-using-dsk-pro-104-with-openmsx?page=1
At first sight this is counter-intuitive to me. In the current emulation when
you turn the drive motor on/off the disk immediately starts/stops rotating at
300rpm. Though in the real world the disk has inertia and it takes some time
before the disk really stops rotating after the motor is turned off. Still
according to cbsfox turning the motor off reacts faster than aborting the FDC
command. I assume that in real hardware the drive's write-enable signal is
ANDed with the motor-on signal. So that writes are immediately disabled when
the disk starts slowing down.
* Move track-buffer from FDC to disk-drive.
Before this patch our FDC emulation (WD2793 or TC8566AF) reads a track from
disk into a buffer. It then manipulates that buffer. And (in case of a write
command) writes that buffer back to disk.
This is not how a real FDC operates. It does not have a buffer for the track.
Instead it reads/writes bytes while the disk is rotating. This patch moves the
code more towards that model. It's not yet exactly like the real hardware
because the FDC code still keeps track of the position in the track. More
specifically it requests to read/write a byte at a certain position in the
track instead of basing everything on the timing of the read/write request. So
read/write at a specific time when the desired byte is rotated below the disk
head. Our emulated timing is already pretty good, but not yet detailed enough
for a fully time-based track-addressing.
This patch only restructures the code: basically it changes the location of the
track-buffer in the code (from FDC to RealDrive) and then tweaks the interface
between FDC and Drive. It shouldn't have any functional changes.
The main motivation for this patch is as a preparation for the next patch.
There we will couple write-enable with motor-on. But currently the FDC isn't
aware of the motor status. And I don't want to make it aware of it because:
- It's not trivial when one FDC controls multiple drives.
- Also the real FDC (at least WD2793) isn't aware of the motor status.
With this refactoring we can let the drive make the write-enabled decisions
because that one does know the motor status. See next patch for more details.
* Prefer RawTrack::write() with addIdam=true over RawTrack::addIdam()
This is a cleaner alternative for the fix in commit adfa6487b8.
It's also a preparation for a future change (move write track from FDC to
DiskDrive) because it makes the interface between the FDC and the RawTrack code
smaller.
Download: OpenMSX Git (2017/03/27) x86
Download: OpenMSX Git (2017/03/27) x64
Source: Here
2017-03-27
Random Related Topic
0 Comments
Post a Comment