1 KOTO PATCH FILE DOCUMENTATION 1 KOTO PATCH FILE DOCUMENTATION DOVEFLOPPYPATCH 1 1 DOVEFLOPPYPATCH 6 2 DOVEFLOPPYPATCH 1 DOVEFLOPPYPATCH fixes an intermittent DATAERROR problem that occurs while using 1186 FLOPPY. After sufficiently many write operations to an 1186 floppy, a number of pages of the floppy became unreadable even with retry efforts by the FLOPPY software. When this happened, the FLOPPY software would report a DATAERROR to the user. The only recourse for the user after such an error was to scavenge the floppy which generally meant losing one or two pages of data. This difficulty would show up roughly once per every 10 hours of continous 1186 FLOPPY operations. The source of the problem turned out to be in the software setting of a parameter that controlled the timing performed by a Floppy Data Controller chip. When a read or write operation is initiated, the FDC chip causes the 1186 floppy drive heads to be brought into contact with the floppy so that the read and write can begin if the floppy drive heads are currently not in contact with the floppy. (The floppy drive heads are brought out of contact after sufficient inactivity.) The Data Control Block parameter at fault, called HeadLoadTimePlusNotInDMAmode, must be 20 to allow 40ms time for 1186 floppy drive head settling before write operations. Without this change, what will happen is that occasionally the 1186 floppy heads will still be vibrating at the time of the write operation. Data written while the 1186 floppy drive heads are vibrating can be malformed. Subsequent reads will not be able to read the malformed data and will cause DATAERRORs. The previous setting of HeadLoadTimePlusNotInDMAmode was 2 which only allowed for 4ms of head settling time. The new value of 20 for 40ms of head settling time was determined from hardware specifications and does seem to make the DATAERROR problem go away. DOVEFLOPPYPATCH contains the followng functionality: (1) \DOVEFLOPPY.INITDCB has been changed to set the HeadLoadTimePlusNotInDMAmode field of the DOVEFLOPPYDCB block to 20. This change alone fixes the 1186 FLOPPY DATAERROR problem. The 1108 FLOPPY code does not call this function. (2) \DOVEFLOPPY.XFERDISK has been changed to retry up to 50 times, up from 10 times. Without the fix provided by (1), increasing the retry count did at least make the DATAERROR problem occur less often to the user. A good percentage of the DATAERRORs could be overcome by this amount of extra retrying. However a residual percentage of the DATAERRORs could not be overcome by any amount of extra retrying. The fix provided by (1) now makes the situation be that no more DATAERRORs of any kind show up. Retries now seem limited to spurious OVERRUNERRORs every 1 in 100 operations which are easily overcome by 1 or 2 retries. The 1108 FLOPPY code does not call this function. (3) \FLOPPY.TRANSFER now does before an 1186 write operation to any diskaddress, a read from the same diskaddress and then a (DISMISS 40). It had been discovered independently that reading from a diskaddress before writing to the same diskaddress eliminated many DATAERRORs reducing the frequency of DATAERRORs from once every 15 minutes of continuous floppy operations to once every 10 hours of continuous floppy operations. This solution now seems to be an inferior approximation of the real solution which is (1). (4) \PFLOPPY.FORMAT has been changed to format 1186 floppies more carefully. The 1186 assembly language code/hardware format operations seem to be somewhat less reliable than the 1108 assembly language code/hardware format operations. It was also felt that by doing extra careful formatting of 1186 floppies, the possibility that DATAERRORs could be due simply to a floppy not being formatted very well could be ruled out. \PFLOPPY.FORMAT is changed to confirm its formatting effort by verifying after formatting operations that every page of the 1186 floppy is readable. Previously, \PFLOPPY.FORMAT did a spot check to see that one page on each track was readable. If any difficulty with reading pages occurs, \PFLOPPY.FORMAT then retries the format until it succeeds with the whole set of formatting and reading operations twice. \PFLOPPY.FORMAT tries up to 5 times to format a floppy. If \PFLOPPY.FORMAT is successful then \PFLOPPY.FORMAT and FLOPPY.FORMAT will return T. Otherwise \PFLOPPY.FORMAT and FLOPPY.FORMAT will return NIL. (User and system software can test whether FLOPPY.FORMAT returns T or NIL. SYSOUT to floppy, for example, asks the user to insert a different floppy if formatting the current floppy was unsuccessful.) Previous versions of DOVEFLOPPYPATCH had \PFLOPPY.FORMAT do printing and an unlimited number of retries on the 1186. Both of these changes have been rescinded. There are no noticeable changes in formatting for the 1108. (5) \PFLOPPY.SCAVENGE.PMPAGE.AFTER1 is a function internal to FLOPPY.SCAVENGE which has been improved. The effect of the improvement is that if the floppy scavenger discovers an unreadable page or two, the scavenger is able to salvage all the remaining readable pages on the same track, reformat the track, and then restore the salvaged pages. In other words, the floppy scavenger has been improved specifically to address the kind of unreadability that occurs in an 1186 DATAERROR situation. Hopefully, however, this improvement to the scavenger does not need to be called on now that solution (1) has been found. These benefits in improved floppy scavenging also extend to the 1108. (6) \PFLOPPY.GENERATEFILES and \PFLOPPY.MOUNTEDP have been modified to cope somewhat better with the current inability of the 1186 assembly language code to signal if the floppy drive is open or has opened. An occasional TIMEOUT problem that would sometimes occur when running multiple processes all interacting simultaneously with 1186 FLOPPY has been eliminated. These changes aren't directly related to the DATAERROR problem but are thown into the same patch file "for free". The 1108 assembly language code is able to signal if the 1108 floppy drive is open or has opened and there are no noticeable changes for the 1108. .ÌÌø È/øÈT/ø2ÈT/ÌÌøÈT/ÌÌøÈT<ø PAGEHEADING VERSOHEAD<ø PAGEHEADING RECTOHEAD;ø PAGEHEADINGFOOTINGV;ø PAGEHEADINGFOOTINGRMODERNMODERNMODERN   HRULE.GETFNMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN HRULE.GETFNMODERN HRULE.GETFNMODERN5Ç5èªF™¡<±t-9zº