                 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
