diff options
Diffstat (limited to 'contrib/syslinux-4.02/memdisk/fdgeo.pl')
-rwxr-xr-x | contrib/syslinux-4.02/memdisk/fdgeo.pl | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/memdisk/fdgeo.pl b/contrib/syslinux-4.02/memdisk/fdgeo.pl new file mode 100755 index 0000000..b76727d --- /dev/null +++ b/contrib/syslinux-4.02/memdisk/fdgeo.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl +# +# Try automatic generation of geometries +# + +($k) = @ARGV; +$sec = int($k*2+0.5); + +if ($sec < 320*2) { + $c = 40; + $h = 1; + $type = 1; +} elsif ($sec < 640*2) { + $c = 40; + $h = 2; + $type = 1; +} elsif ($sec < 1200*2) { + $c = 80; + $h = 2; + $type = 3; +} elsif ($sec < 1440*2) { + $c = 80; + $h = 2; + $type = 2; +} elsif ($sec < 2880*2) { + $c = 80; + $h = 2; + $type = 4; +} elsif ($sec < 4096*2) { + $c = 80; + $h = 2; + $type = 6; +} else { + printf "%.1fK, %d sectors: ", $sec/2, $sec; + print "Considered a hard disk\n"; + exit 2; +} + +$ok = 0; +while ($c < 256) { + $s = int($sec/($c*$h)+0.5); + if ($s <= 63 && $sec == $c*$h*$s) { + $ok = 1; + last; + } + $c++; +} + +printf "%.1fK, %d sectors: ", $sec/2, $sec; +if ($ok) { + print "c=$c, h=$h, s=$s, type=$type\n"; + exit 0; +} else { + print "No valid geometry found (MEMDISK will fake it)\n"; + exit 1; +} |