aboutsummaryrefslogtreecommitdiff
path: root/src/tcl/mmr_helpers.tcl
blob: 5dac48a8fda3a4378cded28b1c2823bb77e6fb7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
proc proc_exists { NAME } {
    set n [info commands $NAME]
    set l [string length $n]
    return [expr $l != 0]
}

# Give: REGISTER name - must be a global variable.
proc show_mmr32_reg { NAME } {
    
    global $NAME
    # we want $($NAME)
    set a [set [set NAME]]

    if ![catch { set v [memread32 $a] } msg ] {
	puts [format "%10s: (0x%08x): 0x%08x" $NAME $a $v]

	# Was a helper defined?
	set fn show_${NAME}_helper
	if [ proc_exists $fn ] {
	    # Then call it
	    $fn $NAME $a $v
	}
	return $v;
    } else {
	error [format "%s (%s)" $msg $NAME ]
    }
}


# Give: NAMES - an array of names accessable
#               in the callers symbol-scope.
#       VAL - the bits to display.

proc show_mmr32_bits { NAMES VAL } {

    upvar $NAMES MYNAMES

    set w 0
    foreach {IDX N} $MYNAMES {
	set l [string length $N]
	if { $l > $w } { set w $l }
    }
    
    for { set x 24 } { $x >= 0 } { incr x -8 } {
	puts -nonewline "  "
	for { set y 7 } { $y >= 0 } { incr y -1 } {
	    set s $MYNAMES([expr $x + $y])
	    puts -nonewline [format "%2d: %-*s | " [expr $x + $y] $w $s ]
	}
	puts ""

	puts -nonewline "  "
	for { set y 7 } { $y >= 0 } { incr y -1 } {
	    puts -nonewline [format "    %d%*s | " [expr !!($VAL & (1 << ($x + $y)))] [expr $w -1] ""]
	}
	puts ""
    }
}