mirror of https://github.com/openXC7/prjxray.git
fasm2frame: misc cleanup
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
23813e3065
commit
9185e152cc
|
|
@ -28,7 +28,6 @@ Loosely based on segprint function
|
||||||
Maybe better to return as two distinct dictionaries?
|
Maybe better to return as two distinct dictionaries?
|
||||||
|
|
||||||
{
|
{
|
||||||
'tile.blah': {None: (12, 23)},
|
|
||||||
'tile.meh': {
|
'tile.meh': {
|
||||||
'O5': [(11, 2, False), (12, 2, True)],
|
'O5': [(11, 2, False), (12, 2, True)],
|
||||||
'O6': [(11, 2, True), (12, 2, False)],
|
'O6': [(11, 2, True), (12, 2, False)],
|
||||||
|
|
@ -59,22 +58,21 @@ def get_database(segtype):
|
||||||
if not isset:
|
if not isset:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
"Expect single bit DB entries to be set, got %s" % l)
|
"Expect single bit DB entries to be set, got %s" % l)
|
||||||
segbitsdb[segtype][name] = {None: (seg_word_column, word_bit_n)}
|
# Treat like an enumerated value with keys 0 or 1
|
||||||
|
segbitsdb[segtype][name] = {
|
||||||
|
'0': [(seg_word_column, word_bit_n, 0)],
|
||||||
|
'1': [(seg_word_column, word_bit_n, 1)],
|
||||||
|
}
|
||||||
else:
|
else:
|
||||||
# An enumerated value
|
# An enumerated value
|
||||||
# Split the base name and selected key
|
# Split the base name and selected key
|
||||||
m = re.match(r'(.+)[.](.+)', name)
|
m = re.match(r'(.+)[.](.+)', name)
|
||||||
name = m.group(1)
|
name = m.group(1)
|
||||||
key = m.group(2)
|
key = m.group(2)
|
||||||
|
|
||||||
# May or may not be the first key encountered
|
# May or may not be the first key encountered
|
||||||
m = segbitsdb[segtype].get(name, {})
|
bits_map = segbitsdb[segtype].setdefault(name, {})
|
||||||
segbitsdb[segtype][name] = m
|
bits_map[key] = [parsebit(x) for x in bit_vals]
|
||||||
l = []
|
|
||||||
m[key] = l
|
|
||||||
#print("Add %s.%s" % (name, key))
|
|
||||||
for bit_val in bit_vals:
|
|
||||||
seg_word_column, word_bit_n, isset = parsebit(bit_val)
|
|
||||||
l.append((seg_word_column, word_bit_n, isset))
|
|
||||||
|
|
||||||
with open("%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"),
|
with open("%s/%s/segbits_%s.db" % (os.getenv("XRAY_DATABASE_DIR"),
|
||||||
os.getenv("XRAY_DATABASE"), segtype),
|
os.getenv("XRAY_DATABASE"), segtype),
|
||||||
|
|
@ -229,37 +227,23 @@ def run(f_in, f_out, sparse=False, debug=False):
|
||||||
raise FASMSyntaxError(
|
raise FASMSyntaxError(
|
||||||
"Segment DB %s, key %s not found from line '%s'" %
|
"Segment DB %s, key %s not found from line '%s'" %
|
||||||
(segj['type'], db_k, l))
|
(segj['type'], db_k, l))
|
||||||
'''
|
|
||||||
Creating the key depends on whether its an enumerated or a fixed value
|
if not value:
|
||||||
If its enumerated, the value forms part of the key
|
# If its binary, allow omitted value default to 1
|
||||||
We'd also like to ideally identify if there is a syntax error
|
if tuple(sorted(db_vals.keys())) == ('0', '1'):
|
||||||
Ultimately probably easier to separate out these two cases
|
value = '1'
|
||||||
'''
|
else:
|
||||||
# A single bit value?
|
|
||||||
if None in db_vals:
|
|
||||||
seg_word_column, word_bit_n = db_vals[None]
|
|
||||||
# Value optional, defaults to 1
|
|
||||||
isset = 1
|
|
||||||
if value:
|
|
||||||
isset = {'0': 0, '1': 1}.get(value, None)
|
|
||||||
if isset is None:
|
|
||||||
raise FASMSyntaxError(
|
|
||||||
"Bad binary value %s on line %s" % (value, l))
|
|
||||||
update_segbit(seg_word_column, word_bit_n, isset)
|
|
||||||
# An enumerated value
|
|
||||||
else:
|
|
||||||
if not value:
|
|
||||||
raise FASMSyntaxError(
|
raise FASMSyntaxError(
|
||||||
"Enumerable entry %s must have explicit value" % name)
|
"Enumerable entry %s must have explicit value" % name)
|
||||||
# Get the specific entry we need
|
# Get the specific entry we need
|
||||||
try:
|
try:
|
||||||
db_vals = db_vals[value]
|
db_vals = db_vals[value]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise FASMSyntaxError(
|
raise FASMSyntaxError(
|
||||||
"Invalid entry %s. Valid entries are %s" %
|
"Invalid entry %s. Valid entries are %s" %
|
||||||
(value, db_vals.keys()))
|
(value, db_vals.keys()))
|
||||||
for seg_word_column, word_bit_n, isset in db_vals:
|
for seg_word_column, word_bit_n, isset in db_vals:
|
||||||
update_segbit(seg_word_column, word_bit_n, isset)
|
update_segbit(seg_word_column, word_bit_n, isset)
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
#dump_frames_verbose(frames)
|
#dump_frames_verbose(frames)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue