aboutsummaryrefslogtreecommitdiff
path: root/tcl/bitsbytes.tcl
diff options
context:
space:
mode:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-05-27 06:49:24 +0000
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-05-27 06:49:24 +0000
commitdbbc9c41f7db210b0a4e226540a28e0a8a5019bf (patch)
treece358672ddde8b15a02db12c718eb53689c490f6 /tcl/bitsbytes.tcl
parent140d6c8e7948710a764965075bfaa700efd09802 (diff)
downloadriscv-openocd-dbbc9c41f7db210b0a4e226540a28e0a8a5019bf.zip
riscv-openocd-dbbc9c41f7db210b0a4e226540a28e0a8a5019bf.tar.gz
riscv-openocd-dbbc9c41f7db210b0a4e226540a28e0a8a5019bf.tar.bz2
Move TCL script files -- Step 2 of 2:
- Move src/tcl to tcl/. - Update top Makefile.am to use new path name. git-svn-id: svn://svn.berlios.de/openocd/trunk@1919 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'tcl/bitsbytes.tcl')
-rw-r--r--tcl/bitsbytes.tcl61
1 files changed, 61 insertions, 0 deletions
diff --git a/tcl/bitsbytes.tcl b/tcl/bitsbytes.tcl
new file mode 100644
index 0000000..9129ae0
--- /dev/null
+++ b/tcl/bitsbytes.tcl
@@ -0,0 +1,61 @@
+#----------------------------------------
+# Purpose - Create some $BIT variables
+# Create $K and $M variables
+# and some bit field extraction variables.
+# Creat helper variables ...
+# BIT0.. BIT31
+
+for { set x 0 } { $x < 32 } { set x [expr $x + 1]} {
+ set vn [format "BIT%d" $x]
+ global $vn
+ set $vn [expr (1 << $x)]
+}
+
+# Create K bytes values
+# __1K ... to __2048K
+for { set x 1 } { $x < 2048 } { set x [expr $x * 2]} {
+ set vn [format "__%dK" $x]
+ global $vn
+ set $vn [expr (1024 * $x)]
+}
+
+# Create M bytes values
+# __1M ... to __2048K
+for { set x 1 } { $x < 2048 } { set x [expr $x * 2]} {
+ set vn [format "__%dM" $x]
+ global $vn
+ set $vn [expr (1024 * 1024 * $x)]
+}
+
+proc create_mask { MSB LSB } {
+ return [expr (((1 << ($MSB - $LSB + 1))-1) << $LSB)]
+}
+
+# Cut Bits $MSB to $LSB out of this value.
+# Example: % format "0x%08x" [extract_bitfield 0x12345678 27 16]
+# Result: 0x02340000
+
+proc extract_bitfield { VALUE MSB LSB } {
+ return [expr [create_mask $MSB $LSB] & $VALUE]
+}
+
+
+# Cut bits $MSB to $LSB out of this value
+# and shift (normalize) them down to bit 0.
+#
+# Example: % format "0x%08x" [normalize_bitfield 0x12345678 27 16]
+# Result: 0x00000234
+#
+proc normalize_bitfield { VALUE MSB LSB } {
+ return [expr [extract_bitfield $VALUE $MSB $LSB ] >> $LSB]
+}
+
+proc show_normalize_bitfield { VALUE MSB LSB } {
+ set m [create_mask $MSB $LSB]
+ set mr [expr $VALUE & $m]
+ set sr [expr $mr >> $LSB]
+ puts [format "((0x%08x & 0x%08x) -> 0x%08x) >> %2d => (0x%x) %5d " $VALUE $m $mr $LSB $sr $sr]
+ return $sr
+}
+
+