Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
4 views
unlisted
ubuntu2204
1
\documentclass[border=2mm]{standalone}
2
\usepackage{tikz,fontspec}
3
4
\usetikzlibrary{chains, scopes, patterns,
5
decorations.pathreplacing}
6
7
% Font used for hex numbers
8
% https://tug.org/FontCatalogue/typewriterfonts.html
9
\newfontfamily\HexFont{Noto Sans Mono}
10
11
% register number depend color
12
\tikzset{%
13
register color/.code={%
14
\pgfmathparse{%
15
ifthenelse(#1<=7, "blue!10",%
16
ifthenelse(#1<=12,"blue!20",%
17
ifthenelse(#1==13,"yellow!30",%
18
ifthenelse(#1==14,"green!10",%
19
"green!20"%
20
)%
21
)%
22
)%
23
)%
24
}\colorlet{RegColor}{\pgfmathresult}%
25
},
26
% special
27
sregister color/.code={%
28
\pgfmathparse{%
29
ifthenelse(#1==0,"green!70",%
30
ifthenelse(or(#1>=1, #1<=3),"red!10",%
31
"red!60"%
32
)%
33
)%
34
}\colorlet{SRegColor}{\pgfmathresult}%
35
},
36
}
37
38
\begin{document}
39
40
\begin{tikzpicture}[
41
start chain = D going below, % register Data - chain 'D'
42
node distance = 0mm and 20mm,
43
font=\sffamily,
44
N/.style = {draw, % style for drawing nodes
45
minimum height={height("0xAA BB CC DD")+2pt},
46
minimum width={width("0xAA BB CC DD")+2pt},
47
outer sep=0pt, text opacity=1, align=center,
48
},
49
N/.default = red!70,
50
]
51
%% data
52
\begin{scope}[nodes=on chain=D]
53
\tikzset{
54
every node/.append style={
55
draw,
56
font=\HexFont,
57
register color=#1, fill=RegColor
58
}
59
}
60
\foreach \r in {0, 1,...,15}{ % register data
61
\ifnum\r<7
62
\node[on chain=D, register color={\r}] {0xAA BB CC DD};
63
\else
64
\ifnum\r=9
65
\node[on chain=D, register color={\r}, text=blue] {0xAA FF FF EE};
66
\else
67
\node[on chain=D, register color={\r}] {0x00 11 22 33};
68
\fi
69
\fi
70
}
71
\end{scope}
72
% endian
73
\node[above] at (D-1.north west) {MSB};
74
\node[above] at (D-1.north east) {LSB};
75
% mapping
76
\node (A) [N, register color=13, fill=RegColor, fill opacity=0.5, above right=2mm and 8mm of D-14.east]{case A};
77
\node (B) [N, register color=13, fill=RegColor, fill opacity=0.8, right=5mm of D-14]{case B};
78
\draw[densely dashed] (D-14.north east) -- (A.north west)
79
(D-14.south east) -- (B.south west);
80
%% special
81
\begin{scope}[
82
nodes=on chain,
83
start chain = S going below
84
]
85
\tikzset{
86
every node/.append style={
87
draw,
88
font=\HexFont,
89
sregister color=#1, fill=SRegColor
90
}
91
}
92
\node[N, sregister color=0, fill=SRegColor, , below=5mm of D-16] {0x00 00 00 FF};
93
\node[N, sregister color=1, fill=SRegColor, ] {0x11 11 11 00};
94
\node[N, sregister color=2, fill=SRegColor, ] {0x22 22 22 00};
95
\node[N, sregister color=3, fill=SRegColor, ] {0x33 33 33 00};
96
\node[N, sregister color=4, fill=SRegColor, ] {0x44 44 44 00}; %% TBD: not red!60
97
\end{scope}
98
\end{tikzpicture}
99
100
\end{document}
101
102