From 837c691fdcdebe8e5ca5abade51c722f1a9c369a Mon Sep 17 00:00:00 2001 From: Neil Webber Date: Mon, 13 May 2024 12:40:38 -0500 Subject: [PATCH] added MUL test --- pdptests.py | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) diff --git a/pdptests.py b/pdptests.py index 678a771..815162a 100644 --- a/pdptests.py +++ b/pdptests.py @@ -710,6 +710,288 @@ class TestMethods(unittest.TestCase): self.assertEqual(p.r[1], expected_R1) expected_R1 = (expected_R1 - 1) & 0o177777 + def test_mul(self): + # huge table of data generated via SIMH + # each entry is X (16 bits), Y (16), X*Y (2 x 16 bits) + simhdata = [ + 0o177777, 0o177777, 0, 1, 0o177776, 0o177777, 0, + 2, 0o177000, 0o177777, 0, 0o001000, 0o176543, 0o177777, 0, + 0o001235, 0o105432, 0o177777, 0, 0o072346, 0o100420, 0o177777, 0, + 0o077360, 0o100002, 0o177777, 0, 0o077776, 0o100001, 0o177777, 0, + 0o077777, 0o100000, 0o177777, 0, 0o100000, 0o077777, 0o177777, + 0o177777, 0o100001, 0o077776, 0o177777, 0o177777, 0o100002, + 0o077775, 0o177777, 0o177777, 0o100003, 0o054321, 0o177777, + 0o177777, 0o123457, 0o043210, 0o177777, 0o177777, 0o134570, + 0o032412, 0o177777, 0o177777, 0o145366, 7, 0o177777, 0o177777, + 0o177771, 6, 0o177777, 0o177777, 0o177772, 5, 0o177777, 0o177777, + 0o177773, 4, 0o177777, 0o177777, 0o177774, 3, 0o177777, 0o177777, + 0o177775, 2, 0o177777, 0o177777, 0o177776, 1, 0o177777, 0o177777, + 0o177777, 0o177777, 0o177776, 0, 2, 0o177776, 0o177776, 0, 4, + 0o177000, 0o177776, 0, 0o002000, 0o176543, 0o177776, 0, 0o002472, + 0o105432, 0o177776, 0, 0o164714, 0o100420, 0o177776, 0, 0o176740, + 0o100002, 0o177776, 0, 0o177774, 0o100001, 0o177776, 0, 0o177776, + 0o100000, 0o177776, 1, 0, 0o077777, 0o177776, 0o177777, 2, + 0o077776, 0o177776, 0o177777, 4, 0o077775, 0o177776, 0o177777, 6, + 0o054321, 0o177776, 0o177777, 0o047136, 0o043210, 0o177776, + 0o177777, 0o071360, 0o032412, 0o177776, 0o177777, 0o112754, 7, + 0o177776, 0o177777, 0o177762, 6, 0o177776, 0o177777, 0o177764, 5, + 0o177776, 0o177777, 0o177766, 4, 0o177776, 0o177777, 0o177770, 3, + 0o177776, 0o177777, 0o177772, 2, 0o177776, 0o177777, 0o177774, 1, + 0o177776, 0o177777, 0o177776, 0o177777, 0o177000, 0, 0o001000, + 0o177776, 0o177000, 0, 0o002000, 0o177000, 0o177000, 4, 0, + 0o176543, 0o177000, 5, 0o035000, 0o105432, 0o177000, 0o000351, + 0o146000, 0o100420, 0o177000, 0o000375, 0o160000, 0o100002, + 0o177000, 0o000377, 0o176000, 0o100001, 0o177000, 0o000377, + 0o177000, 0o100000, 0o177000, 0o000400, 0, 0o077777, 0o177000, + 0o177400, 0o001000, 0o077776, 0o177000, 0o177400, 0o002000, + 0o077775, 0o177000, 0o177400, 0o003000, 0o054321, 0o177000, + 0o177516, 0o057000, 0o043210, 0o177000, 0o177562, 0o170000, + 0o032412, 0o177000, 0o177625, 0o166000, 7, 0o177000, 0o177777, + 0o171000, 6, 0o177000, 0o177777, 0o172000, 5, 0o177000, 0o177777, + 0o173000, 4, 0o177000, 0o177777, 0o174000, 3, 0o177000, 0o177777, + 0o175000, 2, 0o177000, 0o177777, 0o176000, 1, 0o177000, 0o177777, + 0o177000, 0o177777, 0o176543, 0, 0o001235, 0o177776, 0o176543, 0, + 0o002472, 0o177000, 0o176543, 5, 0o035000, 0o176543, 0o176543, 6, + 0o152111, 0o105432, 0o176543, 0o000461, 0o076416, 0o100420, + 0o176543, 0o000513, 0o134460, 0o100002, 0o176543, 0o000516, + 0o075306, 0o100001, 0o176543, 0o000516, 0o076543, 0o100000, + 0o176543, 0o000516, 0o100000, 0o077777, 0o176543, 0o177261, + 0o101235, 0o077776, 0o176543, 0o177261, 0o102472, 0o077775, + 0o176543, 0o177261, 0o103727, 0o054321, 0o176543, 0o177427, + 0o162723, 0o043210, 0o176543, 0o177507, 0o127230, 0o032412, + 0o176543, 0o177565, 0o062336, 7, 0o176543, 0o177777, 0o166665, 6, + 0o176543, 0o177777, 0o170122, 5, 0o176543, 0o177777, 0o171357, 4, + 0o176543, 0o177777, 0o172614, 3, 0o176543, 0o177777, 0o174051, 2, + 0o176543, 0o177777, 0o175306, 1, 0o176543, 0o177777, 0o176543, + 0o177777, 0o105432, 0, 0o072346, 0o177776, 0o105432, 0, 0o164714, + 0o177000, 0o105432, 0o000351, 0o146000, 0o176543, 0o105432, + 0o000461, 0o076416, 0o105432, 0o105432, 0o032541, 0o037244, + 0o100420, 0o105432, 0o034766, 0o145640, 0o100002, 0o105432, + 0o035162, 0o013064, 0o100001, 0o105432, 0o035162, 0o105432, + 0o100000, 0o105432, 0o035163, 0, 0o077777, 0o105432, 0o142615, + 0o072346, 0o077776, 0o105432, 0o142615, 0o164714, 0o077775, + 0o105432, 0o142616, 0o057262, 0o054321, 0o105432, 0o153561, + 0o100072, 0o043210, 0o105432, 0o157713, 0o000720, 0o032412, + 0o105432, 0o163707, 0o150404, 7, 0o105432, 0o177774, 0o146666, 6, + 0o105432, 0o177775, 0o041234, 5, 0o105432, 0o177775, 0o133602, 4, + 0o105432, 0o177776, 0o026150, 3, 0o105432, 0o177776, 0o120516, 2, + 0o105432, 0o177777, 0o013064, 1, 0o105432, 0o177777, 0o105432, + 0o177777, 0o100420, 0, 0o077360, 0o177776, 0o100420, 0, 0o176740, + 0o177000, 0o100420, 0o000375, 0o160000, 0o176543, 0o100420, + 0o000513, 0o134460, 0o105432, 0o100420, 0o034766, 0o145640, + 0o100420, 0o100420, 0o037361, 0o020400, 0o100002, 0o100420, + 0o037567, 0o001040, 0o100001, 0o100420, 0o037567, 0o100420, + 0o100000, 0o100420, 0o037570, 0, 0o077777, 0o100420, 0o140210, + 0o077360, 0o077776, 0o100420, 0o140210, 0o176740, 0o077775, + 0o100420, 0o140211, 0o076320, 0o054321, 0o100420, 0o151765, + 0o157020, 0o043210, 0o100420, 0o156406, 0o170200, 0o032412, + 0o100420, 0o162663, 0o055240, 7, 0o100420, 0o177774, 0o103560, 6, + 0o100420, 0o177775, 0o003140, 5, 0o100420, 0o177775, 0o102520, 4, + 0o100420, 0o177776, 0o002100, 3, 0o100420, 0o177776, 0o101460, 2, + 0o100420, 0o177777, 0o001040, 1, 0o100420, 0o177777, 0o100420, + 0o177777, 0o100002, 0, 0o077776, 0o177776, 0o100002, 0, 0o177774, + 0o177000, 0o100002, 0o000377, 0o176000, 0o176543, 0o100002, + 0o000516, 0o075306, 0o105432, 0o100002, 0o035162, 0o013064, + 0o100420, 0o100002, 0o037567, 0o001040, 0o100002, 0o100002, + 0o037776, 4, 0o100001, 0o100002, 0o037776, 0o100002, 0o100000, + 0o100002, 0o037777, 0, 0o077777, 0o100002, 0o140001, 0o077776, + 0o077776, 0o100002, 0o140001, 0o177774, 0o077775, 0o100002, + 0o140002, 0o077772, 0o054321, 0o100002, 0o151630, 0o030642, + 0o043210, 0o100002, 0o156274, 0o106420, 0o032412, 0o100002, + 0o162573, 0o065024, 7, 0o100002, 0o177774, 0o100016, 6, 0o100002, + 0o177775, 0o000014, 5, 0o100002, 0o177775, 0o100012, 4, 0o100002, + 0o177776, 0o000010, 3, 0o100002, 0o177776, 0o100006, 2, 0o100002, + 0o177777, 4, 1, 0o100002, 0o177777, 0o100002, 0o177777, 0o100001, + 0, 0o077777, 0o177776, 0o100001, 0, 0o177776, 0o177000, 0o100001, + 0o000377, 0o177000, 0o176543, 0o100001, 0o000516, 0o076543, + 0o105432, 0o100001, 0o035162, 0o105432, 0o100420, 0o100001, + 0o037567, 0o100420, 0o100002, 0o100001, 0o037776, 0o100002, + 0o100001, 0o100001, 0o037777, 1, 0o100000, 0o100001, 0o037777, + 0o100000, 0o077777, 0o100001, 0o140000, 0o177777, 0o077776, + 0o100001, 0o140001, 0o077776, 0o077775, 0o100001, 0o140001, + 0o177775, 0o054321, 0o100001, 0o151627, 0o154321, 0o043210, + 0o100001, 0o156274, 0o043210, 0o032412, 0o100001, 0o162573, + 0o032412, 7, 0o100001, 0o177774, 0o100007, 6, 0o100001, 0o177775, + 6, 5, 0o100001, 0o177775, 0o100005, 4, 0o100001, 0o177776, 4, 3, + 0o100001, 0o177776, 0o100003, 2, 0o100001, 0o177777, 2, 1, + 0o100001, 0o177777, 0o100001, 0o177777, 0o100000, 0, 0o100000, + 0o177776, 0o100000, 1, 0, 0o177000, 0o100000, 0o000400, 0, + 0o176543, 0o100000, 0o000516, 0o100000, 0o105432, 0o100000, + 0o035163, 0, 0o100420, 0o100000, 0o037570, 0, 0o100002, 0o100000, + 0o037777, 0, 0o100001, 0o100000, 0o037777, 0o100000, 0o100000, + 0o100000, 0o040000, 0, 0o077777, 0o100000, 0o140000, 0o100000, + 0o077776, 0o100000, 0o140001, 0, 0o077775, 0o100000, 0o140001, + 0o100000, 0o054321, 0o100000, 0o151627, 0o100000, 0o043210, + 0o100000, 0o156274, 0, 0o032412, 0o100000, 0o162573, 0, 7, + 0o100000, 0o177774, 0o100000, 6, 0o100000, 0o177775, 0, 5, + 0o100000, 0o177775, 0o100000, 4, 0o100000, 0o177776, 0, 3, + 0o100000, 0o177776, 0o100000, 2, 0o100000, 0o177777, 0, 1, + 0o100000, 0o177777, 0o100000, 0o177777, 0o077777, 0o177777, + 0o100001, 0o177776, 0o077777, 0o177777, 2, 0o177000, 0o077777, + 0o177400, 0o001000, 0o176543, 0o077777, 0o177261, 0o101235, + 0o105432, 0o077777, 0o142615, 0o072346, 0o100420, 0o077777, + 0o140210, 0o077360, 0o100002, 0o077777, 0o140001, 0o077776, + 0o100001, 0o077777, 0o140000, 0o177777, 0o100000, 0o077777, + 0o140000, 0o100000, 0o077777, 0o077777, 0o037777, 1, 0o077776, + 0o077777, 0o037776, 0o100002, 0o077775, 0o077777, 0o037776, 3, + 0o054321, 0o077777, 0o026150, 0o023457, 0o043210, 0o077777, + 0o021503, 0o134570, 0o032412, 0o077777, 0o015204, 0o145366, 7, + 0o077777, 3, 0o077771, 6, 0o077777, 2, 0o177772, 5, 0o077777, 2, + 0o077773, 4, 0o077777, 1, 0o177774, 3, 0o077777, 1, 0o077775, 2, + 0o077777, 0, 0o177776, 1, 0o077777, 0, 0o077777, 0o177777, + 0o077776, 0o177777, 0o100002, 0o177776, 0o077776, 0o177777, 4, + 0o177000, 0o077776, 0o177400, 0o002000, 0o176543, 0o077776, + 0o177261, 0o102472, 0o105432, 0o077776, 0o142615, 0o164714, + 0o100420, 0o077776, 0o140210, 0o176740, 0o100002, 0o077776, + 0o140001, 0o177774, 0o100001, 0o077776, 0o140001, 0o077776, + 0o100000, 0o077776, 0o140001, 0, 0o077777, 0o077776, 0o037776, + 0o100002, 0o077776, 0o077776, 0o037776, 4, 0o077775, 0o077776, + 0o037775, 0o100006, 0o054321, 0o077776, 0o026147, 0o147136, + 0o043210, 0o077776, 0o021503, 0o071360, 0o032412, 0o077776, + 0o015204, 0o112754, 7, 0o077776, 3, 0o077762, 6, 0o077776, 2, + 0o177764, 5, 0o077776, 2, 0o077766, 4, 0o077776, 1, 0o177770, 3, + 0o077776, 1, 0o077772, 2, 0o077776, 0, 0o177774, 1, 0o077776, 0, + 0o077776, 0o177777, 0o077775, 0o177777, 0o100003, 0o177776, + 0o077775, 0o177777, 6, 0o177000, 0o077775, 0o177400, 0o003000, + 0o176543, 0o077775, 0o177261, 0o103727, 0o105432, 0o077775, + 0o142616, 0o057262, 0o100420, 0o077775, 0o140211, 0o076320, + 0o100002, 0o077775, 0o140002, 0o077772, 0o100001, 0o077775, + 0o140001, 0o177775, 0o100000, 0o077775, 0o140001, 0o100000, + 0o077777, 0o077775, 0o037776, 3, 0o077776, 0o077775, 0o037775, + 0o100006, 0o077775, 0o077775, 0o037775, 0o000011, 0o054321, + 0o077775, 0o026147, 0o072615, 0o043210, 0o077775, 0o021503, + 0o026150, 0o032412, 0o077775, 0o015204, 0o060342, 7, 0o077775, 3, + 0o077753, 6, 0o077775, 2, 0o177756, 5, 0o077775, 2, 0o077761, 4, + 0o077775, 1, 0o177764, 3, 0o077775, 1, 0o077767, 2, 0o077775, 0, + 0o177772, 1, 0o077775, 0, 0o077775, 0o177777, 0o054321, 0o177777, + 0o123457, 0o177776, 0o054321, 0o177777, 0o047136, 0o177000, + 0o054321, 0o177516, 0o057000, 0o176543, 0o054321, 0o177427, + 0o162723, 0o105432, 0o054321, 0o153561, 0o100072, 0o100420, + 0o054321, 0o151765, 0o157020, 0o100002, 0o054321, 0o151630, + 0o030642, 0o100001, 0o054321, 0o151627, 0o154321, 0o100000, + 0o054321, 0o151627, 0o100000, 0o077777, 0o054321, 0o026150, + 0o023457, 0o077776, 0o054321, 0o026147, 0o147136, 0o077775, + 0o054321, 0o026147, 0o072615, 0o054321, 0o054321, 0o017320, + 0o055241, 0o043210, 0o054321, 0o014170, 0o052410, 0o032412, + 0o054321, 0o011146, 0o136452, 7, 0o054321, 2, 0o066667, 6, + 0o054321, 2, 0o012346, 5, 0o054321, 1, 0o136025, 4, 0o054321, 1, + 0o061504, 3, 0o054321, 1, 0o005163, 2, 0o054321, 0, 0o130642, 1, + 0o054321, 0, 0o054321, 0o177777, 0o043210, 0o177777, 0o134570, + 0o177776, 0o043210, 0o177777, 0o071360, 0o177000, 0o043210, + 0o177562, 0o170000, 0o176543, 0o043210, 0o177507, 0o127230, + 0o105432, 0o043210, 0o157713, 0o000720, 0o100420, 0o043210, + 0o156406, 0o170200, 0o100002, 0o043210, 0o156274, 0o106420, + 0o100001, 0o043210, 0o156274, 0o043210, 0o100000, 0o043210, + 0o156274, 0, 0o077777, 0o043210, 0o021503, 0o134570, 0o077776, + 0o043210, 0o021503, 0o071360, 0o077775, 0o043210, 0o021503, + 0o026150, 0o054321, 0o043210, 0o014170, 0o052410, 0o043210, + 0o043210, 0o011556, 0o124100, 0o032412, 0o043210, 0o007234, + 0o164520, 7, 0o043210, 1, 0o166670, 6, 0o043210, 1, 0o123460, 5, + 0o043210, 1, 0o060250, 4, 0o043210, 1, 0o015040, 3, 0o043210, 0, + 0o151630, 2, 0o043210, 0, 0o106420, 1, 0o043210, 0, 0o043210, + 0o177777, 0o032412, 0o177777, 0o145366, 0o177776, 0o032412, + 0o177777, 0o112754, 0o177000, 0o032412, 0o177625, 0o166000, + 0o176543, 0o032412, 0o177565, 0o062336, 0o105432, 0o032412, + 0o163707, 0o150404, 0o100420, 0o032412, 0o162663, 0o055240, + 0o100002, 0o032412, 0o162573, 0o065024, 0o100001, 0o032412, + 0o162573, 0o032412, 0o100000, 0o032412, 0o162573, 0, 0o077777, + 0o032412, 0o015204, 0o145366, 0o077776, 0o032412, 0o015204, + 0o112754, 0o077775, 0o032412, 0o015204, 0o060342, 0o054321, + 0o032412, 0o011146, 0o136452, 0o043210, 0o032412, 0o007234, + 0o164520, 0o032412, 0o032412, 0o005375, 0o022144, 7, 0o032412, 1, + 0o071506, 6, 0o032412, 1, 0o037074, 5, 0o032412, 1, 0o004462, 4, + 0o032412, 0, 0o152050, 3, 0o032412, 0, 0o117436, 2, 0o032412, 0, + 0o065024, 1, 0o032412, 0, 0o032412, 0o177777, 7, 0o177777, + 0o177771, 0o177776, 7, 0o177777, 0o177762, 0o177000, 7, 0o177777, + 0o171000, 0o176543, 7, 0o177777, 0o166665, 0o105432, 7, 0o177774, + 0o146666, 0o100420, 7, 0o177774, 0o103560, 0o100002, 7, 0o177774, + 0o100016, 0o100001, 7, 0o177774, 0o100007, 0o100000, 7, 0o177774, + 0o100000, 0o077777, 7, 3, 0o077771, 0o077776, 7, 3, 0o077762, + 0o077775, 7, 3, 0o077753, 0o054321, 7, 2, 0o066667, 0o043210, 7, + 1, 0o166670, 0o032412, 7, 1, 0o071506, 7, 7, 0, 0o000061, 6, 7, 0, + 0o000052, 5, 7, 0, 0o000043, 4, 7, 0, 0o000034, 3, 7, 0, 0o000025, + 2, 7, 0, 0o000016, 1, 7, 0, 7, 0o177777, 6, 0o177777, 0o177772, + 0o177776, 6, 0o177777, 0o177764, 0o177000, 6, 0o177777, 0o172000, + 0o176543, 6, 0o177777, 0o170122, 0o105432, 6, 0o177775, 0o041234, + 0o100420, 6, 0o177775, 0o003140, 0o100002, 6, 0o177775, 0o000014, + 0o100001, 6, 0o177775, 6, 0o100000, 6, 0o177775, 0, 0o077777, 6, + 2, 0o177772, 0o077776, 6, 2, 0o177764, 0o077775, 6, 2, 0o177756, + 0o054321, 6, 2, 0o012346, 0o043210, 6, 1, 0o123460, 0o032412, 6, + 1, 0o037074, 7, 6, 0, 0o000052, 6, 6, 0, 0o000044, 5, 6, 0, + 0o000036, 4, 6, 0, 0o000030, 3, 6, 0, 0o000022, 2, 6, 0, 0o000014, + 1, 6, 0, 6, 0o177777, 5, 0o177777, 0o177773, 0o177776, 5, + 0o177777, 0o177766, 0o177000, 5, 0o177777, 0o173000, 0o176543, 5, + 0o177777, 0o171357, 0o105432, 5, 0o177775, 0o133602, 0o100420, 5, + 0o177775, 0o102520, 0o100002, 5, 0o177775, 0o100012, 0o100001, 5, + 0o177775, 0o100005, 0o100000, 5, 0o177775, 0o100000, 0o077777, 5, + 2, 0o077773, 0o077776, 5, 2, 0o077766, 0o077775, 5, 2, 0o077761, + 0o054321, 5, 1, 0o136025, 0o043210, 5, 1, 0o060250, 0o032412, 5, + 1, 0o004462, 7, 5, 0, 0o000043, 6, 5, 0, 0o000036, 5, 5, 0, + 0o000031, 4, 5, 0, 0o000024, 3, 5, 0, 0o000017, 2, 5, 0, 0o000012, + 1, 5, 0, 5, 0o177777, 4, 0o177777, 0o177774, 0o177776, 4, + 0o177777, 0o177770, 0o177000, 4, 0o177777, 0o174000, 0o176543, 4, + 0o177777, 0o172614, 0o105432, 4, 0o177776, 0o026150, 0o100420, 4, + 0o177776, 0o002100, 0o100002, 4, 0o177776, 0o000010, 0o100001, 4, + 0o177776, 4, 0o100000, 4, 0o177776, 0, 0o077777, 4, 1, 0o177774, + 0o077776, 4, 1, 0o177770, 0o077775, 4, 1, 0o177764, 0o054321, 4, + 1, 0o061504, 0o043210, 4, 1, 0o015040, 0o032412, 4, 0, 0o152050, + 7, 4, 0, 0o000034, 6, 4, 0, 0o000030, 5, 4, 0, 0o000024, 4, 4, 0, + 0o000020, 3, 4, 0, 0o000014, 2, 4, 0, 0o000010, 1, 4, 0, 4, + 0o177777, 3, 0o177777, 0o177775, 0o177776, 3, 0o177777, 0o177772, + 0o177000, 3, 0o177777, 0o175000, 0o176543, 3, 0o177777, 0o174051, + 0o105432, 3, 0o177776, 0o120516, 0o100420, 3, 0o177776, 0o101460, + 0o100002, 3, 0o177776, 0o100006, 0o100001, 3, 0o177776, 0o100003, + 0o100000, 3, 0o177776, 0o100000, 0o077777, 3, 1, 0o077775, + 0o077776, 3, 1, 0o077772, 0o077775, 3, 1, 0o077767, 0o054321, 3, + 1, 0o005163, 0o043210, 3, 0, 0o151630, 0o032412, 3, 0, 0o117436, + 7, 3, 0, 0o000025, 6, 3, 0, 0o000022, 5, 3, 0, 0o000017, 4, 3, 0, + 0o000014, 3, 3, 0, 0o000011, 2, 3, 0, 6, 1, 3, 0, 3, 0o177777, 2, + 0o177777, 0o177776, 0o177776, 2, 0o177777, 0o177774, 0o177000, 2, + 0o177777, 0o176000, 0o176543, 2, 0o177777, 0o175306, 0o105432, 2, + 0o177777, 0o013064, 0o100420, 2, 0o177777, 0o001040, 0o100002, 2, + 0o177777, 4, 0o100001, 2, 0o177777, 2, 0o100000, 2, 0o177777, 0, + 0o077777, 2, 0, 0o177776, 0o077776, 2, 0, 0o177774, 0o077775, 2, + 0, 0o177772, 0o054321, 2, 0, 0o130642, 0o043210, 2, 0, 0o106420, + 0o032412, 2, 0, 0o065024, 7, 2, 0, 0o000016, 6, 2, 0, 0o000014, 5, + 2, 0, 0o000012, 4, 2, 0, 0o000010, 3, 2, 0, 6, 2, 2, 0, 4, 1, 2, + 0, 2, 0o177777, 1, 0o177777, 0o177777, 0o177776, 1, 0o177777, + 0o177776, 0o177000, 1, 0o177777, 0o177000, 0o176543, 1, 0o177777, + 0o176543, 0o105432, 1, 0o177777, 0o105432, 0o100420, 1, 0o177777, + 0o100420, 0o100002, 1, 0o177777, 0o100002, 0o100001, 1, 0o177777, + 0o100001, 0o100000, 1, 0o177777, 0o100000, 0o077777, 1, 0, + 0o077777, 0o077776, 1, 0, 0o077776, 0o077775, 1, 0, 0o077775, + 0o054321, 1, 0, 0o054321, 0o043210, 1, 0, 0o043210, 0o032412, 1, + 0, 0o032412, 7, 1, 0, 7, 6, 1, 0, 6, 5, 1, 0, 5, 4, 1, 0, 4, 3, 1, + 0, 3, 2, 1, 0, 2, 1, 1, 0, 1, 0 + ] + + a = InstructionBlock() + # get data from simhdata and runs R0:R1 = X*Y; compares results + a.mov(0o40000, 'sp') # just make sure there's a stack, not used + a.mov(0o20000, 'r3') # simhdata at 020000 + a.label('loop') + a.mov('(r3)+', 'r0') # load X + a.beq('done') # zero is the end sentinel + # a.mul('(r3)+', 'r0') # R0:R1 = X*Y + a.literal(0o070023) + a.cmp('(r3)+', 'r0') # check high order + a.bne('fail') + a.cmp('(r3)+', 'r1') # check low order + a.bne('fail') + a.br('loop') + a.label('done') + a.clr('r3') # r3 being zero indicates success + a.halt() + a.label('fail') + a.halt() # r3 points after miscompare + + p = self.make_pdp() + instloc = 0o10000 + self.loadphysmem(p, a, instloc) + self.loadphysmem(p, simhdata, 0o20000) + p.run(pc=instloc) + self.assertEqual(p.r[3], 0) + def test_div(self): # test the div instruction # The 32-bit int in R and R|1 is divided by the src operand