Puedes jugar con algo con graphviz y dot. Esas son las herramientas que utiliza doxygen para crear los diagramas. No es exactamente lo que está buscando, pero es rápido y fácil de escribir y la salida es bastante atractiva (incluso si es un poco difícil seguir algunas líneas ...)
Este ejemplo generará algo como esto
Parahaceresto,primerocreaunarchivollamadobyte.dot
digraphstructs{node[shape=plaintext]struct1[label=<<TABLEBORDER="0" CELLBORDER="1" CELLSPACING="0" ALIGN="left">
<TR>
<TD>0xc9</TD>
<TD PORT="f0"> 1 </TD>
<TD PORT="f1"> 1 </TD>
<TD PORT="f2"> 0 </TD>
<TD PORT="f3"> 0 </TD>
<TD PORT="f4"> 1 </TD>
<TD PORT="f5"> 0 </TD>
<TD PORT="f6"> 0 </TD>
<TD PORT="f7"> 1 </TD>
</TR>
</TABLE>>];
struct2 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" >
<TR> <TD ALIGN="left" PORT="f0"> RSTDISBL (reset pin is enabled) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f1"> WDTON (WDT not always on) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f2"> SPIEN (allow serial programming) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f3"> CKOPT (full output swing) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f4"> EESAVE (don't preserve EEPROM over chip erase) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f5"> BOOTSZ1 </TD> </TR>
<TR> <TD ALIGN="left" PORT="f6"> BOOTSZ0 </TD> </TR>
<TR> <TD ALIGN="left" PORT="f7"> BOOTRST (boot reset vector at 0x0000) </TD> </TR>
</TABLE>>];
struct1:f0:s -> struct2:f0:w;
struct1:f1:s -> struct2:f1:w;
struct1:f2:s -> struct2:f2:w;
struct1:f3:s -> struct2:f3:w;
struct1:f4:s -> struct2:f4:w;
struct1:f5:s -> struct2:f5:w;
struct1:f6:s -> struct2:f6:w;
struct1:f7:s -> struct2:f7:w;
}
Luego ejecuta uno de esos comandos.
dot -Tpng byte.dot -o byte.png
dot -Tps byte.dot -o byte.ps
¿Quizás sería mejor si no cruzamos todas las líneas en el medio?
Acabodecambiarelnombreenlasegundatabladef0..f7af7..f0.
<TABLEBORDER="0" CELLBORDER="1" CELLSPACING="0" >
<TR> <TD ALIGN="left" PORT="f7"> RSTDISBL (reset pin is enabled) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f6"> WDTON (WDT not always on) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f5"> SPIEN (allow serial programming) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f4"> CKOPT (full output swing) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f3"> EESAVE (don't preserve EEPROM over chip erase) </TD> </TR>
<TR> <TD ALIGN="left" PORT="f2"> BOOTSZ1 </TD> </TR>
<TR> <TD ALIGN="left" PORT="f1"> BOOTSZ0 </TD> </TR>
<TR> <TD ALIGN="left" PORT="f0"> BOOTRST (boot reset vector at 0x0000) </TD> </TR>
</TABLE>>];