summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux-4.02/memdisk/fdgeo.pl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux-4.02/memdisk/fdgeo.pl')
-rwxr-xr-xcontrib/syslinux-4.02/memdisk/fdgeo.pl56
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;
+}