prjxray/utils/segprint.py

52 lines
1.5 KiB
Python

#!/usr/bin/env python3
import sys, os, json, re
# print("Loading %s grid." % os.getenv("XRAY_DATABASE"))
with open("%s/../database/%s/tilegrid.json" % (os.path.dirname(sys.modules[__name__].__file__), os.getenv("XRAY_DATABASE")), "r") as f:
grid = json.load(f)
bitdata = dict()
# print("Loading %s." % sys.argv[1])
with open(sys.argv[1], "r") as f:
for line in f:
line = line.split("_")
frame = int(line[1], 16)
wordidx = int(line[2], 10)
bitidx = int(line[3], 10)
if frame not in bitdata:
bitdata[frame] = dict()
if wordidx not in bitdata[frame]:
bitdata[frame][wordidx] = set()
bitdata[frame][wordidx].add(bitidx)
for arg in sys.argv[2:]:
if arg in grid["tiles"]:
segname = grid["tiles"][arg]["segment"]
else:
segname = arg
print()
print("seg %s" % segname)
seginfo = grid["segments"][segname]
baseframe = int(seginfo["baseaddr"][0], 16)
basewordidx = int(seginfo["baseaddr"][1])
numframes = int(seginfo["frames"])
numwords = int(seginfo["words"])
for frame in range(baseframe, baseframe+numframes):
if frame not in bitdata:
continue
for wordidx in range(basewordidx, basewordidx+numwords):
if wordidx not in bitdata[frame]:
continue
for bitidx in bitdata[frame][wordidx]:
print("bit %02d_%02d" % (frame - baseframe, 32*(wordidx - basewordidx) + bitidx))