Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!ames!ucbcad!ucbvax!decvax!tektronix!sequent!mntgfx!dclemans From: dclemans@mntgfx.MENTOR.COM (Dave Clemans) Newsgroups: comp.sys.atari.st Subject: Re: Bug report: 'The Russian Doll' sp. nova (?) Message-ID: <640@dclemans.mntgfx.MENTOR.COM> Date: Tue, 12-May-87 11:51:59 EDT Article-I.D.: dclemans.640 Posted: Tue May 12 11:51:59 1987 Date-Received: Sat, 16-May-87 01:28:52 EDT References: <8705081618.AA15013@ucbvax.Berkeley.EDU> <13104@watmath.UUCP> Organization: Mentor Graphics, Beaverton OR Lines: 33 Summary: floppy disk driver bug report There is a bug in the floppy driver in the current TOS ROM's that can very easily cause symptoms like those described in the article that this message references. Basically, the problem is that while the WD1772 floppy controller does have a built-in read multiple sectors command, that command is somewhat brain damaged; the only official way to terminate the read is to reset the controller (and taking any time hit that that reset causes). However, if you look at the floppy disk driver code you find that the driver is using the "read multiple sectors" command of the 1772 for all (all that I've found so far at least) floppy reads. And under "normal" circumstances the driver tries to never reset the controller; i.e. it puts the read length into the DMA controller, and depends on the floppy controller timing out because the DMA controller stops talking to it. This works "most" of the time... But if your really trying to push data through the system "fast" you have a non-zero chance of seeing a timing problem pop up. This problem does not affect floppy writes; only floppy reads. The best way to work around it, and still use "fast" formats, is to write the disk in whatever way you desire, but NEVER try to read more than one sector at a time (or to start out reading multiple sectors, but switch to single sectors if an error appears). An example of this is the "slowread" routine in the twister restore code. Unfortunately you don't always have control over the sizes of read requests made by various packages... dgc