Browse Source

Infer boot order if not specified

Fabian 8 months ago
parent
commit
ab0227dd72
6 changed files with 13 additions and 4 deletions
  1. 1 0
      debug.html
  2. 1 0
      index.html
  3. 0 2
      src/browser/main.js
  4. 6 1
      src/browser/starter.js
  5. 1 1
      src/cpu.js
  6. 4 0
      src/rtc.js

+ 1 - 0
debug.html

@@ -226,6 +226,7 @@ function load_next()
                 <td><label for="boot_order">Boot order</label></td>
                 <td>
                     <select id="boot_order">
+                        <option value="0">Auto</option>
                         <option value="213">CD / Floppy / Hard Disk</option>
                         <option value="123">CD / Hard Disk / Floppy</option>
                         <option value="231">Floppy / CD / Hard Disk</option>

+ 1 - 0
index.html

@@ -158,6 +158,7 @@
                 <td><label for="boot_order">Boot order</label></td>
                 <td>
                     <select id="boot_order">
+                        <option value="0">Auto</option>
                         <option value="213">CD / Floppy / Hard Disk</option>
                         <option value="123">CD / Hard Disk / Floppy</option>
                         <option value="231">Floppy / CD / Hard Disk</option>

+ 0 - 2
src/browser/main.js

@@ -343,7 +343,6 @@
                     size: 8 * 1024 * 1024,
                     async: false,
                 },
-                boot_order: 0x132,
                 name: "MS-DOS",
             },
             {
@@ -605,7 +604,6 @@
                     fixed_chunk_size: 256 * 1024,
                     use_parts: !ON_LOCALHOST,
                 },
-                boot_order: 0x132,
                 name: "Windows 2000",
             },
             {

+ 6 - 1
src/browser/starter.js

@@ -256,12 +256,17 @@ V86Starter.prototype.continue_init = async function(emulator, options)
         "cdrom": undefined,
     };
 
+    const boot_order =
+        options["boot_order"] ? options["boot_order"] :
+        options["fda"] ? BOOT_ORDER_FD_FIRST :
+        options["hda"] ? BOOT_ORDER_HD_FIRST : BOOT_ORDER_CD_FIRST;
+
     settings.acpi = options["acpi"];
     settings.load_devices = true;
     settings.log_level = options["log_level"];
     settings.memory_size = options["memory_size"] || 64 * 1024 * 1024;
     settings.vga_memory_size = options["vga_memory_size"] || 8 * 1024 * 1024;
-    settings.boot_order = options["boot_order"] || 0x213;
+    settings.boot_order = boot_order;
     settings.fastboot = options["fastboot"] || false;
     settings.fda = undefined;
     settings.fdb = undefined;

+ 1 - 1
src/cpu.js

@@ -1111,7 +1111,7 @@ CPU.prototype.load_multiboot = function(buffer)
 
 CPU.prototype.fill_cmos = function(rtc, settings)
 {
-    var boot_order = settings.boot_order || 0x213;
+    var boot_order = settings.boot_order || BOOT_ORDER_CD_FIRST;
 
     // Used by seabios to determine the boot order
     //   Nibble

+ 4 - 0
src/rtc.js

@@ -40,6 +40,10 @@
 /** @const */ var CMOS_MEM_HIGHMEM_HIGH = 0x5d;
 /** @const */ var CMOS_BIOS_SMP_COUNT = 0x5f;
 
+// see CPU.prototype.fill_cmos
+const BOOT_ORDER_CD_FIRST = 0x123;
+const BOOT_ORDER_HD_FIRST = 0x312;
+const BOOT_ORDER_FD_FIRST = 0x321;
 
 /**
  * RTC (real time clock) and CMOS