def test_exiting_on_halt(self): load_into_memory(self.cpu.memory, ["nop", "nop", "swi #0", "nop"]) self.cpu.execute_until_halted() self.assertEqual(self.cpu.instructions_executed, 3) self.assertEqual(self.cpu.register_bank.get("pc"), 3)
def test_bl(self): load_into_memory(self.proc.memory, ["bl foobar", "nop", "foobar nop"]) self.proc.step() self.assertEqual(self.proc.register_bank.get("lr"), 1) self.assertEqual(self.proc.register_bank.get("pc"), 2)
def test_beq_not_performed(self): load_into_memory(self.proc.memory, ["mov r0, #5", "cmp r0, #6", "beq foobar", "nop", "foobar nop"]) self.proc.step() self.proc.step() self.proc.step() # beq self.assertEqual(self.proc.register_bank.get("pc"), 3)
def test_push(self): load_into_memory(self.proc.memory, ["mov r0, #5", "push r0"]) self.proc.step() self.proc.step() sp = self.proc.register_bank.get("sp") self.assertEqual(self.proc.memory.get(sp), 5)
def test_beq_not_performed(self): load_into_memory( self.proc.memory, ["mov r0, #5", "cmp r0, #6", "beq foobar", "nop", "foobar nop"]) self.proc.step() self.proc.step() self.proc.step() # beq self.assertEqual(self.proc.register_bank.get("pc"), 3)
def test_pop(self): load_into_memory(self.proc.memory, ["mov r0, #5", "mov r1, #9", "push r0", "push r1", "pop r2", "pop r3"]) self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.assertEqual(self.proc.register_bank.get("r2"), 9) self.assertEqual(self.proc.register_bank.get("r3"), 5)
def test_pop(self): load_into_memory(self.proc.memory, [ "mov r0, #5", "mov r1, #9", "push r0", "push r1", "pop r2", "pop r3" ]) self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.proc.step() self.assertEqual(self.proc.register_bank.get("r2"), 9) self.assertEqual(self.proc.register_bank.get("r3"), 5)
def test_fetch_valid_instruction(self): load_into_memory(self.cpu.memory, ["mov r0, #1", "mov r1, #5"]) inst_1 = self.cpu.fetch_instruction() self.assertEqual(self.cpu.register_bank.get("pc"), 1) self.assertEqual(self.cpu.instructions_executed, 0) self.assertEqual(inst_1.mnemonic, "mov") self.assertEqual(inst_1.operands[0].value, "r0") self.assertEqual(inst_1.operands[1].value, 1) inst_2 = self.cpu.fetch_instruction() self.assertEqual(self.cpu.register_bank.get("pc"), 2) self.assertEqual(inst_2.mnemonic, "mov") self.assertEqual(inst_2.operands[0].value, "r1") self.assertEqual(inst_2.operands[1].value, 5)
def test_load_into_memory(self): source_code = ["mov r0, #1", "mov r1, #5"] test_memory = Memory() load_into_memory(test_memory, source_code) self.assertEqual(test_memory.get(2), 0) inst_1 = test_memory.get(0) inst_2 = test_memory.get(1) self.assertEqual(inst_1.mnemonic, "mov") self.assertEqual(inst_1.operands[0].value, "r0") self.assertEqual(inst_1.operands[1].value, 1) self.assertEqual(inst_2.mnemonic, "mov") self.assertEqual(inst_2.operands[0].value, "r1") self.assertEqual(inst_2.operands[1].value, 5)