Browse Source

docs: add instructions for Windows XP (#666)

Co-authored-by: hello-smile6 <73048226+hello-smile6@users.noreply.github.com>
Co-authored-by: Fabian <copy@copy.sh>
stasoid 1 year ago
parent
commit
870f69c28d
1 changed files with 75 additions and 0 deletions
  1. 75 0
      docs/windows-xp.md

+ 75 - 0
docs/windows-xp.md

@@ -0,0 +1,75 @@
+*Most of this document also applies to Windows 2000.*
+
+You can download Windows 2000 from [WinWorld](https://winworldpc.com/download/413638c2-8d18-c39a-11c3-a4e284a2c3a5).
+
+Use QEMU to create `winxp.img`:
+
+```
+qemu-img create winxp.img 2G
+qemu-system-x86_64 -m 512 -drive file=winxp.img,format=raw -cdrom en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso
+```
+
+Follow setup instructions.
+
+The next step fixes `Uncaught RangeError: Maximum call stack size exceeded` in Chrome during Windows 2000/XP boot in v86.
+
+After installation change computer type to "Standard PC" as described [here](http://web.archive.org/web/20220528021535/https://www.scm-pc-card.de/file/manual/FAQ/acpi_uninstallation_windows_xp_english.pdf):
+Start > RightClick "My Computer" > Manage >
+Device Manager > Computer > RightClick "ACPI Uniprocessor PC" > Update Driver... >
+No, not this time > Next > Install from a list or specific location (Advanced) > Next >
+Don't search. I will choose the driver to install. > Next > Standard PC > Next > Finish.
+Restart the VM, follow multiple "Found New Hardware Wizard" dialogs with default options.
+
+Now `winxp.img` is ready for v86. You can use [the website](https://copy.sh/v86/) to run it:
+Specify `winxp.img` as a hard drive and optionally set memory size to 512 MB.
+Or run it in a custom html file as described below.
+
+Get seabios.bin and vgabios.bin from [here](https://github.com/copy/v86/tree/master/bios),
+get libv86.js and v86.wasm from [releases](https://github.com/copy/v86/releases/tag/latest).
+Create `winxp.htm` with this content (assuming all the files are in the same folder):
+
+```html
+<!doctype html>
+<script src="libv86.js"></script>
+
+<script>
+onload = function()
+{
+    new V86Starter({
+        wasm_path: "v86.wasm",
+        bios: { url: "seabios.bin" },
+        vga_bios: { url: "vgabios.bin" },
+        hda: {
+            url: "winxp.img",
+            size: 2 * 1024 * 1024 * 1024,
+            async: true
+        },
+        memory_size: 512 * 1024 * 1024,
+        screen_container: screen_container,
+        autostart: true,
+    });
+}
+</script>
+
+<div id=screen_container>
+    <div style="white-space: pre; font: 14px monospace"></div>
+    <canvas style="display: none"></canvas>
+</div>
+```
+
+To open this html file locally a HTTP server is needed. The standard Python server `python -m http.server` doesn't support HTTP range requests.
+You can use [http-server](https://www.npmjs.com/package/http-server) or [devd](https://github.com/cortesi/devd).
+Start the server (from the same folder as `winxp.htm`):
+```
+npx http-server
+```
+Open http://localhost:8080/winxp.htm in the browser.
+
+Windows XP load time (until start button becomes responsive) in Chromium on my computer:
+* 3 min second time
+* 4 min (first time or if cache is disabled)
+* 12 min second time if Network tab in Developer Tools is open
+* 17 min (first time or if cache is disabled) and Network tab in Developer Tools is open
+
+Sometimes Windows XP hangs after boot (before it is interactive) in v86,
+displaying only desktop wallpaper without taskbar or desktop icons.