Spaces:
Runtime error
Runtime error
| <title>Lua interpreter</title> | |
| <script src="../build/libv86.js"></script> | |
| <script> | |
| ; | |
| window.onload = function() | |
| { | |
| var emulator = new V86({ | |
| 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", | |
| }, | |
| bzimage: { | |
| url: "../images/buildroot-bzimage68.bin", | |
| }, | |
| autostart: true, | |
| disable_keyboard: true, | |
| disable_mouse: true, | |
| }); | |
| var data = ""; | |
| var do_output = false; | |
| emulator.add_listener("serial0-output-byte", function(byte) | |
| { | |
| var char = String.fromCharCode(byte); | |
| if(char !== "\r") | |
| { | |
| data += char; | |
| } | |
| if(do_output) | |
| { | |
| document.getElementById("result").textContent += char; | |
| } | |
| if(data.endsWith("~% ")) | |
| { | |
| console.log("Now ready"); | |
| document.getElementById("status").textContent = "Ready.\n"; | |
| document.getElementById("run").disabled = false; | |
| do_output = false; | |
| } | |
| }); | |
| 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; | |
| do_output = true; | |
| }; | |
| }; | |
| // https://gist.github.com/creationix/2502704 | |
| // Implement bash string escaping. | |
| function bashEscape(arg) | |
| { | |
| arg = arg.replace(/\t+/g, ""); | |
| 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> | |