Corrective tweaks
This commit is contained in:
+25
-10
@@ -11,6 +11,9 @@
|
||||
// Object constructor
|
||||
constructor() {
|
||||
|
||||
// Configure instance fields
|
||||
this.buffers = {};
|
||||
|
||||
// Configure message port
|
||||
onmessage = e=>this.onmessage(e.data);
|
||||
}
|
||||
@@ -33,12 +36,11 @@
|
||||
|
||||
// Load and instantiate the WebAssembly module
|
||||
this.wasm = await WebAssembly.instantiate(msg.wasm,
|
||||
{ env: { emscripten_notify_memory_growth: function(){} }});
|
||||
{ env: { emscripten_notify_memory_growth: ()=>this.onmemory() }});
|
||||
this.wasm.instance.exports.Init();
|
||||
|
||||
// Configure instance fields
|
||||
this.core = this.wasm.instance.exports;
|
||||
this.memory = this.core.memory.buffer;
|
||||
this.core = this.wasm.instance.exports;
|
||||
|
||||
postMessage({ command: "Init" });
|
||||
}
|
||||
@@ -47,9 +49,9 @@
|
||||
readBuffer(msg) {
|
||||
let buffer = this.malloc(Uint8Array, msg.size);
|
||||
this.core.ReadBuffer(msg.sim, buffer.pointer, msg.address, msg.size);
|
||||
msg.buffer = buffer.buffer.slice(
|
||||
msg.buffer = this.core.memory.buffer.slice(
|
||||
buffer.pointer, buffer.pointer + msg.size);
|
||||
this.core.Free(buffer.pointer);
|
||||
this.free(buffer);
|
||||
postMessage(msg, msg.buffer);
|
||||
}
|
||||
|
||||
@@ -58,7 +60,7 @@
|
||||
let rom = new Uint8Array(msg.rom);
|
||||
let buffer = this.malloc(Uint8Array, rom.length);
|
||||
for (let x = 0; x < rom.length; x++)
|
||||
buffer[x] = rom[x];
|
||||
buffer.data[x] = rom[x];
|
||||
msg.success = !!this.core.SetROM(msg.sim, buffer.pointer, rom.length);
|
||||
delete msg.rom;
|
||||
postMessage(msg);
|
||||
@@ -66,14 +68,27 @@
|
||||
|
||||
|
||||
|
||||
///////////////////////////// Utility Methods /////////////////////////////
|
||||
///////////////////////////// Private Methods /////////////////////////////
|
||||
|
||||
// Delete a previously-allocated memory buffer
|
||||
free(buffer) {
|
||||
this.core.Free(buffer.pointer);
|
||||
delete this.buffers[buffer.pointer];
|
||||
}
|
||||
|
||||
// Allocate a typed array in WebAssembly core memory
|
||||
malloc(type, size) {
|
||||
let pointer = this.core.Malloc(size);
|
||||
let ret = new type(this.memory, pointer, size);
|
||||
ret.pointer = pointer;
|
||||
return ret;
|
||||
let data = new type(this.core.memory.buffer, pointer, size);
|
||||
return this.buffers[pointer] = { data: data, pointer: pointer };
|
||||
}
|
||||
|
||||
// WebAssembly memory has grown
|
||||
onmemory() {
|
||||
for (let buffer of Object.values(this.buffers)) {
|
||||
buffer.data = new buffer.data.constructor(
|
||||
this.core.memory.buffer, buffer.pointer);
|
||||
}
|
||||
}
|
||||
|
||||
}).initializer();
|
||||
|
||||
@@ -96,8 +96,7 @@ globalThis.MemoryWindow = class MemoryWindow extends Toolkit.Window {
|
||||
|
||||
// Determine the height in pixels of one row of output
|
||||
lineHeight() {
|
||||
let ret = this.rows[0].address.getBounds().height;
|
||||
return ret;
|
||||
return Math.max(1, this.rows[0].address.getBounds().height);
|
||||
}
|
||||
|
||||
// Determine the number of rows of output
|
||||
@@ -106,7 +105,7 @@ globalThis.MemoryWindow = class MemoryWindow extends Toolkit.Window {
|
||||
lineHeight = lineHeight || this.lineHeight();
|
||||
let ret = clientHeight / lineHeight;
|
||||
ret = fullyVisible ? Math.floor(ret) : Math.ceil(ret);
|
||||
return Math.max(1, Math.min(ret, Math.floor(clientHeight / 8)));
|
||||
return Math.max(1, ret);
|
||||
}
|
||||
|
||||
// Key down event handler
|
||||
@@ -115,7 +114,7 @@ globalThis.MemoryWindow = class MemoryWindow extends Toolkit.Window {
|
||||
// Control is pressed
|
||||
if (e.ctrlKey) switch (e.key) {
|
||||
case "g": case "G":
|
||||
let addr = prompt(this.application.translate("{app.romLoaded}"));
|
||||
let addr = prompt(this.application.translate("{app.goto_}"));
|
||||
if (addr === null)
|
||||
break;
|
||||
this.seek(
|
||||
|
||||
Reference in New Issue
Block a user