Assemble kernel on the client #1
19
boot.js
19
boot.js
@@ -10,10 +10,17 @@ const assemble = (async () => {
|
|||||||
})();
|
})();
|
||||||
|
|
||||||
self.onmessage = async (e) => {
|
self.onmessage = async (e) => {
|
||||||
const exports = { emu: { mem: e.data } };
|
switch (e.data.type) {
|
||||||
const wasm = await assemble;
|
case "load":
|
||||||
const mod = await WebAssembly.instantiate(wasm, exports);
|
const exports = { emu: { mem: e.data.mem } };
|
||||||
await self.postMessage('booting');
|
const wasm = await assemble;
|
||||||
mod.instance.exports.reset();
|
self.mod = await WebAssembly.instantiate(wasm, exports);
|
||||||
console.log('System halt');
|
await self.postMessage('ready');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "boot":
|
||||||
|
self.mod.instance.exports.reset();
|
||||||
|
console.log('System halt');
|
||||||
|
break;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
3
emu.js
3
emu.js
@@ -54,10 +54,11 @@ class Emulator {
|
|||||||
this.print("Assembling kernel ");
|
this.print("Assembling kernel ");
|
||||||
const dots = setInterval(() => this.print("."), DOT_INTERVAL_MS);
|
const dots = setInterval(() => this.print("."), DOT_INTERVAL_MS);
|
||||||
this.worker = new Worker('boot.js', { type: 'module' });
|
this.worker = new Worker('boot.js', { type: 'module' });
|
||||||
this.worker.postMessage(this.mem);
|
this.worker.postMessage({ type: "load", mem: this.mem });
|
||||||
this.worker.onmessage = (e) => {
|
this.worker.onmessage = (e) => {
|
||||||
clearInterval(dots);
|
clearInterval(dots);
|
||||||
this.print(" done\n");
|
this.print(" done\n");
|
||||||
|
this.worker.postMessage({ type: "boot" });
|
||||||
};
|
};
|
||||||
|
|
||||||
fetch('prelude.f')
|
fetch('prelude.f')
|
||||||
|
|||||||
Reference in New Issue
Block a user