def testCanInterpretBasicNumbers(self): self.assertEquals(0x01, base.number(0x0001)) self.assertEquals(-1, base.number(0xFFFF)) self.assertEquals(32767, base.number(0x7FFF)) self.assertEquals(-1, base.number(0xFFFF).as_signed()) self.assertEquals(0, base.number(0x0000).as_signed()) self.assertEquals(-32768, base.number(0x8000).as_signed()) self.assertEquals(32767, base.number(0x7FFF).as_signed()) self.assertEquals(-32767, base.number(self.memory.get_2byte(0x0C)).as_signed())
def test_op_not5(self): op = opcodes.op_not5() op.operands = [0x0F] op.optypes = [opcodes.TYPE_SMALL] op.store_loc = 0x00 self.cpu.set_variable(0x00, number(0xFFF0)) self.mymox.ReplayAll() op.execute(self.cpu) self.mymox.VerifyAll()
def test_op_loadw(self): op = opcodes.op_loadw() op.operands = [0x10, 0x05] op.optypes = [opcodes.TYPE_LARGE, opcodes.TYPE_LARGE] op.store_loc = 0x00 self.cpu.get_memory(0x1A).AndReturn(0x01) self.cpu.set_variable(0x00, number(0x01)) self.mymox.ReplayAll() op.execute(self.cpu) self.mymox.VerifyAll()
def get_arg(op, cpu, arg): a = op.operands[arg] return base.number(a)
def get_arg_value(op, cpu, arg): a = op.operands[arg] t = op.optypes[arg] if t == TYPE_LARGE or t == TYPE_SMALL: return base.number(a) return base.number(cpu.get_variable(a))
def testOverflow(self): # Not a formal part of spec, so we don't actually care right now # Suggestion is that 0x8000 + 0x8000 (or * 2) should be 0x0000 self.assertEquals(0, base.number(0x8000) + base.number(0x8000))
def testDivByZeroErrors(self): one = base.number(1) zero = base.number(0) self.assertRaises(ZeroDivisionError, lambda a: a[0] / a[1], (one, zero)) self.assertRaises(ZeroDivisionError, lambda a: a[0] % a[1], (one, zero))
def testCanPerformanMathOnNumbers(self): two = base.number(0x0002) sixteen = base.number(0x0010) minus_two = base.number(0xFFFE) self.assertEqual(two, two) self.assertEqual(minus_two, minus_two) self.assertEqual(base.number(4), two + two) self.assertEqual(base.number(14), sixteen + minus_two) self.assertEqual(base.number(-2), base.number(0) + minus_two) self.assertEqual(base.number(-2), base.number(0) - two) self.assertEqual(base.number(14), sixteen - two) self.assertEqual(base.number(8), base.number(4) * two) self.assertEqual(base.number(-8), base.number(4) * minus_two) self.assertEqual(two, base.number(4) / two) self.assertEqual(two, base.number(5) / two) self.assertEqual(base.number(1), base.number(5) % two) self.assertEqual("2", str(two)) self.assertEqual("-2", str(minus_two))