Text presentation of a byte
You can play with something with graphviz and dot. Those are the tools doxygen uses to create the diagrams. It is not exactly what you are searching for, but it is fast and easy to script and the output is kind of nice looking (even thou it is a little hard to follow some lines...)



This example will generate something like this



To do this you first create a file called byte.dot

digraph structs { 
node [shape=plaintext] 

struct1 [label=&lt; 
&lt;TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" ALIGN="left"&gt;  
    &lt;TR&gt;
        &lt;TD&gt;0xc9&lt;/TD&gt;
        &lt;TD PORT="f0"&gt; 1 &lt;/TD&gt;
        &lt;TD PORT="f1"&gt; 1 &lt;/TD&gt;
        &lt;TD PORT="f2"&gt; 0 &lt;/TD&gt;
        &lt;TD PORT="f3"&gt; 0 &lt;/TD&gt;

        &lt;TD PORT="f4"&gt; 1 &lt;/TD&gt;
        &lt;TD PORT="f5"&gt; 0 &lt;/TD&gt;
        &lt;TD PORT="f6"&gt; 0 &lt;/TD&gt;
        &lt;TD PORT="f7"&gt; 1 &lt;/TD&gt;
    &lt;/TR&gt; 
&lt;/TABLE&gt;&gt;]; 

struct2 [label=&lt; 
&lt;TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" &gt;  
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f0"&gt; RSTDISBL (reset pin is enabled) &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f1"&gt; WDTON (WDT not always on) &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f2"&gt; SPIEN (allow serial programming)  &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f3"&gt; CKOPT (full output swing) &lt;/TD&gt; &lt;/TR&gt;

    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f4"&gt; EESAVE (don't preserve EEPROM over chip erase)  &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f5"&gt; BOOTSZ1 &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f6"&gt; BOOTSZ0 &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f7"&gt; BOOTRST (boot reset vector at 0x0000) &lt;/TD&gt; &lt;/TR&gt;
&lt;/TABLE&gt;&gt;]; 

struct1:f0:s -&gt; struct2:f0:w;
struct1:f1:s -&gt; struct2:f1:w;
struct1:f2:s -&gt; struct2:f2:w; 
struct1:f3:s -&gt; struct2:f3:w;

struct1:f4:s -&gt; struct2:f4:w;
struct1:f5:s -&gt; struct2:f5:w;
struct1:f6:s -&gt; struct2:f6:w; 
struct1:f7:s -&gt; struct2:f7:w;
} 


Then run one of those commands.

dot -Tpng byte.dot -o byte.png 
dot -Tps  byte.dot -o byte.ps




Maybe it will be nicer if we do not cross all the lines in the middle?



I just switched the named in the second table from f0..f7 into f7..f0.

&lt;TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" &gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f7"&gt; RSTDISBL (reset pin is enabled) &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f6"&gt; WDTON (WDT not always on) &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f5"&gt; SPIEN (allow serial programming)  &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f4"&gt; CKOPT (full output swing) &lt;/TD&gt; &lt;/TR&gt;

    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f3"&gt; EESAVE (don't preserve EEPROM over chip erase)  &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f2"&gt; BOOTSZ1 &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f1"&gt; BOOTSZ0 &lt;/TD&gt; &lt;/TR&gt;
    &lt;TR&gt; &lt;TD ALIGN="left" PORT="f0"&gt; BOOTRST (boot reset vector at 0x0000) &lt;/TD&gt; &lt;/TR&gt;
&lt;/TABLE&gt;&gt;];