Implement carry flag for SUB, fix bug in ADD
This commit is contained in:
parent
4183b7c38e
commit
8b4a670b29
27
simulator.js
27
simulator.js
|
|
@ -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');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue