cliffhanger@cup.portal.com (Cliff C Heyer) (05/31/90)
I've been reading several MS-DOS developer books (Duncan, Norton, etc.) but have not been able to get a really good "feel" as to why pre 3.3 DOS has the 32MB limit, and have the following questions: 1. It seems that internally the undocumented Drive Parameter Block/Table has space for cluster to have up to 255 sectors, but at what point is the value of 1 stuck in there? Does the device driver do it at initialization or is this magic number hard coded into DOS? (1*512=512 bytes/cluster, 65535 clusters *512=32MB limit) 2. And what was the point in the first place of fixing it at 1 when it could be variable up to 255 (8 bits)? 3. How do you go about increasing the cluster size so that you can have huge files that may fill up a 600MB disk? Is there a way to use DEBUG for example to force DOS to use larger clusters, or is this just a matter of using the right device driver? The limit is 65535 2^16-1 clusters in DOS, not 65535 sectors. 8192 byte clusters gives 8192*65535=536MB sized disk. Clusters are apparently locked to 512 bytes in DOS. Cliff
andyross@ddsw1.MCS.COM (Andrew Rossmann) (06/01/90)
> Resp: 7 of 7 by cliffhanger at cup.portal.com >Author: [Cliff C Heyer] > >I've been reading several MS-DOS developer books >(Duncan, Norton, etc.) but have not been able to get >a really good "feel" as to why pre 3.3 DOS has the >32MB limit, and have the following questions: The DOS INT25H and INT26H disk read/write routines work by specifying which sector to read. It used a 16-bit word to do this. Since the maximum is 65536 (FFFFh), and each sector is 512 bytes, this is 65536 * 512 = 33554432 (/1048576 [1M] = 32M!) Under the 3.31, 3.30+, and 4.x versions, there is an alternate format used that uses 32-bit numbers for the sectors. This gives: 4294967295 * 512 = 2199023255552 (/ 1048576 =2097152M, /1073741824 [1G] = 2098G, /109951162776 [1T] = 2T!!!) M=Mega, G=Giga, T=Tera. Realistically, I don't believe this is really possible. Andrew Rossmann andyross@ddsw1.MCS.COM