#!/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 );