cardiograph-computer/run-cpu.js

55 lines
1.3 KiB
JavaScript
Executable File

#!/usr/bin/env node
// Usage: ./run-cpu.js -f code.asm [--debug] [--step] [--pretty]
const fs = require('fs');
const computer = require('./cpu.js');
const assembler = require('./assembler.js');
const { logRunningHeader } = require('./logging.js');
// Load file...
let filename = null;
process.argv.forEach((arg, index) => {
if (arg === '-f' && process.argv.length > (index -1)) {
filename = process.argv[index + 1];
}
});
if (!filename) {
console.error('Filename required');
console.error('eg: run-cpu.js -f code.asm');
process.exit()
}
const inputFile_str = fs.readFileSync(filename, 'utf8');
// Check optional arguments...
let debug = false;
let singleStep = false;
let prettyPrint = false;
process.argv.forEach((arg) => { if (arg === '--debug') { debug = true } });
process.argv.forEach((arg) => { if (arg === '--step') { singleStep = true } });
process.argv.forEach((arg) => { if (arg === '--pretty') { prettyPrint = true } });
let speed = null;
process.argv.forEach((arg, index) => {
if (arg === '--speed' && process.argv.length > (index -1)) {
speed = parseInt(process.argv[index + 1]);
}
});
let assemblerOutput = assembler.assemble(inputFile_str);
logRunningHeader();
computer.runProgram(
assemblerOutput.machineCode,
assemblerOutput.debugInfo,
debug,
singleStep,
prettyPrint,
speed
);