Example #1
0
 def test_asr(self):
     self.run_instructions([
         # set a, -1 / asr a, 3
         0x7c01, from_signed(-1), 0x900e
     ])
     self.assertRegister("A", from_signed(-1))
     self.assertRegister("EX", 0)
Example #2
0
 def test_mul_both_negative(self):
     self.run_instructions([
         # set a, -10 / mul a, -10
         0x7c01, from_signed(-10), 0x7c04, from_signed(-10)
     ])
     self.assertRegister("A", 100)
     self.assertRegister("EX", 0xffec)
Example #3
0
 def test_mdi(self):
     self.run_instructions([
         # set a to 7
         0x7c01, from_signed(-7),
         # % 16
         0x7c09, 16
     ])
     # this is actually remainder...
     self.assertRegister("A", from_signed(-7))
Example #4
0
 def test_dvi(self):
     self.run_instructions([
         # set a to -80
         0x7c01, from_signed(-80),
         # divide -80 by -40
         0x7c07, from_signed(-40),
     ])
     self.assertRegister("A", 2)
     self.assertRegister("EX", 0)
Example #5
0
 def test_div_negative(self):
     self.run_instructions([
         # set a to -80
         0x7c01, from_signed(-80),
         # divide -80 by -40
         0x7c06, from_signed(-40),
     ])
     self.assertRegister("A", 0)
     self.assertRegister("EX", 0xffd7)
Example #6
0
 def test_mli_both_negative(self):
     self.run_instructions([
         # set ram address 0x1337 to -10
         0x7fc1, from_signed(-10), 0x1337,
         # mli -10 by -10
         0x7fc5, from_signed(-10), 0x1337
     ])
     self.assertRAM(0x1337, 100)
     self.assertRegister("EX", 0x0)
Example #7
0
 def test_mli(self):
     self.run_instructions([
         # set ram address 0x1337 to 80
         0x7fc1, 80, 0x1337,
         # mli 80 by -2
         0x7fc5, from_signed(-2), 0x1337
     ])
     self.assertRAM(0x1337, from_signed(-160))
     self.assertRegister("EX", 0)
Example #8
0
 def test_mul_both_negative_pointer(self):
     self.run_instructions([
         # set ram address 0x1337 to -10
         0x7fc1, from_signed(-10), 0x1337,
         # mul -10 by -10
         0x7fc4, from_signed(-10), 0x1337
     ])
     self.assertRAM(0x1337, 100)
     self.assertRegister("EX", 0xffec)
Example #9
0
 def test_ifu(self):
     self.run_instructions([
         # if -1 < 0 (True)
         # these are backwards too.
         0x7ff7, 0, from_signed(-1),
         # set a to 0xbeef (this should get evaluated)
         0x7c01, 0xbeef,
         # if 0 < -1 (False)
         0x7ff7, from_signed(-1), 0,
         # set b to 0xdead (this shouldn't get evaluated)
         0x7c21, 0xdead
     ])
     self.assertRegister("A", 0xbeef)
     self.assertRegister("B", 0x0)
Example #10
0
 def signed_wrapper(self, state, b_unsigned, a_unsigned):
     b = as_signed(b_unsigned)
     a = as_signed(a_unsigned)
     value = from_signed(fn(self, state, b, a))
     # handle overflow for signed values
     overflow, result = divmod(value, self.cells)
     # NOTE: this clears overflow for all signed operations.
     # this may be wrong; I don't care right now.
     return value, overflow
Example #11
0
 def test_from_signed(self):
     for v, u in self.values:
         self.assertEqual(from_signed(v), u)