diff --git a/vl.c b/vl.c
index c18bb80..e0611eb 100644
--- a/vl.c
+++ b/vl.c
@@ -2374,7 +2374,18 @@ int main(int argc, char **argv, char **envp)
         if (optind >= argc)
             break;
         if (argv[optind][0] != '-') {
-	    hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
+            char buf[256];
+            if (cyls == 0)
+                snprintf(buf, sizeof(buf), "%s", HD_OPTS);
+            else
+                snprintf(buf, sizeof(buf),
+                         "%s,cyls=%d,heads=%d,secs=%d%s",
+                         HD_OPTS , cyls, heads, secs,
+                         translation == BIOS_ATA_TRANSLATION_LBA ?
+                         ",trans=lba" :
+                         translation == BIOS_ATA_TRANSLATION_NONE ?
+                         ",trans=none" : "");
+            hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], buf);
         } else {
             const QEMUOption *popt;
 
@@ -2404,7 +2415,7 @@ int main(int argc, char **argv, char **envp)
                                  ",trans=lba" :
                                  translation == BIOS_ATA_TRANSLATION_NONE ?
                                  ",trans=none" : "");
-                    drive_add(IF_DEFAULT, 0, optarg, buf);
+                    hda_opts = drive_add(IF_DEFAULT, 0, optarg, buf);
                     break;
                 }
             case QEMU_OPTION_hdb:
