from collections import OrderedDict, namedtuple
-from soc.decoder.power_enums import download_wiki_file
+from soc.decoder.power_enums import find_wiki_file
class BitRange(OrderedDict):
def __getitem__(self, subscript):
if isinstance(subscript, slice):
- return list(self)[subscript]
+ return list(self.values())[subscript]
else:
- return self[subscript]
+ return OrderedDict.__getitem__(self, subscript)
def decode_instructions(form):
class DecodeFields:
- def __init__(self, bitkls=BitRange, bitargs=(), fname=None, name_on_wiki=None):
+ def __init__(self, bitkls=BitRange, bitargs=(), fname=None,
+ name_on_wiki=None):
self.bitkls = bitkls
self.bitargs = bitargs
if fname is None:
assert name_on_wiki is None
fname = "fields.txt"
name_on_wiki = "fields.text"
- self.fname = download_wiki_file(fname, name_on_wiki)
+ self.fname = find_wiki_file(name_on_wiki)
def create_specs(self):
self.forms, self.instrs = self.decode_fields()
"LK": self.FormI.LK,
"AA": self.FormB.AA,
"Rc": self.FormX.Rc,
- "OE": self.FormXO.Rc,
+ "OE": self.FormXO.OE,
"BD": self.FormB.BD,
"BF": self.FormX.BF,
"CR": self.FormXL.XO,
res = {}
for field in fields:
f, spec = field.strip().split(" ")
+ ss = spec[1:-1].split(",")
+ fs = f.split(",")
+ if len(fs) > 1:
+ individualfields = []
+ for f0, s0 in zip(fs, ss):
+ txt = "%s (%s)" % (f0, s0)
+ individualfields.append(txt)
+ if len(fs) > 1:
+ res.update(self.decode_instruction_fields(
+ individualfields))
d = self.bitkls(*self.bitargs)
idx = 0
- for s in spec[1:-1].split(","):
+ for s in ss:
s = s.split(':')
if len(s) == 1:
d[idx] = int(s[0])
dec = DecodeFields()
dec.create_specs()
forms, instrs = dec.forms, dec.instrs
+ for form, fields in instrs.items():
+ print("Form", form)
+ for field, bits in fields.items():
+ print("\tfield", field, bits)