summaryrefslogtreecommitdiff
path: root/src/csview.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/csview.vala')
-rw-r--r--src/csview.vala72
1 files changed, 29 insertions, 43 deletions
diff --git a/src/csview.vala b/src/csview.vala
index d474460..5bed51d 100644
--- a/src/csview.vala
+++ b/src/csview.vala
@@ -329,10 +329,17 @@ namespace GUI
private string translate_addr(uint32 addr)
{
+ if (addr == 0) { return ""; }
+
var regs = m_spec.translate_addr((uint)addr);
- if (regs == null) { return addr.to_string("0x%04X"); }
- if (regs.length > 1) { return "Multiple"; }
- if (regs[0].info.count <= 1) { return regs[0].info.name; }
+ if (regs == null) {
+ return addr.to_string("0x%04X");
+ } else if (regs.length > 1) {
+ return "Multiple";
+ } else if (regs[0].info.count <= 1) {
+ return regs[0].info.name;
+ }
+
return regs[0].info.name + "[" + regs[0].num.to_string() + "]";
}
@@ -384,10 +391,10 @@ namespace GUI
case Columns.VALUE: val.set_string(p.header.to_string("0x%08X")); break;
case Columns.TARGET:
switch (p.type_id) {
- case 0: val.set_string(translate_addr(dword_addr(it.packet, 1))); break;
- case 1: val.set_string(translate_addr(dword_addr(it.packet, 1)) + " | " + translate_addr(dword_addr(it.packet, 2))); break;
+ case 0: val.set_string(translate_addr(p.target_addr(0))); break;
+ case 1: val.set_string(translate_addr(p.target_addr(0)) + " | " + translate_addr(p.target_addr(1))); break;
case 2: val.set_static_string(""); break;
- case 3: val.set_static_string("TODO"); break;
+ case 3: val.set_string((p as Packet3).opcode_name); break;
}
break;
}
@@ -397,14 +404,7 @@ namespace GUI
switch (column) {
case Columns.NAME: val.set_string((it.dword-1).to_string("DWORD%u")); break;
case Columns.VALUE: val.set_string(p[it.dword-1].to_string("0x%08X")); break;
- case Columns.TARGET:
- switch (p.type_id) {
- case 0: val.set_string(translate_addr(dword_addr(it.packet, it.dword))); break;
- case 1: val.set_string(translate_addr(dword_addr(it.packet, it.dword))); break;
- case 2: val.set_static_string(""); break;
- case 3: val.set_static_string("TODO"); break;
- }
- break;
+ case Columns.TARGET: val.set_string(translate_addr(p.target_addr(it.dword-1))); break;
}
break;
@@ -418,7 +418,7 @@ namespace GUI
case RowType.VARIANT:
switch (column) {
- case Columns.NAME: val.set_static_string(variant_name(dword_addr(it.packet, it.dword), it.variant)); break;
+ case Columns.NAME: val.set_static_string(variant_name(p.target_addr(it.dword-1), it.variant)); break;
case Columns.VALUE: val.set_static_string(""); break;
case Columns.TARGET: val.set_static_string(""); break;
}
@@ -426,8 +426,8 @@ namespace GUI
case RowType.BITFIELD:
switch (column) {
- case Columns.NAME: val.set_static_string(bitfield_name(dword_addr(it.packet, it.dword), it.variant, it.bitfield)); break;
- case Columns.VALUE: val.set_string(bitfield_value(dword_addr(it.packet, it.dword), it.variant, it.bitfield, p[it.dword-1]).to_string()); break;
+ case Columns.NAME: val.set_static_string(bitfield_name(p.target_addr(it.dword-1), it.variant, it.bitfield)); break;
+ case Columns.VALUE: val.set_string(bitfield_value(p.target_addr(it.dword-1), it.variant, it.bitfield, p[it.dword-1]).to_string()); break;
case Columns.TARGET: val.set_static_string(""); break;
}
break;
@@ -441,7 +441,7 @@ namespace GUI
case 0:
Packet0 p0 = p as Packet0;
switch (it.bitfield) {
- case 0: val.set_string(translate_addr(p0._ADDR)); break;
+ case 0: val.set_string(p0._ADDR.to_string("%04X")); break;
case 1: val.set_string(p0._ONE_REG_WR.to_string()); break;
case 2: val.set_string(p0._COUNT.to_string()); break;
case 3: val.set_string(p.type_id.to_string()); break;
@@ -450,8 +450,8 @@ namespace GUI
case 1:
Packet1 p1 = p as Packet1;
switch (it.bitfield) {
- case 0: val.set_string(translate_addr(p1._ADDR1)); break;
- case 1: val.set_string(translate_addr(p1._ADDR2)); break;
+ case 0: val.set_string(p1._ADDR1.to_string("%04X")); break;
+ case 1: val.set_string(p1._ADDR2.to_string("%04X")); break;
case 2: val.set_string(p.type_id.to_string()); break;
}
break;
@@ -463,7 +463,7 @@ namespace GUI
case 3:
Packet3 p3 = p as Packet3;
switch (it.bitfield) {
- case 0: val.set_string(p3._IT_OPCODE.to_string("0x%02X")); break; /* TODO: resolve opcode */
+ case 0: val.set_string(p3._IT_OPCODE.to_string("0x%02X")); break;
case 1: val.set_string(p3._COUNT.to_string()); break;
case 2: val.set_string(p.type_id.to_string()); break;
}
@@ -475,20 +475,6 @@ namespace GUI
}
}
- private uint32 dword_addr(uint p, uint d)
- {
- assert(p < m_cs.length);
- switch (m_cs[p].type_id) {
- case 0:
- Packet0 p0 = m_cs[p] as Packet0;
- return p0.addr + ((p0.one_reg_wr) ? 0 : 4*(d-1));
- case 1:
- Packet1 p1 = m_cs[p] as Packet1;
- return (d == 1) ? p1.addr1 : p1.addr2;
- }
- return 0;
- }
-
public bool iter_next(ref TreeIter iter)
{
if (iter.stamp != m_stamp) { return false; }
@@ -512,13 +498,13 @@ namespace GUI
case RowType.VARIANT:
var v = it.variant+1;
- if (v >= get_variant_count(dword_addr(p, it.dword))) { return false; }
+ if (v >= get_variant_count(m_cs[p].target_addr(it.dword-1))) { return false; }
it.variant = v;
break;
case RowType.BITFIELD:
var b = it.bitfield+1;
- if (b >= get_bitfield_count(dword_addr(p, it.dword), it.variant)) { return false; }
+ if (b >= get_bitfield_count(m_cs[p].target_addr(it.dword-1), it.variant)) { return false; }
it.bitfield = b;
break;
@@ -563,7 +549,7 @@ namespace GUI
break;
case RowType.DWORD:
- if (get_variant_count(dword_addr(pa.packet, pa.dword)) == 0) { return false; }
+ if (get_variant_count(m_cs[pa.packet].target_addr(pa.dword-1)) == 0) { return false; }
it.variant = 0;
it.in_variants = true;
break;
@@ -585,7 +571,7 @@ namespace GUI
switch (it.row_type) {
case RowType.PACKET: return true;
case RowType.HEADER: return true;
- case RowType.DWORD: return (get_variant_count(dword_addr(it.packet, it.dword)) == 0) ? false : true;
+ case RowType.DWORD: return (get_variant_count(m_cs[it.packet].target_addr(it.dword-1)) == 0) ? false : true;
case RowType.VARIANT: return true;
case RowType.BITFIELD: return false;
case RowType.HEADER_BITFIELD: return false;
@@ -603,8 +589,8 @@ namespace GUI
switch (it.row_type) {
case RowType.PACKET: return (int)m_cs[it.packet].length+1;
case RowType.HEADER: return (int)packet_headers_length[m_cs[it.packet].type_id];
- case RowType.DWORD: return (int)get_variant_count(dword_addr(it.packet, it.dword));
- case RowType.VARIANT: return (int)get_bitfield_count(dword_addr(it.packet, it.dword), it.variant);
+ case RowType.DWORD: return (int)get_variant_count(m_cs[it.packet].target_addr(it.dword-1));
+ case RowType.VARIANT: return (int)get_bitfield_count(m_cs[it.packet].target_addr(it.dword-1), it.variant);
case RowType.BITFIELD: return 0;
case RowType.HEADER_BITFIELD: return 0;
}
@@ -645,13 +631,13 @@ namespace GUI
break;
case RowType.DWORD:
- if (n >= get_variant_count(dword_addr(pa.packet, pa.dword))) { return false; }
+ if (n >= get_variant_count(m_cs[pa.packet].target_addr(pa.dword-1))) { return false; }
it.in_variants = true;
it.variant = n;
break;
case RowType.VARIANT:
- if (n >= get_bitfield_count(dword_addr(pa.packet, pa.dword), pa.variant)) { return false; }
+ if (n >= get_bitfield_count(m_cs[pa.packet].target_addr(pa.dword-1), pa.variant)) { return false; }
it.in_bitfields = true;
it.bitfield = n;
break;