_showdebuggable.tcl 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. namespace eval showdebuggable {
  2. #
  3. # show_debuggable
  4. #
  5. set_help_text showdebuggable \
  6. {Print content of debuggable nicely formatted
  7. Usage:
  8. showdebuggable <debuggable> <address> [<linecount>]
  9. }
  10. set_tabcompletion_proc showdebuggable [namespace code tab_showdebuggable]
  11. proc tab_showdebuggable {args} {
  12. if {[llength $args] == 2} {
  13. return [debug list]
  14. }
  15. }
  16. proc showdebuggable_line {debuggable address} {
  17. set size [debug size $debuggable]
  18. set num [expr {(($address + 16) <= $size) ? 16 : ($size - $address)}]
  19. set mem "[debug read_block $debuggable $address $num]"
  20. binary scan $mem c* values
  21. set hex ""
  22. foreach val $values {
  23. append hex [format "%02x " [expr {$val & 0xff}]]
  24. }
  25. set pad [string repeat " " [expr {16 - $num}]]
  26. set asc [regsub -all {[^ !-~]} $mem {.}]
  27. return [format "%04x: %s%s %s\n" $address $hex $pad $asc]
  28. }
  29. proc showdebuggable {debuggable {address 0} {lines 8}} {
  30. set result ""
  31. for {set i 0} {$i < $lines} {incr i} {
  32. if {$address >= [debug size $debuggable]} break
  33. append result [showdebuggable_line $debuggable $address]
  34. incr address 16
  35. }
  36. return $result
  37. }
  38. # Some stuff for backwards compatibility. Do we want to deprecate them?
  39. # I prefer to keep this as a convenience function.
  40. set_help_text showmem \
  41. {Print the content of the CPU visible memory nicely formatted
  42. This is a shortcut for 'showdebuggable memory <address>'.
  43. Usage:
  44. showmem <address> [<linecount>]
  45. }
  46. proc showmem {{address 0} {lines 8}} {
  47. showdebuggable memory $address $lines
  48. }
  49. namespace export showdebuggable
  50. namespace export showmem
  51. } ;# namespace showdebuggable
  52. namespace import showdebuggable::*