Refactor: Use `setInterval` to clock CPU, in order to remove unnecessary use of async/await
This commit is contained in:
parent
aa6cbc3e6d
commit
1d88d0b5b6
14
cpu.js
14
cpu.js
|
|
@ -294,18 +294,20 @@ async function stepCPU(debug = false) {
|
||||||
CPU.cycleCounter += 1;
|
CPU.cycleCounter += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await logCPUState(debug);
|
logCPUState(debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Uint8Array} code - Machine code to run
|
* @param {Uint8Array} code - Machine code to run
|
||||||
* @param {Boolean} [debug] - Enable/disable debugging printouts
|
* @param {Boolean} [debug] - Enable/disable debugging printouts
|
||||||
**/
|
**/
|
||||||
exports.runProgram = async (code, debug = false) => {
|
exports.runProgram = (code, debug = false, framerate = 10) => {
|
||||||
startCPU(code);
|
startCPU(code);
|
||||||
while (CPU.running) {
|
// Animate the output by pausing between steps
|
||||||
|
const loop = setInterval(async () => {
|
||||||
stepCPU(debug);
|
stepCPU(debug);
|
||||||
};
|
if (!CPU.running) clearInterval(loop);
|
||||||
|
}, framerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -314,7 +316,7 @@ exports.runProgram = async (code, debug = false) => {
|
||||||
/**
|
/**
|
||||||
* @param {Boolean} [debug] - Enable/disable debugging printouts
|
* @param {Boolean} [debug] - Enable/disable debugging printouts
|
||||||
**/
|
**/
|
||||||
async function logCPUState(debug = false) {
|
function logCPUState(debug = false) {
|
||||||
console.group(`Step`);
|
console.group(`Step`);
|
||||||
if (!debug) console.clear();
|
if (!debug) console.clear();
|
||||||
if (debug) {
|
if (debug) {
|
||||||
|
|
@ -328,7 +330,5 @@ async function logCPUState(debug = false) {
|
||||||
console.log();
|
console.log();
|
||||||
console.log(`IP: $${num2hex(CPU.IP)} Acc: $${num2hex(CPU.Acc)} NZOC: ${num2bin_4bit(CPU.FLAGS)} ${CPU.running ? "running" : "halted" }`);
|
console.log(`IP: $${num2hex(CPU.IP)} Acc: $${num2hex(CPU.Acc)} NZOC: ${num2bin_4bit(CPU.FLAGS)} ${CPU.running ? "running" : "halted" }`);
|
||||||
console.log();
|
console.log();
|
||||||
// Pause to show animated display:
|
|
||||||
if (!debug) await new Promise(resolve => setTimeout(resolve, 75));
|
|
||||||
console.groupEnd();
|
console.groupEnd();
|
||||||
};
|
};
|
||||||
|
|
@ -29,5 +29,5 @@ if (mode === "debug") {
|
||||||
computer.runProgram(machineCode, true);
|
computer.runProgram(machineCode, true);
|
||||||
} else {
|
} else {
|
||||||
machineCode = assembler.assemble(inputFile_str);
|
machineCode = assembler.assemble(inputFile_str);
|
||||||
computer.runProgram(machineCode, false);
|
computer.runProgram(machineCode, false, 200);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue