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'); }; }