diff --git a/htmlgen/.gitignore b/htmlgen/.gitignore
new file mode 100644
index 00000000..b16c57f1
--- /dev/null
+++ b/htmlgen/.gitignore
@@ -0,0 +1,3 @@
+/index.html
+/seg_clbll.html
+/seg_clblm.html
diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py
new file mode 100644
index 00000000..250c4147
--- /dev/null
+++ b/htmlgen/htmlgen.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python3
+
+import os, sys, json, re
+
+
+#################################################
+# Loading Raw Source Data
+
+grid = None
+segbits = dict()
+segbits_r = dict()
+segframes = dict()
+
+print("Loading tilegrid.")
+with open("../database/%s/tilegrid.json" % os.getenv("XRAY_DATABASE"), "r") as f:
+ grid = json.load(f)
+
+for segname, segdata in grid["segments"].items():
+ segtype = segdata["type"].lower()
+ segtype = re.sub(r"_[lr]$", "", segtype)
+
+ if segtype not in segbits:
+ segbits[segtype] = dict()
+ segbits_r[segtype] = dict()
+ segframes[segtype] = 36
+
+ print("Loading %s segbits." % segtype)
+ with open("../database/%s/%s.segbits" % (os.getenv("XRAY_DATABASE"), segtype)) as f:
+ for line in f:
+ bit_name, bit_pos = line.split()
+ segbits[segtype][bit_name] = bit_pos
+ segbits_r[segtype][bit_pos] = bit_name
+
+
+#################################################
+# Create Tilegrid Page
+
+grid_range = None
+grid_map = dict()
+
+print("Writing index.html.")
+with open("index.html", "w") as f:
+ print("
X-Ray %s Database" % os.getenv("XRAY_DATABASE").upper(), file=f)
+
+ for tilename, tiledata in grid["tiles"].items():
+ grid_x = tiledata["grid_x"]
+ grid_y = tiledata["grid_y"]
+ grid_map[(grid_x, grid_y)] = tilename
+
+ if grid_range is None:
+ grid_range = [grid_x, grid_y, grid_x, grid_y]
+ else:
+ grid_range[0] = min(grid_range[0], grid_x)
+ grid_range[1] = min(grid_range[1], grid_y)
+ grid_range[2] = max(grid_range[2], grid_x)
+ grid_range[3] = max(grid_range[3], grid_y)
+
+ print("", file =f)
+
+ for grid_y in range(grid_range[1], grid_range[3]+1):
+ print("", file=f)
+
+ for grid_x in range(grid_range[0], grid_range[2]+1):
+ tilename = grid_map[(grid_x, grid_y)]
+ tiledata = grid["tiles"][tilename]
+
+ bgcolor = "#aaaaaa"
+ if tiledata["type"] in ["INT_L", "INT_R"]: bgcolor="#aaaaff"
+ if tiledata["type"] in ["CLBLL_L", "CLBLL_R"]: bgcolor="#ffffaa"
+ if tiledata["type"] in ["CLBLM_L", "CLBLM_R"]: bgcolor="#ffaaaa"
+
+ title = [tilename]
+
+ if "segment" in tiledata:
+ segdata = grid["segments"][tiledata["segment"]]
+ title.append(tiledata["segment"])
+
+ title.append("GRID_POSITION: %d %d" % (grid_x, grid_y))
+
+ if "sites" in tiledata:
+ for sitename, sitetype in tiledata["sites"].items():
+ title.append("%s site: %s" % (sitetype, sitename))
+
+ if "segment" in tiledata:
+ title.append("Baseaddr: %s %d" % tuple(segdata["baseaddr"]))
+
+ print("| " % (bgcolor, "\n".join(title)), file=f)
+ if "segment" in tiledata:
+ segtype = segdata["type"].lower()
+ segtype = re.sub(r"_[lr]$", "", segtype)
+ print("%s | " %
+ (segtype, tilename.replace("_X", "
X")), file=f)
+ else:
+ print("%s" % tilename.replace("_X", "
X"), file=f)
+
+ print("
", file=f)
+
+ print("
", file =f)
+ print("", file=f)
+
+
+#################################################
+# Create Segment Pages
+
+for segtype in segbits.keys():
+ print("Writing %s.html." % segtype)
+ with open("%s.html" % segtype, "w") as f:
+ print("X-Ray %s Database: %s" % (os.getenv("XRAY_DATABASE").upper(), segtype.upper()), file=f)
+ print("", file =f)
+
+ print("", file =f)
+ print(" | ", file =f)
+ for frameidx in range(segframes[segtype]):
+ print("%d | " % frameidx, file =f)
+ print("
", file =f)
+
+ for bitidx in range(64):
+ print("", file =f)
+ print("| %d | " % bitidx, file =f)
+ for frameidx in range(segframes[segtype]):
+ bit_pos = "%02x_%02x_%02x" % (frameidx, bitidx // 32, bitidx % 32)
+ bit_name = segbits_r[segtype][bit_pos] if bit_pos in segbits_r[segtype] else None
+
+ label = " "
+ title = [bit_pos]
+ bgcolor = "#aaaaaa"
+
+ if bit_name is not None:
+ bgcolor = "#ff0000"
+ title.append(bit_name)
+
+ if "LUT.INIT" in bit_name:
+ bgcolor = "#ffffaa"
+ m = re.search(r"(.)6LUT.INIT\[(..)\]", bit_name)
+ label = m.group(1) + m.group(2)
+
+ print("%s | " % (bgcolor, "\n".join(title), label), file=f)
+ print("
", file =f)
+
+ print("
", file =f)
+ print("", file=f)
+