GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


archive:computers:401bugs
               2 Suspected Bugs in MsDos v4.01
                           6/5/91
                             by
                    William S. Ataras III

'Discovered', tested and copyrighted 1991 by David M. Cox and William S. Ataras III.

See how to contact us at the end of this document.

We work with satellite imagery. This type of work commonly involves the manipulation of files between 1 and 200 megabytes in size. In the course of writing and copying such data, we believe we've run across 2 bugs. They are detailed below:

————————— Bug #1 —————————-

The included program 32MEG.ASM uses the following 4 Dos functions to create, write, and close 32MEG.DAT and exit:

3Ch - Create file handle. 40h - Write BUFSIZE bytes to file handle. 3Eh - Close file handle. Int 20h - Exit.

BUFSIZE is a symbol equate in 32MEG.ASM. The included files 2048.COM and 2000.COM are the compiled versions of 32MEG.ASM with BUFSIZE set to 2048 and 2000 respectively.

The assembly source was compiled and linked with Borland's assembler TASM v1.01 and linker TLINK v2.0 as follows:

   tasm 32meg
   tlink /t 32meg

I tested the programs in the root directory of my C: which is a Connor CP-3104 106meg harddrive. There was no AUTOEXEC.BAT and the CONFIG.SYS looked like this:

   files     = 30
   buffers   = 30
   lastdrive = z
   shell     = c:\command.com /p /e:1024

My computer is a 386 20mhz with 4megs of ram, 3megs extended. The same results occured with a similar test on a completely different 386 machine and different harddrive.

A run of Norton 4.50 DI.EXE produced:

DI-Disk Information, Advanced Edition 4.50, (C) Copr 1987-88, Peter Norton

Information from DOS         Drive C:       Information from the boot record

——————————————————————————-

                             system id             'MSDOS4.0'         
                      media descriptor (hex)               F8         
           2               drive number                               
         512             bytes per sector                 512         
           4            sectors per cluster                 4         
           2              number of FATs                    2         
         512          root directory entries              512         
         214              sectors per FAT                 214         
      54,722            number of clusters                            
                         number of sectors            219,351         
           1               offset to FAT                    1         
         429            offset to directory                           
         461              offset to data                              
                         sectors per track                 33         
                               sides                        8         
                          hidden sectors                   33         

Theoretically, the program should generate a dummy file well over 32 megabytes in length. You must have about 41 megs free on your disk. It works fine when the BUFSIZE equate is 2048; the resulting 32MEG.DAT is 41,943,040 bytes long. However, when BUFSIZE is changed to 2000, 2 things happen. First, it takes nearly twice as long to write the file. Given the fact that Dos clusters and BIOS disk sectors are always powers of 2, it is not unreasonable to expect that some additional magic must happen behind the scenes when such abitrary and rather inconsiderate byte counts are written. BUT, this was not expected; The resulting file should have been 43,008,000 bytes long. It was 33,554,000 bytes long; the highest even multiple of 2000 below 32 megabytes.

A run of 'CHKDSK /F' produced 'Allocation error in C:\32MEG.DAT, size adjusted'. Another 'DIR' told me the file was 43,008,000 bytes long as it should have originally been.

————————— Bug #2 —————————-

This problem involves the ramdisk provided by the MsDos 4.01 driver RAMDRIVE.SYS.

I tested this in the root directory of my C: which is a Connor CP-3104 106meg harddrive. There was no AUTOEXEC.BAT and the CONFIG.SYS looked like this:

   device    = c:\dos\ramdrive.sys 2048 128 64 /e
   files     = 30
   buffers   = 30
   lastdrive = z
   shell     = c:\command.com /p /e:1024

My computer is a 386 20mhz with 4megs of ram, 3megs extended. The same results occured with a completely different 386sx 16mhz with 4megs, 3megs extended and different harddrive.

The rawdisk was D:.

A run of Norton 4.50 'DI.EXE D:' produced:

DI-Disk Information, Advanced Edition 4.50, (C) Copr 1987-88, Peter Norton

Information from DOS         Drive D:       Information from the boot record

——————————————————————————-

                             system id             'RDV 1.20'         
                      media descriptor (hex)               F8         
           3               drive number                               
         128             bytes per sector                 128         
           4            sectors per cluster                 4         
           1              number of FATs                    1         
          64          root directory entries               64         
          48              sectors per FAT                  48         
       4,079            number of clusters                            
                         number of sectors             16,384         
           1               offset to FAT                    1         
          49            offset to directory                           
          65              offset to data                              
                         sectors per track                  1         
                               sides                        1         
                          hidden sectors                    0         

I had an arbitrary image file DATA.DAT in C:\. DATA.DAT was 1,300,480 bytes long. Running the following batch file over and over produced random lost clusters consistently on the 2nd attempt.

   copy data.dat d:
   del d:data.dat
   dos\chkdsk d:

Changing the 2048 in CONFIG.SYS to 2047 to look like this…

   device    = c:\dos\ramdrive.sys 2047 128 64 /e
   files     = 30
   buffers   = 30
   lastdrive = z
   shell     = c:\command.com /p /e:1024

made the bug go away. I was able to run the same batch 'forever' without a hitch (as I should have happened previously).

————————— Summary —————————

Feel free to try these tests on your machine if you have MsDos 4.01. I'm sure you'll get similar results. I'd be interested to know if you didn't.

Contact us by:

Leave a message to Bill Ataras on Ed's BBS at (408)-384-3658.

OR Write:

Bill Ataras 38 Village Dr. #8 Carmel Valley, Ca. 93924

/home/gen.uk/domains/wiki.gen.uk/public_html/data/pages/archive/computers/401bugs.txt · Last modified: 2001/11/08 10:18 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki