From f05a85cd0d2589ebb0c55b99afebba0091f29115 Mon Sep 17 00:00:00 2001 From: n loewen Date: Wed, 2 Aug 2023 14:05:59 +0100 Subject: [PATCH] Move pretty-printed "Running at..." header to logging.js + re-arrange logging.js exports --- logging.js | 20 +++++++++++++++++--- simulator.js | 26 ++++++++++---------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/logging.js b/logging.js index bfd7259..dfc1ade 100644 --- a/logging.js +++ b/logging.js @@ -1,4 +1,4 @@ -exports.logMemory = (x) => { +const logMemory = (x) => { console.log(`┌────────┬────────┬────────┐`); console.log(`│ addr │ op │ arg │`); console.log(`├────────┼────────┼────────┤`); @@ -11,6 +11,20 @@ exports.logMemory = (x) => { console.log(`└────────┴────────┴────────┘`); } -const num2hex = (num) => num.toString(16).toUpperCase().padStart(2, "0"); +const logRunningHeader = () => { + console.log(); + let time = new Date(); + console.log( `┌─────────────────────┐`); + console.log( `│ Running at ${time.toLocaleTimeString('en-GB')} │` ); + console.log( `└─────────────────────┘`); +} -exports.num2hex = num2hex; \ No newline at end of file +const num2hex = (num) => num.toString(16).toUpperCase().padStart(2, "0"); +const hex2num = (hex) => parseInt(hex, 16); + +module.exports = { + "logMemory": logMemory, + "logRunningHeader": logRunningHeader, + "num2hex": num2hex, + "hex2num": hex2num, +} diff --git a/simulator.js b/simulator.js index fabd804..582a881 100644 --- a/simulator.js +++ b/simulator.js @@ -1,4 +1,5 @@ const { INITIAL_IP_ADDRESS, CYCLE_LIMIT } = require('./machine.config'); +const { logRunningHeader, num2hex } = require('./logging.js'); const display = require('./display.js'); // STATE @@ -76,7 +77,14 @@ const Instructions = { sub_lit: (lit) => { // TODO: carry flag console.log("SUB lit"); - CPU.Acc = CPU.Acc - lit; + let sum = CPU.Acc - lit; + if (sum < 0) { + CPU.CF = 1; + CPU.Acc = (sum % 15) + 1; // FIXME ??? + } else { + CPU.CF = 0; + CPU.Acc = sum; + } CPU.IP = CPU.IP += 2; }, @@ -192,18 +200,4 @@ function logCPUState() { console.log(); console.log( `IP: ${CPU.IP} Acc: ${CPU.Acc} CF: ${CPU.CF}  ${CPU.running ? "running" : "halted" }` ); console.log(); -}; - - -// FUNCTIONS FOR DISPLAYING DATA - -function num2hex(num) { return num.toString(16) }; -function hex2num(hex) { return parseInt(hex, 16) }; - -function logRunningHeader() { - console.log(); - let time = new Date(); - console.log( `┌─────────────────────┐`); - console.log( `│ Running at ${time.toLocaleTimeString('en-GB')} │` ); - console.log( `└─────────────────────┘`); -} \ No newline at end of file +}; \ No newline at end of file