From d1a84748fc6dacf79e3a5281a6e3dbfa32ab8b1c Mon Sep 17 00:00:00 2001 From: n loewen Date: Tue, 25 Jul 2023 19:00:34 +0100 Subject: [PATCH] Implement CCF (Clear Carry Flag) and CHP (Carry Hop) --- simulator-sketch.js | 59 +++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/simulator-sketch.js b/simulator-sketch.js index 931a89e..c7d9c54 100644 --- a/simulator-sketch.js +++ b/simulator-sketch.js @@ -103,9 +103,20 @@ function CPU(mem) { this.instructionPointer = this.memory[addr]; }, - // TODO: UNIMPLEMENTED - carry_toggle: () => { return; }, - carry_hop: () => { return; }, + carry_clear: () => { + console.log("CFC"); + this.carryFlag = 0; + this.instructionPointer += 1; + }, + + carry_hop: () => { + console.log("CHP"); + if (this.carryFlag != 0) { + this.instructionPointer += 2; + } else { + this.instructionPointer += 1; + } + }, }; this.perform_operation = (opcode, arg) => { @@ -162,6 +173,14 @@ function CPU(mem) { this.instructions.jump_addr(arg); break; + case 13: + this.instructions.carry_clear(arg); + break; + + case 14: + this.instructions.carry_hop(arg); + break; + default: console.error( `Invalid opcode: ${opcode} with argument ${arg}` ); } @@ -205,7 +224,7 @@ function CPU(mem) { }; -// TEST +// TESTS let halt_and_catch_fire = [ [0, 0], @@ -219,8 +238,6 @@ let test_lda_sto = [ [2, 6], // STO addr [0, 0], // END ]; -// let comp = new CPU(test_lda_sto); -// comp.run_program(); let test_add_sub_nocarry = [ [5, 6], // ADD lit ... acc = 6 @@ -234,8 +251,6 @@ let test_add_sub = [ [5, 26], // ADD lit [0, 0], // END ] -// let comp = new CPU(test_add_sub); -//comp.run_program(); let test_hop = [ [5, 8], // ADD lit ... acc = 8 @@ -244,10 +259,6 @@ let test_hop = [ [7, 8], // SUB lit ... acc = 0 [0, 0] ] -//let comp = new CPU(test_hop); -//comp.run_program(); - -// TODO: TEST HOP_addr let test_jmp = [ [11, 4], // 0 @@ -257,6 +268,24 @@ let test_jmp = [ [5, 8], // 4 ... ADD lit ... acc = 8 [0, 0], // 5 ... END ] -let comp = new CPU(test_jmp); -comp.run_program(); -console.table(comp.memory); \ No newline at end of file + +let test_chp = [ + [5, 8], // ADD lit ... acc = 8 + [14, 0], // CHP ... shouldn't hop (CF = 0) + [5, 1], // ADD lit ... acc = 9 + [5, 8], // ADD lit ... acc = 1 and CF = 1 + [14, 0], // CHP ... hop! (CF = 1) + [0, 0], // END + [7, 1], // SUB lit ... acc = 0 + [13, 0], // CFC ... CF = 0 + [0, 0], // END +] + +//let comp = new CPU(test_chp); + +let comp = new CPU(test_lda_sto); +let memory_snapshots = comp.run_program(); +log_table_with_title(memory_snapshots.memoryAtEnd, 'Memory after running'); +log_table_with_title(memory_snapshots.memoryAtStart, 'Memory before running'); + +// TODO: TEST HOP_addr \ No newline at end of file