cardiograph - Change to take input from stdin!

This commit is contained in:
n loewen 2023-08-29 12:54:32 -04:00
parent 7faf190fe2
commit 049d9367ac
1 changed files with 40 additions and 24 deletions

View File

@ -1,3 +1,4 @@
const DBG = require('./dbg.js');
const { num2hex, bool2bit } = require('./logging.js');
const CFG = require('./machine.config.js');
@ -5,25 +6,45 @@ const CPU = require('./cpu.js');
const io = require('./io.js');
// TODO - replace with reading STDIN:
const assembler = require('./assembler.js');
const fs = require('fs');
const filename = process.argv[2];
const inputFile_str = fs.readFileSync(filename, 'utf8');
let assemblerOutput = assembler.assemble(inputFile_str);
/** SETUP **/
const dbg = new DBG('nitpick');
let cpu = new CPU(CFG.initialIP, CFG.defaultCycleLimit);
cpu.loadMemory(assemblerOutput.machineCode);
cpu.loadSourceInfo(assemblerOutput.debugInfo);
main();
cpu.onCycleEnd(tick);
cpu.onCycleEnd(logCPUState);
async function main() {
const input = await readPipedStdin();
dbg.nit('input: \n', input);
const debuggable = true; // FIXME - Get this as a command line flag instead
// if debuggable === true, the input is JSON {sourceInfo, machineCode}
// otherwise, the input is a string of space-separated numbers
let code = null;
let sourceInfo = null;
if (!debuggable) {
code = new Uint8Array(input.split(' '));
dbg.nit(code);
} else {
const parsedInput = JSON.parse(input);
code = new Uint8Array(parsedInput.machineCode);
sourceInfo = parsedInput.sourceInfo;
dbg.nit(code);
dbg.nit(sourceInfo);
}
cpu.loadMemory(code);
if (debuggable) { cpu.loadSourceInfo(sourceInfo); }
cpu.onCycleEnd(tick);
cpu.onCycleEnd(logCPUState);
cpu.start();
io.getKeypadInput(cpu);
cpu.step();
}
cpu.start();
io.getKeypadInput(cpu);
cpu.step();
async function tick() {
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
@ -36,7 +57,10 @@ async function tick() {
}
function logCPUState() {
let lineInfo = cpu.dbg.sourceInfo[cpu.dbg.previousIP];
let lineInfo = null;
if (cpu.dbg.sourceInfo) {
lineInfo = cpu.dbg.sourceInfo[cpu.dbg.previousIP];
}
console.group(`Step ${cpu.dbg.cycleCounter}`);
console.log();
io.showDisplay(cpu.memory, true); // FIXME - display - allow printing hex as well as pretty-printing
@ -54,14 +78,6 @@ function logCPUState() {
console.groupEnd();
};
/*
(async function() {
let input = await readPipedStdin();
console.log(input);
})()
*/
async function readPipedStdin() {
// https://wellingguzman.com/notes/node-pipe-input
return new Promise(function (resolve, reject) {