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> | |