123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <!doctype html>
- <title>Lua interpreter</title>
- <script src="../build/libv86.js"></script>
- <script>
- "use strict";
- window.onload = function()
- {
- var emulator = new V86Starter({
- wasm_path: "../build/v86.wasm",
- memory_size: 32 * 1024 * 1024,
- vga_memory_size: 2 * 1024 * 1024,
- // Uncomment to see what's going on
- //screen_container: document.getElementById("screen_container"),
- bios: {
- url: "../bios/seabios.bin",
- },
- vga_bios: {
- url: "../bios/vgabios.bin",
- },
- cdrom: {
- url: "../images/linux.iso",
- },
- autostart: true,
- disable_keyboard: true,
- });
- var data = "";
- emulator.add_listener("serial0-output-char", function(char)
- {
- if(char !== "\r")
- {
- data += char;
- }
- if(data.endsWith("login: "))
- {
- console.log("Do login");
- emulator.serial0_send("root\n");
- }
- else if(data.endsWith("/root% "))
- {
- console.log("Now ready");
- document.getElementById("status").textContent = "Ready.\n";
- document.getElementById("run").disabled = false;
- }
- });
- emulator.add_listener("serial0-output-line", function(line)
- {
- // filter noise
- if(!line.startsWith("/root% lua -e") &&
- !line.startsWith("> ") &&
- line.indexOf("Welcome to Buildroot") === -1 &&
- line.indexOf("login:") === -1 &&
- line.trim() !== "")
- {
- document.getElementById("result").textContent += line;
- }
- });
- document.getElementById("source").onkeydown = function(e)
- {
- if(e.which == 13 && e.ctrlKey)
- {
- document.getElementById("run").onclick();
- }
- };
- document.getElementById("run").onclick = function()
- {
- var code = document.getElementById("source").value;
- emulator.serial0_send("lua -e " + bashEscape(code) + "\n");
- document.getElementById("result").textContent = "";
- document.getElementById("status").textContent = "Running ...\n";
- this.disabled = true;
- };
- };
- // https://gist.github.com/creationix/2502704
- // Implement bash string escaping.
- function bashEscape(arg)
- {
- return "'" + arg.replace(/'+/g, function (val) {
- return "'" + val.replace(/'/g, "\\'") + "'";
- }) + "'";
- }
- </script>
- <textarea id=source rows=20 cols=80>
- k = 1
- x = 0
- while k < 1000 do
- x = x + 1 / (k * k)
- k = k + 2
- end
- print(math.sqrt(x*8))
- function factorial(n)
- if n == 0 then
- return 1
- else
- return n * factorial(n - 1)
- end
- end
- print("factorial(10):", factorial(10))
- </textarea>
- <button disabled id=run>run (ctrl-enter)</button>
- <br>
- <hr>
- <pre id=status>Wait for boot ...</pre>
- <pre id=result></pre>
- <hr>
- <div id="screen_container">
- <div style="white-space: pre; font: 14px monospace; line-height: 14px"></div>
- <canvas style="display: none"></canvas>
- </div>
|