mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
first poc for a web runtime
This commit is contained in:
3
web/.gitignore
vendored
Normal file
3
web/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.parcel-cache/
|
||||||
|
dist/
|
||||||
|
node_modules/
|
||||||
7
web/package.json
Normal file
7
web/package.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@parcel/optimizer-data-url": "^2.0.0",
|
||||||
|
"@parcel/transformer-inline-string": "^2.0.0",
|
||||||
|
"parcel": "^2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
13
web/src/index.html
Normal file
13
web/src/index.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf8" />
|
||||||
|
<title>MicroW8</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<canvas id="screen" width="320" height="256" />
|
||||||
|
<script type="module">
|
||||||
|
import "./main.js";
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
45
web/src/main.js
Normal file
45
web/src/main.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import wasmDataUrl from "data-url:./trainride.uw8";
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
let wasm_module = await (await fetch(wasmDataUrl)).arrayBuffer();
|
||||||
|
let compiled_module = await WebAssembly.compile(wasm_module);
|
||||||
|
|
||||||
|
let import_object = {
|
||||||
|
uw8: {
|
||||||
|
ram: new WebAssembly.Memory({ initial: 8, maximum: 8 }),
|
||||||
|
time: new WebAssembly.Global({value: 'i32', mutable: true}, 0),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let instance = new WebAssembly.Instance(compiled_module, import_object);
|
||||||
|
|
||||||
|
let canvasCtx = document.getElementById('screen').getContext('2d');
|
||||||
|
let imageData = canvasCtx.createImageData(320, 256);
|
||||||
|
|
||||||
|
let buffer = imageData.data;
|
||||||
|
for(let i = 0; i < 320*256; ++i) {
|
||||||
|
buffer[i * 4 + 3] = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
let startTime = Date.now();
|
||||||
|
|
||||||
|
function mainloop() {
|
||||||
|
import_object.uw8.time.value = Date.now() - startTime;
|
||||||
|
|
||||||
|
instance.exports.tic();
|
||||||
|
|
||||||
|
let framebuffer = new Uint8Array(import_object.uw8.ram.buffer.slice(120, 120 + 320*256));
|
||||||
|
for(let i = 0; i < 320*256; ++i) {
|
||||||
|
buffer[i * 4] = framebuffer[i];
|
||||||
|
buffer[i * 4 + 1] = framebuffer[i];
|
||||||
|
buffer[i * 4 + 2] = framebuffer[i];
|
||||||
|
}
|
||||||
|
canvasCtx.putImageData(imageData, 0, 0);
|
||||||
|
|
||||||
|
window.requestAnimationFrame(mainloop);
|
||||||
|
}
|
||||||
|
|
||||||
|
mainloop();
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
BIN
web/src/trainride.uw8
Normal file
BIN
web/src/trainride.uw8
Normal file
Binary file not shown.
4562
web/yarn.lock
Normal file
4562
web/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user