From 8b4a670b29cd74ab1634fef0e837f4c7f628b9ad Mon Sep 17 00:00:00 2001 From: n loewen Date: Wed, 2 Aug 2023 15:09:24 +0100 Subject: [PATCH] Implement carry flag for SUB, fix bug in ADD --- simulator.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/simulator.js b/simulator.js index f6b0bed..b3119a1 100644 --- a/simulator.js +++ b/simulator.js @@ -70,9 +70,9 @@ const Instructions = { add_addr: (addr) => { CPU.currentInstruction.mnemonic = 'ADD addr'; let sum = CPU.Acc + CPU.memory[addr]; - if (sum > 15) { + if (sum > 255) { CPU.CF = 1; - CPU.Acc = (sum % 15) - 1; + CPU.Acc = (sum % 255) - 1; } else { CPU.CF = 0; CPU.Acc = sum; @@ -85,7 +85,7 @@ const Instructions = { let sum = CPU.Acc - lit; if (sum < 0) { CPU.CF = 1; - CPU.Acc = (sum % 15) + 1; // FIXME ??? + CPU.Acc = 255 + sum + 1; } else { CPU.CF = 0; CPU.Acc = sum; @@ -93,9 +93,16 @@ const Instructions = { CPU.IP = CPU.IP += 2; }, - sub_addr: (addr) => { // TODO: carry flag - console.log("SUB addr"); - CPU.Acc = CPU.Acc - CPU.memory[addr]; + sub_addr: (addr) => { + CPU.currentInstruction.mnemonic = 'SUB addr'; + let sum = CPU.Acc - CPU.memory[addr]; + if (sum < 0) { + CPU.CF = 1; + CPU.Acc = 255 + sum + 1; + } else { + CPU.CF = 0; + CPU.Acc = sum; + } CPU.IP = CPU.IP += 2; }, @@ -183,11 +190,11 @@ exports.runProgram = async (code, debug = false) => { stepCPU(); console.group(`Step`); - if (!debug) console.clear(); - display.printDisplay(CPU.memory); + if (!debug) console.clear(); + display.printDisplay(CPU.memory); - logCPUState(); - if (!debug) await new Promise(resolve => setTimeout(resolve, 75)); + logCPUState(); + if (!debug) await new Promise(resolve => setTimeout(resolve, 75)); console.groupEnd('Step'); }; }