Update schedule after http://jeff.tk/wiki/Trinary/Meeting_Notes_20080810
[trinary.git] / extended / icode.py
blob6c5dd99019a7a3d3def98250a3ea079d8636f0a1
1 #!env python
2 # vim: set fileencoding=utf8
4 import base_converter, Trits
6 class ICode(object):
7 def __init__(self, s):
8 if isinstance(s, str):
9 if s[0] in trit_char:
10 # decode trit instrucion code
11 decode_code(self, s)
12 else:
13 # decode string instruction
14 decode_inst(self, s)
15 else:
16 assert "ICode __init__, unable to parse:", s
18 def decode_code(self, s):
19 """ Decode:
21 R-Type:
22 --------------------------------------------------------
23 | type(2) | opcode(13) | rs(3) | rt(3) | rd(3) | sa(3) |
24 --------------------------------------------------------
25 I-Type:
26 --------------------------------------------------------
27 | type(2) | opcode(5) | rs(3) | rt(3) | immediate(14) |
28 --------------------------------------------------------
29 B-Type:
30 --------------------------------------------------------
31 | type(2) | opcode(4) | rs(3) | label0(9) | label(9) |
32 --------------------------------------------------------
33 J-Type:
34 --------------------------------------------------------
35 | type(2) | opcode(4) | address(21) |
36 --------------------------------------------------------
37 """
39 type = int(base_convert(s[0:2], -3, 10))
40 # R-Type
41 if type == 0:
42 self.alu_op = int(base_convert(s[2:15], -3, 10))
43 self.src1 = int(base_convert(s[15:18], -3, 10))
44 self.src2 = int(base_convert(s[18:21], -3, 10))
45 self.dest = int(base_convert(s[21:24], -3, 10))
46 self.imdt1 = int(base_convert(s[24:27], -3, 10))
48 self.imdt2 = 0
50 # I-Type
51 elif type == 1:
52 self.alu_op = int(base_convert(s[2:7], -3, 10))
53 self.src1 = int(base_convert(s[7:10], -3, 10))
54 self.src2 = int(base_convert(s[10:13], -3, 10))
55 self.imdt1 = int(base_convert(s[13:27], -3, 10))
57 self.dest = 0
58 self.imdt2 = 0
60 # B-Type
61 elif type == 2:
62 self.alu_op = int(base_convert(s[2:6], -3, 10))
63 self.src1 = int(base_convert(s[6:9], -3, 10))
64 self.imdt1 = int(base_convert(s[9:18], -3, 10))
65 self.imdt2 = int(base_convert(s[18:27], -3, 10))
67 self.src2 = 0
68 self.dest = 0
70 # J-Type
71 elif type == 3:
72 self.alu_op = int(base_convert(s[2:6], -3, 10))
73 self.imdt1 = int(base_convert(s[6:27], -3, 10))
75 self.src1 = 0
76 self.src2 = 0
77 self.dest = 0
78 self.imdt2 = 0
80 # Uknown type
81 else:
82 raise DecodeError("invalid type code = %s" % (type, ))