diff options
Diffstat (limited to 'src/csview.vala')
-rw-r--r-- | src/csview.vala | 72 |
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; |