Implement carry flag for SUB, fix bug in ADD

This commit is contained in:
n loewen 2023-08-02 15:09:24 +01:00
parent 4183b7c38e
commit 8b4a670b29
1 changed files with 17 additions and 10 deletions

View File

@ -70,9 +70,9 @@ const Instructions = {
add_addr: (addr) => { add_addr: (addr) => {
CPU.currentInstruction.mnemonic = 'ADD addr'; CPU.currentInstruction.mnemonic = 'ADD addr';
let sum = CPU.Acc + CPU.memory[addr]; let sum = CPU.Acc + CPU.memory[addr];
if (sum > 15) { if (sum > 255) {
CPU.CF = 1; CPU.CF = 1;
CPU.Acc = (sum % 15) - 1; CPU.Acc = (sum % 255) - 1;
} else { } else {
CPU.CF = 0; CPU.CF = 0;
CPU.Acc = sum; CPU.Acc = sum;
@ -85,7 +85,7 @@ const Instructions = {
let sum = CPU.Acc - lit; let sum = CPU.Acc - lit;
if (sum < 0) { if (sum < 0) {
CPU.CF = 1; CPU.CF = 1;
CPU.Acc = (sum % 15) + 1; // FIXME ??? CPU.Acc = 255 + sum + 1;
} else { } else {
CPU.CF = 0; CPU.CF = 0;
CPU.Acc = sum; CPU.Acc = sum;
@ -93,9 +93,16 @@ const Instructions = {
CPU.IP = CPU.IP += 2; CPU.IP = CPU.IP += 2;
}, },
sub_addr: (addr) => { // TODO: carry flag sub_addr: (addr) => {
console.log("SUB addr"); CPU.currentInstruction.mnemonic = 'SUB addr';
CPU.Acc = CPU.Acc - CPU.memory[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; CPU.IP = CPU.IP += 2;
}, },
@ -183,11 +190,11 @@ exports.runProgram = async (code, debug = false) => {
stepCPU(); stepCPU();
console.group(`Step`); console.group(`Step`);
if (!debug) console.clear(); if (!debug) console.clear();
display.printDisplay(CPU.memory); display.printDisplay(CPU.memory);
logCPUState(); logCPUState();
if (!debug) await new Promise(resolve => setTimeout(resolve, 75)); if (!debug) await new Promise(resolve => setTimeout(resolve, 75));
console.groupEnd('Step'); console.groupEnd('Step');
}; };
} }