Download TMQ Vol IV.i - tim
Transcript
Volume IV.i THE MISOSYS QUARTERLY - Fall idge, VA: Dear Roy, During last year, we had a rather abundant correspondence on the troubles I was having with the XLR8er board. In summary, out of three 4D's of 1987/1988 vintage, one didn't work correctly and two did. Subsequently, another went on the blink, leaving only one with the XLR8er. I continued working that one. One of the problems I had last year was doubling up of the same file on the same disk with the same name, and this was covered in TMQ ffl.i., page 67. The patches you provided for SYS2, SYS 12 and BACKUP were duly applied by me (and included in Michel Houde's patches) together with a system configuration that includes DELAY. I am attaching several printouts: A directory of a disk with a repeated file; a printout from DEVICE (B) showing delay turned on and three printouts from FED2 showing your patches applied. I am forced to put this computer with XLR8er on ice pending any possible solution to file doubling up. Fm Charles A. Ainsworth: As stated therein, my letter of March 23 explained that one of my 4D machines, the last one with an XLR8er, had gone on the blink and had been doubling up files on floppy. You replied on a return copy of my letter of April 12 "It's really a DOS problem! I'm looking into it." I also stated that the machine with the XLR8er had been put on ice and that I had to borrow a machine to keep going, but that's a situation I can't maintain for long. Now, it's over three months since I advised you of the problem. To date I have no solution. I can't keep the borrowed computer any longer. So which way do I go from here? Seems the only answer will be to yank and dump the only remaining XLR8er as I did with the other two I had. Volume IV.i concerning my previous note relative to your multiple identical file names on one diskette" problem. In my previous note, I may have been a little hasty in claiming a DOS problem, but then my initial evidence suggested that. Let me bring you up to date on my findings. Your problem, as well as that reported by a few other folks, seems to occur when a particular file is opened for writing a large number of times. Programs which open a file for output typically use the DOS @IMT service call. In order to understand the nature of the problem, let me first provide a brief dissertation on @INIT. This SVC first issues an internal call to @OPEN, in case the file is already in existence. The OPEN function checks for the availability of the disk first by calling @CKDRV. If @CKDRV succeeds, OPEN looks for the file on that disk drive so checked. It then reports success or failure back to @INIT. If OPEN can open the file, then the @INIT request is satisfied. If OPEN fails to open the file, @INIT then attempts to create a new file. To do that, it has to find an available diskette, which may in fact be a single drive if the file specification included a drive spec. If @CKDRV succeeds, then INIT creates the file. Assume fora moment what would happen if the first @CKDRV called from OPEN fails to detect that a specific drive, targeted by the drive spec, did not contain a diskette even though a diskette was loaded; CKDRV reports the failure back to OPEN which reports the failure back to INIT. INIT then proceeds to create a new file. Further suppose that the second call to @CKDRV by @INTT succeeds in detecting the loaded diskette. INIT creates a second instance of the file specification in the directory; a multiple file is created. The above scenario is not fiction; it is exactly what is happening in these cases of multiple files. Okay, in order to confirm that operation, I ran the following BASIC program: Fm MISOSYS, Inc: Dear Charles, This is in response to your letter of June 26th DOS Subjects 1989 - 27 - With the "TESTFILE/DAT" previously created, all the program does is attempt to open the file, close it, then wait for about six seconds for the drive to de-select and turn off the drive motor. It then repeats the sequence. This bypasses the @INIT sequence, which I first used, but I subsequently narrowed the problem to a failure of OPEN. Note that during the operation of the program, the system drive is a MemDISK so that no disk access need be made to get the DOS overlays. Starting from a cold machine, I was generally able to get through one run of 300 without failure. My test machine was a gate array Model 4P. However, I could not get through two runs. If I upped the loop counter tenfold to 3000, I could never get through a single sequence. Yes, that is punishing the drive! Okay, that4P had anXLR8erin it with the Houde patches which adjusted the @CKDRV timers to compensate for the increased speed. So I decided to try another machine, this time a Model 4D (obviously a gate array). The behavior was identical to the 4P. Running the same test program under Model Ill mode LDOS 5.1.4 and LDOS 5.3,1 never got a failure. That's why I initially suspected the DOS; Both 6.3 and 6.2 failed the test program but LDOS 5.1 and LDOS 5.3 worked. I subsequently used this machine for a detailed analysis. I dug into all of the code thatwas executedwithin@CKDRV, tracing through all of the calls into the system - including the floppy disk driver. The @CKDRV code uses the sensing of the index hole to confirm or deny the presence of a rotating diskette in a disk drive. It is a function of the disk drive to send the index hole status to the floppy disk controller. The FDC shows (or is supposed to show) a "1" bit in its status register when- DOS Subjects