diff --git a/20220315/80486dx2-large.jpg b/20220315/80486dx2-large.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba4b32ee9489e862a8bf7b273002351f671f2878 Binary files /dev/null and b/20220315/80486dx2-large.jpg differ diff --git a/20220315/Babbages_Analytical_Engine,_1834-1871._(9660574685).jpg b/20220315/Babbages_Analytical_Engine,_1834-1871._(9660574685).jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab4c5b44e4509ef9907ad5e50768cf8d75010253 Binary files /dev/null and b/20220315/Babbages_Analytical_Engine,_1834-1871._(9660574685).jpg differ diff --git a/20220315/Elektronenroehre_real.png b/20220315/Elektronenroehre_real.png new file mode 100644 index 0000000000000000000000000000000000000000..9752168cb151d698c90b4920b060dd3595196f49 Binary files /dev/null and b/20220315/Elektronenroehre_real.png differ diff --git a/20220315/Elektronenroehren-auswahl.jpg b/20220315/Elektronenroehren-auswahl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c42b321f29ea81b11eb51a191dc9cc2ef7cfd7c Binary files /dev/null and b/20220315/Elektronenroehren-auswahl.jpg differ diff --git a/20220315/Eniac.jpg b/20220315/Eniac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75c5f42d190017636ff0bba2b49c994779d2c91a Binary files /dev/null and b/20220315/Eniac.jpg differ diff --git a/20220315/IC_Nanotecnology_2400X.JPG b/20220315/IC_Nanotecnology_2400X.JPG new file mode 100644 index 0000000000000000000000000000000000000000..a64dbfb91048d93f1e9141ef9e433bbf584911cd Binary files /dev/null and b/20220315/IC_Nanotecnology_2400X.JPG differ diff --git a/20220315/Intel_80486DX2_bottom.jpg b/20220315/Intel_80486DX2_bottom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51196ca09c87a5d8aa9a59d5189e18fd792fc48b Binary files /dev/null and b/20220315/Intel_80486DX2_bottom.jpg differ diff --git a/20220315/Intel_80486DX2_top.jpg b/20220315/Intel_80486DX2_top.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb83e35c9564e3380e0d5314f968fc8fff9f480f Binary files /dev/null and b/20220315/Intel_80486DX2_top.jpg differ diff --git a/20220315/Relay_principle_horizontal.jpg b/20220315/Relay_principle_horizontal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab9ffcd879a04f523118ba1a58f52ee8ad1d30db Binary files /dev/null and b/20220315/Relay_principle_horizontal.jpg differ diff --git a/20220315/Transistors-white-cropped.jpg b/20220315/Transistors-white-cropped.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b649bb9d9bc55986a6bfc80e571ab04ce7e70f8 Binary files /dev/null and b/20220315/Transistors-white-cropped.jpg differ diff --git a/20220315/Z3_Deutsches_Museum.JPG b/20220315/Z3_Deutsches_Museum.JPG new file mode 100644 index 0000000000000000000000000000000000000000..9b025ca65f0c0ec1cf9f317dbb80879efdf662da Binary files /dev/null and b/20220315/Z3_Deutsches_Museum.JPG differ diff --git a/20220315/ada-lovelace.jpg b/20220315/ada-lovelace.jpg new file mode 100644 index 0000000000000000000000000000000000000000..596510e71dc0c5551464c1b23596f9363e2379e5 Binary files /dev/null and b/20220315/ada-lovelace.jpg differ diff --git a/20220315/analytic-engine.jpg b/20220315/analytic-engine.jpg new file mode 120000 index 0000000000000000000000000000000000000000..954d18cce3d47e5e45d20065adcda6b75a643c80 --- /dev/null +++ b/20220315/analytic-engine.jpg @@ -0,0 +1 @@ +Babbages_Analytical_Engine,_1834-1871._(9660574685).jpg \ No newline at end of file diff --git a/20220315/charles-babbage.jpg b/20220315/charles-babbage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bf9cc635b90b173b32b010080f133b61327826b Binary files /dev/null and b/20220315/charles-babbage.jpg differ diff --git a/20220315/rtech-20220315-fig1.pdf b/20220315/rtech-20220315-fig1.pdf index bbc16af26d94dc7e3042c7060250c26436e8e0b2..cc52ac14540e21797c4096b491aed7b0ea701696 100644 Binary files a/20220315/rtech-20220315-fig1.pdf and b/20220315/rtech-20220315-fig1.pdf differ diff --git a/20220315/rtech-20220315-fig1.tex b/20220315/rtech-20220315-fig1.tex new file mode 100644 index 0000000000000000000000000000000000000000..441d80a9d6bd76e8b3f7a9ca82c04be2c9c8fb16 --- /dev/null +++ b/20220315/rtech-20220315-fig1.tex @@ -0,0 +1,60 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psscalebox{0.8}{% + \begin{pspicture}(-5,0)(12,12) + \small + \psset{unit=0.5cm} + \psline[arrows=<->](-1,0)(-1,22) + \rput(-1.3,0){\makebox(0,0)[br]{\textbf{gegenständlich}}} + \rput(-1.3,22){\makebox(0,0)[tr]{\textbf{abstrakt}}} + \rput(-1.3,2){\makebox(0,0)[r]{Elektromagnetismus, Halbleiter}} + \rput(-1.3,4){\makebox(0,0)[r]{Elektronische Bauelemente}} + \rput(-1.3,6){\makebox(0,0)[r]{Logik-Schaltkreise}} + \rput(-1.3,8){\makebox(0,0)[r]{Prozessoren}} + \rput(-1.3,9){\makebox(0,0)[r]{Maschinensprache}} + \rput(-1.3,10){\makebox(0,0)[r]{Assembler}} + \rput(-1.3,11){\makebox(0,0)[r]{Ein-/Ausgabe}} + \rput(-1.3,12.35){\makebox(0,0)[r]{\textbf{hardwarenahe Programmierung} (z.\,B.\ in C)}} + \rput(-1.3,14){\makebox(0,0)[r]{\shortstack[r]{abstrahierende Programmierung\\(z.\,B.\ in C++, Java)}}} +% \rput(-1.3,15){\makebox(0,0)[r]{Programmierung}} + \rput(-1.3,16){\makebox(0,0)[r]{Algorithmen, Datenstrukturen, Software-Entwurf}} + \rput(-1.3,17){\makebox(0,0)[r]{Requirements Engineering}} + \rput(-1.3,18){\makebox(0,0)[r]{formale Sprachen, Berechenbarkeit}} + \rput(-1.3,19){\makebox(0,0)[r]{mathematische Strukturen}} + \rput(-1.3,20){\makebox(0,0)[r]{mathematische Beweise}} + \rput(2.1,0.5){\makebox(0,0)[l]{Physik}} + \rput(4.1,4){\makebox(0,0)[l]{Elektrotechnik}} + \rput(6.1,8){\makebox(0,0)[l]{\textbf{Rechnertechnik}}} + \rput(8.1,12.35){\makebox(0,0)[l]{angewandte Informatik}} + \rput(10.1,16){\makebox(0,0)[l]{\shortstack[l]{Softwaretechnik und\\theoretische Informatik}}} + \rput(12.1,21){\makebox(0,0)[l]{Mathematik}} + \psset{linewidth=0.001,linestyle=none,fillstyle=gradient,gradmidpoint=1.0,gradlines=1000} + \definecolor{RGBwhite}{rgb}{1.0,1.0,1.0} + \definecolor{RGBblue}{rgb}{0.0,0.0,1.0} + \definecolor{RGBred}{rgb}{1.0,0.0,0.0} + \definecolor{RGBgreen}{rgb}{0.0,1.0,0.0} + \definecolor{RGByellow}{rgb}{1.0,1.0,0.0} + \definecolor{RGBorange}{rgb}{1.0,0.7,0.0} + \definecolor{RGBgrey}{rgb}{0.7,0.7,0.7} + \rput(0,2){\psframe[gradbegin=RGBwhite,gradend=RGBblue](2,2)} + \rput(0,0){\psframe[fillstyle=solid,fillcolor=RGBblue](2,2.01)} + \rput(2,6){\psframe[gradbegin=RGBwhite,gradend=RGBred](2,2)} + \rput(2,2){\psframe[gradbegin=RGBred,gradend=RGBwhite](2,2)} + \rput(2,3.99){\psframe[fillstyle=solid,fillcolor=RGBred](2,2.02)} + \rput(4,10){\psframe[gradbegin=RGBwhite,gradend=RGBgreen](2,2)} + \rput(4,6){\psframe[gradbegin=RGBgreen,gradend=RGBwhite](2,2)} + \rput(4,7.99){\psframe[fillstyle=solid,fillcolor=RGBgreen](2,2.02)} + \rput(6,14){\psframe[gradbegin=RGBwhite,gradend=RGByellow](2,2)} + \rput(6,10){\psframe[gradbegin=RGByellow,gradend=RGBwhite](2,2)} + \rput(6,11.99){\psframe[fillstyle=solid,fillcolor=RGByellow](2,2.02)} + \rput(8,18){\psframe[gradbegin=RGBwhite,gradend=RGBorange](2,2)} + \rput(8,14){\psframe[gradbegin=RGBorange,gradend=RGBwhite](2,2)} + \rput(8,15.99){\psframe[fillstyle=solid,fillcolor=RGBorange](2,2.02)} + \rput(10,18){\psframe[gradbegin=RGBgrey,gradend=RGBwhite](2,2)} + \rput(10,19.99){\psframe[fillstyle=solid,fillcolor=RGBgrey](2,2.01)} + \end{pspicture} + } + +\end{document} diff --git a/20220315/rtech-20220315-fig10.pdf b/20220315/rtech-20220315-fig10.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ed0f1bbe92aeecfcf84b919f15128eaec280cff6 Binary files /dev/null and b/20220315/rtech-20220315-fig10.pdf differ diff --git a/20220315/rtech-20220315-fig10.tex b/20220315/rtech-20220315-fig10.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig10.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig11.pdf b/20220315/rtech-20220315-fig11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..19706768b045ab4fc053700da0b31d8460f9f0c3 Binary files /dev/null and b/20220315/rtech-20220315-fig11.pdf differ diff --git a/20220315/rtech-20220315-fig11.tex b/20220315/rtech-20220315-fig11.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig11.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig12.pdf b/20220315/rtech-20220315-fig12.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0b74200bc316db7505da5ddbbef77d1cb9f753a Binary files /dev/null and b/20220315/rtech-20220315-fig12.pdf differ diff --git a/20220315/rtech-20220315-fig12.tex b/20220315/rtech-20220315-fig12.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig12.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig13.pdf b/20220315/rtech-20220315-fig13.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27ea09a8f381ff1fb35cf9cab277316ea1ff449f Binary files /dev/null and b/20220315/rtech-20220315-fig13.pdf differ diff --git a/20220315/rtech-20220315-fig13.tex b/20220315/rtech-20220315-fig13.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig13.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig14.pdf b/20220315/rtech-20220315-fig14.pdf new file mode 100644 index 0000000000000000000000000000000000000000..da8616fe7bb56d864228be34e585e65fc2797d06 Binary files /dev/null and b/20220315/rtech-20220315-fig14.pdf differ diff --git a/20220315/rtech-20220315-fig14.tex b/20220315/rtech-20220315-fig14.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig14.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig15.pdf b/20220315/rtech-20220315-fig15.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9d20d8a8694aaad0796ae215ec6e54f87eb64a9f Binary files /dev/null and b/20220315/rtech-20220315-fig15.pdf differ diff --git a/20220315/rtech-20220315-fig15.tex b/20220315/rtech-20220315-fig15.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig15.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig16.pdf b/20220315/rtech-20220315-fig16.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a1e883f70bb728d0f6586e6d69746118a8d1a95 Binary files /dev/null and b/20220315/rtech-20220315-fig16.pdf differ diff --git a/20220315/rtech-20220315-fig16.tex b/20220315/rtech-20220315-fig16.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig16.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig17.pdf b/20220315/rtech-20220315-fig17.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cdc1f52d2f8e82dda5fa5d0b5447fee17ab690f9 Binary files /dev/null and b/20220315/rtech-20220315-fig17.pdf differ diff --git a/20220315/rtech-20220315-fig17.tex b/20220315/rtech-20220315-fig17.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig17.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig18.pdf b/20220315/rtech-20220315-fig18.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3c6987b49b7827220f851a6abf315c3a403f5584 Binary files /dev/null and b/20220315/rtech-20220315-fig18.pdf differ diff --git a/20220315/rtech-20220315-fig18.tex b/20220315/rtech-20220315-fig18.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig18.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig19.pdf b/20220315/rtech-20220315-fig19.pdf new file mode 100644 index 0000000000000000000000000000000000000000..94661785180c4e88bf1b169d8957c0a09859eb1c Binary files /dev/null and b/20220315/rtech-20220315-fig19.pdf differ diff --git a/20220315/rtech-20220315-fig19.tex b/20220315/rtech-20220315-fig19.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig19.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig2.pdf b/20220315/rtech-20220315-fig2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ba7cfad9892156e040f574c9a4028999f9f11be Binary files /dev/null and b/20220315/rtech-20220315-fig2.pdf differ diff --git a/20220315/rtech-20220315-fig2.tex b/20220315/rtech-20220315-fig2.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig2.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig20.pdf b/20220315/rtech-20220315-fig20.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4a4e582280a09a815611e09c0cdd4e0f659934e7 Binary files /dev/null and b/20220315/rtech-20220315-fig20.pdf differ diff --git a/20220315/rtech-20220315-fig20.tex b/20220315/rtech-20220315-fig20.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig20.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig21.pdf b/20220315/rtech-20220315-fig21.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3040ab054135d3335ffaa5dc736b722ebe95385d Binary files /dev/null and b/20220315/rtech-20220315-fig21.pdf differ diff --git a/20220315/rtech-20220315-fig21.tex b/20220315/rtech-20220315-fig21.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig21.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig22.pdf b/20220315/rtech-20220315-fig22.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60a0599190855b97051ce3bda499c32d6ac48cbf Binary files /dev/null and b/20220315/rtech-20220315-fig22.pdf differ diff --git a/20220315/rtech-20220315-fig22.tex b/20220315/rtech-20220315-fig22.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig22.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig23.pdf b/20220315/rtech-20220315-fig23.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0cee3ea0528540e58f39db19578fcf2508a88e1 Binary files /dev/null and b/20220315/rtech-20220315-fig23.pdf differ diff --git a/20220315/rtech-20220315-fig23.tex b/20220315/rtech-20220315-fig23.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig23.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig24.pdf b/20220315/rtech-20220315-fig24.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a0e3393f856402aee6120d421d9f42465cee8aef Binary files /dev/null and b/20220315/rtech-20220315-fig24.pdf differ diff --git a/20220315/rtech-20220315-fig24.tex b/20220315/rtech-20220315-fig24.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig24.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig25.pdf b/20220315/rtech-20220315-fig25.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f5edfab1eb455ed11efc5ee734616f85ea125fe Binary files /dev/null and b/20220315/rtech-20220315-fig25.pdf differ diff --git a/20220315/rtech-20220315-fig25.tex b/20220315/rtech-20220315-fig25.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig25.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig26.pdf b/20220315/rtech-20220315-fig26.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6058fd617510a906838b50773b82ba28412a8933 Binary files /dev/null and b/20220315/rtech-20220315-fig26.pdf differ diff --git a/20220315/rtech-20220315-fig26.tex b/20220315/rtech-20220315-fig26.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig26.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig27.pdf b/20220315/rtech-20220315-fig27.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f3be25bd837910e3cfbfd8313e45aed1d9e3e406 Binary files /dev/null and b/20220315/rtech-20220315-fig27.pdf differ diff --git a/20220315/rtech-20220315-fig27.tex b/20220315/rtech-20220315-fig27.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig27.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig28.pdf b/20220315/rtech-20220315-fig28.pdf new file mode 100644 index 0000000000000000000000000000000000000000..09c9a3c16a534e05fb66315cfc6dc617b0c7ee8b Binary files /dev/null and b/20220315/rtech-20220315-fig28.pdf differ diff --git a/20220315/rtech-20220315-fig28.tex b/20220315/rtech-20220315-fig28.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig28.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig29.pdf b/20220315/rtech-20220315-fig29.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cd023c95a6d5f94f5ea1fcd22e497e8930b86a80 Binary files /dev/null and b/20220315/rtech-20220315-fig29.pdf differ diff --git a/20220315/rtech-20220315-fig29.tex b/20220315/rtech-20220315-fig29.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig29.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig3.pdf b/20220315/rtech-20220315-fig3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5300d5caf2bb1ba85c1b2e713cfdcb37abb7ee9d Binary files /dev/null and b/20220315/rtech-20220315-fig3.pdf differ diff --git a/20220315/rtech-20220315-fig3.tex b/20220315/rtech-20220315-fig3.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig3.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig30.pdf b/20220315/rtech-20220315-fig30.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b89d7625e59386799f2bcf8c31dc523f8cb49426 Binary files /dev/null and b/20220315/rtech-20220315-fig30.pdf differ diff --git a/20220315/rtech-20220315-fig30.tex b/20220315/rtech-20220315-fig30.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig30.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig31.pdf b/20220315/rtech-20220315-fig31.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a2c0b04e5d1be2a06a292571c69c5c98a2388f1 Binary files /dev/null and b/20220315/rtech-20220315-fig31.pdf differ diff --git a/20220315/rtech-20220315-fig31.tex b/20220315/rtech-20220315-fig31.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig31.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig32.pdf b/20220315/rtech-20220315-fig32.pdf new file mode 100644 index 0000000000000000000000000000000000000000..310606bd1f4ee4baaae037c804c60b84c1567ff3 Binary files /dev/null and b/20220315/rtech-20220315-fig32.pdf differ diff --git a/20220315/rtech-20220315-fig32.tex b/20220315/rtech-20220315-fig32.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig32.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig33.pdf b/20220315/rtech-20220315-fig33.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f1ded96145e1cc2a3c554ba9d74a119d9ca3e8bc Binary files /dev/null and b/20220315/rtech-20220315-fig33.pdf differ diff --git a/20220315/rtech-20220315-fig33.tex b/20220315/rtech-20220315-fig33.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig33.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig34.pdf b/20220315/rtech-20220315-fig34.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c91306ac3f367d4dfbe6c42f43c4022f26c9e147 Binary files /dev/null and b/20220315/rtech-20220315-fig34.pdf differ diff --git a/20220315/rtech-20220315-fig34.tex b/20220315/rtech-20220315-fig34.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig34.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig35.pdf b/20220315/rtech-20220315-fig35.pdf new file mode 100644 index 0000000000000000000000000000000000000000..95cc8f65fe57e1bc9d4d7635f4a1aca570783116 Binary files /dev/null and b/20220315/rtech-20220315-fig35.pdf differ diff --git a/20220315/rtech-20220315-fig35.tex b/20220315/rtech-20220315-fig35.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig35.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig36.pdf b/20220315/rtech-20220315-fig36.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a3012cbdada1349ade419d4a7ec7dfc39794b3ac Binary files /dev/null and b/20220315/rtech-20220315-fig36.pdf differ diff --git a/20220315/rtech-20220315-fig36.tex b/20220315/rtech-20220315-fig36.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig36.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig37.pdf b/20220315/rtech-20220315-fig37.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d2879db9b51073a1851f6ca5b155aedc0c01b1ad Binary files /dev/null and b/20220315/rtech-20220315-fig37.pdf differ diff --git a/20220315/rtech-20220315-fig37.tex b/20220315/rtech-20220315-fig37.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig37.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig38.pdf b/20220315/rtech-20220315-fig38.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2406d429a2a105c91b683f1016292e17fd96ecce Binary files /dev/null and b/20220315/rtech-20220315-fig38.pdf differ diff --git a/20220315/rtech-20220315-fig38.tex b/20220315/rtech-20220315-fig38.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig38.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig39.pdf b/20220315/rtech-20220315-fig39.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0942e5d7fee2c013e36c021368f7486c039f07fa Binary files /dev/null and b/20220315/rtech-20220315-fig39.pdf differ diff --git a/20220315/rtech-20220315-fig39.tex b/20220315/rtech-20220315-fig39.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig39.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig4.pdf b/20220315/rtech-20220315-fig4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ff2fd17c2fc15f946454c6b29b7ee3aed1617ef9 Binary files /dev/null and b/20220315/rtech-20220315-fig4.pdf differ diff --git a/20220315/rtech-20220315-fig4.tex b/20220315/rtech-20220315-fig4.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig4.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig40.pdf b/20220315/rtech-20220315-fig40.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e49bfd27af1a356bac374b4b95c66ce16392281 Binary files /dev/null and b/20220315/rtech-20220315-fig40.pdf differ diff --git a/20220315/rtech-20220315-fig40.tex b/20220315/rtech-20220315-fig40.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig40.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig41.pdf b/20220315/rtech-20220315-fig41.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c92299713844496d9acf380d353295a4a2a7bde5 Binary files /dev/null and b/20220315/rtech-20220315-fig41.pdf differ diff --git a/20220315/rtech-20220315-fig41.tex b/20220315/rtech-20220315-fig41.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig41.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig42.pdf b/20220315/rtech-20220315-fig42.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5db7e4103eb26443d9543fc1860cdce80d7cf5d2 Binary files /dev/null and b/20220315/rtech-20220315-fig42.pdf differ diff --git a/20220315/rtech-20220315-fig42.tex b/20220315/rtech-20220315-fig42.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig42.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig43.pdf b/20220315/rtech-20220315-fig43.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e5d1212d90c6bb601ab8e9912f299ec9154a21f0 Binary files /dev/null and b/20220315/rtech-20220315-fig43.pdf differ diff --git a/20220315/rtech-20220315-fig43.tex b/20220315/rtech-20220315-fig43.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig43.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig44.pdf b/20220315/rtech-20220315-fig44.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b2833d9118b34f08f70e742384a01058faa1a1a3 Binary files /dev/null and b/20220315/rtech-20220315-fig44.pdf differ diff --git a/20220315/rtech-20220315-fig44.tex b/20220315/rtech-20220315-fig44.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig44.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig45.pdf b/20220315/rtech-20220315-fig45.pdf new file mode 100644 index 0000000000000000000000000000000000000000..faca709bbbd076a05655d4bcc218c0cd73dac147 Binary files /dev/null and b/20220315/rtech-20220315-fig45.pdf differ diff --git a/20220315/rtech-20220315-fig45.tex b/20220315/rtech-20220315-fig45.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig45.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig46.pdf b/20220315/rtech-20220315-fig46.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d285b61ae6df746a3e671a2f884cb33b91818174 Binary files /dev/null and b/20220315/rtech-20220315-fig46.pdf differ diff --git a/20220315/rtech-20220315-fig46.tex b/20220315/rtech-20220315-fig46.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig46.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig47.pdf b/20220315/rtech-20220315-fig47.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1f426eccc380299a33ffd7b088222040653ab2e Binary files /dev/null and b/20220315/rtech-20220315-fig47.pdf differ diff --git a/20220315/rtech-20220315-fig47.tex b/20220315/rtech-20220315-fig47.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig47.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig48.pdf b/20220315/rtech-20220315-fig48.pdf new file mode 100644 index 0000000000000000000000000000000000000000..67bd4a3ab9a4bb1b16800b086a0feeaaab05acc6 Binary files /dev/null and b/20220315/rtech-20220315-fig48.pdf differ diff --git a/20220315/rtech-20220315-fig48.tex b/20220315/rtech-20220315-fig48.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig48.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig49.pdf b/20220315/rtech-20220315-fig49.pdf new file mode 100644 index 0000000000000000000000000000000000000000..44107f7933eeafdbd0e6ddc3b6260bb903f40ec7 Binary files /dev/null and b/20220315/rtech-20220315-fig49.pdf differ diff --git a/20220315/rtech-20220315-fig49.tex b/20220315/rtech-20220315-fig49.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig49.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig5.pdf b/20220315/rtech-20220315-fig5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..752906f472fef1e0ca4a611036095c09febf201b Binary files /dev/null and b/20220315/rtech-20220315-fig5.pdf differ diff --git a/20220315/rtech-20220315-fig5.tex b/20220315/rtech-20220315-fig5.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig5.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig50.pdf b/20220315/rtech-20220315-fig50.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2dc03113f80de154f83e1a34da36d502eb88bbc5 Binary files /dev/null and b/20220315/rtech-20220315-fig50.pdf differ diff --git a/20220315/rtech-20220315-fig50.tex b/20220315/rtech-20220315-fig50.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig50.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig51.pdf b/20220315/rtech-20220315-fig51.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c0b2039fbcc6dcff0f32ae149cf101999657b26 Binary files /dev/null and b/20220315/rtech-20220315-fig51.pdf differ diff --git a/20220315/rtech-20220315-fig51.tex b/20220315/rtech-20220315-fig51.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig51.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig52.pdf b/20220315/rtech-20220315-fig52.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c8195fd234d968b1f1910f34b8602e4755e67e04 Binary files /dev/null and b/20220315/rtech-20220315-fig52.pdf differ diff --git a/20220315/rtech-20220315-fig52.tex b/20220315/rtech-20220315-fig52.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig52.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig53.pdf b/20220315/rtech-20220315-fig53.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b89ab1f212417f75951a456da4fd0b6ab168b71 Binary files /dev/null and b/20220315/rtech-20220315-fig53.pdf differ diff --git a/20220315/rtech-20220315-fig53.tex b/20220315/rtech-20220315-fig53.tex new file mode 100644 index 0000000000000000000000000000000000000000..978c355d299bc655bb0fafd26697a5f6cb6e12e5 --- /dev/null +++ b/20220315/rtech-20220315-fig53.tex @@ -0,0 +1,34 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig54.pdf b/20220315/rtech-20220315-fig54.pdf new file mode 100644 index 0000000000000000000000000000000000000000..545bcd809002abb8b61348ed50c1a89e966cf450 Binary files /dev/null and b/20220315/rtech-20220315-fig54.pdf differ diff --git a/20220315/rtech-20220315-fig54.tex b/20220315/rtech-20220315-fig54.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig54.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig55.pdf b/20220315/rtech-20220315-fig55.pdf new file mode 100644 index 0000000000000000000000000000000000000000..551ff3f1803ad79897c5edf2f1284474efd0127b Binary files /dev/null and b/20220315/rtech-20220315-fig55.pdf differ diff --git a/20220315/rtech-20220315-fig55.tex b/20220315/rtech-20220315-fig55.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig55.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig56.pdf b/20220315/rtech-20220315-fig56.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42afa45ec33ad4a0f973a1eb5d36eac9e6ee6c2a Binary files /dev/null and b/20220315/rtech-20220315-fig56.pdf differ diff --git a/20220315/rtech-20220315-fig56.tex b/20220315/rtech-20220315-fig56.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig56.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig57.pdf b/20220315/rtech-20220315-fig57.pdf new file mode 100644 index 0000000000000000000000000000000000000000..698f1d905ea08dddc77a4a51a242d577d1557b36 Binary files /dev/null and b/20220315/rtech-20220315-fig57.pdf differ diff --git a/20220315/rtech-20220315-fig57.tex b/20220315/rtech-20220315-fig57.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig57.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig58.pdf b/20220315/rtech-20220315-fig58.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42ca60582e2cf11b762f9b57c507627485363ccf Binary files /dev/null and b/20220315/rtech-20220315-fig58.pdf differ diff --git a/20220315/rtech-20220315-fig58.tex b/20220315/rtech-20220315-fig58.tex new file mode 100644 index 0000000000000000000000000000000000000000..296b6d43d839c8294161a009aca441ff858f7c46 --- /dev/null +++ b/20220315/rtech-20220315-fig58.tex @@ -0,0 +1,32 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[linestyle=dashed](0,0.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig59.pdf b/20220315/rtech-20220315-fig59.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b37d2a3b6420a78f506e1af18be6e7fac8a3815 Binary files /dev/null and b/20220315/rtech-20220315-fig59.pdf differ diff --git a/20220315/rtech-20220315-fig59.tex b/20220315/rtech-20220315-fig59.tex new file mode 100644 index 0000000000000000000000000000000000000000..bd46257c76bce65cb333e113cf8fd3e10552400a --- /dev/null +++ b/20220315/rtech-20220315-fig59.tex @@ -0,0 +1,42 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C_0$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D_0$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E_0$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \pnode(-0.5,-1.5){C1} + \uput[l](-1.5,0|C1){$C_1$} + \pnode(0.5,-1.2){D1} + \uput[r](1.5,0|D1){$D_1$} + \pnode(0.5,-1.8){E1} + \uput[r](1.5,0|E1){$E_1$} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \psline[linestyle=dashed](0,-1.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D1)(D1) + \psline[arrows=o-](1.5,0|E1)(E1) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig6.pdf b/20220315/rtech-20220315-fig6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..176b1773bac2e0ae8b98e04fa612254365ad7a25 Binary files /dev/null and b/20220315/rtech-20220315-fig6.pdf differ diff --git a/20220315/rtech-20220315-fig6.tex b/20220315/rtech-20220315-fig6.tex new file mode 100644 index 0000000000000000000000000000000000000000..3a71ce0ce03849a391adee46ef0cc0e498d5947d --- /dev/null +++ b/20220315/rtech-20220315-fig6.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig60.pdf b/20220315/rtech-20220315-fig60.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0c6506f5fe8fe259556df547c03fffd77916f0ab Binary files /dev/null and b/20220315/rtech-20220315-fig60.pdf differ diff --git a/20220315/rtech-20220315-fig60.tex b/20220315/rtech-20220315-fig60.tex new file mode 100644 index 0000000000000000000000000000000000000000..296b6d43d839c8294161a009aca441ff858f7c46 --- /dev/null +++ b/20220315/rtech-20220315-fig60.tex @@ -0,0 +1,32 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[linestyle=dashed](0,0.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig61.pdf b/20220315/rtech-20220315-fig61.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ac602529dcd77a3c2905289d75b0d1736a6dadf Binary files /dev/null and b/20220315/rtech-20220315-fig61.pdf differ diff --git a/20220315/rtech-20220315-fig61.tex b/20220315/rtech-20220315-fig61.tex new file mode 100644 index 0000000000000000000000000000000000000000..bd46257c76bce65cb333e113cf8fd3e10552400a --- /dev/null +++ b/20220315/rtech-20220315-fig61.tex @@ -0,0 +1,42 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C_0$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D_0$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E_0$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \pnode(-0.5,-1.5){C1} + \uput[l](-1.5,0|C1){$C_1$} + \pnode(0.5,-1.2){D1} + \uput[r](1.5,0|D1){$D_1$} + \pnode(0.5,-1.8){E1} + \uput[r](1.5,0|E1){$E_1$} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \psline[linestyle=dashed](0,-1.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D1)(D1) + \psline[arrows=o-](1.5,0|E1)(E1) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig62.pdf b/20220315/rtech-20220315-fig62.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6a709a49d4f2b21ad8c9e875cc58d62d5b932670 Binary files /dev/null and b/20220315/rtech-20220315-fig62.pdf differ diff --git a/20220315/rtech-20220315-fig62.tex b/20220315/rtech-20220315-fig62.tex new file mode 100644 index 0000000000000000000000000000000000000000..296b6d43d839c8294161a009aca441ff858f7c46 --- /dev/null +++ b/20220315/rtech-20220315-fig62.tex @@ -0,0 +1,32 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[linestyle=dashed](0,0.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig63.pdf b/20220315/rtech-20220315-fig63.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b557be8be6c86ee4b6ca4c61053412d3e4a95bcd Binary files /dev/null and b/20220315/rtech-20220315-fig63.pdf differ diff --git a/20220315/rtech-20220315-fig63.tex b/20220315/rtech-20220315-fig63.tex new file mode 100644 index 0000000000000000000000000000000000000000..bd46257c76bce65cb333e113cf8fd3e10552400a --- /dev/null +++ b/20220315/rtech-20220315-fig63.tex @@ -0,0 +1,42 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C_0$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D_0$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E_0$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \pnode(-0.5,-1.5){C1} + \uput[l](-1.5,0|C1){$C_1$} + \pnode(0.5,-1.2){D1} + \uput[r](1.5,0|D1){$D_1$} + \pnode(0.5,-1.8){E1} + \uput[r](1.5,0|E1){$E_1$} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \psline[linestyle=dashed](0,-1.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D1)(D1) + \psline[arrows=o-](1.5,0|E1)(E1) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig64.pdf b/20220315/rtech-20220315-fig64.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34fdaaa6ff173f6b3709ef610536f2768bbf366d Binary files /dev/null and b/20220315/rtech-20220315-fig64.pdf differ diff --git a/20220315/rtech-20220315-fig64.tex b/20220315/rtech-20220315-fig64.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig64.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig65.pdf b/20220315/rtech-20220315-fig65.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b5e5e4d915cb6f73d59b1ba560825a058ba8f2cd Binary files /dev/null and b/20220315/rtech-20220315-fig65.pdf differ diff --git a/20220315/rtech-20220315-fig65.tex b/20220315/rtech-20220315-fig65.tex new file mode 100644 index 0000000000000000000000000000000000000000..5aa33dc2862a5dd287d5e5a26b6ee17b7c65c79f --- /dev/null +++ b/20220315/rtech-20220315-fig65.tex @@ -0,0 +1,32 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(4.0,0){C1} + \pnode(3.0,0.3){D1} + \pnode(3.0,-0.3){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \put(0.0,0.3){\makebox(0,0)[b]{A}} + \put(3.5,0.3){\makebox(0,0)[b]{B}} + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline(D0)(1.25,0|D0)(2.25,0|E1)(E1) + \psline(E0)(1.25,0|E0)(2.25,0|D1)(D1) + \psline(C1)(5,0) + \lamp[labeloffset=0.9](5,0)(5,-2){Q} + \ground[connectingdot=false](5,-2) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig66.pdf b/20220315/rtech-20220315-fig66.pdf new file mode 100644 index 0000000000000000000000000000000000000000..22177012e74bad7a3f9568b76aac42c2b91bc839 Binary files /dev/null and b/20220315/rtech-20220315-fig66.pdf differ diff --git a/20220315/rtech-20220315-fig66.tex b/20220315/rtech-20220315-fig66.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig66.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig67.pdf b/20220315/rtech-20220315-fig67.pdf new file mode 100644 index 0000000000000000000000000000000000000000..716376263f8f82754d964284c1a6443cb8023af0 Binary files /dev/null and b/20220315/rtech-20220315-fig67.pdf differ diff --git a/20220315/rtech-20220315-fig67.tex b/20220315/rtech-20220315-fig67.tex new file mode 100644 index 0000000000000000000000000000000000000000..4386e871b2f2d3bd61c78fb9102022d222633b70 --- /dev/null +++ b/20220315/rtech-20220315-fig67.tex @@ -0,0 +1,25 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \logic[logicType=and](-0.75,0.625){and1} + \logic[logicType=and](-0.75,-2.125){and2} + \logic[logicType=or](2.25,-0.625){or1} + \psline[arrows=o-](-3,0|and12)(and12) + \uput[180](-3,0|and12){A} + \psline[arrows=o-](-3,0|and21)(and21) + \uput[180](-3,0|and21){B} + \psline[arrows=*-](-2,0|and12)(-2,0|and22)(and22) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and22){0.1} + \psline[arrows=*-](-1.5,0|and21)(-1.5,0|and11)(and11) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and11){0.1} + \psline(and1Q)(1.5,0|and1Q)(1.5,0|or12)(or12) + \psline(and2Q)(1.5,0|and2Q)(1.5,0|or11)(or11) + \psline[arrows=o-](5,0|or1Q)(or1Q) + \uput[0](5,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig68.pdf b/20220315/rtech-20220315-fig68.pdf new file mode 100644 index 0000000000000000000000000000000000000000..688f39d4bf08025ea95f7e23d29026618dbad836 Binary files /dev/null and b/20220315/rtech-20220315-fig68.pdf differ diff --git a/20220315/rtech-20220315-fig68.tex b/20220315/rtech-20220315-fig68.tex new file mode 100644 index 0000000000000000000000000000000000000000..a58085cf8220ed36899a021289030383af974fa2 --- /dev/null +++ b/20220315/rtech-20220315-fig68.tex @@ -0,0 +1,20 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig69.pdf b/20220315/rtech-20220315-fig69.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b7714046b874c2fda6d352578771f85c18e0fea Binary files /dev/null and b/20220315/rtech-20220315-fig69.pdf differ diff --git a/20220315/rtech-20220315-fig69.tex b/20220315/rtech-20220315-fig69.tex new file mode 100644 index 0000000000000000000000000000000000000000..c24ba66813b264e7e7613515521611ee8c568265 --- /dev/null +++ b/20220315/rtech-20220315-fig69.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig7.pdf b/20220315/rtech-20220315-fig7.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8ce8d44e2f749b90a4f12da3ff788a5a9564177d Binary files /dev/null and b/20220315/rtech-20220315-fig7.pdf differ diff --git a/20220315/rtech-20220315-fig7.tex b/20220315/rtech-20220315-fig7.tex new file mode 100644 index 0000000000000000000000000000000000000000..2287195c28e8919cd4d5d3eabfc44960e9df334e --- /dev/null +++ b/20220315/rtech-20220315-fig7.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig70.pdf b/20220315/rtech-20220315-fig70.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0cffdc00a9c33148127c31a97504e07ba1b0a9a8 Binary files /dev/null and b/20220315/rtech-20220315-fig70.pdf differ diff --git a/20220315/rtech-20220315-fig70.tex b/20220315/rtech-20220315-fig70.tex new file mode 100644 index 0000000000000000000000000000000000000000..a58085cf8220ed36899a021289030383af974fa2 --- /dev/null +++ b/20220315/rtech-20220315-fig70.tex @@ -0,0 +1,20 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig71.pdf b/20220315/rtech-20220315-fig71.pdf new file mode 100644 index 0000000000000000000000000000000000000000..456420ed4d1d474a2b08fddcd17053e7acf29114 Binary files /dev/null and b/20220315/rtech-20220315-fig71.pdf differ diff --git a/20220315/rtech-20220315-fig71.tex b/20220315/rtech-20220315-fig71.tex new file mode 100644 index 0000000000000000000000000000000000000000..c24ba66813b264e7e7613515521611ee8c568265 --- /dev/null +++ b/20220315/rtech-20220315-fig71.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig72.pdf b/20220315/rtech-20220315-fig72.pdf new file mode 100644 index 0000000000000000000000000000000000000000..22aec53906e68f65aae01bcb705989a0a0f92ae0 Binary files /dev/null and b/20220315/rtech-20220315-fig72.pdf differ diff --git a/20220315/rtech-20220315-fig72.tex b/20220315/rtech-20220315-fig72.tex new file mode 100644 index 0000000000000000000000000000000000000000..6ba4ed697f7470d0b032278a98b200f54c7fbeac --- /dev/null +++ b/20220315/rtech-20220315-fig72.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,0){B} + \uput[180](B){Basis} + \pnode(1.5,1.5){C} + \uput[0](C){Kollektor} + \pnode(1.5,-1.5){E} + \uput[0](E){Emitter} + \transistor[basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig73.pdf b/20220315/rtech-20220315-fig73.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3ba2ff08ba541f9a0081a68553a226fc4d3f8327 Binary files /dev/null and b/20220315/rtech-20220315-fig73.pdf differ diff --git a/20220315/rtech-20220315-fig73.tex b/20220315/rtech-20220315-fig73.tex new file mode 100644 index 0000000000000000000000000000000000000000..8d142ea8d3c83fca9e54fe35de4f4d0aec0d9893 --- /dev/null +++ b/20220315/rtech-20220315-fig73.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,-0.5){B} + \uput[180](B){Gate} + \pnode(1.5,1.5){C} + \uput[0](C){Drain} + \pnode(1.5,-1.5){E} + \uput[0](E){Source} + \transistor[transistortype=MOSFET,basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig74.pdf b/20220315/rtech-20220315-fig74.pdf new file mode 100644 index 0000000000000000000000000000000000000000..65ba69210773f64a27b0bed6fc7a64e1d7d4b8f3 Binary files /dev/null and b/20220315/rtech-20220315-fig74.pdf differ diff --git a/20220315/rtech-20220315-fig74.tex b/20220315/rtech-20220315-fig74.tex new file mode 100644 index 0000000000000000000000000000000000000000..4386e871b2f2d3bd61c78fb9102022d222633b70 --- /dev/null +++ b/20220315/rtech-20220315-fig74.tex @@ -0,0 +1,25 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \logic[logicType=and](-0.75,0.625){and1} + \logic[logicType=and](-0.75,-2.125){and2} + \logic[logicType=or](2.25,-0.625){or1} + \psline[arrows=o-](-3,0|and12)(and12) + \uput[180](-3,0|and12){A} + \psline[arrows=o-](-3,0|and21)(and21) + \uput[180](-3,0|and21){B} + \psline[arrows=*-](-2,0|and12)(-2,0|and22)(and22) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and22){0.1} + \psline[arrows=*-](-1.5,0|and21)(-1.5,0|and11)(and11) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and11){0.1} + \psline(and1Q)(1.5,0|and1Q)(1.5,0|or12)(or12) + \psline(and2Q)(1.5,0|and2Q)(1.5,0|or11)(or11) + \psline[arrows=o-](5,0|or1Q)(or1Q) + \uput[0](5,0|or1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig75.pdf b/20220315/rtech-20220315-fig75.pdf new file mode 100644 index 0000000000000000000000000000000000000000..603a91d2ee8d4911b0dc24250303978bee220122 Binary files /dev/null and b/20220315/rtech-20220315-fig75.pdf differ diff --git a/20220315/rtech-20220315-fig75.tex b/20220315/rtech-20220315-fig75.tex new file mode 100644 index 0000000000000000000000000000000000000000..a58085cf8220ed36899a021289030383af974fa2 --- /dev/null +++ b/20220315/rtech-20220315-fig75.tex @@ -0,0 +1,20 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig76.pdf b/20220315/rtech-20220315-fig76.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ceee2061932de71da0466c6f9e9293abaa022cdd Binary files /dev/null and b/20220315/rtech-20220315-fig76.pdf differ diff --git a/20220315/rtech-20220315-fig76.tex b/20220315/rtech-20220315-fig76.tex new file mode 100644 index 0000000000000000000000000000000000000000..c24ba66813b264e7e7613515521611ee8c568265 --- /dev/null +++ b/20220315/rtech-20220315-fig76.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig77.pdf b/20220315/rtech-20220315-fig77.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcef652f59cbd99dec472ed768bbe4d6bf464b9e Binary files /dev/null and b/20220315/rtech-20220315-fig77.pdf differ diff --git a/20220315/rtech-20220315-fig77.tex b/20220315/rtech-20220315-fig77.tex new file mode 100644 index 0000000000000000000000000000000000000000..a58085cf8220ed36899a021289030383af974fa2 --- /dev/null +++ b/20220315/rtech-20220315-fig77.tex @@ -0,0 +1,20 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig78.pdf b/20220315/rtech-20220315-fig78.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8616ce8126963c17c926f8e74c84ec1be1bf1553 Binary files /dev/null and b/20220315/rtech-20220315-fig78.pdf differ diff --git a/20220315/rtech-20220315-fig78.tex b/20220315/rtech-20220315-fig78.tex new file mode 100644 index 0000000000000000000000000000000000000000..c24ba66813b264e7e7613515521611ee8c568265 --- /dev/null +++ b/20220315/rtech-20220315-fig78.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig79.pdf b/20220315/rtech-20220315-fig79.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b892bd7ab37ce1ccbb127149694dd15eee2db72c Binary files /dev/null and b/20220315/rtech-20220315-fig79.pdf differ diff --git a/20220315/rtech-20220315-fig79.tex b/20220315/rtech-20220315-fig79.tex new file mode 100644 index 0000000000000000000000000000000000000000..6ba4ed697f7470d0b032278a98b200f54c7fbeac --- /dev/null +++ b/20220315/rtech-20220315-fig79.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,0){B} + \uput[180](B){Basis} + \pnode(1.5,1.5){C} + \uput[0](C){Kollektor} + \pnode(1.5,-1.5){E} + \uput[0](E){Emitter} + \transistor[basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig8.pdf b/20220315/rtech-20220315-fig8.pdf new file mode 100644 index 0000000000000000000000000000000000000000..aefe0e0e63a9e230d07ea35ff6f64bb9fea87eb7 Binary files /dev/null and b/20220315/rtech-20220315-fig8.pdf differ diff --git a/20220315/rtech-20220315-fig8.tex b/20220315/rtech-20220315-fig8.tex new file mode 100644 index 0000000000000000000000000000000000000000..43bcd0480fadd06fe2ca64838dd2d6154d97a4dc --- /dev/null +++ b/20220315/rtech-20220315-fig8.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig80.pdf b/20220315/rtech-20220315-fig80.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1ffaaf4373555c8819d7d077fd8f13548a4914b8 Binary files /dev/null and b/20220315/rtech-20220315-fig80.pdf differ diff --git a/20220315/rtech-20220315-fig80.tex b/20220315/rtech-20220315-fig80.tex new file mode 100644 index 0000000000000000000000000000000000000000..8d142ea8d3c83fca9e54fe35de4f4d0aec0d9893 --- /dev/null +++ b/20220315/rtech-20220315-fig80.tex @@ -0,0 +1,17 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,-0.5){B} + \uput[180](B){Gate} + \pnode(1.5,1.5){C} + \uput[0](C){Drain} + \pnode(1.5,-1.5){E} + \uput[0](E){Source} + \transistor[transistortype=MOSFET,basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315-fig9.pdf b/20220315/rtech-20220315-fig9.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f9322a3252ebec4b0d3dc7e12c24ec74adc5e63b Binary files /dev/null and b/20220315/rtech-20220315-fig9.pdf differ diff --git a/20220315/rtech-20220315-fig9.tex b/20220315/rtech-20220315-fig9.tex new file mode 100644 index 0000000000000000000000000000000000000000..9684329bc4e673536f8151736ebaca41049e5b98 --- /dev/null +++ b/20220315/rtech-20220315-fig9.tex @@ -0,0 +1,33 @@ +\documentclass{article} +\input tmp.inputs +\pagestyle{empty} +\begin{document} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + +\end{document} diff --git a/20220315/rtech-20220315.pdf b/20220315/rtech-20220315.pdf index 7100cef234b43532c1f15035907dde84d031c1ee..8aa21f7184975185ceb633635da6ee00cc2311ce 100644 Binary files a/20220315/rtech-20220315.pdf and b/20220315/rtech-20220315.pdf differ diff --git a/20220315/rtech-20220315.tex b/20220315/rtech-20220315.tex index 7ac0cf3c61f094dc89a9d8501fb9152df92285a3..2d485d5c1bc063927b3e90e40f865e38dedfdfc4 100644 --- a/20220315/rtech-20220315.tex +++ b/20220315/rtech-20220315.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Einführung +% README: Einführung, Logik-Schaltkreise \documentclass[10pt,t]{beamer} @@ -166,138 +166,6 @@ \end{frame} -\iffalse - -\begin{frame}[fragile] - - \vspace{-0.6cm} - \begin{center} - \begin{pdfpic} - \psscalebox{0.8}{% - \begin{pspicture}(-5,0)(12,12) - \small - \psset{unit=0.5cm} - \psline[arrows=<->](-1,0)(-1,22) - \rput(-1.3,0){\makebox(0,0)[br]{\textbf{gegenständlich}}} - \rput(-1.3,22){\makebox(0,0)[tr]{\textbf{abstrakt}}} - \rput(-1.3,2){\makebox(0,0)[r]{Elektromagnetismus, Halbleiter}} - \rput(-1.3,4){\makebox(0,0)[r]{Elektronische Bauelemente}} - \rput(-1.3,6){\makebox(0,0)[r]{Logik-Schaltkreise}} - \rput(-1.3,8){\makebox(0,0)[r]{Prozessoren}} - \rput(-1.3,9){\makebox(0,0)[r]{Maschinensprache}} - \rput(-1.3,10){\makebox(0,0)[r]{Assembler}} - \rput(-1.3,11){\makebox(0,0)[r]{Ein-/Ausgabe}} - \rput(-1.3,12){\makebox(0,0)[r]{maschinennahe Hochsprachen (z.\,B.\ C)}} - \rput(-1.3,14){\makebox(0,0)[r]{abstrahierende Hochsprachen (z.\,B.\ C++, Java)}} - \rput(-1.3,15){\makebox(0,0)[r]{Programmierung}} - \rput(-1.3,16){\makebox(0,0)[r]{Algorithmen, Datenstrukturen, Software-Entwurf}} - \rput(-1.3,17){\makebox(0,0)[r]{Requirements Engineering}} - \rput(-1.3,18){\makebox(0,0)[r]{formale Sprachen, Berechenbarkeit}} - \rput(-1.3,19){\makebox(0,0)[r]{mathematische Strukturen}} - \rput(-1.3,20){\makebox(0,0)[r]{mathematische Beweise}} - \rput(2.1,0.5){\makebox(0,0)[l]{Physik}} - \rput(4.1,4){\makebox(0,0)[l]{Elektrotechnik}} - \rput(6.1,8){\makebox(0,0)[l]{\shortstack[l]{Rechnertechnik und\\technische Informatik}}} - \rput(8.1,12){\makebox(0,0)[l]{\shortstack[l]{Praktische und\\angewandte Informatik}}} - \rput(10.1,16){\makebox(0,0)[l]{\shortstack[l]{Softwaretechnik und\\theoretische Informatik}}} - \rput(12.1,21){\makebox(0,0)[l]{Mathematik}} - \psset{linewidth=0.001,linestyle=none,fillstyle=gradient,gradmidpoint=1.0,gradlines=1000} - \definecolor{RGBwhite}{rgb}{1.0,1.0,1.0} - \definecolor{RGBblue}{rgb}{0.0,0.0,1.0} - \definecolor{RGBred}{rgb}{1.0,0.0,0.0} - \definecolor{RGBgreen}{rgb}{0.0,1.0,0.0} - \definecolor{RGByellow}{rgb}{1.0,1.0,0.0} - \definecolor{RGBorange}{rgb}{1.0,0.7,0.0} - \definecolor{RGBgrey}{rgb}{0.7,0.7,0.7} - \rput(0,2){\psframe[gradbegin=RGBwhite,gradend=RGBblue](2,2)} - \rput(0,0){\psframe[fillstyle=solid,fillcolor=RGBblue](2,2.01)} - \rput(2,6){\psframe[gradbegin=RGBwhite,gradend=RGBred](2,2)} - \rput(2,2){\psframe[gradbegin=RGBred,gradend=RGBwhite](2,2)} - \rput(2,3.99){\psframe[fillstyle=solid,fillcolor=RGBred](2,2.02)} - \rput(4,10){\psframe[gradbegin=RGBwhite,gradend=RGBgreen](2,2)} - \rput(4,6){\psframe[gradbegin=RGBgreen,gradend=RGBwhite](2,2)} - \rput(4,7.99){\psframe[fillstyle=solid,fillcolor=RGBgreen](2,2.02)} - \rput(6,14){\psframe[gradbegin=RGBwhite,gradend=RGByellow](2,2)} - \rput(6,10){\psframe[gradbegin=RGByellow,gradend=RGBwhite](2,2)} - \rput(6,11.99){\psframe[fillstyle=solid,fillcolor=RGByellow](2,2.02)} - \rput(8,18){\psframe[gradbegin=RGBwhite,gradend=RGBorange](2,2)} - \rput(8,14){\psframe[gradbegin=RGBorange,gradend=RGBwhite](2,2)} - \rput(8,15.99){\psframe[fillstyle=solid,fillcolor=RGBorange](2,2.02)} - \rput(10,18){\psframe[gradbegin=RGBgrey,gradend=RGBwhite](2,2)} - \rput(10,19.99){\psframe[fillstyle=solid,fillcolor=RGBgrey](2,2.01)} - \end{pspicture} - } - \end{pdfpic} - \end{center} - -\end{frame} - -\begin{frame}[fragile] - - \vspace{-0.6cm} - \begin{center} - \begin{pdfpic} - \psscalebox{0.8}{% - \begin{pspicture}(-5,0)(12,12) - \small - \psset{unit=0.5cm} - \psline[arrows=<->](-1,0)(-1,22) - \rput(-1.3,0){\makebox(0,0)[br]{\textbf{gegenständlich}}} - \rput(-1.3,22){\makebox(0,0)[tr]{\textbf{abstrakt}}} - \rput(-1.3,2){\makebox(0,0)[r]{\color{lightgray}Elektromagnetismus, Halbleiter}} - \rput(-1.3,4){\makebox(0,0)[r]{\color{lightgray}Elektronische Bauelemente}} - \rput(-1.3,6){\makebox(0,0)[r]{Logik-Schaltkreise}} - \rput(-1.3,8){\makebox(0,0)[r]{Prozessoren}} - \rput(-1.3,9){\makebox(0,0)[r]{Maschinensprache}} - \rput(-1.3,10){\makebox(0,0)[r]{Assembler}} - \rput(-1.3,11){\makebox(0,0)[r]{Ein-/Ausgabe}} - \rput(-1.3,12){\makebox(0,0)[r]{maschinennahe Hochsprachen (z.\,B.\ C)}} - \rput(-1.3,14){\makebox(0,0)[r]{abstrahierende Hochsprachen (z.\,B.\ C++, Java)}} - \rput(-1.3,15){\makebox(0,0)[r]{Programmierung}} - \rput(-1.3,16){\makebox(0,0)[r]{Algorithmen, Datenstrukturen, Software-Entwurf}} - \rput(-1.3,17){\makebox(0,0)[r]{\color{lightgray}Requirements Engineering}} - \rput(-1.3,18){\makebox(0,0)[r]{\color{lightgray}formale Sprachen, Berechenbarkeit}} - \rput(-1.3,19){\makebox(0,0)[r]{\color{lightgray}mathematische Strukturen}} - \rput(-1.3,20){\makebox(0,0)[r]{\color{lightgray}mathematische Beweise}} - \rput(2.1,0.5){\makebox(0,0)[l]{\color{lightgray}Physik}} - \rput(4.1,4){\makebox(0,0)[l]{\color{lightgray}Elektrotechnik}} - \rput(6.1,8){\makebox(0,0)[l]{\shortstack[l]{Rechnertechnik \color{lightgray}und\\\color{lightgray}technische Informatik}}} - \rput(8.1,12){\makebox(0,0)[l]{\shortstack[l]{{\color{lightgray}Praktische und}\\\color{lightgray}angewandte Informatik}}} - \rput(10.1,16){\makebox(0,0)[l]{\shortstack[l]{\color{lightgray}Softwaretechnik und\\\color{lightgray}theoretische Informatik}}} - \rput(12.1,21){\makebox(0,0)[l]{\color{lightgray}Mathematik}} - \psset{linewidth=0.001,linestyle=none,fillstyle=gradient,gradmidpoint=1.0,gradlines=1000} - \definecolor{RGBwhite}{rgb}{1.0,1.0,1.0} - \definecolor{RGBblue}{rgb}{0.0,0.0,1.0} - \definecolor{RGBred}{rgb}{1.0,0.0,0.0} - \definecolor{RGBgreen}{rgb}{0.0,1.0,0.0} - \definecolor{RGByellow}{rgb}{1.0,1.0,0.0} - \definecolor{RGBorange}{rgb}{1.0,0.7,0.0} - \definecolor{RGBgrey}{rgb}{0.7,0.7,0.7} - \rput(0,2){\psframe[gradbegin=RGBwhite,gradend=RGBblue](2,2)} - \rput(0,0){\psframe[fillstyle=solid,fillcolor=RGBblue](2,2.01)} - \rput(2,6){\psframe[gradbegin=RGBwhite,gradend=RGBred](2,2)} - \rput(2,2){\psframe[gradbegin=RGBred,gradend=RGBwhite](2,2)} - \rput(2,3.99){\psframe[fillstyle=solid,fillcolor=RGBred](2,2.02)} - \rput(4,10){\psframe[gradbegin=RGBwhite,gradend=RGBgreen](2,2)} - \rput(4,6){\psframe[gradbegin=RGBgreen,gradend=RGBwhite](2,2)} - \rput(4,7.99){\psframe[fillstyle=solid,fillcolor=RGBgreen](2,2.02)} - \rput(6,14){\psframe[gradbegin=RGBwhite,gradend=RGByellow](2,2)} - \rput(6,10){\psframe[gradbegin=RGByellow,gradend=RGBwhite](2,2)} - \rput(6,11.99){\psframe[fillstyle=solid,fillcolor=RGByellow](2,2.02)} - \rput(8,18){\psframe[gradbegin=RGBwhite,gradend=RGBorange](2,2)} - \rput(8,14){\psframe[gradbegin=RGBorange,gradend=RGBwhite](2,2)} - \rput(8,15.99){\psframe[fillstyle=solid,fillcolor=RGBorange](2,2.02)} - \rput(10,18){\psframe[gradbegin=RGBgrey,gradend=RGBwhite](2,2)} - \rput(10,19.99){\psframe[fillstyle=solid,fillcolor=RGBgrey](2,2.01)} - \end{pspicture} - } - \end{pdfpic} - \end{center} - -\end{frame} - -\fi - \sectionnonumber{Rechnertechnik} \begin{frame} @@ -349,69 +217,82 @@ \end{frame} -%\begin{frame}[fragile] -% -% \vspace{-\medskipamount} -% \begin{center} -% \begin{pdfpic} -% \psscalebox{0.8}{% -% \begin{pspicture}(-5,0)(12,12) -% \small -% \psset{unit=0.5cm} -% \psline[arrows=<->](-1,0)(-1,22) -% \rput(-1.3,0){\makebox(0,0)[br]{\textbf{gegenständlich}}} -% \rput(-1.3,22){\makebox(0,0)[tr]{\textbf{abstrakt}}} -% \rput(-1.3,2){\makebox(0,0)[r]{Elektromagnetismus, Halbleiter}} -% \rput(-1.3,4){\makebox(0,0)[r]{Elektronische Bauelemente}} -% \rput(-1.3,6){\makebox(0,0)[r]{Logik-Schaltkreise}} -% \rput(-1.3,8){\makebox(0,0)[r]{Prozessoren}} -% \rput(-1.3,9){\makebox(0,0)[r]{Maschinensprache}} -% \rput(-1.3,10){\makebox(0,0)[r]{Assembler}} -% \rput(-1.3,11){\makebox(0,0)[r]{Ein-/Ausgabe}} -% \rput(-1.3,12){\makebox(0,0)[r]{maschinennahe Hochsprachen (z.\,B.\ C)}} -% \rput(-1.3,14){\makebox(0,0)[r]{abstrahierende Hochsprachen (z.\,B.\ C++, Java)}} -% \rput(-1.3,15){\makebox(0,0)[r]{Programmierung}} -% \rput(-1.3,16){\makebox(0,0)[r]{Algorithmen, Datenstrukturen, Software-Entwurf}} -% \rput(-1.3,17){\makebox(0,0)[r]{Requirements Engineering}} -% \rput(-1.3,18){\makebox(0,0)[r]{formale Sprachen, Berechenbarkeit}} -% \rput(-1.3,19){\makebox(0,0)[r]{mathematische Strukturen}} -% \rput(-1.3,20){\makebox(0,0)[r]{mathematische Beweise}} -% \rput(2.1,0.5){\makebox(0,0)[l]{Physik}} -% \rput(4.1,4){\makebox(0,0)[l]{Elektrotechnik}} -% \rput(6.1,8){\makebox(0,0)[l]{\shortstack[l]{Rechnertechnik und\\technische Informatik}}} -% \rput(8.1,12){\makebox(0,0)[l]{\shortstack[l]{Praktische und\\angewandte Informatik}}} -% \rput(10.1,16){\makebox(0,0)[l]{\shortstack[l]{Softwaretechnik und\\theoretische Informatik}}} -% \rput(12.1,21){\makebox(0,0)[l]{Mathematik}} -% \psset{linewidth=0.001,linestyle=none,fillstyle=gradient,gradmidpoint=1.0,gradlines=1000} -% \definecolor{RGBwhite}{rgb}{1.0,1.0,1.0} -% \definecolor{RGBblue}{rgb}{0.0,0.0,1.0} -% \definecolor{RGBred}{rgb}{1.0,0.0,0.0} -% \definecolor{RGBgreen}{rgb}{0.0,1.0,0.0} -% \definecolor{RGByellow}{rgb}{1.0,1.0,0.0} -% \definecolor{RGBorange}{rgb}{1.0,0.7,0.0} -% \definecolor{RGBgrey}{rgb}{0.7,0.7,0.7} -% \rput(0,2){\psframe[gradbegin=RGBwhite,gradend=RGBblue](2,2)} -% \rput(0,0){\psframe[fillstyle=solid,fillcolor=RGBblue](2,2.01)} -% \rput(2,6){\psframe[gradbegin=RGBwhite,gradend=RGBred](2,2)} -% \rput(2,2){\psframe[gradbegin=RGBred,gradend=RGBwhite](2,2)} -% \rput(2,3.99){\psframe[fillstyle=solid,fillcolor=RGBred](2,2.02)} -% \rput(4,10){\psframe[gradbegin=RGBwhite,gradend=RGBgreen](2,2)} -% \rput(4,6){\psframe[gradbegin=RGBgreen,gradend=RGBwhite](2,2)} -% \rput(4,7.99){\psframe[fillstyle=solid,fillcolor=RGBgreen](2,2.02)} -% \rput(6,14){\psframe[gradbegin=RGBwhite,gradend=RGByellow](2,2)} -% \rput(6,10){\psframe[gradbegin=RGByellow,gradend=RGBwhite](2,2)} -% \rput(6,11.99){\psframe[fillstyle=solid,fillcolor=RGByellow](2,2.02)} -% \rput(8,18){\psframe[gradbegin=RGBwhite,gradend=RGBorange](2,2)} -% \rput(8,14){\psframe[gradbegin=RGBorange,gradend=RGBwhite](2,2)} -% \rput(8,15.99){\psframe[fillstyle=solid,fillcolor=RGBorange](2,2.02)} -% \rput(10,18){\psframe[gradbegin=RGBgrey,gradend=RGBwhite](2,2)} -% \rput(10,19.99){\psframe[fillstyle=solid,fillcolor=RGBgrey](2,2.01)} -% \end{pspicture} -% } -% \end{pdfpic} -% \end{center} -% -%\end{frame} +\subsectionnonumber{Was ist ein Computer?} + +\begin{frame} + + \showsectionnonumber + + \showsubsectionnonumber + + \begin{itemize} + \item + Rechner (engl.: Computer)\\ + = Werkzeug, das (dem menschlichen Gehirn) beim Rechnen hilft + \medskip + \item + Computer (im engeren Sinne)\\ + = Turing-vollständiger Rechner\\\pause + = programmierbar mit \lstinline{while}\\ + = programmierbar mit \lstinline{if} und \lstinline{goto} + \end{itemize} + +\end{frame} + +\begin{frame} + + \begin{center} + + \includegraphics[width=10.5cm]{analytic-engine.jpg} + + Turing-vollständiger Computer aus Zahnrädern: Analytic Engine (1837) + + \end{center} + +\end{frame} + +\begin{frame} + + \showsectionnonumber + + \showsubsectionnonumber + + \begin{center} + \begin{minipage}{6cm} + \begin{center} + \includegraphics[height=4cm]{charles-babbage.jpg} + + \smallskip + + \footnotesize + Charles Babbage (1791--1871) + \end{center} + \end{minipage} + \begin{minipage}{6cm} + \begin{center} + \includegraphics[height=4cm]{ada-lovelace.jpg} + + \smallskip + + \footnotesize + Ada Lovelace (1815--1852) + \end{center} + \end{minipage} + \end{center} + + \medskip + + Turing-vollständiger Computer aus Zahnrädern: Analytic Engine (1837) + \begin{itemize} + \item + mechanische Rechenmaschine (Antrieb: Dampfmaschine) + \item + funktionsfähig geplant von Charles Babbage (nie gebaut) + \item + programmiert von Ada Lovelace (erste Computer-Programme der Welt) + \end{itemize} + +\end{frame} \sectionnonumber{\inserttitle} @@ -451,4 +332,889 @@ \end{frame} +\section{Einführung} +\section{Vom Schaltkreis zum Computer} +\subsection{Logik-Schaltkreise} + +\begin{frame}[fragile] + + \showsection + \vspace{-\smallskipamount} + \showsubsection + + \medskip + + {\large\textbf{Logik mit Lichtschaltern}} + + \strut\hfill + \begin{minipage}[t]{6cm} + \vbox to 0pt{% + \begin{visibleenv}<1-3> + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(2.5,0.2){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp(4.5,-0.6)(4.5,-2.6){~~Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + \end{pdfpic} + \end{visibleenv} + \begin{visibleenv}<3> + \\[-1cm] + \begin{minipage}{2.5cm} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 0 \\\hline + 1 & 0 & 0 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{minipage}% + \begin{minipage}{3.5cm} + \vspace*{1cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{minipage} + \end{visibleenv} + \vss + }% + \vbox to 0pt{% + \begin{visibleenv}<4-6> + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \rput(0,0.55){A} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \rput(1.0,-1.5){B} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp(3.5,-2.3)(3.5,-4.3){~~Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + \end{pdfpic} + \end{visibleenv} + \begin{visibleenv}<6> + \strut\\[-1.5cm] + \begin{minipage}[t]{2.5cm} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{minipage}% + \begin{minipage}[t]{3.5cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{minipage} + \end{visibleenv} + \vss + }% + \vbox to 0pt{% + \begin{visibleenv}<8-> + \vspace*{-2.0cm}% + \hspace*{0.5cm}% + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 0 \\\hline + 1 & 0 & 0 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular}\quad + \begin{minipage}{2.5cm} + \vspace*{0.5cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{minipage}\\[\medskipamount] + \hspace*{0.5cm}% + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular}\quad + \begin{minipage}{2.5cm} + \vspace*{0.5cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{minipage}\\[\medskipamount] + \end{visibleenv}% + \begin{visibleenv}<8->% + \hspace*{0.402cm}% + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 0 \\\hline + \end{tabular}\quad + \begin{minipage}{2.5cm} + \vspace*{0.5cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{minipage} + \end{visibleenv} + \vss + }% + \end{minipage} + \vspace*{-0.9cm} + + \begin{itemize} + \renewcommand{\arraystretch}{1.2} + \item + \newterm{Reihenschaltung}\\[\smallskipamount] + \pause + Lampe leuchtet nur, wenn\\ + beide Schalter betätigt sind.\\[\smallskipamount] + \pause + \newterm{Und-Verknüpfung} + \pause + \medskip + \item + \newterm{Parallelschaltung}\\[\smallskipamount] + \pause + Lampe leuchtet, wenn mindestens\\ + ein Schalter betätigt ist.\\[\smallskipamount] + \pause + \newterm{Oder-Verknüpfung} + \pause + \medskip + \item + {\color{red}Sie sind dran:}\\[\smallskipamount] + Man kann die Lampe jederzeit\\ + an jedem der beiden Schalter\\ + ein- oder ausschalten.\\[\smallskipamount] + \newterm{Exklusiv-Oder-Verknüpfung} + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + \medskip + + {\large\textbf{Relais: Strom schaltet einen Schalter}} + + \begin{center} + \includegraphics[width=10cm]{Relay_principle_horizontal.jpg} + % http://commons.wikimedia.org/wiki/File:Relay_principle_horizontal.jpg + % http://commons.wikimedia.org/wiki/File:Electronic_component_relays.jpg + % http://de.wikipedia.org/w/index.php?title=Datei:Elektronenroehre_real.png&filetimestamp=20080713113809 + \end{center} + + \hspace*{0.5cm} + \begin{minipage}{3.5cm} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[linestyle=dashed](0,0.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \end{pspicture} + \end{pdfpic} + \end{minipage} + \pause + \begin{minipage}{3.5cm} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \uput[l](-1.5,0|A){$A$} + \pnode(1,1.5){B} + \uput[r](1.5,0|B){$B$} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \uput[l](-1.5,0|C0){$C_0$} + \pnode(0.5,0.3){D0} + \uput[r](1.5,0|D0){$D_0$} + \pnode(0.5,-0.3){E0} + \uput[r](1.5,0|E0){$E_0$} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \pnode(-0.5,-1.5){C1} + \uput[l](-1.5,0|C1){$C_1$} + \pnode(0.5,-1.2){D1} + \uput[r](1.5,0|D1){$D_1$} + \pnode(0.5,-1.8){E1} + \uput[r](1.5,0|E1){$E_1$} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \psline[linestyle=dashed](0,-1.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D1)(D1) + \psline[arrows=o-](1.5,0|E1)(E1) + \end{pspicture} + \end{pdfpic} + \end{minipage} + \pause + \hfill + \textarrow\ + \begin{minipage}[t]{3.5cm} + Logik-Schaltungen\\ + werden kombinierbar. + \end{minipage} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + \smallskip + + {\large\textbf{Logik-Schaltungen kombinieren}} + \medskip + + \begin{itemize} + \item + Und-Verknüpfung: Reihenschaltung + + \medskip + + \item + Oder-Verknüpfung: Parallelschaltung + + \medskip + + \item + + Exklusiv-Oder-Verknüpfung\\ + "`entweder A oder B, aber nicht beide"'\phantom{()} + + \bigskip + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{5cm} + \begin{center} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(4.0,0){C1} + \pnode(3.0,0.3){D1} + \pnode(3.0,-0.3){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \put(0.0,0.3){\makebox(0,0)[b]{A}} + \put(3.5,0.3){\makebox(0,0)[b]{B}} + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline(D0)(1.25,0|D0)(2.25,0|E1)(E1) + \psline(E0)(1.25,0|E0)(2.25,0|D1)(D1) + \psline(C1)(5,0) + \lamp[labeloffset=0.9](5,0)(5,-2){Q} + \ground[connectingdot=false](5,-2) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + \smallskip + + {\large\textbf{Logik-Schaltungen kombinieren}} + \medskip + + \begin{itemize} + \item + Und-Verknüpfung: Reihenschaltung + + \medskip + + \item + Oder-Verknüpfung: Parallelschaltung + + \medskip + + \item + + Exklusiv-Oder-Verknüpfung:\\ + (A und nicht B) oder (B und nicht A) + + \bigskip + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}\hspace*{-1.7cm}% + \begin{minipage}{8cm} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \logic[logicType=and](-0.75,0.625){and1} + \logic[logicType=and](-0.75,-2.125){and2} + \logic[logicType=or](2.25,-0.625){or1} + \psline[arrows=o-](-3,0|and12)(and12) + \uput[180](-3,0|and12){A} + \psline[arrows=o-](-3,0|and21)(and21) + \uput[180](-3,0|and21){B} + \psline[arrows=*-](-2,0|and12)(-2,0|and22)(and22) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and22){0.1} + \psline[arrows=*-](-1.5,0|and21)(-1.5,0|and11)(and11) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and11){0.1} + \psline(and1Q)(1.5,0|and1Q)(1.5,0|or12)(or12) + \psline(and2Q)(1.5,0|and2Q)(1.5,0|or11)(or11) + \psline[arrows=o-](5,0|or1Q)(or1Q) + \uput[0](5,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \vspace*{-1.25cm} + \end{minipage}% + \begin{picture}(0,0) + \put(-6.934,-0.041){\mbox{Q}} + \end{picture} + \end{itemize} + +\end{frame} + +\subsection{Binärdarstellung von Zahlen} + +\begin{frame} + \showsubsection + + Dezimalzahl: + \begin{eqnarray*} + 537_{10} &=& 7 \cdot 1 ~+~ 3 \cdot 10 ~+~ 5 \cdot 100 \\ + &=& 7 \cdot 10^0 ~+~ 3 \cdot 10^1 ~+~ 5 \cdot 10^2 + \end{eqnarray*} + + Binärzahl: + \begin{eqnarray*} + 26_{10} ~=~ + 11010_2 &=& 0 \cdot 1 ~+~ 1 \cdot 2 ~+~ 0 \cdot 4 ~+~ 1 \cdot 8 ~+~ 1 \cdot 16 \\ + &=& 0 \cdot 2^0 ~+~ 1 \cdot 2^1 ~+~ 0 \cdot 2^2 ~+~ 1 \cdot 2^3 ~+~ 1 \cdot 2^4 + \end{eqnarray*} + +\end{frame} + +\begin{frame} + \showsubsection + + Rechnen mit Dezimalzahlen:\quad + $44_{10} + 46_{10}$ + \begin{center} + \begin{tabular}{r} + $44$\\ + $+\quad 46$\\[0.5ex]\hline + \\[-3.5ex] + $\scriptstyle 1\hspace{0.5em}$\\ + $90$ + \end{tabular} + \end{center} + + Rechnen mit Binärzahlen:\quad + $44_{10} + 46_{10} = 101100_2 + 101110_2$ + \begin{center} + \begin{tabular}{r} + $101100$\\ + $+\quad 101110$\\[0.5ex]\hline + \\[-3.5ex] + $\scriptstyle 1\hspace{0.7em}1\hspace{0.1em}1\hspace{1.75em}$\\ + $1011010$ + \end{tabular} + \end{center} + Ergebnis: + \begin{eqnarray*} + 1011010_2 + &=& 0 \cdot 2^0 + 1 \cdot 2^1 + 0 \cdot 2^2 + 1 \cdot 2^3 + 1\cdot 2^4 + 0 \cdot 2^5 + 1 \cdot 2^6 \\ + &=& 2 + 8 + 16 + 64 \\ + &=& 90 + \end{eqnarray*} + +\end{frame} + +\subsection{Vom Logik-Schaltkreis zum Addierer} + +\begin{frame}[fragile] + + \showsubsection + + \vspace{-\medskipamount} + + \begin{itemize} + \item + Und-Verknüpfung: Reihenschaltung + + \medskip + + \item + Oder-Verknüpfung: Parallelschaltung + + \medskip + + \item + + Exklusiv-Oder-Verknüpfung:\\ + (A und nicht B) oder (B und nicht A) + + \medskip + + \item + + Halbaddierer: 1-Bit-Addierer mit 2 Eingängen (X, Y)\\[\smallskipamount] + Ausgang S = X exklusiv-oder Y\\ + Ausgang \Cout = X und Y + + \bigskip + + \begin{minipage}{3.2cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|c|}\hline + X & Y & \Cout & S \\\hline\hline + 0 & 0 & 0 & 0 \\\hline + 0 & 1 & 0 & 1 \\\hline + 1 & 0 & 0 & 1 \\\hline + 1 & 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}\hspace*{-1.25cm}% + \pause + \begin{minipage}{5cm} + \vspace*{-0.25cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{picture}(0,0) + \put(-5.077,-0.379){\mbox{\Cout}} + \end{picture} + + \end{itemize} + +\end{frame} + +\begin{frame} + + \showsubsection + + \vspace{-\medskipamount} + + \begin{itemize} + \item + Und-Verknüpfung: Reihenschaltung + + \medskip + + \item + Oder-Verknüpfung: Parallelschaltung + + \medskip + + \item + + Exklusiv-Oder-Verknüpfung:\\ + (A und nicht B) oder (B und nicht A) + + \medskip + + \item + + Halbaddierer: 1-Bit-Addierer mit 2 Eingängen (X, Y)\\[\smallskipamount] + Ausgang S = X exklusiv-oder Y\\ + Ausgang \Cout = X und Y + + \medskip + + \item + + Volladdierer: 1-Bit-Addierer mit 3 Eingängen (X, Y, \Cin)\\[\smallskipamount] + {\color{red}Sie sind dran.} + + \end{itemize} + +\end{frame} + +\begin{frame} + + \showsubsection + + Zuse Z3: Rechner aus Relais + \begin{center} + \includegraphics[width=10cm]{Z3_Deutsches_Museum.JPG} + \end{center} + +\end{frame} + +\begin{frame} + + \showsubsection + + Statt Relais: Elektronenröhren + + \begin{minipage}{6.25cm} + \includegraphics[width=6.25cm]{Elektronenroehren-auswahl.jpg} + \end{minipage}\hfill + \begin{minipage}{6cm} + \includegraphics[width=6cm]{Elektronenroehre_real.png} + \end{minipage} + +\end{frame} + +\begin{frame} + + \showsubsection + + ENIAC: Rechner aus Elektronenröhren + \begin{center} + \includegraphics[width=10cm]{Eniac.jpg} + \end{center} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + + Statt Elektronenröhren: Transistoren + + \bigskip + + \includegraphics[width=7cm]{Transistors-white-cropped.jpg}\\[-5cm] + \hfill + \begin{minipage}{5.5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,0){B} + \uput[180](B){Basis} + \pnode(1.5,1.5){C} + \uput[0](C){Kollektor} + \pnode(1.5,-1.5){E} + \uput[0](E){Emitter} + \transistor[basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + \end{pdfpic} + + \medskip + + Bipolartransistor + \end{center} + \end{minipage}\\[1cm] + \hfill + \begin{minipage}{5.5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,-0.5){B} + \uput[180](B){Gate} + \pnode(1.5,1.5){C} + \uput[0](C){Drain} + \pnode(1.5,-1.5){E} + \uput[0](E){Source} + \transistor[transistortype=MOSFET,basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + \end{pdfpic} + + \medskip + + Feldeffekttransistor + \end{center} + \end{minipage} + +\end{frame} + +\begin{frame} + + \showsubsection + + Miniaturisierte Transistoren: Integrierte Schaltkreise\\ + \newterm{Integrated Circuit -- IC} + + \begin{center} + + \begin{minipage}{4cm} + \includegraphics[width=4cm]{Intel_80486DX2_top.jpg} + \end{minipage} + \quad + \begin{minipage}{4cm} + \includegraphics[width=4cm]{Intel_80486DX2_bottom.jpg} + \end{minipage} + + \medskip + + \begin{minipage}{4cm} + \includegraphics[width=4cm]{80486dx2-large.jpg} + \end{minipage} + \quad + \begin{minipage}{4cm} + \includegraphics[width=4cm]{IC_Nanotecnology_2400X.JPG} + \end{minipage} + + \end{center} + +\end{frame} + +\sectionnonumber{\inserttitle} + +\begin{frame} + + \showsectionnonumber + + \begin{itemize} + \item[\textbf{1}] \textbf{Einführung} + \begin{itemize} + \color{medgreen} + \item[1.1] Was ist Rechnertechnik? + \item[1.2] Was ist ein Computer? +% \item[1.3] Rechnertechnik im Verhältnis zu anderen Disziplinen + \end{itemize} + \item[\textbf{2}] \textbf{Vom Schaltkreis zum Computer} + \begin{itemize} + \color{medgreen} + \item[2.1] Logik-Schaltkreise + \item[2.2] Binärdarstellung von Zahlen + \item[2.3] Vom Logik-Schaltkreis zum Addierer + \color{black} + \item[2.4] Negative Zahlen + \item[2.5] Vom Addierer zum Computer + \item[\dots] + \end{itemize} + \color{gray} + \item[\textbf{3}] \textbf{Architekturmerkmale von Prozessoren} + \item[\textbf{4}] \textbf{Der CPU-Stack} +% \item[\textbf{5}] \textbf{Hardwarenahe Programmierung} +% \item[\textbf{6}] \textbf{Anwender-Software} +% \item[\textbf{7}] \textbf{Bus-Systeme} +% \item[\textbf{8}] \textbf{Pipelining} + \item[\textbf{\dots\hspace{-0.75em}}] +% \item[\textbf{9}] \textbf{Ausblick} + \end{itemize} + +\end{frame} + \end{document} diff --git a/script/1890s_adding_machine.jpg b/script/1890s_adding_machine.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ca2e20f0fa3d6923abfd7278ce6cdf67c188758 Binary files /dev/null and b/script/1890s_adding_machine.jpg differ diff --git a/script/80486dx2-large.jpg b/script/80486dx2-large.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba4b32ee9489e862a8bf7b273002351f671f2878 Binary files /dev/null and b/script/80486dx2-large.jpg differ diff --git a/script/Buegeln.pdf b/script/Buegeln.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9967c07625452e4fe73936314e3cb44485cdf6c8 --- /dev/null +++ b/script/Buegeln.pdf @@ -0,0 +1,68 @@ +%PDF-1.4 +%���� +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +x�]�= +�@��~N�]����?�B�"Z��D$)���7�b�0��0�u�G����-J|D�-��� t�CN���wW�'1LR��{�K,�`�.E���?0��*~��[j(-ո��JF\�K/_��(� +endstream +endobj +4 0 obj + 127 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 300 300 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.8.10 (http://cairographics.org)) + /Producer (cairo 1.8.10 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000512 00000 n +0000000240 00000 n +0000000015 00000 n +0000000218 00000 n +0000000312 00000 n +0000000577 00000 n +0000000704 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +756 +%%EOF diff --git a/script/Buegeln.svg b/script/Buegeln.svg new file mode 100644 index 0000000000000000000000000000000000000000..7efa08ff608dd187fc30a734eabd55252eddae50 --- /dev/null +++ b/script/Buegeln.svg @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.0" + x="0.0000000" + y="0.0000000" + width="375.00000" + height="375.00000" + id="svg559"> + <defs + id="defs561"> + <linearGradient + id="linearGradient1651"> + <stop + style="stop-color:#000000;stop-opacity:1.0000000" + offset="0.0000000" + id="stop1652" /> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000" + offset="1.0000000" + id="stop1653" /> + </linearGradient> + </defs> + <path + d="M 112.66666,98.261892 L 300.81657,98.261892 L 338.31657,281.21250 L 38.316589,281.21250 C 38.316589,281.21250 94.566585,187.46250 150.81657,187.46250 C 207.06657,187.46250 317.06657,187.46250 317.06657,187.46250" + style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:12.500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" + id="path1842" /> +</svg> diff --git a/script/CC-BY-SA-3.0 b/script/CC-BY-SA-3.0 new file mode 100644 index 0000000000000000000000000000000000000000..43633f5d8ca3ee4c454bc0d64fded403267f6e6f --- /dev/null +++ b/script/CC-BY-SA-3.0 @@ -0,0 +1,418 @@ +Creative Commons Attribution-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT + PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT + CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS + PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS + MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND + DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS +CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS +PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE +WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS +PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND +AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS +LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU +THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF +SUCH TERMS AND CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the + Work and other pre-existing works, such as a translation, + adaptation, derivative work, arrangement of music or other + alterations of a literary or artistic work, or phonogram or + performance and includes cinematographic adaptations or any + other form in which the Work may be recast, transformed, or + adapted including in any form recognizably derived from the + original, except that a work that constitutes a Collection + will not be considered an Adaptation for the purpose of this + License. For the avoidance of doubt, where the Work is a + musical work, performance or phonogram, the synchronization of + the Work in timed-relation with a moving image ("synching") + will be considered an Adaptation for the purpose of this + License. + + b. "Collection" means a collection of literary or artistic works, + such as encyclopedias and anthologies, or performances, + phonograms or broadcasts, or other works or subject matter + other than works listed in Section 1(f) below, which, by + reason of the selection and arrangement of their contents, + constitute intellectual creations, in which the Work is + included in its entirety in unmodified form along with one or + more other contributions, each constituting separate and + independent works in themselves, which together are assembled + into a collective whole. A work that constitutes a Collection + will not be considered an Adaptation (as defined below) for + the purposes of this License. + + c. "Creative Commons Compatible License" means a license that is + listed at http://creativecommons.org/compatiblelicenses that + has been approved by Creative Commons as being essentially + equivalent to this License, including, at a minimum, because + that license: (i) contains terms that have the same purpose, + meaning and effect as the License Elements of this License; + and, (ii) explicitly permits the relicensing of adaptations of + works made available under that license under this License or + a Creative Commons jurisdiction license with the same License + Elements as this License. + + d. "Distribute" means to make available to the public the + original and copies of the Work or Adaptation, as appropriate, + through sale or other transfer of ownership. + + e. "License Elements" means the following high-level license + attributes as selected by Licensor and indicated in the title + of this License: Attribution, ShareAlike. + + f. "Licensor" means the individual, individuals, entity or + entities that offer(s) the Work under the terms of this + License. + + g. "Original Author" means, in the case of a literary or artistic + work, the individual, individuals, entity or entities who + created the Work or if no individual or entity can be + identified, the publisher; and in addition (i) in the case of + a performance the actors, singers, musicians, dancers, and + other persons who act, sing, deliver, declaim, play in, + interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the + producer being the person or legal entity who first fixes the + sounds of a performance or other sounds; and, (iii) in the + case of broadcasts, the organization that transmits the + broadcast. + + h. "Work" means the literary and/or artistic work offered under + the terms of this License including without limitation any + production in the literary, scientific and artistic domain, + whatever may be the mode or form of its expression including + digital form, such as a book, pamphlet and other writing; a + lecture, address, sermon or other work of the same nature; a + dramatic or dramatico-musical work; a choreographic work or + entertainment in dumb show; a musical composition with or + without words; a cinematographic work to which are assimilated + works expressed by a process analogous to cinematography; a + work of drawing, painting, architecture, sculpture, engraving + or lithography; a photographic work to which are assimilated + works expressed by a process analogous to photography; a work + of applied art; an illustration, map, plan, sketch or + three-dimensional work relative to geography, topography, + architecture or science; a performance; a broadcast; a + phonogram; a compilation of data to the extent it is protected + as a copyrightable work; or a work performed by a variety or + circus performer to the extent it is not otherwise considered + a literary or artistic work. + + i. "You" means an individual or entity exercising rights under + this License who has not previously violated the terms of this + License with respect to the Work, or who has received express + permission from the Licensor to exercise rights under this + License despite a previous violation. + + j. "Publicly Perform" means to perform public recitations of the + Work and to communicate to the public those public + recitations, by any means or process, including by wire or + wireless means or public digital performances; to make + available to the public Works in such a way that members of + the public may access these Works from a place and at a place + individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of + the performances of the Work, including by public digital + performance; to broadcast and rebroadcast the Work by any + means including signs, sounds or images. + + k. "Reproduce" means to make copies of the Work by any means + including without limitation by sound or visual recordings and + the right of fixation and reproducing fixations of the Work, + including storage of a protected performance or phonogram in + digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to + reduce, limit, or restrict any uses free from copyright or rights + arising from limitations or exceptions that are provided for in + connection with the copyright protection under copyright law or + other applicable laws. + +3. License Grant. Subject to the terms and conditions of this + License, Licensor hereby grants You a worldwide, royalty-free, + non-exclusive, perpetual (for the duration of the applicable + copyright) license to exercise the rights in the Work as stated + below: + + a. to Reproduce the Work, to incorporate the Work into one or + more Collections, and to Reproduce the Work as incorporated in + the Collections; + + b. to create and Reproduce Adaptations provided that any such + Adaptation, including any translation in any medium, takes + reasonable steps to clearly label, demarcate or otherwise + identify that changes were made to the original Work. For + example, a translation could be marked "The original work was + translated from English to Spanish," or a modification could + indicate "The original work has been modified."; + + c. to Distribute and Publicly Perform the Work including as + incorporated in Collections; and, + + d. to Distribute and Publicly Perform Adaptations. + + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those + jurisdictions in which the right to collect royalties + through any statutory or compulsory licensing scheme + cannot be waived, the Licensor reserves the exclusive + right to collect such royalties for any exercise by You + of the rights granted under this License; + + ii. Waivable Compulsory License Schemes. In those + jurisdictions in which the right to collect royalties + through any statutory or compulsory licensing scheme can + be waived, the Licensor waives the exclusive right to + collect such royalties for any exercise by You of the + rights granted under this License; and, + + iii. Voluntary License Schemes. The Licensor waives the right + to collect royalties, whether individually or, in the + event that the Licensor is a member of a collecting + society that administers voluntary licensing schemes, via + that society, from any exercise by You of the rights + granted under this License. + +The above rights may be exercised in all media and formats whether +now known or hereafter devised. The above rights include the right +to make such modifications as are technically necessary to exercise +the rights in other media and formats. Subject to Section 8(f), all +rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly + made subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the + terms of this License. You must include a copy of, or the + Uniform Resource Identifier (URI) for, this License with every + copy of the Work You Distribute or Publicly Perform. You may + not offer or impose any terms on the Work that restrict the + terms of this License or the ability of the recipient of the + Work to exercise the rights granted to that recipient under + the terms of the License. You may not sublicense the Work. You + must keep intact all notices that refer to this License and to + the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or + Publicly Perform the Work, You may not impose any effective + technological measures on the Work that restrict the ability + of a recipient of the Work from You to exercise the rights + granted to that recipient under the terms of the License. This + Section 4(a) applies to the Work as incorporated in a + Collection, but this does not require the Collection apart + from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any + Licensor You must, to the extent practicable, remove from the + Collection any credit as required by Section 4(c), as + requested. If You create an Adaptation, upon notice from any + Licensor You must, to the extent practicable, remove from the + Adaptation any credit as required by Section 4(c), as + requested. + + b. You may Distribute or Publicly Perform an Adaptation only + under the terms of: (i) this License; (ii) a later version of + this License with the same License Elements as this License; + (iii) a Creative Commons jurisdiction license (either this or + a later license version) that contains the same License + Elements as this License (e.g., Attribution-ShareAlike 3.0 + US)); (iv) a Creative Commons Compatible License. If you + license the Adaptation under one of the licenses mentioned in + (iv), you must comply with the terms of that license. If you + license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), + you must comply with the terms of the Applicable License + generally and the following provisions: (I) You must include a + copy of, or the URI for, the Applicable License with every + copy of each Adaptation You Distribute or Publicly Perform; + (II) You may not offer or impose any terms on the Adaptation + that restrict the terms of the Applicable License or the + ability of the recipient of the Adaptation to exercise the + rights granted to that recipient under the terms of the + Applicable License; (III) You must keep intact all notices + that refer to the Applicable License and to the disclaimer of + warranties with every copy of the Work as included in the + Adaptation You Distribute or Publicly Perform; (IV) when You + Distribute or Publicly Perform the Adaptation, You may not + impose any effective technological measures on the Adaptation + tnted to that recipient under the terms of the Applicable + License. This Section 4(b) applies to the Adaptation as + incorporated in a Collection, but this does not require the + Collection apart from the Adaptation itself to be made subject + to the terms of the Applicable License. + + c. If You Distribute, or Publicly Perform the Work or any + Adaptations or Collections, You must, unless a request has + been made pursuant to Section 4(a), keep intact all copyright + notices for the Work and provide, reasonable to the medium or + means You are utilizing: (i) the name of the Original Author + (or pseudonym, if applicable) if supplied, and/or if the + Original Author and/or Licensor designate another party or + parties (e.g., a sponsor institute, publishing entity, + journal) for attribution ("Attribution Parties") in Licensor's + copyright notice, terms of service or by other reasonable + means, the name of such party or parties; (ii) the title of + the Work if supplied; (iii) to the extent reasonably + practicable, the URI, if any, that Licensor specifies to be + associated with the Work, unless such URI does not refer to + the copyright notice or licensing information for the Work; + and (iv) , consistent with Ssection 3(b), in the case of an + Adaptation, a credit identifying the use of the Work in the + Adaptation (e.g., "French translation of the Work by Original + Author," or "Screenplay based on original Work by Original + Author"). The credit required by this Section 4(c) may be + implemented in any reasonable manner; provided, however, that + in the case of a Adaptation or Collection, at a minimum such + credit will appear, if a credit for all contributing authors + of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits + for the other contributing authors. For the avoidance of + doubt, You may only use the credit required by this Section + for the purpose of attribution in the manner set out above + and, by exercising Your rights under this License, You may not + implicitly or explicitly assert or imply any connection with, + sponsorship or endorsement by the Original Author, Licensor + and/or Attribution Parties, as appropriate, of You or Your use + of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + + d. Except as otherwise agreed in writing by the Licensor or as + may be otherwise permitted by applicable law, if You + Reproduce, Distribute or Publicly Perform the Work either by + itself or as part of any Adaptations or Collections, You must + not distort, mutilate, modify or take other derogatory action + in relation to the Work which would be prejudicial to the + Original Author's honor or reputation. Licensor agrees that in + those jurisdictions (e.g. Japan), in which any exercise of the + right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, + mutilation, modification or other derogatory action + prejudicial to the Original Author's honor and reputation, the + Licensor will waive or not assert, as appropriate, this + Section, to the fullest extent permitted by the applicable + national law, to enable You to reasonably exercise Your right + under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, +LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR +WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, +STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF +TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, +NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, +ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT +DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF +IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY + APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY + LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, S + LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED + OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this + License. Individuals or entities who have received Adaptations + or Collections from You under this License, however, will not + have their licenses terminated provided such individuals or + entities remain in full compliance with those licenses. + Sections 1, 2, 5, 6, 7, and 8 will survive any termination of + this License. + + b. Subject to the above terms and conditions, the license granted + here is perpetual (for the duration of the applicable + copyright in the Work). Notwithstanding the above, Licensor + reserves the right to release the Work under different license + terms or to stop distributing the Work at any time; provided, + however that any such election will not serve to withdraw this + License (or any other license that has been, or is required to + be, granted under the terms of this License), and this License + will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a + Collection, the Licensor offers to the recipient a license to + the Work on the same terms and conditions as the license + granted to You under this License. + + b. Each time You Distribute or Publicly Perform an Adaptation, + Licensor offers to the recipient a license to the original + Work on the same terms and conditions as the license granted + to You under this License. + + c. If any provision of this License is invalid or unenforceable + under applicable law, it shall not affect the validity or + enforceability of the remainder of the terms of this License, + and without further action by the parties to this agreement, + such provision shall be reformed to the minimum extent + necessary to make such provision valid and enforceable. + + d. No term or provision of this License shall be deemed waived + and no breach consented to unless such waiver or consent shall + be in writing and signed by the party to be charged with such + waiver or consent. + + e. This License constitutes the entire agreement between the + parties with respect to the Work licensed here. There are no + understandings, agreements or representations with respect to + the Work not specified here. Licensor shall not be bound by + any additional provisions that may appear in any communication + from You. This License may not be modified without the mutual + written agreement of the Licensor and You. + + f. The rights granted under, and the subject matter referenced, + in this License were drafted utilizing the terminology of the + Berne Convention for the Protection of Literary and Artistic + Works (as amended on September 28, 1979), the Rome Convention + of 1961, the WIPO Copyright Treaty of 1996, the WIPO + Performances and Phonograms Treaty of 1996 and the Universal + Copyright Convention (as revised on July 24, 1971). These + rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be + enforced according to the corresponding provisions of the + implementation of those treaty provisions in the applicable + national law. If the standard suite of rights granted under + applicable copyright law includes additional rights not + granted under this License, such additional rights are deemed + to be included in the License; this License is not intended to + restrict the license of any rights under applicable law. + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no + warranty whatsoever in connection with the Work. Creative + Commons will not be liable to You or any party on any legal + theory for any damages whatsoever, including without limitation + any general, special, incidental or consequential damages + arising in connection to this license. Notwithstanding the + foregoing two (2) sentences, if Creative Commons has expressly + identified itself as the Licensor hereunder, it shall have all + rights and obligations of Licensor. + + Except for theicensed under the CCPL, Creative Commons does not + authorize the use by either party of the trademark "Creative + Commons" or any related trademark or logo of Creative Commons + without the prior written consent of Creative Commons. Any + permitted use will be in compliance with Creative Commons' + then-current trademark usage guidelines, as may be published on + its website or otherwise made available upon request from time + to time. For the avoidance of doubt, this trademark restriction + does not form part of the License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/script/Drawing-a-circle-with-the-compasses.jpg b/script/Drawing-a-circle-with-the-compasses.jpg new file mode 100644 index 0000000000000000000000000000000000000000..015546a9502e6ce76334a2c80bfe0c2ef979489f Binary files /dev/null and b/script/Drawing-a-circle-with-the-compasses.jpg differ diff --git a/script/Elektronenroehre_real.png b/script/Elektronenroehre_real.png new file mode 100644 index 0000000000000000000000000000000000000000..9752168cb151d698c90b4920b060dd3595196f49 Binary files /dev/null and b/script/Elektronenroehre_real.png differ diff --git a/script/Elektronenroehren-auswahl.jpg b/script/Elektronenroehren-auswahl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c42b321f29ea81b11eb51a191dc9cc2ef7cfd7c Binary files /dev/null and b/script/Elektronenroehren-auswahl.jpg differ diff --git a/script/Eniac.jpg b/script/Eniac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75c5f42d190017636ff0bba2b49c994779d2c91a Binary files /dev/null and b/script/Eniac.jpg differ diff --git a/script/GNU-GPL-3 b/script/GNU-GPL-3 new file mode 100644 index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2 --- /dev/null +++ b/script/GNU-GPL-3 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/script/Holding-a-ruling-pen-edited-2.jpg b/script/Holding-a-ruling-pen-edited-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60f9bddd8de07558f46228901e1c9d6716632f00 Binary files /dev/null and b/script/Holding-a-ruling-pen-edited-2.jpg differ diff --git a/script/Holding-a-ruling-pen-edited.jpg b/script/Holding-a-ruling-pen-edited.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0b436abfdb81234ef7d6cc7dfa126d8537b0084 Binary files /dev/null and b/script/Holding-a-ruling-pen-edited.jpg differ diff --git a/script/Holding-a-ruling-pen.jpg b/script/Holding-a-ruling-pen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7f10aafb0e2118254eb5e9875ad14a862a40b47 Binary files /dev/null and b/script/Holding-a-ruling-pen.jpg differ diff --git a/script/IC_Nanotecnology_2400X.JPG b/script/IC_Nanotecnology_2400X.JPG new file mode 100644 index 0000000000000000000000000000000000000000..a64dbfb91048d93f1e9141ef9e433bbf584911cd Binary files /dev/null and b/script/IC_Nanotecnology_2400X.JPG differ diff --git a/script/Intel_80486DX2_bottom.jpg b/script/Intel_80486DX2_bottom.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51196ca09c87a5d8aa9a59d5189e18fd792fc48b Binary files /dev/null and b/script/Intel_80486DX2_bottom.jpg differ diff --git a/script/Intel_80486DX2_top.jpg b/script/Intel_80486DX2_top.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb83e35c9564e3380e0d5314f968fc8fff9f480f Binary files /dev/null and b/script/Intel_80486DX2_top.jpg differ diff --git a/script/Makefile b/script/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c035f705340f897238f4c582a7e9a615c5794343 --- /dev/null +++ b/script/Makefile @@ -0,0 +1,31 @@ +script = rtech-2013ws +pdf = $(script).pdf +src = *.tex *.sty *.pdf *.jpg *.png GNU-GPL-3 CC-BY-SA-3.0 + +all: $(pdf) + +$(pdf): $(script).tex + pdflatex --shell-escape $(script).tex + pdflatex $(script).tex + pdflatex $(script).tex + grep "Stand:" $(script).tex + +clean: + rm -f $(script).aux $(script).log $(script).toc $(script).lof $(script)-fig* tmp.inputs + +dist: $(pdf) + if [ -e "$(script)" ]; then \ + echo "$(script) exists - move it away"; \ + else \ + mkdir -p $(script)/slides $(script)/examples $(script)/material $(script)/src; \ + cp -a $(pdf) $(script)/; \ + cp -a slides/* $(script)/src/; \ + mv $(script)/src/*.pdf $(script)/slides/; \ + cp -a examples/* $(script)/examples/; \ + cp -a material/* $(script)/material/; \ + cp -a $(src) $(script)/src/; \ + rm $(script)/src/$(script)*.pdf; \ + rm $(script)/src/$(script)-fig*.tex; \ + tar czf $(script).tar.gz $(script); \ + rm -rf $(script); \ + fi diff --git a/script/Relay_principle_horizontal-edited.jpg b/script/Relay_principle_horizontal-edited.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab9ffcd879a04f523118ba1a58f52ee8ad1d30db Binary files /dev/null and b/script/Relay_principle_horizontal-edited.jpg differ diff --git a/script/Relay_principle_horizontal.jpg b/script/Relay_principle_horizontal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..357527ccfc7e8ca74f7ad3e6c5be563feeba2d11 Binary files /dev/null and b/script/Relay_principle_horizontal.jpg differ diff --git a/script/Transistors-white.jpg b/script/Transistors-white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96ed2f0193a64c059473b253eb81ae1bdcc09b2e Binary files /dev/null and b/script/Transistors-white.jpg differ diff --git a/script/Trommeltrocknen.pdf b/script/Trommeltrocknen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..63adea249a42fa1cc4b35df841a4634847091c87 --- /dev/null +++ b/script/Trommeltrocknen.pdf @@ -0,0 +1,69 @@ +%PDF-1.4 +%���� +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +x�mPK +B1��scҾ�N .ԥ�� +�<����>[��Mg�L>7ԳY`~��8��!�QR�r/��CXp�+ܠ�bV�A�����Q�88\�"Rb��"��"�`�N�7CEً5��ţ)+���Ւ��ob3;&g� ��v����_}�7A�q�n�5����[���No�Cшip찅��_��R-�iV�� �(UD +endstream +endobj +4 0 obj + 202 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 300 300 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.8.10 (http://cairographics.org)) + /Producer (cairo 1.8.10 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000587 00000 n +0000000315 00000 n +0000000015 00000 n +0000000293 00000 n +0000000387 00000 n +0000000652 00000 n +0000000779 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +831 +%%EOF diff --git a/script/Trommeltrocknen.svg b/script/Trommeltrocknen.svg new file mode 100644 index 0000000000000000000000000000000000000000..b42b2f4684d9f00f5c02dcf54459a8dee35ef0d1 --- /dev/null +++ b/script/Trommeltrocknen.svg @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.0" + x="0.0000000" + y="0.0000000" + width="375.00000" + height="375.00000" + id="svg1568"> + <defs + id="defs1570" /> + <path + d="M 297.02530,187.18597 C 297.03472,124.52065 247.99622,73.715206 187.50092,73.715206 C 127.00562,73.715206 77.967116,124.52065 77.976526,187.18597 C 77.967116,249.85130 127.00562,300.65674 187.50092,300.65674 C 247.99622,300.65674 297.03472,249.85130 297.02530,187.18597 L 297.02530,187.18597 z " + style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:9.7576847;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" + id="path1580" /> + <rect + width="247.54399" + height="247.54399" + x="63.728004" + y="63.728004" + style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:12.500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" + id="rect1542" /> +</svg> diff --git a/script/UnderCon_icon.pdf b/script/UnderCon_icon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..16bc3d736041743e19cb49895b8c3bbd4c9b7335 Binary files /dev/null and b/script/UnderCon_icon.pdf differ diff --git a/script/UnderCon_icon.svg b/script/UnderCon_icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..4a3edc1d47c8a17ba6d5e2391a45115edc362d5c --- /dev/null +++ b/script/UnderCon_icon.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + width="192.97749" + height="169.01122" + viewBox="0 0 192.97749 169.01121" + id="svg2" + xml:space="preserve" + inkscape:version="0.48.2 r9819" + sodipodi:docname="AJAX1.svg"><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1280" + inkscape:window-height="1004" + id="namedview8" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:zoom="3.7083822" + inkscape:cx="68.74417" + inkscape:cy="132.60196" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg2" /><defs + id="defs9" /> +<metadata + id="metadata3"> + <ns:sfw> + <ns:slices /> + <ns:sliceSourceBounds + bottomLeftOrigin="true" + x="200" + y="336" + width="193" + height="169" /> + </ns:sfw> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + <ns:sfw> + <ns:slices /> + <ns:sliceSourceBounds + bottomLeftOrigin="true" + x="200" + y="336" + width="193" + height="169" /> + </ns:sfw> +</metadata> +<path + d="M 96.491487,12.513757 74.182375,50.757948 12.491487,156.51375 l 167.999993,0 z" + id="path5" + style="fill:none;stroke:#cccccc;stroke-width:25;stroke-linejoin:round;stroke-opacity:1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> +<path + d="m 96.491487,12.513757 -84,143.999993 H 180.49148 L 96.491487,12.513757 z" + id="path7" + style="fill:#ffffff;stroke:#cc0000;stroke-width:17;stroke-linejoin:round" + inkscape:connector-curvature="0" /> +<path + d="m 92.003487,120.07175 c -0.01,-0.302 -0.102,-0.597 -0.266,-0.849 l -6.617,-10.23 -10.359,-5.482 -15.7,29.648 c -0.509,0.967 -0.778,2.043 -0.778,3.137 0,2.481 1.373,4.757 3.566,5.917 l 16.556,-31.27 6.957,10.757 0.521,14.066 c 0.134,3.6 3.09,6.446 6.692,6.446 0.115,0 0.136,0 0.25,-0.003 l -0.822,-22.137 m -13.825,-24.807993 -1.322,2.496 -3.953,-3.267 -1.772,3.351 c -1.919,-1.018 -3.122,-3.01 -3.122,-5.181 0,-0.954 0.234,-1.896 0.682,-2.742 l 4.824,-9.105 c 0.724,-1.372 2.147,-2.229 3.698,-2.229 h 14.772 c 3.701,0 6.695,3 6.695,6.699 0,0.145 -0.001,0.284 -0.013,0.429 l -1.633,25.125993 15.708993,13.062 c -0.607,0.72 -1.379,1.281 -2.252,1.64 l -13.677993,-11.297 -0.184,2.84 c -3.081,-0.198 -5.48,-2.758 -5.48,-5.849 0,-0.13 0.005,-0.246 0.011,-0.375 l 0.081,-1.221 -3.839,-3.173 1.322,-2.492 2.735,2.257 0.678,-10.494993 -6.233,11.775993 -10.359,-5.486 9.305,-17.578993 h -6.629 l -3.999,7.549 3.956,3.266 0,0 z m 25.526993,-26.304 c -3.469,0 -6.278993,2.811 -6.278993,6.278 0,3.47 2.810993,6.28 6.278993,6.28 3.467,0 6.277,-2.811 6.277,-6.28 0,-3.468 -2.81,-6.278 -6.277,-6.278 z m 6.62,57.535993 c 1.19,-0.388 2.249,-1.098 3.058,-2.052 l 6.531,-7.729 c 1.591,-1.881 3.93,-2.966 6.393,-2.966 2.604,0 5.055,1.207 6.64,3.27 l 17.293,22.5 c 0.225,0.294 0.345,0.65 0.345,1.021 0,0.925 -0.747,1.672 -1.672,1.672 H 98.680487 c -0.921,0 -1.67,-0.747 -1.67,-1.672 0,-0.398 0.137,-0.779 0.393,-1.08 l 9.604993,-11.364 c 0.404,-0.479 0.933,-0.833 1.529,-1.026 l 1.788,-0.574 0,0 z" + id="path7_1_" + style="fill:#000000;stroke:none" + inkscape:connector-curvature="0" /> +</svg> \ No newline at end of file diff --git a/script/Waschen_30.pdf b/script/Waschen_30.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52b505c1e31fc79a2dee123eb81a394b2efa847b Binary files /dev/null and b/script/Waschen_30.pdf differ diff --git a/script/Waschen_30.svg b/script/Waschen_30.svg new file mode 100644 index 0000000000000000000000000000000000000000..d4447736cf97d8486d4a5e56b7ab59fb8c2d3b4d --- /dev/null +++ b/script/Waschen_30.svg @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.0" + x="0.0000000" + y="0.0000000" + width="375.00000" + height="375.00000" + id="svg1"> + <defs + id="defs3"> + <linearGradient + id="linearGradient1547"> + <stop + style="stop-color:#000000;stop-opacity:1.0000000" + offset="0.0000000" + id="stop1548" /> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000" + offset="1.0000000" + id="stop1549" /> + </linearGradient> + </defs> + <path + d="M 132.43826,141.34062 C 135.83667,142.06721 138.48510,143.57893 140.38358,145.87578 C 142.30541,148.17267 143.26635,151.00861 143.26639,154.38359 C 143.26635,159.56329 141.48510,163.57110 137.92264,166.40703 C 134.36011,169.24297 129.29761,170.66093 122.73514,170.66093 C 120.53200,170.66093 118.25856,170.43828 115.91483,169.99297 C 113.59450,169.57109 111.19216,168.92656 108.70779,168.05937 L 108.70779,161.20390 C 110.67654,162.35235 112.83278,163.21953 115.17654,163.80547 C 117.52028,164.39141 119.96950,164.68438 122.52420,164.68437 C 126.97730,164.68438 130.36402,163.80547 132.68436,162.04765 C 135.02807,160.28985 136.19995,157.73517 136.19998,154.38359 C 136.19995,151.28986 135.11011,148.87580 132.93045,147.14140 C 130.77417,145.38361 127.76246,144.50471 123.89529,144.50468 L 117.77811,144.50468 L 117.77811,138.66875 L 124.17654,138.66875 C 127.66871,138.66878 130.34058,137.97737 132.19217,136.59453 C 134.04370,135.18831 134.96948,133.17269 134.96951,130.54765 C 134.96948,127.85238 134.00854,125.78988 132.08670,124.36015 C 130.18824,122.90707 127.45777,122.18051 123.89529,122.18047 C 121.94996,122.18051 119.86403,122.39145 117.63748,122.81328 C 115.41091,123.23520 112.96169,123.89145 110.28983,124.78203 L 110.28983,118.45390 C 112.98513,117.70396 115.50466,117.14146 117.84842,116.76640 C 120.21559,116.39146 122.44215,116.20396 124.52811,116.20390 C 129.91870,116.20396 134.18433,117.43442 137.32498,119.89531 C 140.46557,122.33286 142.03588,125.63754 142.03592,129.80937 C 142.03588,132.71566 141.20385,135.17659 139.53983,137.19218 C 137.87573,139.18440 135.50854,140.56721 132.43826,141.34062 M 171.95389,121.82890 C 168.29762,121.82895 165.54372,123.63364 163.69217,127.24297 C 161.86403,130.82894 160.94997,136.23128 160.94998,143.45000 C 160.94997,150.64533 161.86403,156.04767 163.69217,159.65703 C 165.54372,163.24297 168.29762,165.03594 171.95389,165.03593 C 175.63355,165.03594 178.38745,163.24297 180.21561,159.65703 C 182.06714,156.04767 182.99292,150.64533 182.99295,143.45000 C 182.99292,136.23128 182.06714,130.82894 180.21561,127.24297 C 178.38745,123.63364 175.63355,121.82895 171.95389,121.82890 M 171.95389,116.20390 C 177.83667,116.20396 182.32495,118.53599 185.41873,123.20000 C 188.53588,127.84066 190.09447,134.59066 190.09451,143.45000 C 190.09447,152.28595 188.53588,159.03595 185.41873,163.70000 C 182.32495,168.34062 177.83667,170.66093 171.95389,170.66093 C 166.07106,170.66093 161.57106,168.34062 158.45389,163.70000 C 155.36013,159.03595 153.81326,152.28595 153.81326,143.45000 C 153.81326,134.59066 155.36013,127.84066 158.45389,123.20000 C 161.57106,118.53599 166.07106,116.20396 171.95389,116.20390" + transform="scale(1.255735,1.453502)" + style="font-size:72.000000px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans" + id="text2897" /> + <g + id="g2806"> + <path + d="M 46.352165,145.54748 C 69.810441,145.54748 69.810441,124.65767 93.268724,124.65767 C 116.72698,124.65767 116.72698,145.54748 140.18525,145.54748 C 163.64355,145.54748 163.64355,124.65767 187.10180,124.65767 C 210.56007,124.65767 210.56007,145.54748 234.01836,145.54748 C 257.47663,145.54748 257.47663,124.65767 280.93489,124.65767 C 304.39316,124.65767 304.39316,145.54748 327.85144,145.54748" + style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:12.500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" + id="path629" /> + <path + d="M 37.456350,106.87084 L 71.853509,278.85663 L 302.16847,278.85663 L 337.60154,106.87084" + style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:12.500000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000" + id="path630" /> + </g> +</svg> diff --git a/script/Z3_Deutsches_Museum.JPG b/script/Z3_Deutsches_Museum.JPG new file mode 100644 index 0000000000000000000000000000000000000000..9b025ca65f0c0ec1cf9f317dbb80879efdf662da Binary files /dev/null and b/script/Z3_Deutsches_Museum.JPG differ diff --git a/script/alu-speicher-takt-computer.jpg b/script/alu-speicher-takt-computer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..378c42263d8692cae39276dd122d821f9fbdb6a6 Binary files /dev/null and b/script/alu-speicher-takt-computer.jpg differ diff --git a/script/alu.jpg b/script/alu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49d3cebc9d3d17498c133c7a3121fbfba7006da9 Binary files /dev/null and b/script/alu.jpg differ diff --git a/script/b800.jpg b/script/b800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c4ccd41ce2526ca90885b0b6598b658ddce3827 Binary files /dev/null and b/script/b800.jpg differ diff --git a/script/binaerzaehler.jpg b/script/binaerzaehler.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da466741c95544268d473c27cca07bd64e7000bf Binary files /dev/null and b/script/binaerzaehler.jpg differ diff --git a/script/bnc-netz-ende.jpg b/script/bnc-netz-ende.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b5168bc047122520db1dc156ad371dec5fe422a Binary files /dev/null and b/script/bnc-netz-ende.jpg differ diff --git a/script/bnc-netz-falsch.jpg b/script/bnc-netz-falsch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3969879fb5120f0e37e456fc92da625e2e201694 Binary files /dev/null and b/script/bnc-netz-falsch.jpg differ diff --git a/script/bnc-netz-mitte.jpg b/script/bnc-netz-mitte.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fba4a32f5eed39455144ba26c54f099307ea3566 Binary files /dev/null and b/script/bnc-netz-mitte.jpg differ diff --git a/script/computer-1.jpg b/script/computer-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02c50617f63a4c4344b1cfc18076f42a57ea7782 Binary files /dev/null and b/script/computer-1.jpg differ diff --git a/script/computer-2.jpg b/script/computer-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83693b62698497df58235c10f9ef367a54f4940f Binary files /dev/null and b/script/computer-2.jpg differ diff --git a/script/computer-3.jpg b/script/computer-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94bdd22f9dc335a02e29d2ecbcedc84382cebb38 Binary files /dev/null and b/script/computer-3.jpg differ diff --git a/script/computer-4.jpg b/script/computer-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..151a8facb276840c9d28f34e9ba7fa836ac0ba81 Binary files /dev/null and b/script/computer-4.jpg differ diff --git a/script/debug-screenshot.png b/script/debug-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5ab802f3120f11f9eb527439749a5c6c7341f4 Binary files /dev/null and b/script/debug-screenshot.png differ diff --git a/script/examples/blink-0.c b/script/examples/blink-0.c new file mode 100644 index 0000000000000000000000000000000000000000..78f19877db18c4e1c4156151eabd6f4fe314f828 --- /dev/null +++ b/script/examples/blink-0.c @@ -0,0 +1,7 @@ +#include <avr/io.h> + +int main (void) +{ /* dasselbe wie: 64 */ + PORTC = 0x40; /* dasselbe wie: 1 << 6 */ + return 0; /* Bedeutung: Bit Nr. 6 */ +} diff --git a/script/examples/blink-1.c b/script/examples/blink-1.c new file mode 100644 index 0000000000000000000000000000000000000000..a6c0119a5b2a89de01568d174bebaaf739e0d611 --- /dev/null +++ b/script/examples/blink-1.c @@ -0,0 +1,8 @@ +#include <avr/io.h> + +int main (void) +{ + PORTC = 0x40; + while (1); + return 0; +} diff --git a/script/examples/blink-2.c b/script/examples/blink-2.c new file mode 100644 index 0000000000000000000000000000000000000000..ccd70f6d5f541b6abd2b2d2472d54bc5d3ad899c --- /dev/null +++ b/script/examples/blink-2.c @@ -0,0 +1,9 @@ +#include <avr/io.h> + +int main (void) +{ + DDRC = 0x40; /* Bit 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen */ + while (1); + return 0; +} diff --git a/script/examples/blink-3.c b/script/examples/blink-3.c new file mode 100644 index 0000000000000000000000000000000000000000..000b6a1226711c263efecde7f903cb801521f2fa --- /dev/null +++ b/script/examples/blink-3.c @@ -0,0 +1,11 @@ +#include <avr/io.h> + +int main (void) +{ + DDRB = 0x00; /* Port B komplett für Input konfigurieren */ + /* --> bewirkt _zufällig_, daß die LED SL4 ausgeht */ + DDRC = 0x40; /* Bit 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen */ + while (1); + return 0; +} diff --git a/script/examples/blink-4.c b/script/examples/blink-4.c new file mode 100644 index 0000000000000000000000000000000000000000..c572dc72415221723845b8147515f766cd05f7ab --- /dev/null +++ b/script/examples/blink-4.c @@ -0,0 +1,11 @@ +#include <avr/io.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0; /* Bits an Port B auf 0 setzen */ + DDRC = 0x40; /* Bit 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen */ + while (1); + return 0; +} diff --git a/script/examples/blink-5.c b/script/examples/blink-5.c new file mode 100644 index 0000000000000000000000000000000000000000..524b3470c34f4349c85018f926f069e3c43d6dc7 --- /dev/null +++ b/script/examples/blink-5.c @@ -0,0 +1,11 @@ +#include <avr/io.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0; /* Bits an Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen, Bit 4 und 5 auf 0 setzen */ + while (1); + return 0; +} diff --git a/script/examples/blink-6.c b/script/examples/blink-6.c new file mode 100644 index 0000000000000000000000000000000000000000..7e47c41c24a631c8cef31bf24f5568994f3f92a1 --- /dev/null +++ b/script/examples/blink-6.c @@ -0,0 +1,20 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0; /* Bits an Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen, Bit 4 und 5 auf 0 setzen */ + while (1) + { + _delay_ms (500); + PORTC = 0x70; + _delay_ms (500); + PORTC = 0x40; + } + return 0; +} diff --git a/script/examples/blink-7.c b/script/examples/blink-7.c new file mode 100644 index 0000000000000000000000000000000000000000..13dc33e39ab0658a42cf1281d8a049415162f848 --- /dev/null +++ b/script/examples/blink-7.c @@ -0,0 +1,18 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0; /* Bits an Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen, Bit 4 und 5 auf 0 setzen */ + while (1) + { + _delay_ms (500); + PORTC ^= 0x30; + } + return 0; +} diff --git a/script/examples/blink-8.c b/script/examples/blink-8.c new file mode 100644 index 0000000000000000000000000000000000000000..470363d949aa638b48ca723f633f9da444c27395 --- /dev/null +++ b/script/examples/blink-8.c @@ -0,0 +1,18 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0; /* Bits an Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x40; /* Bit 6 an Port C auf 1 setzen, Bit 4 und 5 auf 0 setzen */ + while (1) + { + _delay_ms (500); + PORTC ^= 0x70; + } + return 0; +} diff --git a/script/examples/blink-9.c b/script/examples/blink-9.c new file mode 100644 index 0000000000000000000000000000000000000000..915e6ca132b5dd519ce992f2bd43302bd5ba0d97 --- /dev/null +++ b/script/examples/blink-9.c @@ -0,0 +1,21 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x30; /* Bit 6 an Port C für Input konfigurieren */ + while (1) + { + if (PINC & 0x40) + PORTB = 0x80; + else + PORTB = 0x00; + } + return 0; +} diff --git a/script/examples/blink-9a.c b/script/examples/blink-9a.c new file mode 100644 index 0000000000000000000000000000000000000000..454c8d8a71e73cfe601d3bafa32d7faccef22163 --- /dev/null +++ b/script/examples/blink-9a.c @@ -0,0 +1,21 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x80; /* Bit 7 an Port B für Output konfigurieren */ + DDRC = 0x40; /* Bit 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x00; /* Bit 6 an Port C (und alle anderen auch) */ + /* für Input konfigurieren */ + while (1) + { + if (PINC & 0x40) + PORTB = 0x80; + else + PORTB = 0x00; + } + return 0; +} diff --git a/script/examples/blink-a.c b/script/examples/blink-a.c new file mode 100644 index 0000000000000000000000000000000000000000..32dfa302c5d6859d2b07c95f9c1723b1665446f5 --- /dev/null +++ b/script/examples/blink-a.c @@ -0,0 +1,22 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x30; /* Bit 6 an Port C für Input konfigurieren */ + while (1) + { + if (PINC & 0x40) + { + PORTB ^= 0x80; + _delay_ms (500); + } + } + return 0; +} diff --git a/script/examples/blink-b.c b/script/examples/blink-b.c new file mode 100644 index 0000000000000000000000000000000000000000..b2f9a5fe85395bd5f412aa2b654d309cf306ba57 --- /dev/null +++ b/script/examples/blink-b.c @@ -0,0 +1,24 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x30; /* Bit 6 an Port C für Input konfigurieren */ + while (1) + { + if (PINC & 0x40) + { + PORTB ^= 0x80; + _delay_ms (10); /* Taster entprellen */ + while (PINC & 0x40); + _delay_ms (10); /* Taster entprellen */ + } + } + return 0; +} diff --git a/script/examples/blink-c.c b/script/examples/blink-c.c new file mode 100644 index 0000000000000000000000000000000000000000..47432a13a9a0ed3ecff3835d4f899e8c4c459537 --- /dev/null +++ b/script/examples/blink-c.c @@ -0,0 +1,22 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + int a = 0, b = 0; + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x30; /* Bit 6 an Port C für Input konfigurieren */ + while (1) + { + a = PINC & 0x40; + if (a != 0 && b == 0) + PORTB ^= 0x80; + b = a; + } + return 0; +} diff --git a/script/examples/blink-d.c b/script/examples/blink-d.c new file mode 100644 index 0000000000000000000000000000000000000000..fc91830b20b8397e65eedf3270488bd7eae71d28 --- /dev/null +++ b/script/examples/blink-d.c @@ -0,0 +1,25 @@ +#include <avr/io.h> + +#define F_CPU 8000000 +#include <util/delay.h> + +int main (void) +{ + int a = 0, b = 0; + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + DDRC = 0x30; /* Bit 6 an Port C für Input konfigurieren */ + while (1) + { + a = PINC & 0x40; + if (a != 0 && b == 0) + { + PORTB ^= 0x80; + _delay_ms (10); + } + b = a; + } + return 0; +} diff --git a/script/examples/blink-e.c b/script/examples/blink-e.c new file mode 100644 index 0000000000000000000000000000000000000000..b23a641bb3986736d8638e1f10aa6918d334d027 --- /dev/null +++ b/script/examples/blink-e.c @@ -0,0 +1,26 @@ +#include <avr/io.h> +#include <avr/interrupt.h> + +ISR (TIMER0_COMP_vect) +{ + static int counter = 0; + if (counter++ >= 488) + { + PORTB ^= 0x80; + counter = 0; + } +} + +int main (void) +{ + cli (); + TCCR0 = (1 << CS01) | (1 << CS00); + TIMSK = 1 << OCIE0; + sei (); + DDRB = 0x83; /* Bit 7, 1 und 0 auf Port B für Output konfigurieren */ + PORTB = 0x00; /* Bits an Output-Port B auf 0 setzen */ + DDRC = 0x70; /* Bit 4, 5 und 6 an Port C für Output konfigurieren */ + PORTC = 0x00; /* Bits an Output-Port C auf 0 setzen */ + while (1); + return 0; +} diff --git a/script/examples/catcan.red b/script/examples/catcan.red new file mode 100644 index 0000000000000000000000000000000000000000..74cbb3d1388d9cd0ee089b4b0ecba9a6eda30f3b --- /dev/null +++ b/script/examples/catcan.red @@ -0,0 +1,23 @@ +;name Cat Can +;author A. Kirchner, F. Uy +;assert 1 +; +; Your basic two sweep methodical bomber. +; Fires SPL 0 and JMP -1 at every eight +; addresses, then erases the core with +; DAT bombs. + +start mov trap2, < bomb + mov trap1, < bomb + sub # 6, bomb + jmn start, bomb ; trap loop +set mov # -12, bomb +kill mov bomb, @ bomb + djn kill, bomb ; kill loop +reset jmp set, 0 + jmp set, 0 + dat # 0, # 0 ; buffer +bomb dat # 0, # -1024 +trap1 spl 0, 2 +trap2 jmp -1, 1 + end start diff --git a/script/examples/dwarf.red b/script/examples/dwarf.red new file mode 100644 index 0000000000000000000000000000000000000000..cac740afd6d0e12d5776948e5f05b3dc24f8f6c3 --- /dev/null +++ b/script/examples/dwarf.red @@ -0,0 +1,14 @@ +;redcode +;name Dwarf +;author A. K. Dewdney +;strategy Throw DAT bombs around memory, hitting every 4th memory cell. +;strategy This program was presented in the first Corewar article. + +bomb DAT #0 +dwarf ADD #4, bomb + MOV bomb, @bomb + JMP dwarf + END dwarf ; Programs start at the first line unless + ; an "END start" pseudo-op appears to indicate + ; the first logical instruction. Also, nothing + ; after the END instruction will be assembled. diff --git a/script/examples/endloskopierschleife-nachher-nachher.png b/script/examples/endloskopierschleife-nachher-nachher.png new file mode 100644 index 0000000000000000000000000000000000000000..0125415ab05e9f790291cb0775dc155c689d1108 Binary files /dev/null and b/script/examples/endloskopierschleife-nachher-nachher.png differ diff --git a/script/examples/endloskopierschleife-nachher.png b/script/examples/endloskopierschleife-nachher.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a0a299daeb066a684b891108f8bbc206b72bcf Binary files /dev/null and b/script/examples/endloskopierschleife-nachher.png differ diff --git a/script/examples/endloskopierschleife-vorher.png b/script/examples/endloskopierschleife-vorher.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2c318c65323d738985b59ef0a9756f81bf43fb Binary files /dev/null and b/script/examples/endloskopierschleife-vorher.png differ diff --git a/script/examples/gelbes-a.png b/script/examples/gelbes-a.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf3307a8c6ceb8a3aecf9c3b7bcaae9a3d29584 Binary files /dev/null and b/script/examples/gelbes-a.png differ diff --git a/script/examples/gemini.red b/script/examples/gemini.red new file mode 100644 index 0000000000000000000000000000000000000000..9159b61aaf984a51418b4e9d34c6ca23d001b428 --- /dev/null +++ b/script/examples/gemini.red @@ -0,0 +1,15 @@ +;name Gemini +;assert 1 + +dat1 dat #0 +dat2 dat #99 +start mov @dat1, @dat2 + add #1, dat1 + add #1, dat2 + cmp dat1, dat3 + jmp start + mov #99, 94 + jmp 94 +dat3 dat #10 + + end start diff --git a/script/examples/hello-world-data.png b/script/examples/hello-world-data.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b6d21704fca3cec53adbcd1f8eeb97d01e938f Binary files /dev/null and b/script/examples/hello-world-data.png differ diff --git a/script/examples/knirps.red b/script/examples/knirps.red new file mode 100644 index 0000000000000000000000000000000000000000..befaa2a3da9a8cab5e76207623ac49880453b472 --- /dev/null +++ b/script/examples/knirps.red @@ -0,0 +1,5 @@ +;name Knirps +;assert 1 + +start mov 0, 1 + end start diff --git a/script/examples/kopierschleife-nachher.png b/script/examples/kopierschleife-nachher.png new file mode 100644 index 0000000000000000000000000000000000000000..895efe6190f642a68ab1f4e26d8fa90367be72c6 Binary files /dev/null and b/script/examples/kopierschleife-nachher.png differ diff --git a/script/examples/kopierschleife-vorher.png b/script/examples/kopierschleife-vorher.png new file mode 100644 index 0000000000000000000000000000000000000000..ad0c569eef70ffdd921dc5da8a1eb65e572e1d4b Binary files /dev/null and b/script/examples/kopierschleife-vorher.png differ diff --git a/script/examples/mice.red b/script/examples/mice.red new file mode 100644 index 0000000000000000000000000000000000000000..0b17fb8c6db22239bf870c841e600a24f82a2216 --- /dev/null +++ b/script/examples/mice.red @@ -0,0 +1,16 @@ +;name Mice +;author Chip Wendell +;assert 1 + +ptr dat #0 +start mov #12, ptr ; n = 12 +loop mov @ptr, <dest ; *dest = *(ptr+(*ptr)) + djn loop, ptr ; if(--ptr != 0) + ; goto loop + spl @dest ; split(*dest) + add #653, dest ; dest += 653 + jmz start, ptr ; if(!ptr) + ; goto start +dest dat #833 + + end start diff --git a/script/examples/nachher.png b/script/examples/nachher.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd6bc2b66cdd821561e49648f5e6f1c3054395d Binary files /dev/null and b/script/examples/nachher.png differ diff --git a/script/examples/nothing.red b/script/examples/nothing.red new file mode 100644 index 0000000000000000000000000000000000000000..5d6f3c21f2f19c3929c675c21b1e9a8ff47d8bf1 --- /dev/null +++ b/script/examples/nothing.red @@ -0,0 +1,5 @@ +;name Nothing +;assert 1 + +start jmp 0 + end start diff --git a/script/examples/oft.red b/script/examples/oft.red new file mode 100644 index 0000000000000000000000000000000000000000..635dc16a6b27135fce830814e4cb71c6a7e62605 --- /dev/null +++ b/script/examples/oft.red @@ -0,0 +1,12 @@ +;redcode +;name oft +;version 1.0 (8.1990) +;author Olaf Klein +;assert 1 + +; +----------------------------------+ +; | O F T by O.K. AUG. 1990 | +; +----------------------------------+ + +SPL <456 +JMP -1 diff --git a/script/examples/rote-linie-1.png b/script/examples/rote-linie-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8c0b41c107b55b7d3237e14c0109ce3ada6859 Binary files /dev/null and b/script/examples/rote-linie-1.png differ diff --git a/script/examples/rote-linie-2.png b/script/examples/rote-linie-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b33f3e0cec38c73cebb29c0c636789ad49dc5966 Binary files /dev/null and b/script/examples/rote-linie-2.png differ diff --git a/script/examples/rote-linie-3.png b/script/examples/rote-linie-3.png new file mode 100644 index 0000000000000000000000000000000000000000..112710d84ab6c706bfe324a2e4400d5103ad70a7 Binary files /dev/null and b/script/examples/rote-linie-3.png differ diff --git a/script/examples/rote-punkte.png b/script/examples/rote-punkte.png new file mode 100644 index 0000000000000000000000000000000000000000..6755c32763412c80a39dae5bd09fbabfc7576bf4 Binary files /dev/null and b/script/examples/rote-punkte.png differ diff --git a/script/examples/roter-punkt.png b/script/examples/roter-punkt.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fa0ad8de25bc9d2379f120c9c5e162205ab05a Binary files /dev/null and b/script/examples/roter-punkt.png differ diff --git a/script/examples/rotes-alphabet-quelltext.png b/script/examples/rotes-alphabet-quelltext.png new file mode 100644 index 0000000000000000000000000000000000000000..75804c24012d2ed2792595311b7194ce5b593aa0 Binary files /dev/null and b/script/examples/rotes-alphabet-quelltext.png differ diff --git a/script/examples/rotes-alphabet.png b/script/examples/rotes-alphabet.png new file mode 100644 index 0000000000000000000000000000000000000000..e5823bee58f6d3fc9c713b02f3735f2f4e84d34e Binary files /dev/null and b/script/examples/rotes-alphabet.png differ diff --git a/script/examples/vorher.png b/script/examples/vorher.png new file mode 100644 index 0000000000000000000000000000000000000000..a46b91157ab7f6c01aa0a55126d381f281f930e6 Binary files /dev/null and b/script/examples/vorher.png differ diff --git a/script/examples/writepbm-1.c b/script/examples/writepbm-1.c new file mode 100644 index 0000000000000000000000000000000000000000..d3ff3220187eb64bda68783ba3ee418dabd35a6a --- /dev/null +++ b/script/examples/writepbm-1.c @@ -0,0 +1,31 @@ +#include <stdio.h> +#include <stdint.h> + +#define WIDTH 64 +#define HEIGHT 64 + +#define SIZE ((WIDTH / 8) * HEIGHT) + +int8_t buffer[SIZE]; + +void clear (void) +{ + for (int i = 0; i < SIZE; i++) + buffer[i] = 0; +} + +void set_pixel (int x, int y) +{ + int i = (WIDTH / 8) * y; + i += x / 8; /* Byte innerhalb von buffer[] */ + int b = x % 8; /* Bit innerhalb des Bytes */ + buffer[i] |= 1 << b; +} + +int main (void) +{ + clear (); + for (int i = 0; i < HEIGHT; i++) + set_pixel (i, i); + return 0; +} diff --git a/script/examples/writepbm-2.c b/script/examples/writepbm-2.c new file mode 100644 index 0000000000000000000000000000000000000000..209685607f20864b74ea1132b9f98bfac5039367 --- /dev/null +++ b/script/examples/writepbm-2.c @@ -0,0 +1,38 @@ +#include <stdio.h> +#include <stdint.h> + +#define WIDTH 64 +#define HEIGHT 64 + +#define SIZE ((WIDTH / 8) * HEIGHT) + +uint8_t buffer[SIZE]; + +void clear (void) +{ + for (int i = 0; i < SIZE; i++) + buffer[i] = 0; +} + +void set_pixel (int x, int y) +{ + int i = (WIDTH / 8) * y; + i += x / 8; /* Byte innerhalb von buffer[] */ + int b = x % 8; /* Bit innerhalb des Bytes */ + buffer[i] |= 1 << b; +} + +void output (void) +{ + for (int i = 0; i < SIZE; i++) + printf ("%c", buffer[i]); +} + +int main (void) +{ + clear (); + for (int i = 0; i < HEIGHT; i++) + set_pixel (i, i); + output (); + return 0; +} diff --git a/script/examples/writepbm-3.c b/script/examples/writepbm-3.c new file mode 100644 index 0000000000000000000000000000000000000000..4e7b7068aa901a0b56048fd8c0201fce25c273e6 --- /dev/null +++ b/script/examples/writepbm-3.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <stdint.h> + +#define WIDTH 64 +#define HEIGHT 64 + +#define SIZE ((WIDTH / 8) * HEIGHT) + +uint8_t buffer[SIZE]; + +void clear (void) +{ + for (int i = 0; i < SIZE; i++) + buffer[i] = 0; +} + +void set_pixel (int x, int y) +{ + int i = (WIDTH / 8) * y; + i += x / 8; /* Byte innerhalb von buffer[] */ + int b = x % 8; /* Bit innerhalb des Bytes */ + buffer[i] |= 1 << b; +} + +void output (void) +{ + printf ("P4\n%d %d\n", WIDTH, HEIGHT); + for (int i = 0; i < SIZE; i++) + printf ("%c", buffer[i]); +} + +int main (void) +{ + clear (); + for (int i = 0; i < HEIGHT; i++) + set_pixel (i, i); + output (); + return 0; +} diff --git a/script/examples/writepbm-3.pbm b/script/examples/writepbm-3.pbm new file mode 100644 index 0000000000000000000000000000000000000000..92d5dd407e398e55667e68480c6a9f62169426a0 Binary files /dev/null and b/script/examples/writepbm-3.pbm differ diff --git a/script/examples/writepbm-4.c b/script/examples/writepbm-4.c new file mode 100644 index 0000000000000000000000000000000000000000..a81566eceb714a8beba74d6532eb98e5e6067ba3 --- /dev/null +++ b/script/examples/writepbm-4.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <stdint.h> + +#define WIDTH 64 +#define HEIGHT 64 + +#define SIZE ((WIDTH / 8) * HEIGHT) + +uint8_t buffer[SIZE]; + +void clear (void) +{ + for (int i = 0; i < SIZE; i++) + buffer[i] = 0; +} + +void set_pixel (int x, int y) +{ + int i = (WIDTH / 8) * y; + i += x / 8; /* Byte innerhalb von buffer[] */ + int b = x % 8; /* Bit innerhalb des Bytes */ + buffer[i] |= 0x80 >> b; +} + +void output (void) +{ + printf ("P4\n%d %d\n", WIDTH, HEIGHT); + for (int i = 0; i < SIZE; i++) + printf ("%c", buffer[i]); +} + +int main (void) +{ + clear (); + for (int i = 0; i < HEIGHT; i++) + set_pixel (i, i); + output (); + return 0; +} diff --git a/script/examples/writepbm-4.pbm b/script/examples/writepbm-4.pbm new file mode 100644 index 0000000000000000000000000000000000000000..9b34cca4d8b89bc9b0b54add3fafd57ee926c270 Binary files /dev/null and b/script/examples/writepbm-4.pbm differ diff --git a/script/examples/writepbm-4.xbm b/script/examples/writepbm-4.xbm new file mode 100644 index 0000000000000000000000000000000000000000..70bdfe3cae5ec3ee2d75d30b1038a13d128656f4 --- /dev/null +++ b/script/examples/writepbm-4.xbm @@ -0,0 +1,46 @@ +#define writepbm-4_width 64 +#define writepbm-4_height 64 +static char writepbm-4_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, }; diff --git a/script/examples/writepbm_4.xbm b/script/examples/writepbm_4.xbm new file mode 100644 index 0000000000000000000000000000000000000000..625358e2a059d07895380072fe54ac766c5a34df --- /dev/null +++ b/script/examples/writepbm_4.xbm @@ -0,0 +1,46 @@ +#define writepbm_4_width 64 +#define writepbm_4_height 64 +static char writepbm_4_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, }; diff --git a/script/examples/writeppm.c b/script/examples/writeppm.c new file mode 100644 index 0000000000000000000000000000000000000000..262d6644fe27259ae9f52fdfbbe582e1404912b6 --- /dev/null +++ b/script/examples/writeppm.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <stdint.h> + +#define WIDTH 64 +#define HEIGHT 64 + +#define SIZE (3 * WIDTH * HEIGHT) + +uint8_t buffer[SIZE]; + +void clear (void) +{ + for (int i = 0; i < SIZE; i++) + buffer[i] = 0; +} + +void set_pixel (int x, int y, int r, int g, int b) +{ + int i = 3 * (y * WIDTH + x); + buffer[i++] = r; + buffer[i++] = g; + buffer[i] = b; +} + +void output (void) +{ + printf ("P6\n%d %d\n%d\n", WIDTH, HEIGHT, 255); + for (int i = 0; i < SIZE; i++) + printf ("%c", buffer[i]); +} + +int main (void) +{ + clear (); + for (int i = 0; i < HEIGHT; i++) + set_pixel (i, i, 255, i, 255 - i); + output (); + return 0; +} diff --git a/script/examples/writeppm.ppm b/script/examples/writeppm.ppm new file mode 100644 index 0000000000000000000000000000000000000000..580c3377668ce71e99ebded77cd33816416c29a6 Binary files /dev/null and b/script/examples/writeppm.ppm differ diff --git a/script/examples/zwischendurch.png b/script/examples/zwischendurch.png new file mode 100644 index 0000000000000000000000000000000000000000..31598a56a36cbab25da1c7991a30c176157d1119 Binary files /dev/null and b/script/examples/zwischendurch.png differ diff --git a/script/fa-1.jpg b/script/fa-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a3abc829dff90e4e99c7c120c3f96452198bc94 Binary files /dev/null and b/script/fa-1.jpg differ diff --git a/script/fa-2.jpg b/script/fa-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44b938719061e6fd0eb3238c601096a1a2255d35 Binary files /dev/null and b/script/fa-2.jpg differ diff --git a/script/fa-3.jpg b/script/fa-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f003591d7f67ded75f5626b35999fea0f5d2964 Binary files /dev/null and b/script/fa-3.jpg differ diff --git a/script/festplatte-pata.jpg b/script/festplatte-pata.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5c064f110ee4e51b9d9d68629e6c9582f663c8a Binary files /dev/null and b/script/festplatte-pata.jpg differ diff --git a/script/festplatte-sata.jpg b/script/festplatte-sata.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6ef768a48a261a34430b2af1f1e0f4cfbb89443 Binary files /dev/null and b/script/festplatte-sata.jpg differ diff --git a/script/kompass-messung.png b/script/kompass-messung.png new file mode 100644 index 0000000000000000000000000000000000000000..483165aec6de40b1993500956f1de1cb7added79 Binary files /dev/null and b/script/kompass-messung.png differ diff --git a/script/kompassmodul-an-roboter.jpg b/script/kompassmodul-an-roboter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8032f89a2d9ed29445312c2f29ef6ceb951b2005 Binary files /dev/null and b/script/kompassmodul-an-roboter.jpg differ diff --git a/script/kompassmodul.jpg b/script/kompassmodul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91e9de3f4ff0023b01957a6c48e2b61f8070ee40 Binary files /dev/null and b/script/kompassmodul.jpg differ diff --git a/script/komplement.jpg b/script/komplement.jpg new file mode 100644 index 0000000000000000000000000000000000000000..371ae98c4539e6a7eea88be76c548f1953c68643 Binary files /dev/null and b/script/komplement.jpg differ diff --git a/script/logo-hochschule-bochum-cvh-text-v2.pdf b/script/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/script/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/script/logo-hochschule-bochum-cvh-text.pdf b/script/logo-hochschule-bochum-cvh-text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807 Binary files /dev/null and b/script/logo-hochschule-bochum-cvh-text.pdf differ diff --git a/script/logo-hochschule-bochum.pdf b/script/logo-hochschule-bochum.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8cad73dbb48a2b550bf29355b5a6ec895ce091f8 Binary files /dev/null and b/script/logo-hochschule-bochum.pdf differ diff --git a/script/motherboard-anschluesse.jpg b/script/motherboard-anschluesse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c18421ba84cf3b5edfd94404152138a78ee527b Binary files /dev/null and b/script/motherboard-anschluesse.jpg differ diff --git a/script/motherboard-ausschnitt.jpg b/script/motherboard-ausschnitt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86e3b0510a3e91661c9cbbfd557b5af6b7a14fa3 Binary files /dev/null and b/script/motherboard-ausschnitt.jpg differ diff --git a/script/motherboard.jpg b/script/motherboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..339770fb42e760cd4271d4560446cd52e6db16b3 Binary files /dev/null and b/script/motherboard.jpg differ diff --git a/script/multi-1.jpg b/script/multi-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a9b182c834726cbde3be70e06c42bf4256d4df0 Binary files /dev/null and b/script/multi-1.jpg differ diff --git a/script/multi-2.jpg b/script/multi-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab06d9580a04a3bc7b748ba18ad1a76a29f250db Binary files /dev/null and b/script/multi-2.jpg differ diff --git a/script/multi-3.jpg b/script/multi-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4724ef94c94b326698cf3de0599a1e4176236e6 Binary files /dev/null and b/script/multi-3.jpg differ diff --git a/script/pgscript.sty b/script/pgscript.sty new file mode 120000 index 0000000000000000000000000000000000000000..95c888478c99ea7fda0fd11ccf669ae91be7178b --- /dev/null +++ b/script/pgscript.sty @@ -0,0 +1 @@ +../common/pgscript.sty \ No newline at end of file diff --git a/script/pgslides.sty b/script/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/script/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/script/programm-screenshot.png b/script/programm-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5214650458048bdc5a375f828ec5153fae241579 Binary files /dev/null and b/script/programm-screenshot.png differ diff --git a/script/pst-circ-pg.sty b/script/pst-circ-pg.sty new file mode 120000 index 0000000000000000000000000000000000000000..81253a45bded27ed7cf1b13b967ae54772b0807d --- /dev/null +++ b/script/pst-circ-pg.sty @@ -0,0 +1 @@ +../common/pst-circ-pg.sty \ No newline at end of file diff --git a/script/rechnen.jpg b/script/rechnen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f95f8f20d5b9298002ec5dd41ad43ea8e2a3db0 Binary files /dev/null and b/script/rechnen.jpg differ diff --git a/script/rtech-2013ws.pdf b/script/rtech-2013ws.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5d47b21003212acf1ca661cb224402a910f52f6c Binary files /dev/null and b/script/rtech-2013ws.pdf differ diff --git a/script/rtech-2013ws.tex b/script/rtech-2013ws.tex new file mode 100644 index 0000000000000000000000000000000000000000..06b2e17940560f787fb8a53b9678a963afbc2f4d --- /dev/null +++ b/script/rtech-2013ws.tex @@ -0,0 +1,4835 @@ +% rtech-2012ws.pdf - Lecture Notes on Fundamentals in Computer Architecture +% Copyright (C) 2012, 2013 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\documentclass[a4paper]{article} + +\usepackage{pgscript} +\usepackage{rotating} +\usepackage{pdftricks} + +\newcommand{\name}[1]{\textsc{#1}} +\newcommand{\ccbysanp}{CC-by-sa (Version 3.0, nicht portiert)} +\newcommand{\fdl}{GNU FDL (Version 1.2 oder h�her)} +\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder h�her)} +\newcommand{\pd}{gemeinfrei -- \emph{public domain}} + +\makeatletter + \newcommand{\figurecaptionraw}[2]{% + \def\n{\hfill\break} + \refstepcounter{figure}% + \addcontentsline{lof}{figure}% + {\protect\numberline{\goodbreak\hspace{-1.5em}Abb.~\thefigure}{\ignorespaces #1}\protect\nopagebreak}% + \begingroup + \def\n{\break} + \@makecaption{\csname fnum@figure\endcsname}{\ignorespaces #1}\par + \endgroup + \addtocontents{lof}{\begingroup\leftskip3.8em #2\par\endgroup} + } +\makeatother +\newcommand{\figurecaptionurl}[5]{% + \figurecaptionraw{#1}{Quelle: \protect\url{#2},\protect\\abgerufen am #3\protect\\Autor: #4\protect\\Lizenz: #5}} +\newcommand{\figurecaptionurlurl}[5]{% + \figurecaptionraw{#1}{Quelle: \protect\url{#2},\protect\\abgerufen am #3\protect\\Autor: \protect\url{#4}\protect\\Lizenz: #5}} +\newcommand{\figurecaptionself}[1]{\figurecaptionraw{#1}{Quelle/Autor: selbst erstellt\protect\\Lizenz: \mylicense}} + +\newcommand{\underconstruction}{\hfill\makebox(0,0)[tr]{\includegraphics[width=2cm]{UnderCon_icon.pdf}}} + +\newcommand{\Cin}{C\raisebox{-0.5ex}{\footnotesize in}} +\newcommand{\Cout}{C\raisebox{-0.5ex}{\footnotesize out}} + +\begin{psinputs} + \usepackage{pgscript} + \usepackage{pstricks,pst-grad,pst-circ-pg} + \newcommand{\invisible}{\tiny\color{white}} + \psset{unit=1cm} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \newcommand{\Cin}{C\raisebox{-0.5ex}{\footnotesize in}} + \newcommand{\Cout}{C\raisebox{-0.5ex}{\footnotesize out}} +\end{psinputs} + +\begin{document} + \thispagestyle{empty} + \strut\hfill + \includegraphics[height=1.5cm]{logo-hochschule-bochum.pdf} + \vfill + \begin{center} + {\Huge\textbf{Grundlagen Rechnertechnik}\par} + \vspace{2cm} + {\large Wintersemester 2012/13\\[\medskipamount] + Prof.~Dr.~Peter Gerwinski} + \end{center} + \vfill + + \clearpage + + \begingroup + \strut\vfill + + \setlength{\leftskip}{3cm} + + Stand: 21.\ Januar 2013 + + Soweit nicht anders angegeben:\\ + Copyright \copyright\ 2012\quad Peter Gerwinski\\ + Lizenz: \mylicense + +% Baustellenschilder (Quelle: \url{http://commons.wikimedia.org/wiki/File:UnderCon\_icon.svg}, +% Lizenz: gemeinfrei) kennzeichnen Passagen, f�r die kurzfristig noch gr��ere �nderungen geplant sind. + + Sie k�nnen dieses Skript einschlie�lich Quelltext + und Beispielprogramme\\ + herunterladen unter:\\ + \url{http://www.peter.gerwinski.de/download/rtech-2012ws.tar.gz} + + \endgroup + + \clearpage + + \tableofcontents + + \clearpage + + \catcode`\_=13 + \listoffigures + \catcode`\_=8 + + \clearpage + + \section{Einf�hrung} + + \subsection{Was ist Rechnertechnik?} + + Wikipedia \cite{WP: Rechnertechnik} definiert \newterm{Rechnertechnik\/} folgenderma�en: + \begin{quote} + Die \newterm{Rechnertechnik\/} (auch Computertechnik, englisch \newterm{computer engineering\/}) + besch�ftigt sich als technisches Fachgebiet + mit der Konzeption von informationsverarbeitenden Anlagen, also Computern. + Sie baut auf der Digitaltechnik und Mikroelektronik auf. + \end{quote} + + Die Kernfrage, mit denen wir uns in dieser Lehrveranstaltung befassen werden, lautet also: + \begin{quote} + Wie funktioniert ein Computer? + \end{quote} + + Im Gegensatz zu z.\,B.\ Lebewesen werden Computer von Menschen entwickelt und gebaut. + Daher ist es grunds�tzlich m�glich, ihre Funktionsweise vollst�ndig zu verstehen. + + \subsection{Was ist ein Computer?} + + Ein \newterm{Rechner}, englisch \newterm{Computer}, + ist von der Wortbedeutung her zun�chst einmal ein Werkzeug, + das dem menschlichen Gehirn beim Rechnen hilft. + + Beispiele f�r derartige Rechenhilfen: + \begin{itemize} + \setlength{\rightskip}{5cm} + \item + Finger + + Die eigenen Finger werden h�ufig beim Kopfrechnen + als zus�tzliches Werkzeug eingesetzt, um sich Zwischenergebnisse + (typischerweise im Zahlenbereich von 1 bis 10) zu merken. + \item + Papier und Bleistift, Sand, Tontafeln etc. + + Das schriftliche Addieren, Subtrahieren, Multiplizieren und Dividieren + ist aus der Grundschule bekannt. + Auch weitere Operationen (z.\,B.\ Wurzelziehen) lassen sich auf diese Weise ausf�hren. + \item + Zirkel und Lineal + \hfill\makebox(0,0)[tl]{\hspace*{1cm}\begin{minipage}{4cm} + \vspace{-3cm} + \begin{center} + \includegraphics[width=4cm]{Drawing-a-circle-with-the-compasses.jpg}\\ + \figurecaptionurl{Zirkel}% + {http://commons.wikimedia.org/wiki/File:Drawing-a-circle-with-the-compasses.jpg}% + {7.\,10.\,2012}% + {International Correspondence Schools, Scranton, PA., USA}% + {\pd} + \bigskip + \includegraphics[width=4cm]{Holding-a-ruling-pen-edited-2.jpg}\\ + \figurecaptionurl{Lineal}% + {http://commons.wikimedia.org/wiki/File:Holding-a-ruling-pen.jpg}% + {7.\,10.\,2012, selbst bearbeitet}% + {International Correspondence Schools, Scranton, PA., USA}% + {\pd} + \end{center} + \end{minipage}} + + Erstaunlich viele geometrische Konstruktionen lassen sich allein mit Hilfe eines Zirkels + und eines Lineals (ohne Ma�stab) durchf�hren. Beispiele: + \begin{itemize} + \item + Addition, Subtraktion, Multiplikation und Division von Zahlen,\\ + dargestellt durch L�ngenverh�ltnisse + \item + Berechnung von $\sqrt{2}$ als L�ngenverh�ltnis + \item + Division eines Winkels durch $2$ oder Potenzen von $2$ + \item + Konstruktion eines regelm��igen F�nfecks,\\ + Siebzehnecks oder 65537ecks + \end{itemize} + Wie im 19.\ Jahrhundert bewiesen wurde (K�rper- und \name{Galois}-The\-o\-rie), + gibt es aber auch mathematische Probleme, + die sich \emph{nicht\/} allein mit Zirkel und Lineal l�sen lassen. + Beispiele: + \begin{itemize} + \item + Berechnung von $\sqrt[3]{2}$ als L�ngenverh�ltnis\\("`W�rfelverdopplung"') + \item + Berechnung der Zahl $\pi$ als L�ngenverh�ltnis\\("`Quadratur des Kreises"') + \item + Division eines Winkels durch $3$ + \item + Konstruktion eines regelm��igen Siebenecks + \end{itemize} + \item + Abakus + + Bei dieser Rechenhilfe ersetzen verschiebbare Kugeln geschriebene Ziffern. + Die eigentliche Rechnung erfolgt genau wie beim schriftlichen Rechnen. + \item + Mechanische Rechenmaschine + \hfill\makebox(0,0)[tl]{\hspace*{0.7cm}\begin{minipage}{4.3cm} + \begin{center} + \includegraphics[width=4cm]{1890s_adding_machine.jpg}\\ + \figurecaptionurlurl{Mechanische Rechenmaschine}% + {http://commons.wikimedia.org/wiki/File:1890s_adding_machine.jpg}% + {7.\,10.\,2012}% + {http://commons.wikimedia.org/wiki/User:Trekphiler}% + {\ccbysanp} + \end{center} + \end{minipage}} + + Die Vorg�nge, die beim schriftlichen Rechnen durch einen Menschen ausgef�hrt werden, + erfolgen hier durch Zahnr�der. + \item + Rechenschieber + + Zwei gegeneinander verschiebbare logarithmische Skalen + erlauben es, die Multiplikation auf die Addition zur�ckzuf�hren + und die Division auf die Subtraktion. + Zus�tzliche Skalen erm�glichen auch das Ziehen von Wurzeln und weitere Operationen. + \item + Taschenrechner + + Die Vorg�nge, die beim schriftlichen Rechnen durch einen Menschen ausgef�hrt werden, + erfolgen hier durch elektronische Schaltungen. + \item + Computer + + Zus�tzlich zu den F�higkeiten eines Taschenrechners erlaubt es ein Computer, + Folgen von Rechenvorg�ngen in Gestalt von \newterm{Programmen\/} vorzubereiten, + bei deren Abarbeitung auf bereits vorliegende Ergebnisse und sonstige Ereignisse + reagiert werden kann (bedingte Anweisungen und Sprunganweisungen). + \end{itemize} + + Die oben aufgef�hrten Rechner lassen sich in zwei Klassen unterteilen: + \begin{itemize} + \item + \newterm{Analogrechner\/} stellen Zahlenwerte durch kontinuierliche physikalische Gr��en + (L�nge, elektrische Spannung, \dots) dar. + Die Genauigkeit der Ergebnisse entspricht der Genauigkeit, mit der der Rechner gefertigt wurde. + Sie unterliegt Qualit�tsschwankungen und �u�eren Einfl�ssen + und kann sich im Laufe der Zeit allm�hlich �ndern + (Qualit�tsabnahme durch Verschlei�, aber auch Qualit�tsverbesserung durch "`Einschleifen"'). + + Zu dieser Klasse geh�ren Zirkel und Lineal sowie der Rechenschieber. + \item + \newterm{Digitalrechner\/} stellen Zahlenwerte durch Ziffern (englisch: \emph{digit\/}) dar. + Sie sind benannt nach den menschlichen Fingern (lateinisch: \emph{digitus\/}), + die als Rechenwerkzeug dieser Klasse angeh�ren. + Die erreichbare Genauigkeit h�ngt allein von der Anzahl der verwendbaren Ziffern ab. + Qualit�tsverlust, z.\,B.\ durch Verschlei�, spielt solange keine Rolle, + wie die einzelnen Werte der Ziffern noch unterschieden werden k�nnen. + Sobald dies nicht mehr der Fall ist, ist der Digitalrechner schlagartig komplett unbrauchbar. + + Neben den namensgebenden Fingern geh�ren zu dieser Klasse + auch das schriftliche Rechnen, der Abakus, mechanische Rechenmaschinen und Taschenrechner. + \end{itemize} + + Wenn heutzutage von "`Computern"' die Rede ist, so sind damit stets \newterm{Digitalcomputer\/} gemeint. + Daneben gibt es auch \newterm{Analogcomputer}, + die Zahlenwerte durch elektrische Spannungen, Wasserdruck oder sonstige physikalische Gr��en modellieren. + + Die Programmierung elektronischer Analogcomputer erfolgt durch das Umstecken von Schaltungen. + Durch geeignete Wahl der Bauelemente k�nnen nicht nur die Grundrechenarten, + sondern auch Operationen aus der Differential- und Integralrechnung effizient ausgef�hrt werden. + Analog"-computer eignen sich daher besonders gut zum L�sen von Differentialgleichungen. + Auf diesem Gebiet hatten Analogcomputer bis in die 1970er Jahre hinein + Vorteile gegen�ber Digitalcomputern \cite{Analogcomputer}, + wurden aber mittlerweile durch diese nahezu vollst�ndig verdr�ngt. + + In dieser Lehrveranstaltung geht es ausschlie�lich um Digitalcomputer. + + \clearpage + + \subsection{Rechnertechnik im Verh�ltnis zu anderen Disziplinen} + + Rechnertechnik als wissenschaftliche Disziplin baut auf der Digitaltechnik und der Mikroelektronik auf, + bei denen es sich um Teilgebiete der Elektrotechnik handelt. + + Die Aufgabe der Rechnertechnik besteht darin, das Gegenst�ndliche -- reale Dr�hte, Halbleiter usw.\ -- + so weit zu abstrahieren, da� ein universell einsetzbarer Rechner entsteht. + Die Rechenergebnisse h�ngen also nicht mehr von dem konkreten Rechner ab, auf dem die Programme laufen + (wie es z.\,B.\ bei einem Rechenschieber der Fall ist), + sondern der Rechner bildet eine Abstraktionsschicht f�r die Programme. + Details, wie der Rechner funktioniert, sind f�r die Programmierung uninteressant; + diese Probleme werden innerhalb der Rechnertechnik gel�st. + + \bigskip + + \begin{center} + \begin{pdfpic} + \begin{pspicture}(-5,0)(12,24) + \small + \psset{unit=0.5cm} + \psline[arrows=<->](-1,0)(-1,22) + \rput(-1.3,0){\makebox(0,0)[br]{\textbf{gegenst�ndlich}}} + \rput(-1.3,22){\makebox(0,0)[tr]{\textbf{abstrakt}}} + \rput(-1.3,2){\makebox(0,0)[r]{Elektromagnetismus, Halbleiter}} + \rput(-1.3,4){\makebox(0,0)[r]{Elektronische Bauelemente}} + \rput(-1.3,6){\makebox(0,0)[r]{Logik-Schaltkreise}} + \rput(-1.3,8){\makebox(0,0)[r]{Prozessoren}} + \rput(-1.3,9){\makebox(0,0)[r]{Maschinensprache}} + \rput(-1.3,10){\makebox(0,0)[r]{Assembler}} + \rput(-1.3,11){\makebox(0,0)[r]{Ein-/Ausgabe}} + \rput(-1.3,12){\makebox(0,0)[r]{maschinennahe Hochsprachen (z.\,B.\ C)}} + \rput(-1.3,14){\makebox(0,0)[r]{abstrahierende Hochsprachen (z.\,B.\ C++, Java)}} + \rput(-1.3,15){\makebox(0,0)[r]{Programmierung}} + \rput(-1.3,16){\makebox(0,0)[r]{Algorithmen, Datenstrukturen, Software-Entwurf}} + \rput(-1.3,17){\makebox(0,0)[r]{Requirements Engineering}} + \rput(-1.3,18){\makebox(0,0)[r]{formale Sprachen, Berechenbarkeit}} + \rput(-1.3,19){\makebox(0,0)[r]{mathematische Strukturen}} + \rput(-1.3,20){\makebox(0,0)[r]{mathematische Beweise}} + \rput(2.1,0.5){\makebox(0,0)[l]{Physik}} + \rput(4.1,4){\makebox(0,0)[l]{Elektrotechnik}} + \rput(6.1,8){\makebox(0,0)[l]{\shortstack[l]{Rechnertechnik und\\technische Informatik}}} + \rput(8.1,12){\makebox(0,0)[l]{\shortstack[l]{Praktische und\\angewandte Informatik}}} + \rput(10.1,16){\makebox(0,0)[l]{\shortstack[l]{Softwaretechnik und\\theoretische Informatik}}} + \rput(12.1,21){\makebox(0,0)[l]{Mathematik}} + \psset{linewidth=0.001,linestyle=none,fillstyle=gradient,gradmidpoint=1.0,gradlines=1000} + \definecolor{RGBwhite}{rgb}{1.0,1.0,1.0} + \definecolor{RGBblue}{rgb}{0.0,0.0,1.0} + \definecolor{RGBred}{rgb}{1.0,0.0,0.0} + \definecolor{RGBgreen}{rgb}{0.0,1.0,0.0} + \definecolor{RGByellow}{rgb}{1.0,1.0,0.0} + \definecolor{RGBorange}{rgb}{1.0,0.7,0.0} + \definecolor{RGBgrey}{rgb}{0.7,0.7,0.7} + \rput(0,2){\psframe[gradbegin=RGBwhite,gradend=RGBblue](2,2)} + \rput(0,0){\psframe[fillstyle=solid,fillcolor=RGBblue](2,2.01)} + \rput(2,6){\psframe[gradbegin=RGBwhite,gradend=RGBred](2,2)} + \rput(2,2){\psframe[gradbegin=RGBred,gradend=RGBwhite](2,2)} + \rput(2,3.99){\psframe[fillstyle=solid,fillcolor=RGBred](2,2.02)} + \rput(4,10){\psframe[gradbegin=RGBwhite,gradend=RGBgreen](2,2)} + \rput(4,6){\psframe[gradbegin=RGBgreen,gradend=RGBwhite](2,2)} + \rput(4,7.99){\psframe[fillstyle=solid,fillcolor=RGBgreen](2,2.02)} + \rput(6,14){\psframe[gradbegin=RGBwhite,gradend=RGByellow](2,2)} + \rput(6,10){\psframe[gradbegin=RGByellow,gradend=RGBwhite](2,2)} + \rput(6,11.99){\psframe[fillstyle=solid,fillcolor=RGByellow](2,2.02)} + \rput(8,18){\psframe[gradbegin=RGBwhite,gradend=RGBorange](2,2)} + \rput(8,14){\psframe[gradbegin=RGBorange,gradend=RGBwhite](2,2)} + \rput(8,15.99){\psframe[fillstyle=solid,fillcolor=RGBorange](2,2.02)} + \rput(10,18){\psframe[gradbegin=RGBgrey,gradend=RGBwhite](2,2)} + \rput(10,19.99){\psframe[fillstyle=solid,fillcolor=RGBgrey](2,2.01)} + \end{pspicture} + \end{pdfpic} + \vspace{-\bigskipamount} + \figurecaptionself{Wissenschaftliche Disziplinen mit Bezug zur Informatik,\n + angeordnet nach Abstraktionsgrad ihres jeweiligen Gegenstandes + \label{Disziplinen}} + \end{center} + + Umgekehrt verwendet die Rechnertechnik die Ergebnisse der Elektrotechnik + (Verhalten elektronischer Logik-Schaltkreise) als Abstraktionsschicht, + ohne sich f�r die Funktionsweise von Transistoren, Relais usw.\ im Detail zu interessieren. + Um diese Abstraktionsschicht zu schaffen, sch�pft die Elektrotechnik ihrerseits + aus den Ergebnissen der Physik (Elektromagnetisums, Halbleiterphysik, \dots). + + \clearpage + + \section{Vom Schaltkreis zum Computer} + + \subsection{Logik-Schaltkreise} + + Bereits mit Lichtschaltern ist es m�glich, logische Operationen durchzuf�hren: + + \begin{itemize} + \item + Und-Verkn�pfung: Reihenschaltung + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 0 \\\hline + 1 & 0 & 0 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{6cm} + \begin{center} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(2.0,-0.3){C1} + \pnode(3.0,0){D1} + \pnode(3.0,-0.6){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \put(0.0,0.3){\makebox(0,0)[b]{A}} + \put(2.5,0.0){\makebox(0,0)[b]{B}} + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](4.0,0|D1)(D1) + \psline(E0)(C1) + \psline(E1)(4.5,-0.6) + \lamp[labeloffset=0.9](4.5,-0.6)(4.5,-2.6){Q} + \ground[connectingdot=false](4.5,-2.6) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip + + \item + Oder-Verkn�pfung: Parallelschaltung + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{6cm} + \begin{center} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(0.5,-2.0){C1} + \pnode(1.5,-1.7){D1} + \pnode(1.5,-2.3){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \put(0.0,0.3){\makebox(0,0)[b]{A}} + \put(1.0,-1.7){\makebox(0,0)[b]{B}} + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=*-](-1.5,0|C0)(-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](2.5,0|D1)(D1) + \psline[arrows=-*](E0)(3.5,-0.3)(3.5,-2.3) + \psline(E1)(3.5,-2.3) + \lamp[labeloffset=0.9](3.5,-2.3)(3.5,-4.3){Q} + \ground[connectingdot=false](3.5,-4.3) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip + + \item + + Exklusiv-Oder-Verkn�pfung\\ + "`entweder A oder B, aber nicht beide"' + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{6cm} + \begin{center} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \pnode(4.0,0){C1} + \pnode(3.0,0.3){D1} + \pnode(3.0,-0.3){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \put(0.0,0.3){\makebox(0,0)[b]{A}} + \put(3.5,0.3){\makebox(0,0)[b]{B}} + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline(D0)(1.25,0|D0)(2.25,0|E1)(E1) + \psline(E0)(1.25,0|E0)(2.25,0|D1)(D1) + \psline(C1)(5,0) + \lamp[labeloffset=0.9](5,0)(5,-2){Q} + \ground[connectingdot=false](5,-2) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + \end{itemize} + + Mehrere dieser Logik-Schaltungen miteinander zu kombinieren, + ist im allgemeinen zun�chst nicht m�glich, + da die Eingabe durch eine mechanische Schalterstellung erfolgt + und die Ausgabe durch das Leuchten einer Lampe. + + Abhilfe schafft ein Schalter, der durch einen Elektromagneten bet�tigt wird, ein sog.\ \newterm{Relais}. + + \begin{center} + \includegraphics[width=8cm]{Relay_principle_horizontal-edited.jpg}\\ + \figurecaptionurlurl{Funktionsprinzip eines Relais}% + {http://commons.wikimedia.org/wiki/File:Relay_principle_horizontal.jpg}% + {7.\,10.\,2012, selbst bearbeitet}% + {http://commons.wikimedia.org/wiki/User:Bisgaard}% + {\fdl\ oder \ccbysanp} + \end{center} + + Schaltzeichen f�r Relais mit 1 bzw.\ 2 Umschaltkontakten: + \begin{center} + \begin{minipage}{6cm} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \pnode(1,1.5){B} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \psline[linestyle=dashed](0,0.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \end{pspicture} + \end{pdfpic} + \end{minipage}% + \begin{minipage}{6cm} + \begin{pdfpic} + \newcommand{\invisible}{\tiny\color{white}} + \psset{logicLabelstyle=\invisible} + \newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}} + \psset{logicSymbolstyle=\logicSymbol} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1,1.5){A} + \pnode(1,1.5){B} + \relais(A)(B){} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \pnode(-0.5,-1.5){C1} + \pnode(0.5,-1.2){D1} + \pnode(0.5,-1.8){E1} + \psline[arrows=*-,linewidth=2\pslinewidth](C1)(D1) + \psline[linestyle=dashed](0,-1.25)(0,1.0) + \psline[arrows=o-](-1.5,0|A)(A) + \psline[arrows=o-](1.5,0|B)(B) + \psline[arrows=o-](-1.5,0|C0)(C0) + \psline[arrows=o-](1.5,0|D0)(D0) + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](-1.5,0|C1)(C1) + \psline[arrows=o-](1.5,0|D1)(D1) + \psline[arrows=o-](1.5,0|E1)(E1) + \end{pspicture} + \end{pdfpic} + \end{minipage} + \end{center} + + Bei Relais-Schaltungen ist es m�glich, die von einer Logik-Schaltung ausgegebene Spannung + als Eingabespannung f�r die n�chste Logik-Schaltung zu verwenden. + Jede im folgenden angegebene Logik-Schaltung bis hin zu einem vollst�ndigen Computer + kann daher mit Hilfe von Relais realisiert werden. + + 1941 bauten Konrad Zuse und Helmut Schreyer auf diese Weise den ersten Computer, die Zuse Z3. + + \begin{center} + \includegraphics[width=10cm]{Z3_Deutsches_Museum.JPG}\\ + \figurecaptionurlurl{Zuse Z3 (Nachbau im Deutschen Museum)}% + {http://commons.wikimedia.org/wiki/File:Z3_Deutsches_Museum.JPG}% + {7.\,10.\,2012}% + {http://de.wikipedia.org/wiki/User:Venusianer}% + {\fdl\ oder \ccbysanp} + \end{center} + + Wesentlich schnellere Schaltzeiten als mit einem Relais erreicht man mit einer \newterm{Elektronenr�hre}. + Hierbei handelt es sich um einen evakuierten Glaskolben mit einer heizbaren \newterm{Kathode\/} in der Mitte, + um die herum weitere \newterm{Elektroden\/} koaxial angeordnet sind. + + \begin{center} + \begin{minipage}{10cm} + \begin{center} + \includegraphics[width=8cm]{Elektronenroehren-auswahl.jpg}\\ + \figurecaptionurlurl{Elektronenr�hren}% + {http://commons.wikimedia.org/wiki/File:Elektronenroehren-auswahl.jpg}% + {7.\,10.\,2012}% + {http://de.wikipedia.org/wiki/Benutzer:Quark48}% + {CC-by-sa 2.0 Deutschland} + \end{center} + \end{minipage} + \begin{minipage}{5cm} + \begin{center} + \includegraphics[width=4.5cm]{Elektronenroehre_real.png}\\ + \figurecaptionurlurl{Schemazeichnung einer Elektronenr�hre (Triode)\label{Triode}}% + {http://commons.wikimedia.org/wiki/File:Elektronenroehre_real.png}% + {7.\,10.\,2012}% + {http://de.wikipedia.org/wiki/Benutzer:Quark48}% + {CC-by 2.0 Deutschland} + \end{center} + \end{minipage} + \end{center} + + Die einfachste Bauform der Elektronenr�hre ist die \newterm{Diode}\/ + (griechisch \emph{dis hod�s\/} -- doppelter Weg). + Sie hat au�er der Kathode in der Mitte nur eine einzige �u�ere Elektrode, die \newterm{Anode}. + Eine Diode wirkt als "`elektronisches Ventil"' und l��t den Strom nur in einer Richtung durch, + n�mlich mit dem Minuspol an der Kathode und dem Pluspol an der Anode. + + Eine weitere wichtige Bauform der Elektronenr�hre ist die \newterm{Triode}\/ + (griechisch \emph{treis hod�s\/} -- dreifacher Weg, siehe Abbildung~\ref{Triode}). + Bei ihr befindet sich zwischen Anode und Kathode eine weitere Elektrode, das \newterm{Gitter}. + Durch Anlegen einer Spannung zwischen Kathode und Gitter + kann man den Strom, der zwischen Anode und Kathode flie�t, steuern. + In diesem Sinne wirkt die Triode als "`elektronischer Schalter"' + und kann die Funktionalit�t eines Relais �bernehmen. + + Bis in die 1950er Jahre bildeten Elektronenr�hren die Grundlage f�r Computer. + + \begin{center} + \includegraphics[width=10cm]{Eniac.jpg}\\ + \figurecaptionurlurl{ENIAC -- der erste Computer auf Basis von Elektronenr�hren}% + {http://commons.wikimedia.org/wiki/File:Eniac.jpg}% + {11.\,10.\,2012}% + {unbekannt (U.\,S.\ Army)}% + {\pd} + \end{center} + + \breath + + In den 1950er Jahren wurden Elektronenr�hren allm�hlich durch \newterm{Halbleiterbauelemente\/} abgel�st. + Auch hier gibt es die Bauformen \newterm{Diode\/} und \newterm{Triode}. + Letztere wird meistens als \newterm{Transistor\/} bezeichnet + (englisch \emph{transfer resistor\/} -- �bertragungswiderstand, d.\,h.\ steuerbarer Widerstand). + \begin{itemize} + \item + Eine \newterm{Halbleiterdiode\/} -- im folgenden kurz: \newterm{Diode\/} -- + wirkt als "`elektronisches Ventil"': + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-1)(2,1) + \pnode(-1.5,0){A} + \pnode(-1.3,0){AA} + \uput[180](A){Anode} + \pnode(1.5,0){K} + \pnode(1.3,0){KK} + \uput[0](K){Kathode} + \diode[fillstyle=solid,fillcolor=black](AA)(KK){} + \psline[arrows=o-](A)(AA) + \psline[arrows=o-](K)(KK) + \end{pspicture} + \end{pdfpic} + \end{center} + Elektrischer Strom in Pfeilrichtung (Pluspol an Anode, Minuspol an Kathode) darf die Diode passieren; + elektrischer Strom gegen Pfeilrichtung wird gesperrt. + \item + \newterm{Transistoren\/} gibt es in verschiedenen Bauformen + (\newterm{Bipolartransistor}, \newterm{Feldeffekttransistor -- FET}, +% \newterm{Metalloxidschichtfeldeffekttransistor -- MOSFET}, + \dots): + \begin{center} + \begin{minipage}{7cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,0){B} + \uput[180](B){Basis} + \pnode(1.5,1.5){C} + \uput[0](C){Kollektor} + \pnode(1.5,-1.5){E} + \uput[0](E){Emitter} + \transistor[basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + \end{pdfpic} + + \medskip + + Bipolartransistor + \end{center} + \end{minipage} + \begin{minipage}{7cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-2,-2)(2,2) + \pnode(-1.5,-0.5){B} + \uput[180](B){Gate} + \pnode(1.5,1.5){C} + \uput[0](C){Drain} + \pnode(1.5,-1.5){E} + \uput[0](E){Source} + \transistor[transistortype=MOSFET,basesep=1.2,arrows=o-o](B)(E)(C) + \end{pspicture} + \end{pdfpic} + + \medskip + + Feldeffekttransistor + \end{center} + \end{minipage} + \end{center} + Die elektrischen Eigenschaften der verschiedenen Bauformen sind im Detail unterschiedlich; + alle k�nnen jedoch als "`elektronische Schalter"' eingesetzt werden. + + Eine typische Anwendung eines Transistors ("`\newterm{Emitterschaltung\/}"') besteht darin, + einen Strom zwischen Basis und Emitter flie�en zu lassen + und dadurch den Strom zu steuern, der zwischen Kollektor und Emitter flie�en darf. + �hnliches gilt f�r Feldeffekttransistoren: Eine zwischen Gate und Source angelegte Spannung + steuert den Stromflu� zwischen Source und Drain. + + (Mehr �ber Transistorschaltungen erfahren Sie in der Lehrveranstaltung + \emph{Grundlagen Elektrotechnik}.) + \end{itemize} + + \begin{center} + \begin{minipage}{10cm} + \begin{center} + \includegraphics[width=8cm]{Transistors-white.jpg}\\ + \figurecaptionurlurl{Transistoren}% + {http://commons.wikimedia.org/wiki/File:Transistors-white.jpg}% + {11.\,10.\,2012}% + {http://de.wikipedia.org/wiki/Benutzer:Benedikt.Seidl}% + {\pd} + \end{center} + \end{minipage} + \end{center} + + In einer \newterm{integrierten Schaltung (Integrated Circuit -- IC)} + werden mikroskopisch kleine Feldeffekttransistoren + auf einem Halbleiteruntergrund direkt an denjenigen Stellen erzeugt, + an denen sie in der Schaltung ben�tigt werden. + + \begin{center} + \begin{minipage}{7.5cm} + \begin{center} + \includegraphics[height=5cm]{Intel_80486DX2_top.jpg}\hspace{0.5cm}% + \figurecaptionurlurl{Intel 80486DX2 (Oberseite)\label{IC1}}% + {http://commons.wikimedia.org/wiki/File:Intel_80486DX2_top.jpg}% + {1.\,11.\,2012}% + {http://en.wikipedia.org/wiki/User:Solipsist}% + {CC-by-sa (Version 2.0, nicht portiert)} + \end{center} + \end{minipage} + \begin{minipage}{7.5cm} + \begin{center} + \includegraphics[height=5cm]{Intel_80486DX2_bottom.jpg} + \figurecaptionurlurl{Intel 80486DX2 (Unterseite)\label{IC2}}% + {http://commons.wikimedia.org/wiki/File:Intel_80486DX2_bottom.jpg}% + {1.\,11.\,2012}% + {http://en.wikipedia.org/wiki/User:Solipsist}% + {CC-by-sa (Version 2.0, nicht portiert)} + \end{center} + \end{minipage} + + \end{center} + + Die Abbildungen~\ref{IC1} und \ref{IC2} zeigen die Ober- bzw.\ Unterseite + eines Intel-80486DX2-Mikroprozessors (1992 erschienen). + Das Geh�use ist ca.\ 44\,mm $\times$ 44\,mm gro� + und verf�gt auf der Unterseite �ber 168 Anschlu�stifte. + + \begin{center} + + \begin{minipage}{7.5cm} + \begin{center} + \includegraphics[height=5cm]{80486dx2-large.jpg}\hspace{0.5cm}% + \figurecaptionurlurl{Intel 80486DX2 (ge�ffnet)\label{IC3}}% + {http://commons.wikimedia.org/wiki/File:80486dx2-large.jpg}% + {11.\,10.\,2012}% + {http://en.wikipedia.org/wiki/User:Uberpenguin}% + {\fdl\ oder \ccbysanp} + \end{center} + \end{minipage} + \begin{minipage}{7.5cm} + \begin{center} + \includegraphics[height=4.79cm]{IC_Nanotecnology_2400X.JPG} + \figurecaptionurlurl{Integrierte Schaltung, vergr��ert\label{IC4}}% + {http://commons.wikimedia.org/wiki/File:IC_Nanotecnology_2400X.JPG}% + {11.\,10.\,2012}% + {http://commons.wikimedia.org/wiki/User:Angeloleithold}% + {\fdl\ oder \ccbysanp} + \end{center} + \end{minipage} + + \end{center} + + Abbildung~\ref{IC3} zeigt das Innenleben eines Intel-80486DX2-Mikroprozessors. + Die Platine (\newterm{Die\/}) in der Mitte ist 12\,mm $\times$ 6,75\,mm gro�. + Auf dieser Fl�che von 81\,mm\raisebox{0.5ex}{\footnotesize 2} + befinden sich ca.\ 1,2 Millionen Transistoren. + Aktuelle integrierte Schaltkreise sind noch deutlich st�rker miniaturisiert: + Ein Intel-Core-i7-Mikroprozessor von 2012 enth�lt z.\,B.\ + ca.\ 1,4 Milliarden Transistoren auf einem Die der Fl�che 160\,mm\raisebox{0.5ex}{\footnotesize 2}, + also �ber 500mal so viele Transistoren pro Fl�che. + + Abbildung~\ref{IC4} zeigt einen 1200fach vergr��erten Ausschnitt + aus einem integrierten Schaltkreis (ca.\ 0,05\,mm $\times$ 0,05\,mm). + + \breath + + Unter Verwendung von Halbleiterbauelementen und ohmschen Widerst�nden + k�nnen wir nun die oben bereits mit mechanischen Schaltern realisierten Logik-Schaltungen + reproduzieren und erweitern: + + \begin{itemize} + + \item + Inverter + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c||c|}\hline + A & Q \\\hline\hline + 0 & 1 \\\hline + 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}\hspace*{-0.5cm}% + \begin{minipage}[b]{4.5cm} + \begin{center} + \begin{pdfpic} + \newrgbcolor{almostwhite}{0.9 0.9 0.9} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=not](-0.75,-0.125){not1} + \psline[arrows=o-](-2,0|not11)(not11) + \uput[180](-2,0|not11){A} + \psline[arrows=o-](2,0|not1Q)(not1Q) + \uput[0](2,0|not1Q){Q\color{almostwhite}.} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}\hspace*{-2cm}% + \begin{minipage}[t]{4.5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.0,2.0){A} + \pnode(1.0,2.0){B} + \relais(A)(B){} + \psline[arrows=o-](-1.5,0|A)(A) + \psline[linestyle=dashed](0,0.25)(0,1.5) + \psline(B)(1.5,0|B) + \ground[connectingdot=false](1.5,0|B) + \uput[180](-1.5,0|A){A} + \pnode(-1.5,0.75){C0plus} + \pnode(-0.5,0){C0} + \pnode(0.5,0.3){D0} + \pnode(0.5,-0.3){E0} + \psline[arrows=*-,linewidth=2\pslinewidth](C0)(D0) + \uput[180](C0plus){\textbf{+}} + \psline[arrows=->,arrowsize=0.3](C0)(-1.5,0|C0)(C0plus){} + \psline[arrows=o-](1.5,0|E0)(E0) + \psline[arrows=o-](2.0,0|D0)(D0) + \uput[0](2.0,0|D0){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}\hspace*{-1.5cm}% + \begin{minipage}{4.5cm} + \begin{center} + \vspace*{-1cm} + \begin{pdfpic} + \newrgbcolor{almostwhite}{0.9 0.9 0.9} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-1.2,0){A} + \uput[180](A){A} + \pnode(2,3.5){Qplus} + \uput[180](Qplus){\textbf{+}} + \pnode(2,1){QR} + \resistor[arrows=*->,arrowsize=0.3](QR)(Qplus){} + \pnode(3,1){Q} + \uput[0](Q){Q\color{almostwhite}.} + \pnode(0.5,-1){GND} + \ground[connectingdot=false](GND) + \transistor[basesep=1.2,arrows=o-](A)(GND)(QR) + \psline[arrows=-o](QR)(Q) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}\hspace*{-0.5cm}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \pnode(-3,0){A} + \pnode(-2,0){A1} + \pnode(-2,1.5){A1plus} + \pnode(-2,-1.5){A1GND} + \pnode(0.15,1.5){Q1plus} + \pnode(0.15,2.5){plus} + \pnode(0.15,-1.5){Q1minus} + \pnode(0.15,-2){GND} + \pnode(0.15,0){Q1} + \pnode(1.5,0){Q} + \uput[180](A){A} + \psline[arrows=o-*](A)(A1) + \psline(A1plus)(A1GND) + \psline[arrows=->,arrowsize=0.3](Q1plus)(plus){} + \uput[180](plus){\textbf{+}} + \transistor[basesep=1.5,transistortype=MOSFET,FETchanneltype=P](A1plus)(Q1)(plus) + \transistor[basesep=1.5,transistortype=MOSFET](A1GND)(GND)(Q1) + \ground[connectingdot=false](GND) + \psline[arrows=*-o](Q1)(Q) + \uput[0](Q){Q~\strut} + \end{pspicture} + \end{pdfpic} + \vspace*{-0.5cm} + \end{center} + \end{minipage} + + \bigskip\nopagebreak + + Von links nach rechts: Wahrheitstabelle, Schaltzeichen, Realisierungen mit Relais, + mit Bipolartransistor und Widerstand bzw.\ mit zwei Feldeffekttransistoren + (CMOS-Schaltung, Stand der Technik 2012). + Anstelle von Transistoren k�nnen auch Elektronenr�hren verwendet werden. + + \item + Oder-Verkn�pfung + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{center} + \end{minipage}\hspace*{1cm}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=or](-0.75,-0.125){or1} + \psline[arrows=o-](-2,0|or12)(or12) + \uput[180](-2,0|or12){A} + \psline[arrows=o-](-2,0|or11)(or11) + \uput[180](-2,0|or11){B} + \psline[arrows=o-](2,0|or1Q)(or1Q) + \uput[0](2,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{6cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \pnode(-1.2,0.75){A} + \pnode(-1,0.75){A1} + \pnode(1,0.75){QA} + \pnode(-1.2,-0.5){B} + \pnode(-1,-0.5){B1} + \pnode(1,-0.5){QB} + \pnode(2,0.75){Q} + \pnode(1,-2.5){GND} + \uput[180](A){A} + \uput[180](B){B} + \psline[arrows=-o](QA)(Q) + \uput[0](Q){Q} + \psline[arrows=o-](A)(A1) + \diode[fillstyle=solid,fillcolor=black](A1)(QA){} + \psline[arrows=o-](B)(B1) + \diode[fillstyle=solid,fillcolor=black](B1)(QB){} + \psline[arrows=*-*](QA)(QB) + \resistor(QB)(GND){} + \ground[connectingdot=false](GND) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip\nopagebreak + + Von links nach rechts: Wahrheitstabelle, Schaltzeichen, + Realisierung mit Dioden und Widerstand. + + \bigskip + + \item + Und-Verkn�pfung + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 0 \\\hline + 1 & 0 & 0 \\\hline + 1 & 1 & 1 \\\hline + \end{tabular} + \end{center} + \end{minipage}\hspace*{1cm}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=and](-0.75,-0.125){and1} + \psline[arrows=o-](-2,0|and12)(and12) + \uput[180](-2,0|and12){A} + \psline[arrows=o-](-2,0|and11)(and11) + \uput[180](-2,0|and11){B} + \psline[arrows=o-](2,0|and1Q)(and1Q) + \uput[0](2,0|and1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{6cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \pnode(-1.2,0.75){A} + \pnode(-1,0.75){A1} + \pnode(1,0.75){QA} + \pnode(-1.2,-0.5){B} + \pnode(-1,-0.5){B1} + \pnode(1,-0.5){QB} + \pnode(2,0.75){Q} + \pnode(1,3.25){plus1} + \pnode(1,3.5){plus} + \uput[180](A){A} + \uput[180](B){B} + \psline[arrows=-o](QA)(Q) + \uput[0](Q){Q} + \psline[arrows=o-](A)(A1) + \diode[fillstyle=solid,fillcolor=black](QA)(A1){} + \psline[arrows=o-](B)(B1) + \diode[fillstyle=solid,fillcolor=black](QB)(B1){} + \psline[arrows=*-](QA)(QB) + \resistor(QA)(plus1){} + \psline[arrows=->,arrowsize=0.3](plus1)(plus){} + \uput[180](plus){\textbf{+}} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip\nopagebreak + + Von links nach rechts: Wahrheitstabelle, Schaltzeichen, + Realisierung mit Dioden und Widerstand. + + \bigskip + + \item + + Exklusiv-Oder-Verkn�pfung\\ + "`entweder A oder B, aber nicht beide"' + + \begin{minipage}{2.5cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|}\hline + A & B & Q \\\hline\hline + 0 & 0 & 0 \\\hline + 0 & 1 & 1 \\\hline + 1 & 0 & 1 \\\hline + 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}\hspace*{1cm}% + \begin{minipage}{4cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \logic[logicType=exor](-0.75,-0.125){exor1} + \psline[arrows=o-](-2,0|exor12)(exor12) + \uput[180](-2,0|exor12){A} + \psline[arrows=o-](-2,0|exor11)(exor11) + \uput[180](-2,0|exor11){B} + \psline[arrows=o-](2,0|exor1Q)(exor1Q) + \uput[0](2,0|exor1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{8cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(6,4) + \logic[logicType=and](-0.75,0.625){and1} + \logic[logicType=and](-0.75,-2.125){and2} + \logic[logicType=or](2.25,-0.625){or1} + \psline[arrows=o-](-3,0|and12)(and12) + \uput[180](-3,0|and12){A} + \psline[arrows=o-](-3,0|and21)(and21) + \uput[180](-3,0|and21){B} + \psline[arrows=*-](-2,0|and12)(-2,0|and22)(and22) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and22){0.1} + \psline[arrows=*-](-1.5,0|and21)(-1.5,0|and11)(and11) + \pscircle[fillstyle=solid,fillcolor=white,linewidth=0.5pt](-0.85,0|and11){0.1} + \psline(and1Q)(1.5,0|and1Q)(1.5,0|or12)(or12) + \psline(and2Q)(1.5,0|and2Q)(1.5,0|or11)(or11) + \psline[arrows=o-](5,0|or1Q)(or1Q) + \uput[0](5,0|or1Q){Q} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip\nopagebreak + + Von links nach rechts: Wahrheitstabelle, Schaltzeichen, + Realisierung durch Zur�ckf�hren auf bereits bekannte Logik-Schaltungen. + Die Kringel an den Eing�ngen der Und-Schaltungen stehen f�r vorgeschaltete Inverter. + + \end{itemize} + + Bei den oben vorgestellten Schaltungen mit Bipolartransistoren und Dioden + handelt es sich um (veraltete) Widerstand-Transistor-Logik (RTL) und Dioden-Logik (DL). + In den Schaltungen aktueller Computer (Stand: 2012) kommen ausschlie�lich Transistoren zum Einsatz, + z.\,B.\ die o.\,a.\ CMOS-Schaltung f�r einen Inverter. + + Entscheidend ist, da� es �berhaupt m�glich ist, "`ideale"' Logik-Schaltungen + mit Hilfe realer Bauelemente zu bauen. Bei den weiteren Betrachtungen k�nnen wir uns daher + von den konkreten Realisierungen l�sen und allein mit den abstrahierten Logik-Schaltungen + (Schaltzeichen in der mittleren Spalte) arbeiten. + + \goodbreak + \subsection{Bin�rdarstellung von Zahlen} + + Es ist m�glich, Zahlen allein mit den Ziffern $0$ und $1$ auszudr�cken. + + Normalerweise rechnen wir im Dezimalsystem mit den Ziffern $0$ bis $9$. + Ab dem Zahlenwert $10$ wird eine Ziffer vorangestellt, die wir mit $10^1 = 10$ multiplizieren. + Ab dem Zahlenwert $100$ wird eine Ziffer vorangestellt, die wir mit $10^2 = 100$ multiplizieren usw. + $137$ ist nur eine Abk�rzung f�r $7 \cdot 10^0 + 3 \cdot 10^1 + 1 \cdot 10^2$. + + Das Bin�rsystem funktioniert analog mit Zweier- anstelle von Zehnerpotenzen, + also mit $2^0 = 1$, $2^1 = 2$, $2^2 = 4$, $2^3 = 8$ usw. + + Wir lesen eine Bin�rzahl $100101_2$, also eine Folge von Bin�rziffern, von rechts nach links: + \begin{eqnarray*} + 100101_2 + &=& 1 \cdot 2^0 + 0 \cdot 2^1 + 1 \cdot 2^2 + 0 \cdot 2^3 + 0 \cdot 2^4 + 1 \cdot 2^5 \\ + &=& 1 + 4 + 32 \\ + &=& 37 + \end{eqnarray*} + + Das Rechnen mit Bin�rzahlen funktioniert genauso wie das Rechnen mit Dezimalzahlen, + nur da� die "`Zehner"'-�berschreitung bereits bei $2$ stattfindet: + \begin{eqnarray*} + 0 + 0 &=& \phantom00 \\ + 0 + 1 &=& \phantom01 \\ + 1 + 0 &=& \phantom01 \\ + 1 + 1 &=& 10 + \end{eqnarray*} + + Beispiel: schriftliche Addition der Zahlen $101100_2 = 44$ und $101110_2 = 46$ + \begin{center} + \begin{tabular}{r} + $101100$\\ + $+\quad 101110$\\[0.5ex]\hline + \\[-3.5ex] + $\scriptstyle 1\hspace{0.6em}1\hspace{0.1em}1\hspace{1.55em}$\\ + $1011010$ + \end{tabular} + \end{center} + Das Ergebnis lautet: + \begin{eqnarray*} + 1011010_2 + &=& 0 \cdot 2^0 + 1 \cdot 2^1 + 0 \cdot 2^2 + 1 \cdot 2^3 + 1\cdot 2^4 + 0 \cdot 2^5 + 1 \cdot 2^6 \\ + &=& 2 + 8 + 16 + 64 \\ + &=& 90 + \end{eqnarray*} + + \subsection{Vom Logik-Schaltkreis zum Addierer} + + \begin{itemize} + + \item + 1-Bit-Addierer mit 2 Eing�ngen ("`Halbaddierer"') + \begin{itemize} + \item + Zwei 1-Bit-Zahlen ("`Bit"' = Bin�rziffer = $0$ oder $1$) werden an die Eing�nge X und Y gelegt. + \item + Das Rechenergebnis kann bis zu 2 Bits umfassen. + \item + Am Ausgang soll das Rechenergebnis anliegen:\\ + S soll die Einerziffer ($2^0 = 1$) und \Cout\ die Zweierziffer ($2^1 = 2$) anzeigen. + \end{itemize} + + \begin{minipage}{3.2cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c||c|c|}\hline + X & Y & \Cout & S \\\hline\hline + 0 & 0 & 0 & 0 \\\hline + 0 & 1 & 0 & 1 \\\hline + 1 & 0 & 0 & 1 \\\hline + 1 & 1 & 1 & 0 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha} + \psline[arrows=o-](-2,0|ha2)(ha2) + \uput[180](-2,0|ha2){X} + \psline[arrows=o-](-2,0|ha1)(ha1) + \uput[180](-2,0|ha1){Y} + \psline[arrows=o-](2,0|haQ1)(haQ1) + \uput[0](2,0|haQ1){\Cout} + \psline[arrows=o-](2,0|haQ2)(haQ2) + \uput[0](2,0|haQ2){S} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + \begin{minipage}{5cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \pnode(-3.5,2.5){A} + \pnode(-3.5,-1.5){B} + \uput[180](A){X} + \uput[180](B){Y} + \logic[logicType=exor](-0.75,0.625){exor} + \logic[logicType=and](-0.75,-2.125){and} + \psline[arrows=o-](A)(exor2) + \psline[arrows=o-](B)(and1) + \psline[arrows=*-](-2.5,0|B)(-2.5,0|exor1)(exor1) + \psline[arrows=*-](-1.5,0|A)(-1.5,0|and2)(and2) + \psline[arrows=-o](exorQ)(2,0|exorQ) + \uput[0](2,0|exorQ){S} + \psline[arrows=-o](andQ)(2,0|andQ) + \uput[0](2,0|andQ){\Cout} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + + \bigskip + + \goodbreak + \item + 1-Bit-Addierer mit 3 Eing�ngen ("`Volladdierer"') + \begin{itemize} + \item + Drei 1-Bit-Zahlen werden an die Eing�nge X, Y und \Cin\ gelegt.\\ + ("`C"' steht f�r "`carry"' -- �bertrag.) + \item + Das Rechenergebnis kann bis zu 2 Bits umfassen. + \item + Am Ausgang soll das Rechenergebnis anliegen:\\ + S soll die Einerziffer ($2^0 = 1$) und \Cout\ die Zweierziffer ($2^1 = 2$) anzeigen. + \end{itemize} + + \medskip + + \begin{minipage}{4.0cm} + \begin{center} + \renewcommand{\arraystretch}{1.2} + \begin{tabular}{|c|c|c||c|c|}\hline + \Cin & X & Y & \Cout & S \\\hline\hline + 0 & 0 & 0 & 0 & 0 \\\hline + 0 & 0 & 1 & 0 & 1 \\\hline + 0 & 1 & 0 & 0 & 1 \\\hline + 0 & 1 & 1 & 1 & 0 \\\hline + 1 & 0 & 0 & 0 & 1 \\\hline + 1 & 0 & 1 & 1 & 0 \\\hline + 1 & 1 & 0 & 1 & 0 \\\hline + 1 & 1 & 1 & 1 & 1 \\\hline + \end{tabular} + \end{center} + \end{minipage}% + \begin{minipage}{8cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-2)(3,2) + \def\logicusertype{FA} + \logic[logicType=user,logicNInput=3,logicNOutput=2](-0.75,-0.125){fa} + \psline[arrows=o-](-2,0|fa2)(fa2) + \uput[180](-2,0|fa3){X} + \psline[arrows=o-](-2,0|fa3)(fa3) + \uput[180](-2,0|fa2){Y} + \psline[arrows=o-](-2,0|fa1)(fa1) + \uput[180](-2,0|fa1){\Cin} + \psline[arrows=o-](2,0|faQ1)(faQ1) + \uput[0](2,0|faQ1){\Cout} + \psline[arrows=o-](2,0|faQ2)(faQ2) + \uput[0](2,0|faQ2){S} + \end{pspicture} + \end{pdfpic} + + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-3)(3,3) + \def\logicusertype{HA} + \logic[logicType=user,logicNInput=2,logicNOutput=2](-0.75,-0.125){ha1} + \uput[180](ha1Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|ha12)(ha12) + \uput[180](-2,0|ha12){X} + \psline[arrows=o-](-2,0|ha11)(ha11) + \uput[180](-2,0|ha11){Y} + \logic[logicType=user,logicNInput=2,logicNOutput=2](1.5,1.125){ha2} + \uput[180](ha2Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|ha22)(ha22) + \uput[180](-2,0|ha22){\Cin} + \psline(ha1Q2)(ha21) + \psline[arrows=o-](6.5,0|ha2Q2)(ha2Q2) + \uput[0](6.5,0|ha2Q2){S} + \logic[logicType=or](3.75,-0.125){or} + \psline(ha1Q1)(or1) + \psline(ha2Q1)(or2) + \psline[arrows=o-](6.5,0|orQ)(orQ) + \uput[0](6.5,0|orQ){\Cout} + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage}% + + \bigskip + + \goodbreak + + \begin{center} + \includegraphics[height=7cm]{fa-1.jpg}\\ + Eine andere Form der Wahrheitstabelle des Volladdierers + + \medskip + + \includegraphics[height=7cm]{fa-2.jpg}\\ + Realisierung eines Volladdierers durch\\ + Erkennen von Strukturen in der Wahrheitstabelle + + \medskip + + \includegraphics[height=7cm]{fa-3.jpg}\\ + Rechts: Realisierung eines Volladdierers durch Nachvollziehen der Operation\\ + (schriftliches Addieren) und Zur�ckf�hren auf Halbaddierer + + \smallskip + + \begin{minipage}{15cm} + Links: Realisierung eines Volladdierers "`mit Gewalt"' (\newterm{brute force\/}): + F�r jede Zeile der Wahrheitstabelle wird eine Und-Schaltung aufgebaut. + Einsen werden direkt an einen Eingang gelegt, Nullen invertiert. + F�r diejenigen Zeilen, in denen der Ausgang der Gesamtschaltung eine Eins liefern soll, + werden die Ausg�nge der Und-Schaltungen in einer gro�en Oder-Schaltung verkn�pft. + Diese Art der Realisierung ist theoretisch f�r jede gegebene Wahrheitstabelle m�glich. + \end{minipage} + \end{center} + + \goodbreak + + \item + 4-Bit-Addierer mit �bertrag (9 Eing�nge, 5 Ausg�nge) + \begin{itemize} + \item + Zwei 4-Bit-Zahlen ("`Operanden"') werden an jeweils 4 Eing�nge gelegt. + \item + Ein weiteres Bit ("`�bertrag"') wird an den Eingang \Cin\ gelegt.\\ + Diese 1-Bit-Zahl wird zus�tzlich zu den zwei 4-Bit-Zahlen addiert. + \item + Das Rechenergebnis kann bis zu 5 Bits umfassen.\\ + Das h�chstwertige Bit ist der neue �bertrag (\Cout). + \end{itemize} + + \medskip + + \begin{minipage}{10cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-3,-4)(3,9) + \def\logicusertype{FA} + \logic[logicType=user,logicNInput=3,logicNOutput=2](-0.75,8){fa0} + \uput[180](fa0Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|fa03)(fa03) + \psline[arrows=o-](-2,0|fa02)(fa02) + \psline[arrows=o-](-2,0|fa01)(fa01) + \uput[180](-2,0|fa03){\Cin} + \uput[180](-2,0|fa02){X0} + \uput[180](-2,0|fa01){Y0} + \psline[arrows=o-](2,0|fa0Q2)(fa0Q2) + \uput[0](2,0|fa0Q2){S0} + \logic[logicType=user,logicNInput=3,logicNOutput=2](-0.75,4){fa1} + \uput[180](fa1Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|fa12)(fa12) + \psline[arrows=o-](-2,0|fa11)(fa11) + \uput[180](-2,0|fa12){X1} + \uput[180](-2,0|fa11){Y1} + \psline[arrows=o-](2,0|fa1Q2)(fa1Q2) + \uput[0](2,0|fa1Q2){S1} + \logic[logicType=user,logicNInput=3,logicNOutput=2](-0.75,0){fa2} + \uput[180](fa2Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|fa22)(fa22) + \psline[arrows=o-](-2,0|fa21)(fa21) + \uput[180](-2,0|fa22){X2} + \uput[180](-2,0|fa21){Y2} + \psline[arrows=o-](2,0|fa2Q2)(fa2Q2) + \uput[0](2,0|fa2Q2){S2} + \logic[logicType=user,logicNInput=3,logicNOutput=2](-0.75,-4){fa3} + \uput[180](fa3Q1){\scriptsize C\kern-3pt} + \psline[arrows=o-](-2,0|fa32)(fa32) + \psline[arrows=o-](-2,0|fa31)(fa31) + \uput[180](-2,0|fa32){X3} + \uput[180](-2,0|fa31){Y3} + \psline[arrows=o-](2,0|fa3Q2)(fa3Q2) + \psline[arrows=o-](2,0|fa3Q1)(fa3Q1) + \uput[0](2,0|fa3Q2){S3} + \uput[0](2,0|fa3Q1){\Cout} + \psline(fa0Q1)(2,0|fa0Q1)(2,7.5)(-2,7)(-2,0|fa13)(fa13) + \psline(fa1Q1)(2,0|fa1Q1)(2,3.5)(-2,3)(-2,0|fa23)(fa23) + \psline(fa2Q1)(2,0|fa2Q1)(2,-0.5)(-2,-1)(-2,0|fa33)(fa33) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \bigskip + + Problem: Das Signal f�r den �bertrag wandert von Volladdierer zu Volladdierer;\\ + die Schaltzeiten addieren sich. $\longrightarrow$ langsam + + L�sungswege: siehe \url{http://de.wikipedia.org/wiki/Addierer} + + \end{itemize} + + \goodbreak + + \subsection{Negative Zahlen} + + Was ist das "`nat�rliche"' Format zur Darstellung negativer Zahlen durch Nullen und Einsen? + \begin{itemize} + \item + Wenn wir zu der Bin�rzahl $1111_2$ den Wert $1$ addieren, erhalten wir $10000_2$. + \item + Wenn dies auf einem 4-Bit-Addierer geschieht, + ist die vordere Ziffer $1$ der neue �bertrag. + \item + Wenn dieser Wert dann in einer 4-Bit-Speicherzelle gespeichert wird, + f�llt der �bertrag unter den Tisch, und der Wert $0$ wird gespeichert. + \item + Fazit: Wenn wir in einem 4-Bit-System zu der Bin�rzahl $1111_2$ den Wert $1$ addieren, + kommt $0$ heraus. + Somit ist $1111_2$ auf einem 4-Bit-System die "`nat�rliche"' Darstellung der Zahl $-1$. + \end{itemize} + + Allgemein gilt: Wenn eine vorzeichenbehaftete Zahl $x$ �berall dort Nullen hat, + wo eine andere vorzeichenbehaftete Zahl $y$ Einsen hat, setzt man $x = -(y + 1)$. + + Diese Darstellung negativer Zahlen nennt man das "`Zweierkomplement"'. + +% \underconstruction + + \begin{center} + \includegraphics[height=7cm]{rechnen.jpg}\\ + Auf einem 4-Bit-Addierer gilt: $-7 = 9$. + + \medskip + + \includegraphics[height=7cm]{komplement.jpg}\\ + Schaltung, die das Zweierkomplement berechnet + \end{center} + + Konsequenzen: + \begin{itemize} + \item + Jede Bin�rzahl l��t sich sowohl als positive als auch als negative Zahl interpretieren. + \item + Um eine $n$-Bit-Bin�rzahl $x$ in ihr Negatives $-x$ umzuwandeln, + invertiert man zun�chst alle Bin�rziffern. + Danach addiert man, ohne auf Vorzeichen zu achten, den Zahlenwert $1$. + Falls dabei ein �berlauf auftritt, verwirft man diesen, + beh�lt also nur die untersten $n$ Ziffern. + \item + Diejenige Zahl, die als h�chste Ziffer eine $1$ und ansonsten nur Nullen hat, + hat keine negative Entsprechung au�er sich selbst. + Per Konvention kann man diese Zahl als gr��tm�gliche positive Zahl, + als kleinstm�gliche negative Zahl, als alternative Darstellung der Zahl $0$ + oder als einen ung�ltigen Wert interpretieren. + + Auf PCs lautet die Konvention: kleinstm�gliche negative Zahl.\\ + Somit zeigt dort das h�chstwertige Bit einer Bin�rzahl das Vorzeichen an. + \item + Mit der o.\,a.\ Konvention haben\\[\smallskipamount] + \begin{tabular}{lcrcl} + vorzeichenlose 8-Bit-Zahlen & den Wertebereich & $0$ & bis & $255$, \\ + vorzeichenbehaftete 8-Bit-Zahlen & den Wertebereich & $-128$ & bis & $127$, \\ + vorzeichenlose 16-Bit-Zahlen & den Wertebereich & $0$ & bis & $65535$, \\ + vorzeichenbehaftete 16-Bit-Zahlen & den Wertebereich & $-32768$ & bis & $32767$, \\ + \dots \\ + vorzeichenlose $n$-Bit-Zahlen & den Wertebereich & $0$ & bis & $2^n - 1$, \\ + vorzeichenbehaftete $n$-Bit-Zahlen & den Wertebereich & $-2^{n-1}$ & bis & $2^{n-1} - 1$. + \end{tabular} + \item + Wenn bei einer Addition vorzeichenbehafteter Zahlen der Wertebereich verlassen wird,\\ + kann das Ergebnis negativ sein. + + Beispiel: Addition der vorzeichenbehafteten 8-Bit-Zahlen $117$ und $94$ \\ + $0111\,0101_2 + 0101\,1110_2 = 1101\,0011_2 = -45$\\ + Probe: $45 + (117 + 94) = 256$. Die unteren 8 Bit von $256$ sind Null. + + Beispiel f�r 16-Bit-Zahlen: siehe \url{http://www.xkcd.com/571/} + \end{itemize} + + \goodbreak + + \subsection{Vom Addierer zum Computer} + + Arithmetisch-logische Einheit % \underconstruction + \begin{itemize} + \item + ALU = Arithmetic Logic Unit + \item + Schaltkreis, der die Operanden wahlweise auf verschiedene Weisen verkn�pft\\ + (Oder, Und, Exklusiv-Oder, Addition, \dots) + \item + Die Auswahl der Operation erfolgt �ber weitere Eing�nge,\\ + die �ber zus�tzliche Und-Gatter eins der Verkn�pfungsergebnisse auf die Ausg�nge legen. + \end{itemize} + + \begin{center} + \includegraphics[height=7cm]{multi-1.jpg}\\ + Multiplikation von Bin�rzahlen + + \medskip + + \includegraphics[height=7cm]{multi-2.jpg}\\ + Wahrheitstabelle f�r einen 2-Bit-Multiplizierer + + \medskip + + \includegraphics[height=7cm]{multi-3.jpg}\\ + Realisierung eines 2-Bit-Multiplizierers + + \medskip + + \includegraphics[height=7cm]{alu.jpg}\\ + Die hier dargestellte 4-Bit-ALU berechnet auf Wunsch (W-Eing�nge)\\ + die Und-Verkn�pfung, die Oder-Verkn�pfung oder die Summe der Operanden A und B. + \end{center} + + \goodbreak + Speicher + \begin{itemize} + \item + Ein Flipflop kann sich eine $1$ oder $0$ (= 1 Bit Information) merken.\\ + ("`statischer Speicher"') + + \begin{minipage}{10cm} + \begin{center} + \begin{pdfpic} + \psset{unit=0.6cm} + \psset{linewidth=0.03} + \begin{pspicture}(-4,-4)(4,4) + \logic[logicType=nand](-0.75,2){nand1} + \logic[logicType=nand](-0.75,-2){nand2} + \psline[arrows=o-](-3,0|nand12)(nand12) + \uput[180](-3,0|nand12){$\overline{\mbox{S}}$} + \psline[arrows=o-](-3,0|nand21)(nand21) + \uput[180](-3,0|nand21){$\overline{\mbox{R}}$} + \psline[arrows=o-](3,0|nand1Q)(nand1Q) + \uput[0](3,0|nand1Q){Q} + \psline[arrows=o-](3,0|nand2Q)(nand2Q) + \uput[0](3,0|nand2Q){$\overline{\mbox{Q}}$} + \psline[arrows=*-](2,0|nand1Q)(2,1.75)(-2,0.75)(-2,0|nand22)(nand22) + \psline[arrows=*-](2,0|nand2Q)(2,0.75)(-2,1.75)(-2,0|nand11)(nand11) + \end{pspicture} + \end{pdfpic} + \end{center} + \end{minipage} + + \medskip + + \item + Durch zus�tzliche Und-Gatter kann man aus vielen Flip-Flops eins ausw�hlen\\ + $\longrightarrow$ Speicher-Adressierung + \item + Andere Speichermethode: Kondensator\\ + $\longrightarrow$ mu� nachgeladen werden ("`dynamischer Speicher"')\\ + einfacher und dichter zu packen als statischer Speicher,\\ + aber erfordert "`Refresh"' (zus�tzliche Schaltung) + \end{itemize} + + \begin{center} + \includegraphics[height=7cm]{speicher-1.jpg}\\ + Links: Realisierung einer Speicherzelle durch ein Relais: \newterm{Selbsthalteschaltung} + + Rechts unten: Realisierung einer Speicherzelle durch zwei Und--Schaltungen: \newterm{Flip-Flop} + + Rechts oben: instabile (und daher sinnlose) Schaltung mit einer Und-Nicht-Schaltung + + \bigskip + + \includegraphics[height=7cm]{speicher-2.jpg}\\ + \newterm{Statischer Speicher\/} (hier: Flip-Flop, oben) beh�lt seinen Zustand, + solange eine Stomversorgung besteht. + + \newterm{Dynamischer Speicher\/} (Kondensator) "`vergi�t"' durch \name{Ohm}sche Verluste + seinen Zustand allm�hlich,\\ + daher ist ein regelm��iges Auffrischen erforderlich: \newterm{Refresh} + \end{center} + + Statischer Speicher ist schneller und leichter handhabbar als dynamischer Speicher. + Auf der anderen Seite l��t sich dynamischer Speicher kosteng�nstiger + und in weitaus h�heren Dichten herstellen als statischer Speicher. + Computer enthalten daher typischerweise geringe Mengen an statischem Speicher + (Prozessor-Register, Cache-Speicher) + und gro�e Mengen an dynamischem Speicher (Arbeitsspeicher). + + \breath + + Takt + \begin{itemize} + \item + Ein Taktgeber l��t ein Z�hlwerk laufen,\\ + das in jedem Takt eine andere Operation f�r die ALU ausw�hlt\\ + und die Ein- und Ausg�nge der ALU mit anderen Speicherzellen verbindet. + \item + Welche Operation und welche Speicherzellen jeweils verwendet werden,\\ + wird anhand des Inhalts weiterer Speicherzellen entschieden.\\ + $\longrightarrow$ programmierbare Recheneinheit -- "`Prozessor"' + (oder CPU f�r "`Central Processing Unit"') + \item + Arbeitsweise eines Computers:\\ + Ein Prozessor bearbeitet taktgesteuert einen Speicher\\ + gem�� Instruktionen, die er aus dem Speicher liest. + \end{itemize} + + \goodbreak + Ein- und Ausgabe + \begin{itemize} + \item + Bestimmte Speicherzellen werden mit externen Ger�ten verkn�pft. + \item + Ger�t schreibt, Computer liest $\longrightarrow$ Eingabe (Input) + \item + Computer schreibt, Ger�t liest $\longrightarrow$ Ausgabe (Output) + \item[$\longrightarrow$] + "`I/O-Ports"'\label{I/O-Ports} + \end{itemize} + + \begin{center} + \includegraphics[height=7cm]{computer-1.jpg} + + \includegraphics[height=7cm]{computer-2.jpg} + + \includegraphics[height=7cm]{computer-3.jpg} + + \includegraphics[height=7cm]{computer-4.jpg} + \end{center} + + \subsection{Computer-Sprachen} + + \subsubsection{Maschinensprache} + + Ein auf die oben beschriebene Weise gebauter Computer kann Befehle ausf�hren, + die in Gestalt von Nullen und Einsen vorliegen, + bei denen es sich typischerweise um den Inhalt von Speicherzellen handelt + (Flip-Flops, Kondensatoren oder Flash-Speicher -- fr�her auch Lochkarten o.\,�.). + + \begin{center} + \includegraphics[width=12cm]{programm-screenshot.png} + \figurecaptionself{Programm in Maschinensprache und Assembler\label{Maschinenprogramm}} + \end{center} + + Abbildung~\ref{Maschinenprogramm} zeigt ein einfaches Programm + f�r einen Intel-x86-kompatiblen 16-Bit-Mikroprozessor, + geschrieben und angezeigt mit Hilfe des DOS-Programms \file{debug} (FreeDOS). + + S�mtliche Zahlen sind \newterm{hexadezimal}, also zur Basis 16 notiert. + + Die linke Spalte zeigt die \newterm{Speicheradresse}, + d.\,h.\ die Position der angezeigten Zahlen und Befehle innerhalb des Arbeitsspeichers des Computers. + Als Intel-spezifische Besonderheit unterteilt sich die Speicheradresse in einen Segment- + und einen Offset-Anteil, die durch einen Doppelpunkt getrennt notiert werden (Details siehe unten). + + Neben der Speicheradresse wird der Inhalt der Speicherzelle als Zahl angezeigt. + + Rechts daneben erscheint eine �bersetzung der Maschinensprache + in menschenlesbare Abk�rzungen, sog.\ \newterm{Mnemonics}. + Diese Darstellung des Programms hei�t \newterm{Assembler-Sprache\/} oder kurz \newterm{Assembler}. + + Ein Programm, das Assembler-Sprache in Maschinensprache �bersetzt, + hei�t ebenfalls \newterm{Assembler}. + + \subsubsection{Assembler} + + Die einfachsten Assembler-Befehle sind Kopieraktionen zwischen Speicherzellen. + In Intel-Syntax steht der Befehl \lstinline[language={[x86masm]Assembler}]{mov A, B} f�r: + "`Kopiere den Inhalt der Speicherzelle B in Speicherzelle A."' + Bei den Speicherzellen kann es sich um adressierte Speicherzellen im Arbeitsspeicher handeln + -- in Intel-Syntax eine Offset-Adresse in eckigen Klammern -- + oder um Prozessor-Register -- bei 16-Bit-Intel-Prozessoren: + \lstinline[language={[x86masm]Assembler}]{ax}, + \lstinline[language={[x86masm]Assembler}]{bx}, + \lstinline[language={[x86masm]Assembler}]{cx}, + \lstinline[language={[x86masm]Assembler}]{dx}, + \lstinline[language={[x86masm]Assembler}]{si}, + \lstinline[language={[x86masm]Assembler}]{di}, + \lstinline[language={[x86masm]Assembler}]{bp}, + \lstinline[language={[x86masm]Assembler}]{sp}, + \lstinline[language={[x86masm]Assembler}]{cs}, + \lstinline[language={[x86masm]Assembler}]{ds}, + \lstinline[language={[x86masm]Assembler}]{es} und + \lstinline[language={[x86masm]Assembler}]{ss}. + +% \underconstruction + \begin{center} + \includegraphics[height=7cm]{b800.jpg} + \end{center} + Die 16-Bit-Prozessoren der Intel-x86-Familie haben einen 20 Bit breiten \newterm{Adre�bus}, + d.\,h.\ es stehen 20 Leitungen zur Verf�gung, um eine Speicherzelle auszuw�hlen. + Insgesamt k�nnen also $2^{20} = 1\,048\,576$ verschiedene Speicherzellen + (ein bin�res Megabyte -- 1\,MiB) ausgew�hlt werden. + + Diese 20 Bit werden nun wie folgt in zweimal 16 Bit aufgeteilt: + Die Zahl vor dem Doppelpunkt hei�t \newterm{Segment-Adresse}, die danach \newterm{Offset-Adresse}. + Die physikalische Adresse der gew�nschten Speicherzelle lautet: + $16 \cdot \mbox{Segment} + \mbox{Offset}$. + Das Segment wird also um eine Hex-Ziffer nach links geschoben und anschlie�end das Offset addiert, + um die physikalische Nummer der gew�nschten Speicherzelle zu erhalten. + Aus \lstinline{31D6:0100} wird so beispielsweise die physikalische Adresse \lstinline{31E60}. + + Der Sinn dieser Aufteilung bestand darin, da� man erwartete, + da� 16 Adre�leitungen, also maximal 64\,kiB Speicher (64 bin�re Kilobyte), + f�r Computerprogramme ausreichend seien. + In diesem Fall kann man die Segment-Adresse auf einen festen Wert setzen + (in Abb.~\ref{Maschinenprogramm}: \lstinline{31D6}) + und das Programm in 16-Byte-Schritten an beliebige Stellen im Speicher legen, + ohne die im Programm verwendeten Offset-Adressen anpassen zu m�ssen. + + In der Praxis erwiesen sich 64\,kiB sehr bald als viel zu wenig, + so da� Intel von dem Schema "`$16 \cdot \mbox{Segment} + \mbox{Offset}$"' wieder abr�ckte. + Das Konzept "`Segment:Offset"' wurde zwar beibehalten, erhielt jedoch eine andere Bedeutung. + (Dazu sp�ter mehr.) + + \breath + + Eine weitere Besonderheit der 16-Bit-Prozessoren der Intel-x86-Familie + erm�glicht uns, die Auswirkungen eines Programms direkt zu beobachten: + Ab Speicherzelle \lstinline{B8000} -- bzw.\ \lstinline{B800:0000} in Segment-Offset-Notation -- + befindet sich der \newterm{Bildschirmspeicher}. + Werte, die in diesen Speicherzellen gespeichert sind, + werden von der \newterm{VGA-Grafikkarte\/} im \newterm{Textmodus\/} + direkt in Zeichen umgewandelt, die auf einem angeschlossenen Bildschirm angezeigt werden. + + Alle geraden Speicheradressen (\lstinline{0}, \lstinline{2}, \lstinline{4}, \lstinline{6}, + \lstinline{8}, \lstinline{A}, \lstinline{C}, \lstinline{E}, \lstinline{10}, \lstinline{12}, \dots) + enthalten die Zeichen (Buchstaben, Zahlen, Satzzeichen) in \newterm{ASCII\/}-Kodierung + (American Standard Code for Information Interchange); + Alle ungeraden Speicheradressen (\lstinline{1}, \lstinline{3}, \lstinline{5}, \lstinline{7}, + \lstinline{9}, \lstinline{B}, \lstinline{D}, \lstinline{F}, \lstinline{11}, \lstinline{13}, \dots) + enthalten ein Farbschema (\newterm{Attribut\/}): + + \begin{quote} + \lstinline{04}: Vordergrundfarbe Rot\\ + \lstinline{02}: Vordergrundfarbe Gr�n\\ + \lstinline{01}: Vordergrundfarbe Blau\\[\smallskipamount] + \lstinline{40}: Hintergrundfarbe Rot\\ + \lstinline{20}: Hintergrundfarbe Gr�n\\ + \lstinline{10}: Hintergrundfarbe Blau\\[\smallskipamount] + \lstinline{08}: Vordergrundfarbe aufhellen\\ + \lstinline{80}: Blinken + \end{quote} + + Durch Addition (z.\,B.\ $\lstinline{04} + \lstinline{02} + \lstinline{08} = \lstinline{0E}$ + mit der Bedeutung $\mbox{Rot} + \mbox{Gr�n} + \mbox{aufhellen} = \mbox{Gelb}$) + ergeben sich insgesamt 16 Vordergrundfarben, 8 Hintergrundfarben + und die M�glichkeit, die Zeichen blinken zu lassen. + + \breath + + Um nun von einem Maschinenprogramm aus Zeichen auf dem Bildschirm darzustellen, + m�ssen wir die richtigen Werte an den richtigen Adressen in den Speicher schreiben. + Hierzu betrachten wir noch einmal das Programm aus Abb.~\ref{Maschinenprogramm}: + + \begin{lstlisting}[language={[x86masm]Assembler}] + mov ax, b800 + mov ds, ax + mov ax, 0c41 + mov [0400], ax + mov ax, 0d62 + mov [0402], ax + mov ax, 0e22 + mov [0404], ax + ret + \end{lstlisting} + + Der \lstinline[language={[x86masm]Assembler}]{ret}-Befehl am Ende steht + f�r ein kontrolliertes Beenden des Programms (engl.: \emph{return\/} -- dazu sp�ter mehr). + + Um auf den Bildschirmspeicher an der physikalischen Adresse \lstinline{b8000} zugreifen zu k�nnen, + m�ssen wir den Segment-Anteil \lstinline{b800} dieser Adresse + in das \newterm{Segment-Register\/} \lstinline[language={[x86masm]Assembler}]{ds} laden. + Da der Prozessor dies nicht direkt erlaubt, + nehmen wir einen Umweg �ber das \newterm{Allzweckregister\/} \lstinline[language={[x86masm]Assembler}]{ax}. + + Anschlie�end schreiben wir an den Offset-Adressen + \lstinline{400}, \lstinline{402} und \lstinline{404} + die Werte \lstinline{0c40}, \lstinline{0d62} bzw.\ \lstinline{0e22} in den Arbeitsspeicher. + Auch dies ist nicht direkt m�glich, sondern erfolgt + mit Umweg �ber das \lstinline[language={[x86masm]Assembler}]{ax}-Register. + + Laut ASCII-Tabelle steht die Hexadezimalzahl \lstinline{41} f�r ein gro�es A. + Laut der o.\,a.\ Attribut-Tabelle steht \lstinline{0c} f�r die Farbe + $\lstinline{0c} = \lstinline{08} + \lstinline{04} = \mbox{aufhellen} + \mbox{Rot} = \mbox{Hellrot}$. + Der zusammengesetzte Wert \lstinline{0c41} steht f�r ein rotes gro�es A, + das an die Speicheradresse \lstinline{b8400} geschrieben wird. + Dies hat zur Folge, da� ein rotes gro�es A etwa mittig im oberen Drittel des Bildschirms sichtbar wird + (siehe Abb.~\ref{Maschinenprogramm}). + + Analog sieht man, da� \lstinline{0d62} f�r ein hellmagentafarbenes kleines b steht + und \lstinline{0e22} f�r ein gelbes Anf�hrungszeichen. + Diese beiden Zeichen werden in benachbarte Speicherzellen neben das gro�e A geschrieben + und werden entsprechend auf dem Bildschirm sichtbar. + + \subsubsection{Hochsprachen} + + Die Maschinensprache und die Assembler-Sprache haben den Nachteil, + da� sie f�r jeden Prozessor v�llig unterschiedlich aussehen. + Jeder Prozessor hat seine eigenen Register und seine eigenen Befehle, + die sich nicht w�rtlich in Befehle eines anderen Prozessors �bersetzen lassen. + + Beispiel: Intel-x86-16-Bit-Assembler + + \begin{itemize} + \item + Lade- und Speicher-Befehle\hfill + \lstinline{mov}, \dots\\ + arithmetische Befehle\hfill + \lstinline{add}, \lstinline{sub}, \lstinline{inc}, \lstinline{dec}, + \lstinline{xor}, \lstinline{cmp}, \dots\\ + unbedingte und bedingte Sprungbefehle\hfill + \lstinline{jmp}, \lstinline{jz}, \lstinline{jae}, \dots + \item + Register\hfill + \lstinline{ax}, \lstinline{bx}, \dots + \end{itemize} + + Beispiel: Atmel-AVR-8-Bit-Assembler + + \begin{itemize} + \item + Lade- und Speicher-Befehle\hfill + \lstinline{ldi}, \lstinline{lds}, \lstinline{sti}, \dots\\ + arithmetische Befehle\hfill + \lstinline{add}, \lstinline{sub}, \lstinline{subi}, + \lstinline{eor}, \lstinline{cp}, \dots\\ + unbedingte und bedingte Sprungbefehle\hfill + \lstinline{rjmp}, \lstinline{brsh}, \lstinline{brlo}, \dots + \item + Register\hfill + \lstinline{r0}, \lstinline{r1}, \dots + \end{itemize} + + Um Programme nicht f�r jeden Prozessor neu schreiben zu m�ssen, wurden Hochsprachen entwickelt. + Hierf�r gibt es mehrere Konzepte: + + Compiler-Sprachen + \vspace{-\medskipamount} + \begin{itemize} + \item + Ein \newterm{Compiler\/} �bersetzt einen Hochsprachen-\newterm{Quelltext\/} + in die Assembler-Sprache. + \item + Ein \newterm{Assembler\/} �bersetzt den Assembler-Quelltext in die Maschinensprache. + \item + Compiler und Assembler sind Programme,\\ + geschrieben in Maschinensprache, Assembler oder einer Hochsprache. + \item + Beispiele: Fortran, Algol, Pascal, Ada, C, C++, \dots + \end{itemize} + + Interpreter- oder Skript-Sprachen + \vspace{-\medskipamount} + \begin{itemize} + \item + Ein \newterm{Interpreter\/} liest einen Hochsprachen-\newterm{Quelltext\/} und f�hrt ihn sofort aus. + \item + Der Interpreter ist ein Programm,\\ + geschrieben in Maschinensprache, Assembler oder einer Hochsprache. + \item + Beispiele: Unix-Shell, BASIC, Perl, Python, \dots + \end{itemize} + + Kombinationen + \vspace{-\medskipamount} + \begin{itemize} + \item + Ein \newterm{Compiler\/} erzeugt einen \newterm{Zwischencode\/} f�r eine \newterm{virtuelle Maschine}. + \item + Die virtuelle Maschine ist ein \newterm{Interpreter}.\\ + Sie liest den Zwischencode und f�hrt ihn sofort aus. + \item + Beispiele: UCSD-Pascal, Java, \dots + \end{itemize} + + \breath + + Ein wichtiges Beispiel f�r eine Compiler-Sprache ist die Hochsprache \newterm{C}. + + Mit dem Programm \lstinline[style=cmd]{gcc} kann man wie folgt C nach Assembler �bersetzen: + \begin{lstlisting}[style=terminal] + $ �gcc -S pruzzel.c� + \end{lstlisting} + Dieser Aufruf erzeugt aus dem C-Quelltext \file{pruzzel.c} + einen Assembler-Quelltext \file{pruzzel.s} f�r den Standard-Prozessor, + z.\,B.\ f�r die 32-Bit-Intel-Architektur (IA-32). + + \goodbreak + Mit \lstinline[style=cmd]{avr-gcc} anstelle von \lstinline[style=cmd]{gcc} + erzeugt man auf einem beliebigen Prozessor Assembler f�r 8-Bit-Atmel-AVR-Prozessoren: + \begin{lstlisting}[style=terminal] + $ �avr-gcc -S pruzzel.c� + \end{lstlisting} + (Die mit diesem Aufruf erzeugte Datei \file{pruzzel.s} + hei�t in den Beispielen \file{pruzzel-avr.s}.) + + \breath + + Wenn man in einer Hochsprache programmiert, + ist es normalerweise nicht erforderlich, sich mit dem erzeugten Assembler-Quelltext zu befassen. + + F�r F�lle, in denen dies doch notwendig wird, + bieten viele Fehlersuchprogramme -- \newterm{Debugger\/} -- die M�glichkeit an, + die Ausf�hrung des Programms parallel im C- und im Assembler-Quelltext zu verfolgen. + Der GNU-Debugger \lstinline[style=cmd]{gdb} f�hrt z.\,B.\ + mit dem Befehl \lstinline[style=cmd]{next} eine Zeile C-Quelltext aus + und mit dem Befehl \lstinline[style=cmd]{nexti} (\emph{next instruction\/}) + eine Zeile Assembler-Quelltext: + \begin{lstlisting}[style=terminal] + $ �gcc -g pruzzel.c -o pruzzel� + $ �gdb -tui ./pruzzel� + (gdb) �break main� + (gdb) �run� + (gdb) �layout split� + (gdb) �nexti� + \end{lstlisting} + + \subsection{Struktur von Assembler-Programmen} + + \begin{minipage}[t]{12cm} + Der grunds�tzliche Aufbau von Assembler-Befehlen + besteht normalerweise aus dem Schl�sselwort (Mnemonic) f�r den eigentlichen Befehl, + ggf.\ gefolgt von einem oder mehreren \newterm{Operanden}. + (Beispiel: IA-32-Assembler) + \end{minipage}\hfill + \begin{minipage}[t]{4cm} + \begin{lstlisting}[gobble=6] + addl $1, %eax + movb %al, b + cmpb (%ebx), %dl + jbe .L2 + \end{lstlisting} + \begin{picture}(0,0)(-0.3,-0.15) + \color{red} + \put(0.4,2.8){\vector(0,-1){0.7}} + \put(0.4,2.9){\makebox(0,0)[b]{Befehl}} + \put(1.4,2.8){\vector(-1,-2){0.35}} + \put(1.4,2.8){\vector(1,-2){0.35}} + \put(2.0,2.9){\makebox(0,0)[b]{Operanden}} + \end{picture} + \end{minipage} + + \goodbreak + + \begin{minipage}[t]{8cm} + \setlength{\parskip}{\smallskipamount} + Bei den Operanden kann es sich um Zahlen handeln, + die direkt im Befehl stehen (\newterm{unmittelbar\/}) oder + sich in einem Prozessorregister oder einer Speicherzelle befinden. + Die Nummer der Speicherzelle kann \newterm{direkt\/} im Befehl stehen, + oder sie wird \newterm{indirekt\/} einem Prozessorregister entnommen. + Au�erdem kann die Nummer einer Speicherzelle \newterm{absolut\/} angegeben werden + oder \newterm{relativ\/} zu derjenigen Speicherzelle, die den Befehl enth�lt. + + Diese verschiedenen Arten, Operanden auszuw�hlen, hei�en \newterm{Adressierungsarten}. + \end{minipage}\hfill + \begin{minipage}[t]{8cm} + \vspace*{0.8cm} + \begin{lstlisting}[gobble=6] + addl $1, %eax + movb %al, b + cmpb (%ebx), %dl + jbe .L2 + \end{lstlisting} + \begin{picture}(0,0)(-0.3,-0.15) + \color{red} + \put(1.4,2.8){\vector(-1,-2){0.35}} + \put(2.0,2.9){\makebox(0,0)[b]{unmittelbar}} + \put(3.1,1.8){\vector(-1,0){0.7}} + \put(3.2,1.8){\makebox(0,0)[l]{Register}} + \put(4.8,1.4){\vector(-1,0){2.7}} + \put(4.9,1.4){\makebox(0,0)[l]{Speicher (absolut)}} + \put(2.3,-0.0){\vector(-1,1){0.7}} + \put(3.5,-0.1){\makebox(0,0)[t]{indirekt mit Register}} + \put(0.8,-0.6){\vector(0,1){0.9}} + \put(0.0,-0.7){\makebox(0,0)[tl]{Speicher (relativ)}} + \end{picture} + \end{minipage} + + \breath + + Ein besonders illustratives Beispiel f�r eine Assembler-Sprache ist der \newterm{Redcode}. + Diese Sprache wurde f�r das Spiel \newterm{Core Wars} + (oder \newterm{Core War\/} -- Krieg der Kerne) entwickelt. + Sie l�uft auf einer virtuellen Maschine namens \newterm{Memory Array Redcode Simulator (MARS)}. + + In der �lteren standardisierten Version (ICWS '88) lautet die vollst�ndige Beschreibung von Redcode: + + \begin{center} + \begin{minipage}[t]{7.2cm} + Instruktionen:\\[\smallskipamount] + \lstinline{dat B} -- Daten\\ + \lstinline{mov A, B} -- kopiere A nach B\\ + \lstinline{add A, B} -- addiere A zu B\\ + \lstinline{sub A, B} -- subtrahiere A von B\\ + \lstinline{jmp A} -- unbedingter Sprung nach A\\ + \lstinline{jmz A, B} -- Sprung nach A, wenn B $=$ 0\\ + \lstinline{jmn A, B} -- Sprung nach A, wenn B $\ne$ 0\\ + \lstinline{djn A, B} -- "`decrement and jump if not zero"'\\ + \lstinline{cmp A, B} -- "`compare"': �berspringe, falls gleich\\ + \lstinline{spl A} -- "`split"': Programm verzweigen + \end{minipage}% + \begin{minipage}[t]{4.7cm} + Adressierungsarten:\\[\smallskipamount] + grunds�tzlich: Speicher relativ\\[\smallskipamount] + \lstinline{#} -- unmittelbar\\ + \lstinline{$} (oder ohne Symbol) -- direkt\\ + \lstinline{@} -- indirekt (\lstinline{B}-Feld)\\ + \lstinline{<} -- indirekt mit Pr�-Dekrement + \end{minipage} + \end{center} + + \begin{itemize} + \item + Der Speicher ist ringf�rmig. + \item + Anstelle von Prozessorregistern k�nnen + grunds�tzlich alle Speicherzellen f�r jede Operation verwendet werden. + \item + Adressierung von Speicherzellen erfolgt grunds�tzlich relativ. + \item + Ein Programm, das einen \lstinline{dat}-Befehl ausf�hrt, wird beendet. + \item + Der \lstinline{spl}-Befehl bewirkt, da� ein Programm + \emph{sowohl\/} an der als Operand angegebenen Speicherzelle + \emph{als auch\/} in der n�chsten Speicherzelle ausgef�hrt wird. + (Ausf�hrung abwechselnd) + \item + In einem "`Kampf"' treten zwei (oder mehr) Programme in demselben Speicher gegeneinander an. + Ein Programm, das durch \lstinline{dat}-Befehle vollst�ndig beendet wurde, hat verloren. + \end{itemize} + + \breath + + Beispiel: Programm \newterm{Nothing} + \begin{lstlisting} + jmp 0 + \end{lstlisting} + Dieses Programm f�hrt eine Endlosschleife aus. + Da es nur eine einzige Speicherzelle belegt und noch dazu den numerischen Wert Null hat, + wird es von gegnerischen Programmen leicht �bersehen, was oft zu einem Unentschieden f�hrt. + Gegen Gegner, die dann stattdessen im ringf�rmigen Speicher sich selbst entdecken und angreifen, + kann Nothing sogar gewinnen. + + \breath + + Beispiel: Programm \newterm{Knirps} + \begin{lstlisting} + mov 0, 1 + \end{lstlisting} + Dieses ebenfalls nur eine einzige Speicherzelle gro�e Programm + kopiert sich selbst vollst�ndig auf die n�chste Speicherzelle + und f�hrt diese anschlie�end aus. + Es bewegt sich somit mit der h�chsten l�ckenlos erreichbaren Geschwindigkeit ("`Lichtgeschwindigkeit"') + durch den Speicherring. + Wenn es dabei auf einen Gegner trifft, �berschreibt es diesen, + so da� dieser danach ebenfalls \lstinline{mov 0, 1} ausf�hrt. + Da danach keiner der Gegner mehr in der Lage ist, + den anderen durch einen \lstinline{dat}-Befehl zu beenden, + f�hrt dies zu einem Unentschieden. + + \breath + + Beispiel: Programm \newterm{Mice} + + \vspace{-\bigskipamount} + \begin{minipage}[t]{1.2cm} + \begin{lstlisting}[gobble=6] + ptr + start + loop + + + + + dest + + \end{lstlisting} + \end{minipage}% + \begin{minipage}[t]{5cm} + \begin{lstlisting}[gobble=6] + dat #0 + mov #12, ptr + mov @ptr, <dest + djn loop, ptr + spl @dest + add #653, dest + jmz start, ptr + dat #833 + end start + \end{lstlisting} + \end{minipage} + + Dieses Programm erzeugt in einer Schleife (\lstinline{djn loop, ptr}) + eine Kopie von sich selbst und aktiviert diese anschlie�end mit einem \lstinline{spl}-Befehl. + Danach erzeugen beide "`M�use"' weitere Kopien von sich selbst. + + Wenn auf diese Weise ein Gegner �berschrieben wird, + findet dieser am Ende des Programms den Befehl \lstinline{jmz start, ptr} vor, + gefolgt von einem \lstinline{dat}-Befehl. + Der Sprung findet also nur dann statt, wenn die -- relativ adressierte -- Variable \lstinline{ptr} + den Wert Null hat. Dies ist normalerweise nur dann kurz der Fall, + wenn der Kopiervorgang abgeschlossen ist und der \lstinline{spl}-Befehl ausgef�hrt wird; + direkt danach wird \lstinline{ptr} durch \lstinline{mov #12, ptr} auf einen Wert ungleich Null gesetzt. + �berschriebene Gegner werden daher normalerweise durch den Befehl \lstinline{dest dat #833} beendet. + + Durch seine Kopier-Taktik ist Mice jedem Gegner klar �berlegen, + der versucht, es mit \lstinline{dat}-Befehlen zu �berschreiben. + Durch seine Langsamkeit hingegen erreicht Mice gegen Knirps praktisch immer nur ein Unentschieden. + + Als wirksamste Taktik gegen Mice hat sich die \newterm{Zeitfalle\/} erwiesen: + Ein in Mice hineingeschriebener Befehl \lstinline{spl 0} bewirkt, + da� sich die betroffene Kopie von Mice bis zur Maximalgrenze aufspaltet + und damit die Rechenzeit seiner anderen Kopien herabsetzt. + Ein auf diese Weise "`gel�hmtes"' Mice kann anschlie�end + problemlos mit \lstinline{dat}-Befehlen �berschrieben werden. + + \section{Architekturmerkmale von Prozessoren\label{Speicher- und Registerarchitekturen}} + + \subsection{Speicherarchitekturen} + + Bezeichnungen + \begin{itemize} + \item + \newterm{Byte} = Zusammenfassung mehrerer Bits\\ + zu einer Bin�rzahl, die ein Zeichen ("`Character"') darstellen kann,\\ + h�ufig 8 Bits ("`Oktett"') + \item + \newterm{Speicherwort} = Zusammenfassung mehrerer Bits\\ + zu der kleinsten adressierbaren Einheit, h�ufig 1 Byte + \item + \newterm{RAM} = Random Access Memory = Hauptspeicher + \item + \newterm{ROM} = Read Only Memory = nur lesbarer Speicher + \end{itemize} + + \goodbreak + + Verschiedene Arten von Speicher + \begin{itemize} + \item + Prozessor-Register\\ + k�nnen direkt mit ALU verbunden werden,\\ + besonders schnell (Flipflops),\\ + �berschaubare Anzahl von Registern + \item + Hauptspeicher\\ + kann direkt adressisert und mit Prozessor-Registern abgeglichen werden,\\ + heute i.\,d.\,R.\ dynamischer Speicher (Kondensatoren) + \item + I/O-Ports\\ + sind spezielle Speicheradressen, �ber die mit externen Ger�ten kommuniziert wird + \item + Massenspeicher\\ + liegt auf externem Ger�t, wird �ber I/O-Ports angesprochen,\\ + Festplatte, Flash-Speicher, \dots + \end{itemize} + + \goodbreak + + Speicherarchitekturen + \begin{itemize} + \item + \newterm{Von-Neumann-Architektur}\\ + Es gibt nur 1 Hauptspeicher, in dem sich sowohl die Befehle\\ + als auch die Daten befinden. + + Vorteil: Flexibilit�t in der Speichernutzung + + Nachteil: Befehle k�nnen �berschrieben werden. + $\longrightarrow$ Abst�rze und Malware m�glich + + \item + \newterm{Harvard-Architektur}\\ + Es gibt 2 Hauptspeicher. In einem befinden sich die Befehle,\\ + im anderen die Daten. + + Vorteil: Befehle k�nnen nicht �berschrieben werden + $\longrightarrow$ sicherer als Von-Neumann-Architektur + + Nachteile: Leitungen zum Speicher (Bus) m�ssen doppelt vorhanden sein,\\ + freier Befehlsspeicher kann nicht f�r Daten genutzt werden. + + \item + Weitere Kombinationen:\\ + Hauptspeicher und I/O-Ports gemeinsam oder getrennt,\\ + Hauptspeicher und Prozessorregister gemeinsam oder getrennt + \end{itemize} + + Beispiele: + \begin{itemize} + \item + Intel IA-32 (i386, Nachfolger und Kompatible):\\ + Von-Neumann-Architektur (plus Speicherschutzmechanismen),\\ + Prozessorregister und I/O-Ports vom Hauptspeicher getrennt + \item + Atmel AVR (z.\,B.\ ATmega32):\\ + Harvard-Architektur (Befehlsspeicher als Flash-Speicher grunds�tzlich auch schreibbar),\\ + Prozessorregister und I/O-Ports in gemeinsamem Adressbereich mit Hauptspeicher + \item + 6502 (heute: Renesas-Mikro-Controller):\\ + Von-Neumann-Architektur,\\ + I/O-Ports in gemeinsamem Adressbereich mit Hauptspeicher,\\ + Prozessorregister und Hauptspeicher getrennt + \end{itemize} + + \subsection{Registerarchitekturen} + + \begin{itemize} + \item + Mehrere Register, einzeln ansprechbar + \item + Akkumulator: Nur 1 Register kann rechnen. + \item + Stack-Architektur: Stapel, "`umgekehrte Polnische Notation"' + \end{itemize} + Je nachdem, auf welche dieser Arten die Register eines Prozessors organisiert sind,\\ + mu� er auf v�llig unterschiedliche Weise programmiert werden. +% -- siehe Abschnitt \ref{Registerprogrammierung}. + + Beispiele: + \begin{itemize} + \item + Intel IA-32 (i386, Nachfolger und Kompatible):\\ + Mehrere Register, f�r verschiedene Zwecke spezialisiert (un�bersichtlich),\\ + Flie�kommaregister: Stack-Architektur + \item + Atmel AVR (z.\,B.\ ATmega32):\\ + 32 Register + \item + 6502 (heute: Renesas-Mikro-Controller):\\ + 3 Register: A, X, Y. Nur A kann rechnen $\longrightarrow$ Akkumulator + \item + Java Virtual Machine (JVM):\\ + Stack-Architektur + \end{itemize} + + \subsection{Befehlss�tze} + + Um die manuelle Programmierung in Assembler m�glichst komfortabel zu gestalten, + wurden in der Vergangenheit viele Prozessoren mit umfangreichen Befehlss�tzen ausgestattet. + Diese Architektur hei�t \newterm{Complex Instruction Set Computer (CISC)}. + + Realisiert wird CISC durch einen "`Prozessor im Prozessor"', + der kleine Programme, sog.\ \newterm{Mikroprogramme\/} ausf�hrte. + + Erkauft wird der Komfort durch eine l�ngere Abarbeitungszeit der einzelnen Befehle. + + Beispiel: IA-32 + + \bigskip + + Das entgegengesetzte Konzept hei�t \newterm{Reduced Instruction Set Computer (RISC)}. + In einem RISC-Prozessor ist der einzelne Maschinenbefehl + weit weniger m�chtig als in einem CISC-Prozessor, + wird daf�r aber wesentlich schneller ausgef�hrt, + idealerweise jeder Befehl in einem einzigen Taktzyklus. + + Beispiel: Atmel AVR + + \bigskip + + Weitere Befehlssatzarchitekturen:\\ + \newterm{Very Long Instruction Word (VLIW)}, + \newterm{Explicitly Parallel Instruction Computing (EPIC)}\\ + (z.\,B.\ IA-64) + + \section{Der CPU-Stack} + + \emph{Achtung: Nicht mit dem Register-Stack verwechseln!} + + \subsection{Implementation} + + Ein Teil des Speichers wird als "`Stack"' reserviert.\\ + Eine Variable, typischerweise ein Prozessorregister, wird als "`Stack-Pointer"' (SP) reserviert. + \begin{itemize} + \item + Um einen Wert auf den Stack zu legen, + verschiebt man den SP, so da� er auf einen freien Speicherplatz zeigt. + Dorthin speichert man den Wert. + \item + Um einen Wert vom Stack zur�ckzuholen, + liest man ihn von der Stelle, auf die SP zeigt, + und verschiebt anschlie�end den SP in die entgegengesetzte Richtung. + \end{itemize} + + \goodbreak + Da diese Kombinationen von Operationen sehr gebr�uchlich sind, + enthalten die allermeisten Prozessoren eigene Befehle daf�r, z.\,B.: + \begin{itemize} + \item + Wert auf den Stack legen: \verb|push| + \item + Wert vom Stack zur�ckholen: \verb|pop| + \item + IP auf den Stack sichern und Unterprogramm aufrufen: \verb|call| + \item + IP vom Stack zur�ckholen = R�cksprung aus Unterprogramm: \verb|ret| + \end{itemize} + + Die Richtung, in der der Stack w�chst, ist frei w�hlbar. + Beim IA-32 z.\,B.\ w�chst der Stack von oben nach unten. + Dort wird also beim \verb|push| der SP dekrementiert (erniedrigt) + und beim \verb|pop| inkrementiert (erh�ht). + + Auch die kleinste Einheit ist frei w�hlbar. + Beim IA-32 k�nnen minimal 16 Bit, also immer 2 Bytes zusammen auf den Stack gelegt werden. + + \bigbreak + + Beispiel: Ein f�r einen IA-32-Prozessor geschriebenes Programm enth�lt die Befehle: + \begin{verbatim} + pushw $17 + pushw $33 + ... + popw %ax\end{verbatim} + Bei Programmbeginn werden 16384 Bytes, hexadezimal \verb|4000|, f�r den Stack reserviert, + n�mlich der Speicher"-bereich von Adresse \verb|0000| bis Adresse \verb|3fff|, + und der Stack-Pointer (\verb|SP|) wird auf den Wert \verb|4000| initialisiert. + Er zeigt also am Stack vorbei "`ins Leere"'. + + Wenn nun der Befehl \verb|pushw $17| ("`push word"') ausgef�hrt wird, + wird \verb|SP| um 2 auf \verb|3ffe| dekrementiert + und anschlie�end der Wert \verb|17| + an die beiden Speicheradressen \verb|3ffe| und \verb|3fff| geschrieben. + + \begin{center} + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\\cline{2-2} + \texttt{3ffe} & \\\cline{2-2} + \texttt{3ffd} & \\\cline{2-2} + \texttt{3ffc} & \\\cline{2-2} + \texttt{3ffb} & \\\cline{2-2} + \texttt{3ffa} & \\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,4000}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){3.13}} % Schrittweite: 0.43 + \put(3.7,4.00){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{leerer Stack}} + \end{picture}% + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\ + \texttt{3ffe} & \texttt{17} \\\cline{2-2} + \texttt{3ffd} & \\\cline{2-2} + \texttt{3ffc} & \\\cline{2-2} + \texttt{3ffb} & \\\cline{2-2} + \texttt{3ffa} & \\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,3ffe}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){2.28}} + \put(3.7,3.14){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{Stack nach \texttt{pushw \$17}}} + \end{picture}% + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\ + \texttt{3ffe} & \texttt{17} \\\cline{2-2} + \texttt{3ffd} & \\ + \texttt{3ffc} & \texttt{33} \\\cline{2-2} + \texttt{3ffb} & \\\cline{2-2} + \texttt{3ffa} & \\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,3ffc}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){1.42}} + \put(3.7,2.28){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{Stack nach \texttt{pushw \$33}}} + \end{picture} + \end{center} + + Wenn danach der Befehl \verb|pushw $33| ausgef�hrt wird, + wird der Wert \verb|33| an die Speicheradresse \verb|3ffe| geschrieben + und \verb|SP| um 2 auf \verb|3ffc| dekrementiert. + + Wenn anschlie�end der \verb|popw|-Befehl ausgef�hrt wird, + wird \verb|SP| um 2 auf \verb|3ffe| inkrementiert, + und der Stack sieht wieder genauso aus wie nach dem Befehl \verb|pushw $17|. + + \goodbreak + + \subsection{Unterprogramme} + + Um einem Unterprogramm Parameter zu �bergeben, + m�ssen diese an einer definierten Stelle gespeichert werden. + M�gliche Speicherorte sind: + \begin{itemize} + \item + Prozessorregister + \item + Stack + \end{itemize} + + Die Parameter�bergabe funktioniert nur, + wenn sich Haupt- und Unterprogramm �ber deren Art und Weise einig sind. + Daher existieren mehrere Aufrufkonventionen: + \begin{itemize} + \item + Das Hauptprogramm speichert die Parameter auf dem Stack.\\ + Das Unterprogramm liest sie.\\ + Das Hauptprogramm nimmt die Parameter wieder vom Stack.\\ + ("`C-Aufrufkonvention"') + \item + Das Hauptprogramm speichert die Parameter auf dem Stack.\\ + Das Unterprogramm liest sie und nimmt sie wieder vom Stack.\\ + ("`Pascal-Aufrufkonvention"') + \end{itemize} + + Bemerkung: Trotz der Bennennung nach Programmiersprachen + sind die Aufrufkonventionen nicht an die jeweiligen Programmiersprachen gebunden. + (Zum Beispiel verwendet GNU-Pascal standardm��ig die "`C"'-Aufrufkonvention.) + + Die "`stdcall"'-Aufrufkonvention unter Microsoft Windows + ist eine Variante der Pascal-Aufrufkonvention. + +% Aufgabe: +% Schreiben Sie ein Unterprogramm, das im %eax-Register eine Zahl als Parameter erwartet, +% und 1 << diese Zahl im %eax-Register zur�ckliefert. +% +% In C in etwa: +% +% int exercise (int eax) +% { +% return 1 << eax; +% } +% +% (Bemerkung: 1 << x ist dasselbe wie 2 hoch x. +% Dies ist also eine einfache Methode, um Zweierpotenzen zu berechnen.) +% +% (Hinweis: gcc -S foo.c -o foo.s +% gen�gt \emph{nicht}, um die Aufgabe zu l�sen. +% In dem compilierten C-Code werden Parameter �ber den +% CPU-Stack �bergeben und nicht �ber das %eax-Register. +% Dies l��t sich nat�rlich manuell korrigieren.) + + \bigskip + \goodbreak + + Beispiel: Ein f�r einen IA-32-Prozessor geschriebenes Programm + soll gem�� der C-Aufrufkonvention eine Funktion \verb|write_word()| aufrufen, + die als Parameter eine 16-Bit-Ganzzahl erwartet, z.\,B.\ den Wert 17. + Dies kann folgenderma�en geschehen: + \begin{verbatim} + pushw $17 + call write_word + popw %ax\end{verbatim} + Das \verb|popw| dient dazu, den Stack nach dem Aufruf + wieder in den urspr�nglichen Zustand zur�ckzuversetzen; + der in das \verb|%ax|-Register gelesene Wert wird verworfen. + (Stattdessen k�nnte man auch mit \verb|addw %sp, 2| den Stack-Pointer + "`von Hand"' inkrementieren.) + \begin{center} + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\\cline{2-2} + \texttt{3ffe} & \\\cline{2-2} + \texttt{3ffd} & \\\cline{2-2} + \texttt{3ffc} & \\\cline{2-2} + \texttt{3ffb} & \\\cline{2-2} + \texttt{3ffa} & \\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,4000}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){3.13}} % Schrittweite: 0.43 + \put(3.7,4.00){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{leerer Stack}} + \end{picture}% + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\ + \texttt{3ffe} & \texttt{17} \\\cline{2-2} + \texttt{3ffd} & \\\cline{2-2} + \texttt{3ffc} & \\\cline{2-2} + \texttt{3ffb} & \\\cline{2-2} + \texttt{3ffa} & \\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,3ffe}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){2.28}} + \put(3.7,3.14){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{Stack nach \texttt{pushw \$17}}} + \end{picture}% + \begin{picture}(5.1,6)(0,-0.8) + \put(0,0){\makebox(0,0)[bl]{\begin{tabular}{r|c|} + & \dots \\\cline{2-2} + \texttt{4001} & \\\cline{2-2} + \texttt{4000} & \\\cline{2-2} + \texttt{3fff} & \\ + \texttt{3ffe} & \texttt{17} \\\cline{2-2} + \texttt{3ffd} & \\ + \texttt{3ffc} & \\ + \texttt{3ffb} & \\ + \texttt{3ffa} & \kern13pt\begin{rotate}{90}% + \kern-3pt\shortstack{% + \footnotesize R�cksprung-\\[-3pt] + \footnotesize adresse}% + \end{rotate}\\\cline{2-2} + \texttt{3ff9} & \\\cline{2-2} + \texttt{3ff8} & \\\cline{2-2} + & \dots + \end{tabular}}} + \put(3.7,0){\makebox(0,0)[b]{\begin{tabular}[b]{|c|}\hline + \texttt{SP\,=\,3ffa}\\\hline + \multicolumn{1}{c}{}\\ + \end{tabular}}} + \put(3.7,0.87){\line(0,1){0.56}} + \put(3.7,1.42){\vector(-1,0){1.54}} + \put(2.25,-0.25){\makebox(0,0)[t]{Stack w�hrend \texttt{call write\_word}}} + \end{picture} + \end{center} + + Die R�cksprungadresse ist bei IA-32 vier Bytes gro�, + verbraucht also vier Bytes auf dem Stack. + + W�hrend das Unterprogramm l�uft, + kann es den �bergebenen Parameter (Wert: 17) + unter der Adresse "`Stack-Pointer + 4 Bytes"' ansprechen, in Assembler: \verb|4(%esp)| + + \subsection{Registerinhalte sichern} + + Wenn das Hauptprogramm ein Unterprogramm aufruft, + k�nnen sich dadurch die Inhalte der Register �ndern, + n�mlich dann, wenn das Unterprogramm diese Register benutzt. + + Damit dies nicht zu falschen Rechenergebnissen f�hrt, + mu� entweder das Hauptprogramm diesen Umstand ber�cksichtigen, + oder das Unterprogramm mu� Register vor der Verwendung sichern und hinterher wiederherstellen -- + �blicherweise im CPU-Stack. + + Dies ist insbesondere dann wichtig, wenn das Unterprogramm nicht �ber einen ausdr�cklichen Befehl + (\verb|call|), sondern auf andere Weise aufgerufen wird. % -- siehe Abschnitt~\ref{Interrupts}. + + \clearpage + + \section{Hardwarenahe Programmierung} + + \subsection{Bit-Operationen} + + \setlength{\unitlength}{12pt} + + \subsubsection{Zahlensysteme} + + \subsubsection*{Dezimalsystem} + \begin{itemize} + \item + Basis: 10 + \item + G�ltige Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + \end{itemize} + \begin{verbatim} + 137 137 + + 42 + ---- + 179 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(5.0,4.25){\vector(-1,1){1.41}} + \put(5.5,4){\mbox{Einer: $7 \cdot 10^0$}} + \put(5.5,3.25){\vector(-1,1){2.41}} + \put(6.0,3){\mbox{Zehner: $3 \cdot 10^1$}} + \put(6.0,2.25){\vector(-1,1){3.41}} + \put(6.5,2){\mbox{Hunderter: $1 \cdot 10^2$}} + \put(2.5,0.5){\mbox{$137_{10} = 1 \cdot 10^2 + 3 \cdot 10^1 + 7 \cdot 10^0 + = 100 + 30 + 7 = 137$}} + \end{picture} + + \goodbreak + \subsubsection*{Hexadezimalsystem} + \begin{itemize} + \item + Basis: 16 + \item + G�ltige Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F + \end{itemize} + \begin{verbatim} + 137 A380 + + B747 + ----- + 15AC7 + \end{verbatim} + \begin{picture}(0,0)(-0,-0.25) + \put(18.6,4.2){\mbox{\scriptsize\texttt{1}}} + \color{red} + \put(5.0,4.25){\vector(-1,1){1.41}} + \put(5.5,4){\mbox{$7 \cdot 16^0$}} + \put(5.5,3.25){\vector(-1,1){2.41}} + \put(6.0,3){\mbox{$3 \cdot 16^1$}} + \put(6.0,2.25){\vector(-1,1){3.41}} + \put(6.5,2){\mbox{$1 \cdot 16^2$}} + \put(2.5,0.5){\mbox{$137_{16} = 1 \cdot 16^2 + 3 \cdot 16^1 + 7 \cdot 16^0 + = 256 + 48 + 7 = 311$}} + \end{picture} + \begin{itemize} + \item + Schreibweise in C: \quad \texttt{0x137} + \end{itemize} + + \goodbreak + \subsubsection*{Oktalsystem} + \begin{itemize} + \item + Basis: 8 + \item + G�ltige Ziffern: 0, 1, 2, 3, 4, 5, 6, 7 + \end{itemize} + \begin{verbatim} + 137 137 + + 42 + ---- + 201 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \put(19.6,3.7){\mbox{\scriptsize\texttt{1}}} + \put(19.1,3.7){\mbox{\scriptsize\texttt{1}}} + \color{red} + \put(5.0,4.25){\vector(-1,1){1.41}} + \put(5.5,4){\mbox{$7 \cdot 8^0$}} + \put(5.5,3.25){\vector(-1,1){2.41}} + \put(6.0,3){\mbox{$3 \cdot 8^1$}} + \put(6.0,2.25){\vector(-1,1){3.41}} + \put(6.5,2){\mbox{$1 \cdot 8^2$}} + \put(2.5,0.5){\mbox{$137_8 = 1 \cdot 8^2 + 3 \cdot 8^1 + 7 \cdot 8^0 + = 64 + 24 + 7 = 95$}} + \put(2.5,-0.6){\mbox{$42_8 = 4 \cdot 8^1 + 2 \cdot 8^0 + = 32 + 2 = 34$}} + \put(2.5,-1.7){\mbox{$201_8 = 2 \cdot 8^2 + 0 \cdot 8^1 + 1 \cdot 8^0 + = 128 + 1 = 129$}} + \end{picture} + \vspace{0.75cm} + \begin{itemize} + \item + Schreibweise in C: \quad \texttt{0137} + \end{itemize} + + \subsubsection*{Rechner f�r beliebige Zahlensysteme: GNU bc} + \begin{lstlisting}[style=terminal] + $ �bc + ibase=8 + 137� + 95 + �obase=10 + 137 + 42� + 201 + \end{lstlisting} + \begin{picture}(0,0)(0.5,1.2) + \color{red} + \put(8.0,7.25){\vector(-1,0){3}} + \put(8.5,7){\mbox{Eingabe zur Basis 8}} + \put(8.0,6.25){\vector(-1,0){4}} + \put(8.5,6){\mbox{Ausgabe zur Basis 10}} + \put(9.0,5.25){\vector(-1,0){2}} + \put(9.5,5){\mbox{Eingabe zur Basis 8 ($10_8 = 8$)}} + \put(8.0,3.25){\vector(-1,0){4}} + \put(8.5,3){\mbox{Ausgabe zur Basis 8}} + \end{picture}\vspace{-2ex} + + \goodbreak + \subsubsection*{Bin�rsystem} + \begin{itemize} + \item + Basis: 2 + \item + G�ltige Ziffern: 0, 1 + \end{itemize} + \begin{verbatim} + 110 110 + + 1100 + ----- + 10010 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \put(19.1,3.8){\mbox{\scriptsize\texttt{1}}} + \put(18.6,3.8){\mbox{\scriptsize\texttt{1}}} + \color{red} + \put(5.0,4.25){\vector(-1,1){1.41}} + \put(5.5,4){\mbox{$0 \cdot 2^0$}} + \put(5.5,3.25){\vector(-1,1){2.41}} + \put(6.0,3){\mbox{$1 \cdot 2^1$}} + \put(6.0,2.25){\vector(-1,1){3.41}} + \put(6.5,2){\mbox{$1 \cdot 2^2$}} + \put(2.5,0.5){\mbox{$110_2 = 1 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 + = 4 + 2 + 0 = 6$}} + \end{picture} + \begin{itemize} + \item + Bin�r-Zahlen erm�glichen es, elektronisch zu rechnen \dots + \item + und mehrere "`Ja/Nein"' (Bits) zu einer einzigen Zahl zusammenzufassen. + \item + \textbf{Oktal- und Hexadezimal-Zahlen lassen sich ziffernweise + in Bin�r-Zahlen umrechnen:} + \end{itemize} + \vspace*{-6mm} + \begin{verbatim} + 000 0 0000 0 1000 8 + 001 1 0001 1 1001 9 + 010 2 0010 2 1010 A + 011 3 0011 3 1011 B + 100 4 0100 4 1100 C + 101 5 0101 5 1101 D + 110 6 0110 6 1110 E + 111 7 0111 7 1111 F + \end{verbatim} + \vspace*{-1cm} + \begin{itemize} + \item[] + Beispiel: $1101011_2 = 153_8 = 6{\rm B}_{16}$ + \item[] + Anwendungsbeispiel: Oktal-Schreibweise f�r Unix-Zugriffsrechte\\ + \verb|-rw-r-----| $= 0\,110\,100\,000_2 = 640_8$ \qquad \verb|$ chmod 640 file.c|\\ + \verb|-rwxr-x---| $= 0\,111\,101\,000_2 = 750_8$ \qquad \verb|$ chmod 750 subdir| + \end{itemize} + + \goodbreak + \subsubsection*{IP-Adressen (IPv4)} + \begin{itemize} + \item + Basis: 256 + \item + G�ltige Ziffern: 0 bis 255, getrennt durch Punkte + \item + Kompakte Schreibweise f�r Bin�rzahlen mit 32 Ziffern (Bits) + \end{itemize} + \begin{verbatim} + 192.168.0.1 + + + + + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(8.75,5.25){\vector(-1,1){1.41}} + \put(9.25,5){\mbox{$1 \cdot 256^0$}} + \put(8.75,4.25){\vector(-1,1){2.41}} + \put(9.25,4){\mbox{$0 \cdot 256^1$}} + \put(8.25,3.25){\vector(-1,1){3.41}} + \put(8.75,3){\mbox{$168 \cdot 256^2$}} + \put(7.5,2.25){\vector(-1,1){4.41}} + \put(8.0,2){\mbox{$192 \cdot 256^3$}} + \put(2.5,0.5){\mbox{$192.168.0.1_{256} = 11000000\,10101000\,00000000\,00000001_2$}} + \end{picture} + \vspace*{-0.5cm} + + \goodbreak + \subsubsection{Bit-Operationen in C} + \begin{verbatim} + 0110 0110 0110 0110 0110 + + 1100 | 1100 & 1100 ^ 1100 ~ 1100 >> 2 + ----- ----- ----- ----- ----- ----- + 10010 1110 0100 1010 0011 0001 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(2.5,1.0){\mbox{Addition}} + \put(8.5,1.0){\mbox{Oder}} + \put(14.0,1.0){\mbox{Und}} + \put(18.0,1.0){\mbox{Exklusiv-Oder}} + \put(24.5,1.0){\mbox{Negation}} + \put(29.0,1.0){\mbox{Bit-Verschiebung}} + \end{picture} + + \begin{verbatim} + 01101100 01101100 01101100 + | 00000010 & 11110111 ^ 00010000 + --------- --------- --------- + 01101110 01100100 01111100 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(2.5,1.0){\mbox{Bit gezielt setzen}} + \put(12.5,1.0){\mbox{Bit gezielt l�schen}} + \put(22.5,1.0){\mbox{Bit gezielt umklappen}} + \end{picture} + \begin{itemize} + \item + Bits werden h�ufig von rechts und ab 0 numeriert (hier: 0 bis 7),\\ + um die Maskenerzeugung mittels Schiebeoperatoren zu erleichtern. + \item + Die Bit-Operatoren (z.\,B.\ \verb|&| in C) + wirken jeweils auf alle Bits der Zahlen. + \hfill{\color{red}\verb|6 & 12 == 4|}\qquad\strut\\ + Die logischen Operatoren (z.\,B.\ \verb|&&| in C) + pr�fen die Zahl insgesamt auf $\ne 0$. + \hfill{\color{red}\verb|6 && 12 == 1|}\qquad\strut\\ + Nicht verwechseln! + \end{itemize} + + \bigbreak + + Anwendung: Bit 2 (also das dritte Bit von rechts) in einer 8-Bit-Zahl auf 1 setzen: + \begin{verbatim} + 00000001 01101100 + << 2 | 00000100 + --------- --------- + 00000100 01101100 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(3.5,1.0){\mbox{Maske f�r Bit 2}} + \put(12.5,1.0){\mbox{Bit gezielt setzen}} + \end{picture}\vspace{-4ex} + \begin{itemize} + \item + Schreibweise in C:\quad + \verb,a |= 1 << 2;, + \end{itemize} + + \bigbreak + + Anwendung: Bit 2 in einer 8-Bit-Zahl auf 0 setzen: + \begin{verbatim} + 00000001 01101100 + << 2 ~ 00000100 & 11111011 + --------- --------- --------- + 00000100 11111011 01101000 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(3.5,1.0){\mbox{Maske zum L�schen von Bit 2 erzeugen}} + \put(22.5,1.0){\mbox{Bit gezielt l�schen}} + \end{picture}\vspace{-4ex} + \begin{itemize} + \item + Schreibweise in C:\quad + \verb,a &= ~(1 << 2);, + \end{itemize} + + \bigbreak + + Anwendung: Bit 2 aus einer 8-Bit-Zahl extrahieren: + \begin{verbatim} + 00000001 01101100 00000100 + << 2 & 00000100 >> 2 + --------- --------- --------- + 00000100 00000100 00000001 + \end{verbatim} + \begin{picture}(0,0)(0,-0.25) + \color{red} + \put(2.5,1.0){\mbox{Maske f�r Bit 2}} + \put(12.5,1.0){\mbox{Bit 2 isolieren}} + \put(22.5,1.0){\mbox{in Zahl 0 oder 1 umwandeln}} + \end{picture}\vspace{-4ex} + \begin{itemize} + \item + Schreibweise in C:\quad + \verb,x = (a & (1 << 2)) >> 2;, + \end{itemize} + + \bigbreak + + Beispiel: Netzmaske f�r 256 IP-Adressen + \begin{verbatim} + 192.168. 1.123 + & 255.255.255. 0 + ---------------- + 192.168. 1. 0 + \end{verbatim} + \begin{picture}(0,0)(0,0) + \color{red} + \put(14.0,6.25){\vector(-1,0){2}} + \put(14.5,6){\mbox{IP-Adresse eines Rechners}} + \put(14.0,5.25){\vector(-1,0){2}} + \put(14.5,5){\mbox{Netzmaske: $255 = 11111111_2$}} + \put(14.0,3.25){\vector(-1,0){2}} + \put(14.5,3){\mbox{IP-Adresse des Sub-Netzes}} + \end{picture}\vspace{-6ex} + + \bigbreak + + Beispiel: Netzmaske f�r 8 IP-Adressen + \begin{verbatim} + 192.168. 1.123 01111011 + & 255.255.255.248 & 11111000 + ---------------- --------- + 192.168. 1.120 01111000 + \end{verbatim} + \begin{picture}(0,0)(0,0) + \color{red} + \put(14.0,6.25){\vector(-1,0){2}} + \put(14.5,6){\mbox{IP-Adresse eines Rechners}} + \put(14.0,5.25){\vector(-1,0){2}} + \put(14.5,5){\mbox{Netzmaske}} + \put(14.0,3.25){\vector(-1,0){2}} + \put(14.5,3){\mbox{IP-Adresse des Sub-Netzes}} + \end{picture}\vspace{-6ex} + + \subsection{I/O-Ports} + + Es gibt drei grundlegende Mechanismen f�r die Kommunikation zwischen dem Prozessor + und einem externen Ger�t: + \begin{itemize} + \item + �ber Output-Ports kann der Prozessor das Ger�t aktiv steuern, + \item + �ber Input-Ports kann er es aktiv abfragen, + \item + und �ber Interrupts kann das externe Ger�t im Prozessor Aktivit�ten ausl�sen. + \end{itemize} + + \begin{center} + \begin{pdfpic} + \psset{unit=1cm}% + \begin{pspicture}(0,0)(10,6) + \rput(0,0){\psframe[framearc=0.25](2,5)} + \rput(1,4.5){\makebox(0,0)[t]{Prozessor}} + \rput(2.0,3.7){\pnode{p0}} + \rput(2.0,3.3){\pnode{q0}} + \rput(2.0,1.0){\pnode{i0}} + \rput(2.12,1.2){\pnode{j0}} + \rput(2.02,1.3){\pnode{k0}} + \rput(2.12,1.4){\pnode{l0}} + \rput(3.5,1.4){\pnode{m0}} + \rput(8,0){\psframe[framearc=0.25](2,5)} + \rput(9,4.5){\makebox(0,0)[t]{\shortstack{externes\\Ger�t}}} + \rput(8.0,3.7){\pnode{p1}} + \rput(7.88,3.3){\pnode{q1}} + \rput(7.98,3.2){\pnode{r1}} + \rput(7.88,3.1){\pnode{s1}} + \rput(6.5,3.1){\pnode{t1}} + \rput(8.0,1.0){\pnode{i1}} + \rput(8.0,1.2){\pnode{j1}} + \ncline{->}{p0}{p1} + \ncline{q0}{q1} + \nccurve[angleB=90]{q1}{r1} + \nccurve[angleA=-90]{r1}{s1} + \ncline{->}{s1}{t1} + \rput(2.2,3.8){\makebox(0,0)[lb]{Prozessor schreibt in Output-Port}} + \rput(2.2,3.1){\makebox(0,0)[lt]{Prozessor liest Input-Port}} + \ncline{->}{i1}{i0} + \rput(7.8,1.1){\makebox(0,0)[rb]{externes Ger�t ruft Interrupt auf}} + \end{pspicture} + \end{pdfpic} + \end{center} + + \setlength{\unitlength}{1cm} + + Input- und Output-Ports, zusammengefa�t: I/O-Ports, + sind spezielle Speicherzellen, die mit einem externen Ger�t verbunden sind (siehe Seite~\pageref{I/O-Ports}). + \begin{itemize} + \item + Ein in einen Output-Port geschriebener Wert bewirkt eine Spannungs�nderung in einer Leitung, + die zu einem externen Ger�t f�hrt. + \item + Wenn ein externes Ger�t eine Spannung an eine Leitung anlegt, die zu einer Speicherzelle f�hrt, + kann der Prozessor diese als Input-Port lesen. + \end{itemize} + + Um z.\,B.\ auf einen Druck auf einen Taster zu warten, + kann ein Program periodisch in einer Schleife einen Input-Port lesen + und die Schleife erst dann beenden, wenn der Wert f�r "`Taster gedr�ckt"' gelesen wurde. + + Diese Methode hei�t "`Busy Waiting"': Der Prozessor ist vollst�ndig mit Warten besch�ftigt. + Wenn gleichzeitig noch andere Aktionen stattfinden sollen, + m�ssen diese in der Schleife mit ber�cksichtigt werden. + + \bigskip + \goodbreak + + Beispiel f�r die Verwendung eines Output-Ports: Roboter-Steuerung\\ + Datei: RP6Base/RP6Base\_Examples/RP6Examples\_20080915/RP6Lib/RP6base/RP6RobotBaseLib.c\\ + Suchbegriff: setMotorDir + \goodbreak + \begin{verbatim} + void setMotorDir(uint8_t left_dir, uint8_t right_dir) + { + mleft_dir = left_dir; + mright_dir = right_dir; + mleft_des_dir = left_dir; + mright_des_dir = right_dir; + if(left_dir) + PORTC |= DIR_L; + else + PORTC &= ~DIR_L; + if(right_dir) + PORTC |= DIR_R; + else + PORTC &= ~DIR_R; + }\end{verbatim} + + Die Variable \verb|PORTC| ist ein Output-Port. + Durch Manipulation einzelner Bits in dieser Variablen + �ndert sich die Spannung an den elektrischen "`Beinchen"' des Mikro-Controllers. + Hierdurch wird die Beschaltung von Elektromotoren umgepolt. + + (Die Konstanten \verb|DIR_L| und \verb|DIR_R| sind "`Bitmasken"', + d.\,h.\ Zahlen, die in ihrer Bin�rdarstellung nur eine einzige $1$ und ansonsten Nullen haben. + Durch die Oder- und Und-Nicht-Operationen werden einzelne Bits in \verb|PORTC| auf $1$ bzw.\ $0$ gesetzt.) + + \bigskip + + Die direkte Ansteuerung von I/O-Ports ist nur auf Mikro-Controllern �blich. + Auf Personal-Computern erfolgt die gesamte Ein- und Ausgabe �ber Betriebssystem-"`Treiber"'. + Anwenderprogramme greifen dort i.\,d.\,R.\ nicht direkt auf I/O-Ports zu. + + \subsection{Interrupts} + + Ein Interrupt ist ein Unterprogramm, das nicht durch einen Befehl (\verb|call|), + sondern durch ein externes Ger�t (�ber ein Stromsignal) aufgerufen wird. + + Damit dies funktionieret, mu� die Adresse, an der sich das Unterprogramm befindet, + an einer jederzeit auffindbaren Stelle im Speicher hinterlegt sein. + Diese Stelle hei�t "`Interrupt-Vektor"'. + + Da ein Interrupt jederzeit erfolgen kann, + hat das Hauptprogramm keine Chance, vor dem Aufruf die Registerinhalte zu sichern. + F�r Interrupt-Unterprogramme, sog.\ Interrupt-Handler, + ist es daher zwingend notwendig, s�mtliche Register vor Verwendung zu sichern + und hinterher zur�ckzuholen. + + \bigskip + + Beispiel f�r die Verwendung eines Interrupts: Roboter-Steuerung\\ + Datei: RP6Base/RP6Base\_Examples/RP6Examples\_20080915/RP6Lib/RP6base/RP6RobotBaseLib.c\\ + Suchbegriff: ISR + \begin{verbatim} + ISR (INT0_vect) + { + mleft_dist++; + mleft_counter++; + /* ... */ + }\end{verbatim} + \begin{itemize} + \item + Durch das Schl�sselwort \verb|ISR| anstelle von z.\,B.\ \verb|void| + teilen wir dem Compiler mit, da� es sich um einen Interrupt-Handler handelt, + so da� er entsprechenden Code zum Sichern der Registerinhalte einf�gt. + \item + Durch die Namensgebung \verb|INT0_vect| teilen wir dem Compiler mit, + da� er den Interrupt-Vektor Nr.\ 0 (also den ersten) + auf diesen Interrupt-Handler zeigen lassen soll. + \end{itemize} + (Tats�chlich handelt es sich bei \verb|ISR| und \verb|INT0_vect| um Macros.) + + Die Schreibweise ist spezifisch f�r die Programmierung des Atmel AVR ATmega + unter Verwendung der GNU Compiler Collection (GCC). + Bei Verwendung anderer Werkzeuge und/oder Prozessoren + kann dasselbe Programm v�llig anders aussehen. + Wie man Interrupt-Handler schreibt und wie man Interrupt-Vektoren setzt, + ist ein wichtiger Bestandteil der Dokumentation der Entwicklungswerkzeuge. + + \bigskip + + Die so geschriebene Funktion wird immer dann aufgerufen, wenn die + Hardware den Interrupt Nr.\ 0 ausl�st. Wann das der Fall ist, h�ngt + von der Beschaltung ab. Im Falle des RP6 geschieht es dann, wenn + ein Sensor an der linken Raupenkette einen schwarzen Streifen auf + der Encoder-Scheibe registriert, also immer dann, wenn sich die + linke Raupenkette des Roboters um eine bestimmte Strecke gedreht + hat. + + Jedesmal wenn sich die Raupenkette um einen Teilstrich weitergedreht hat, + werden also zwei Z�hler inkrementiert. + Wir k�nnen dies nutzen, um z.\,B.\ durch Auslesen des Z�hlers \verb|mleft_dist| + die zur�ckgelegte Entfernung zu messen. + (Die RP6-Bibliothek selbst stellt nur eine Zeit- und eine Geschwindigkeitsmessung zur Verf�gung.) + Wie dies konkret geschehen kann, sei im folgenden vorgestellt. + + \goodbreak + + Methode 1: Ver�ndern des Interrupt-Handlers + \begin{itemize} + \item + Da die Bibliothek \verb|RP6RobotBase| im Quelltext vorhanden ist, + k�nnen wir sie selbst �ndern und in den Interrupt-Handler + \verb|ISR (INT0_vect)| einen eigenen Z�hler f�r Sensor-Ticks einbauen. + \item + Wenn wir diesen zum Zeitpunkt A auf 0 setzen und zum Zeitpunkt B + auslesen, erfahren wir, wieviele "`Ticks"' der Roboter dazwischen + zur�ckgelegt hat. + \end{itemize} + + Methode 2: Verwenden eines vorhandenen Z�hlers + \begin{itemize} + \item + Tats�chlich enth�lt \verb|ISR (INT0_vect)| bereits zwei Z�hler, die + bei jedem Sensor-"`Tick"' hochgez�hlt werden: \verb|mleft_dist| und + \verb|mleft_counter|. + \item + Einer davon (\verb|mleft_dist|) wird bei jedem \verb|move()| auf 0 + zur�ckgesetzt. F�r diesen Z�hler enth�lt \verb|RP6RobotBaseLib.h| + einen "`undokumentierten"' Makro \verb|getLeftDistance()|, um ihn + auszulesen. + \item + Bei sorgf�ltiger Lekt�re von \verb|RP6RobotBaseLib.c| erkennt man, da� + es unproblematisch ist, den Z�hler vom Hauptprogramm aus auf 0 zu + setzen. (Dies ist jedoch mit Vorsicht zu genie�en: In einer + eventuellen Nachfolgeversion der Bibliothek mu� dies nicht mehr + der Fall sein!) + \end{itemize} + + Methode 3: Abfrage der Sensoren mittels Busy Waiting + \begin{itemize} + \item + Alternativ zur Verwendung des Interrupt-Handlers kann man auch + von der eigenen Hauptschleife aus den Sensor periodisch abfragen + und bei jeder �nderung einen Z�hler hochz�hlen. + \item + Diese Methode hei�t "`Busy Waiting"'. Sie hat den Vorteil der + Einfachheit aber den Nachteil, da� der Prozessor "`in Vollzeit"' + damit besch�ftigt ist, einen Sensor abzufragen, und eventuelle + andere Aufgaben nur noch "`nebenher"' erledigen kann. + \item + Wenn aus irgendwelchen Gr�nden der Interrupt-Mechanismus nicht + verwendet werden kann (z.B. weil der Prozessor �ber kein + Interrupt-Konzept verf�gt), k�nnten wir die Lichtschranke alternativ auch mit einem Input-Port + verdrahten und mittels Busy Waiting abfragen. + + Dies funktioniert nur dann, wenn die Schleife wirklich regelm��ig den Sensor abfragt. + Sobald der Prozessor l�ngere Zeit mit anderen Dingen besch�ftigt ist, + k�nnen beim Busy Waiting Signale der Lichtschranke verlorengehen. + Dieses Problem besteht nicht bei Verwendung von Interrupts. + \end{itemize} + + \subsection{volatile-Variable} + + Im C-Quelltext f�llt auf, da� die Z�hler-Variablen \verb|mleft_dist| und \verb|mleft_counter| + als \verb|volatile|\break\verb|uint16_t mleft_counter| bzw.\ \verb|volatile uint16_t mleft_dist| deklariert + sind anstatt einfach nur als + \verb|uint16_t mleft_counter| und \verb|uint16_t mleft_dist|. + + Das Schl�sselwort \verb|volatile| teilt dem C-Compiler mit, + da� eine Variable immer im Speicher (RAM) aufbewahrt werden mu� + und nicht in einem Prozessorregister zwischengespeichert werden darf. + + Dies ist deswegen wichtig, weil jederzeit ein Interrupt erfolgen + kann, der den Wert der Variablen im Speicher ver�ndert. Wenn im + Hauptprogramm alle "`�berfl�ssigen"' Speicherzugriffe wegoptimiert + wurden, erf�hrt es nichts von der �nderung. + + Entsprechendes gilt f�r I/O-Ports: + Wenn ein Programm einen Wert in einen Output-Port schreiben oder aus einem Input-Port lesen soll, + ist es wichtig, da� der Speicherzugriff auch tats�chlich stattfindet. + + \subsection{Software-Interrupts} + + Manche Prozessoren verf�gen �ber einen Befehl, um Interrupts "`k�nstlich"' auszul�sen. + + Das Betriebssystem MS-DOS verwendet derartige Aufrufe + anstelle von "`normalen"' Unterprogrammaufrufen, + um Programmen Funktionen zur Verf�gung zu stellen. + + \bigskip + \goodbreak + + Beispiel: Assembler-Version von \verb| printf ("Hello, world!\n") | unter MS-DOS bzw.\ Unix + + \medskip + + \verb| |MS-DOS-Version f�r FASM (gek�rzt)\hspace{3cm} Unix-Version f�r GCC (gek�rzt) + \begin{verbatim} + hello db 'Hello, world', 10, 13, '$' hello: + .string "Hello, world!\n" + mov ah, 09h + mov dx, hello pushl $hello + int 21h call printf\end{verbatim} + + \begin{itemize} + \item + Die MS-DOS-Version ruft den Interrupt Nr.\ 33 (hexadezimal: 21) auf: \verb| int 21h|.\\ + Die Unix-Version verwendet stattdessen einen normalen Unterprogrammaufruf: \verb| call printf|. + \item + Die MS-DOS-Version �bergibt Parameter in Prozessorregistern:\\ + Die Konstante \verb|09h| im \verb|ah|-Register w�hlt die Funktion "`Textausgabe"' aus;\\ + das \verb|dx|-Register enth�lt einen Zeiger auf den Text. + + Die Unix-Version benutzt den Stack zur �bergabe des Parameters: \verb| pushl $hello|.\\ + (\verb|$hello| ist ein Zeiger auf den Text.) + \item + Obwohl beide Programme auf demselben Prozessor laufen, + unterscheiden sich die Sprachdialekte der beiden Assember FASM und GCC erheblich voneinander.\\ + (Reihenfolge der Operanden umgekehrt, Suffix \verb|l| f�r "`long"', Pr�fix \verb|$| f�r Konstanten, \dots) + \end{itemize} + + Derartige "`Software-Interrupts"' verursachen Probleme, + sobald ein Ger�t den Interrupt f�r seinen eigentlichen Zweck verwendet. + MS-Windows verwendet -- au�er zur Emulation von MS-DOS -- keine Software-Interrupts mehr. + + \bigskip + + (Ein sehr �hnlicher Mechanismus wird von modernen Betriebssystemen weiterhin f�r Systemaufrufe genutzt. + Hier geht es darum, den �bergang von potentiell unsicherem Code in Anwenderprogrammen + zum vertrauensw�rdigen Code des Betriebssystems zu kontrollieren. F�r Details siehe:\\ + http://de.wikipedia.org/wiki/Software-Interrupt, http://de.wikipedia.org/wiki/Systemaufruf) + + \subsection{Byte-Reihenfolge -- Endianness} + + \subsubsection{Konzept} + + Beim Speichern von Werten, + die gr��er sind als die kleinste adressierbare Einheit\\ + (= Speicherzelle oder Speicherwort, h�ufig 1 Byte), werden mehrere Speicherworte belegt. + + Beispiel: 16-Bit-Zahl in 2 8-Bit-Speicherzellen + \begin{displaymath} + 1027 = 1024 + 2 + 1 = 0000\,0100\,0000\,0011_2 = 0403_{16} + \end{displaymath} + + Diese 16-Bit-Zahl kann auf zwei verschiedene Weisen + in zwei 8-Bit-Speicherzellen gespeichert werden: + \begin{center} + \begin{tabular}{|c|c|l}\cline{1-2} + \raisebox{-1pt}{04} & \raisebox{-1pt}{03} & \strut Big-Endian, "`gro�es Ende zuerst"', \\\cline{1-2} + \multicolumn{2}{c}{} & f�r Menschen leichter lesbar \\ + \multicolumn{3}{c}{} \\[-5pt]\cline{1-2} + \raisebox{-1pt}{03} & \raisebox{-1pt}{04} & \strut Little-Endian, "`kleines Ende zuerst"', \\\cline{1-2} + \multicolumn{2}{c}{} & bei Additionen effizienter \\ + \multicolumn{2}{c}{} & (Schriftliches Addieren beginnt immer beim Einer.) + \end{tabular} + \end{center} + Welche Konvention man verwendet, ist letztlich Geschmackssache + und h�ngt von der verwendeten Hardware (Prozessor) und Software ab. + Man spricht hier von der "`Endianness"' (Byte-Reihenfolge) der Hardware bzw.\ der Software. + + Im Kontext des Datenaustausches ist es wichtig, + sich auf eine einheitliche Endianness zu verst�ndigen. + Dies gilt insbesondere f�r: + \begin{itemize} + \item + Dateiformate + \item + Daten�bertragung + \end{itemize} + + \goodbreak + \subsubsection{Dateiformate} + + Als Beispiel f�r Dateiformate, in denen die Reihenfolge der Bytes + in 16- und 32-Bit-Zahlen spezifiziert ist, seien hier Audio-Formate genannt: + \begin{itemize} + \item + RIFF-WAVE-Dateien (\verb|.wav|): Little-Endian + \item + Au-Dateien (\verb|.au|): Big-Endian + \goodbreak + \item + �ltere AIFF-Dateien (\verb|.aiff|): Big-Endian + \item + neuere AIFF-Dateien (\verb|.aiff|): Little-Endian + \end{itemize} + Insbesondere ist es bei AIFF-Dateien wichtig, zu pr�fen, + um welche Variante es sich handelt, anstatt sich auf eine bestimmte Byte-Reihenfolge zu verlassen. + + Bei Dateiformaten mit variabler Endianness ist es sinnvoll und �blich, + die Endianness durch eine Kennung anzuzeigen. + Dies geschieht h�ufig am Anfang der Datei (im "`Vorspann"' -- "`Header"'). + + \bigbreak + + Als weiteres Beispiel seien zwei Monochrom-Grafik-Formate genannt. + Hier steht jedes Bit f�r einen schwarzen bzw.\ wei�en Bildpunkt, + daher spielt die Reihenfolge der Bits in den Bytes eine entscheidende Rolle. + (Diese Grafik-Formate sind Ihnen bereits aus der Vorlesung "`Angewandte Informatik"' bekannt.) + \begin{itemize} + \item + PBM-Dateien: Big-Endian, MSB first -- die h�chstwertige Bin�rziffer ist im Bild links + \item + XBM-Dateien: Little-Endian, LSB first -- die h�chstwertige Bin�rziffer ist im Bild rechts + \end{itemize} + MSB/LSB = most/least significant bit + + Achtung: Die Abk�rzungen "`MSB/LSB"' werden manchmal auch f�r "`most/least significant \emph{byte}"' verwendet. + Im konkreten Fall ist es ratsam, die verwendete Byte- und Bit-Reihenfolge genau zu recherchieren + bzw.\ pr�zise zu dokumentieren. + +% \bigbreak +% +% Weiteres Beispiel: Textdateien im Format "`UTF-16"'. +% Hier stehen jeweils zwei aufeinanderfolgende Bytes f�r eine 16-Bit-Zahl. +% Am Dateianfang steht stets der Wert $65279 = \verb|FEFF|_{16}$ \dots + + \subsubsection{Daten�bertragung} + + Bei der �bertragung von Daten �ber Leitungen + spielt sowohl die Reihenfolge der Bits in den Bytes ("`\mbox{MSB}/LSB first"') + als auch die Reihenfolge der Bytes in den �bertragenen Zahlen ("`Big-/Little-Endian"') eine Rolle. + + Als Beispiele seien genannt: + \begin{itemize} + \item + RS-232 (serielle Schnittstelle): MSB first + \item + I$^2$C: LSB first + \item + USB: beides + + Um �bertragungsfehler erkennen zu k�nnen, werden im USB-Protokoll + bestimmte Werte einmal gem�� der MSB-first- und einmal gem�� der LSB-first-Konvention + �bertragen und anschlie�end auf Gleichheit gepr�ft. + \medskip + \item + Ethernet: LSB first + \item + TCP/IP (Internet): Big-Endian + \end{itemize} + Insbesondere gilt f�r die �bertragung z.\,B.\ einer 32-Bit-Zahl �ber das Internet, + da� die vier Bytes von links nach rechts (Big-Endian) �bertragen werden, + die acht Bits innerhalb jedes Bytes hingegen von rechts nach links (LSB first). + + \subsection{Speicherausrichtung -- Alignment} + + Ein 32-Bit-Prozessor kann auf eine 32-Bit-Variable effizienter zugreifen, + wenn die Speicheradresse der Variablen ein Vielfaches von 32 Bits, also 4 Bytes ist. + Eine Variable, auf die dies zutrifft, hei�t "`korrekt im Speicher ausgerichtet"' ("`aligned"'). + + "`Effizienter"' kann bedeuten, + da� Maschinenbefehle zum Arbeiten mit den Variablen schneller abgearbeitet werden. + Es kann aber auch bedeuten, + da� der Prozessor gar keine direkte Bearbeitung von inkorrekt ausgerichteten Variablen erlaubt. + In diesem Fall bedeutet eine inkorrekte Speicherausrichtung, + da� f�r jede Operation mit der Variablen anstelle eines einzelnen Maschinenbefehls + ein kleines Programm aufgerufen werden mu�. + + \bigskip + + Um zu verstehen, welche Konsequenzen dies f�r die Arbeit mit Rechnern hat, + betrachten wir die folgenden Variablen (in C-Schreibweise): + + \begin{verbatim} + uint8_t a; + uint16_t b; + uint8_t c;\end{verbatim} + + Die Anordnung dieser Variablen im Speicher k�nnte z.\,B.\ folgenderma�en aussehen: + + \begin{quote} + \newcommand{\bup}{\begin{picture}(0,0)\put(-0.1,0.2){\mbox{b}}\end{picture}} + \begin{tabular}{r|ccc|} + & & \dots & \\\cline{2-4} + \texttt{3005} & & & \\\cline{2-4} + \texttt{3004} & & & \\\cline{2-4} + \texttt{3003} & & c & \\\cline{2-4} + \texttt{3002} & & & \\\cline{2-2}\cline{4-4} + \texttt{3001} & & \bup & \\\cline{2-4} + \texttt{3000} & & a & \\\cline{2-4} + \texttt{2fff} & & & \\\cline{2-4} + & & \dots & + \end{tabular} + \end{quote} + + Ein optimierender Compiler wird f�r eine korrekte Ausrichtung der Variablen \verb|b| sorgen, + beispielsweise durch Auff�llen mit unbenutzten Speicherzellen: + + \begin{quote} + \newcommand{\bup}{\begin{picture}(0,0)\put(-0.1,0.2){\mbox{b}}\end{picture}} + \begin{tabular}{r|ccc|} + & & \dots & \\\cline{2-4} + \texttt{3005} & & & \\\cline{2-4} + \texttt{3004} & & c & \\\cline{2-4} + \texttt{3003} & & & \\\cline{2-2}\cline{4-4} + \texttt{3002} & & \bup & \\\cline{2-4} + \texttt{3001} & & & \\\cline{2-4} + \texttt{3000} & & a & \\\cline{2-4} + \texttt{2fff} & & & \\\cline{2-4} + & & \dots & + \end{tabular} + \end{quote} + + Alternativ ist es dem Compiler auch m�glich, + die korrekte Ausrichtung durch "`Umsortieren"' der Variablen herzustellen + und dadurch "`L�cher"' zu vermeiden: + + \begin{quote} + \newcommand{\bup}{\begin{picture}(0,0)\put(-0.1,0.2){\mbox{b}}\end{picture}} + \begin{tabular}{r|ccc|} + & & \dots & \\\cline{2-4} + \texttt{3005} & & & \\\cline{2-4} + \texttt{3004} & & & \\\cline{2-4} + \texttt{3003} & & & \\\cline{2-2}\cline{4-4} + \texttt{3002} & & \bup & \\\cline{2-4} + \texttt{3001} & & c & \\\cline{2-4} + \texttt{3000} & & a & \\\cline{2-4} + \texttt{2fff} & & & \\\cline{2-4} + & & \dots & + \end{tabular} + \end{quote} + + Fazit: Man kann sich als Programmierer nicht immer darauf verlassen, + da� die Variablen im Speicher in einer spezifischen Weise angeordnet sind. + + In vielen existierenden Programmen geschieht dies dennoch. + Diese Programme sind fehlerhaft. + Dort kann es z.\,B.\ passieren, da� nach einem Upgrade des Compilers + schwer lokalisierbare Fehler auftreten. + + \bigskip + \goodbreak + + Entsprechende �berlegungen gelten f�r 64-Bit- und 16-Bit-Prozessoren. + Die Gr��e der Variablen, aufgerundet auf die n�chste Zweierpotenz, gibt eine Ausrichtung vor. + Die Registerbreite des Prozessors markiert die gr��te Ausrichtung, die noch ber�cksichtigt werden mu�. + + Bei 8-Bit-Prozessoren stellt sich die Frage nach der Speicherausrichtung normalerweise nicht, + weil die kleinste adressierbare Einheit eines Speichers selten kleiner als 8 Bits ist. + + Beispiele: + \begin{itemize} + \item + Eine 64-Bit-Variable auf einem 64-Bit-Prozessor mu� auf 64 Bits ausgerichtet sein. + \item + Eine 32-Bit-Variable auf einem 64-Bit-Prozessor braucht nur auf 32 Bits ausgerichtet zu sein. + \item + Eine 64-Bit-Variable auf einem 32-Bit-Prozessor braucht nur auf 32 Bits ausgerichtet zu sein. + \item + Eine 64-Bit-Variable auf einem 8-Bit-Prozessor braucht nur auf 8 Bits ausgerichtet zu sein. + \end{itemize} + + Bei der Definition von Datenformaten tut man gut daran, + die Ausrichtung der Daten von vorneherein zu ber�cksichtigen, + um auf m�glichst vielen -- auch zuk�nftigen -- Prozessoren + eine m�glichst effiziente Bearbeitung zu erm�glichen. + + Wenn ich beispielsweise ein Dateiformat definiere, in dem 128-Bit-Werte vorkommen, + ist es sinnvoll, diese innerhalb der Datei auf 128 Bits (16 Bytes) auszurichten, + auch wenn mein eigener Rechner nur �ber einen 64-Bit-Prozessor verf�gt. + + \section{Anwender-Software} + + \subsection{Relokation und Linken} + + Wenn eine Software erstellt wird, ist h�ufig nicht bekannt, + an welcher Speicheradresse sie sich zum Zeitpunkt der Ausf�hrung befinden wird. + + Ein Betriebssystem, das eine Anwender-Software vom Massenspeicher in den Arbeitsspeicher l�dt, + mu� daher daf�r sorgen, da� die in der Software enthaltenen Sprunganweisungen + auf die jeweils richtigen Sprungziele verweisen. + Dieser Vorgang hei�t "`Relokation"'; + der zugeh�rige Bestandteil des Betriebssystems hei�t "`Relocator"'. + + Dasselbe gilt, wenn eine Anwender-Software entwickelt wird und eine Software-Bibliothek mitbenutzt. + In diesem Fall m�ssen die Entwicklungswerkzeuge daf�r sorgen, + da� die Sprunganweisungen des Hauptprogramms in die Bibliothek + auf die jeweils richtigen Sprungziele verweisen. + Dieser Vorgang hei�t "`Linken"' (Verbinden); + das zugeh�rige Entwicklungswerkzeug hei�t "`Linker"'. + + Wenn das Linken erst beim Laden des Programms in den Speicher stattfindet, + spricht man von "`dynamischem"' Linken, + ansonsten von "`statischem"' Linken. + + Viele Prozessoren (u.\,a.\ IA-32) unterst�tzen eine "`Segmentierung"' des Speichers: + Das Programm arbeitet mit seinen eigenen Speicheradressen; + die �bersetzung in physikalische Speicheradressen erfolgt durch den Prozessor (Hardware). + Wenn dies genutzt werden kann, ist keine Relokation notwendig. + + \subsection{Dateiformate} + + Damit der Relocator und der Linker ihre Aufgabe erf�llen k�nnen, + k�nnen "`fertige"' Maschinenprogramme nicht "`einfach so"' auf einem Massenspeicher gespeichert werden, + sondern sie m�ssen zus�tzliche Informationen �ber Sprunganweisungen enthalten: + \begin{itemize} + \item + F�r den Relocator: Relokationstabelle\\ + Tabelle der Sprungziele innerhalb des Programms, + die an den tats�chlichen Ort im Speicher angepa�t werden m�ssen + \item + F�r den Linker: Symboltabelle\\ + Tabelle der Sprungziele au�erhalb des Programms, + die in das Programm eingetragen werden m�ssen + \end{itemize} + + \begin{center} + \begin{picture}(15,6)(0,-1.25) + \footnotesize + + \put(0,1.0){\line(1,0){15}} + \multiput(0,1)(0.1,0){151}{\line(0,1){0.1}} + \put(0,1.1){\line(1,0){15}} + \put(0,0.8){\makebox(0,0)[tl]{Ausf�hrbare Bin�rdatei}} + \put(0.5,1.2){$\overbrace{\rule{10mm}{0pt}}$} + \put(2.0,1.2){$\overbrace{\rule{10mm}{0pt}}$} + \put(3.5,1.2){$\overbrace{\rule{115mm}{0pt}}$} + + \put(0,4.0){\line(1,0){5}} + \multiput(0,3.5)(0.5,0){11}{\line(0,1){0.5}} + \put(0,3.5){\line(1,0){5}} + \put(0,4.2){\makebox(0,0)[bl]{Relokationstabelle}} + \put(1.0,3.4){\line(0,-1){1.9}} + \put(3.75,3.4){\vector(1,-2){1.2}} + \put(4.25,3.4){\vector(1,-1){2.4}} + \put(4.75,3.4){\vector(2,-1){4.8}} + + \put(4.95,0.7){\line(0,1){0.25}} + \put(4.95,0.7){\line(1,0){0.5}} + \put(5.45,0.7){\vector(0,1){0.25}} + \put(6.65,0.7){\line(0,1){0.25}} + \put(6.65,0.7){\line(1,0){0.8}} + \put(7.45,0.7){\vector(0,1){0.25}} + \put(9.55,0.6){\line(0,1){0.35}} + \put(9.55,0.6){\line(-1,0){3.2}} + \put(6.35,0.6){\vector(0,1){0.35}} + \put(7.25,0.4){\makebox(0,0)[t]{Spr�nge innerhalb des Programms}} + + \put(6,4.0){\line(1,0){5}} + \multiput(6,3.5)(0.5,0){11}{\line(0,1){0.5}} + \put(6,3.5){\line(1,0){5}} + \put(6,4.2){\makebox(0,0)[bl]{Symboltabelle}} + \put(6.4,3.4){\line(-2,-1){3.8}} + \put(10.25,3.4){\vector(1,-2){1.2}} + \put(10.75,3.4){\vector(1,-1){2.4}} + + \put(9.25,1.55){\line(0,1){1}} + \put(9.00,2.60){\makebox(0,0)[b]{Maschinenprogramm}} + + \put(11.45,0.95){\vector(0,-1){1}} + \put(11.45,-0.10){\makebox(0,0)[t]{\texttt{scanf}}} + \put(13.15,0.95){\vector(0,-1){1}} + \put(13.15,-0.10){\makebox(0,0)[t]{\texttt{printf}}} + \put(12.30,-0.50){\makebox(0,0)[t]{Spr�nge aus dem Programm heraus}} + + \end{picture} + \end{center} + + Eine Datei, die ein "`fertiges"' Maschinenprogramm, + eine Relokationstabelle und Symboltabellen f�r den statischen und dynamischen Linker enth�lt, + hei�t "`Objekt-Datei"'. + + Eine Datei, die ein "`fertiges"' Maschinenprogramm, + eine Relokationstabelle und eine Symboltabelle f�r den dynamischen Linker enth�lt, + hei�t "`ausf�hrbare Bin�rdatei"'. + + F�r Objekt-Dateien und ausf�hrbare Dateien gibt es herstellerspezifische und + hersteller�bergreifende Standards (z.\,B.\ a.out, COFF, ELF). + + �bliche Dateiendungen sind + \begin{itemize} + \item + f�r Objekt-Dateien: .o (Unix), .obj (MS-Windows) + \item + f�r ausf�hrbare Bin�rdateien: keine Endung (Unix), .com, .exe, .scr (MS-Windows) + \end{itemize} + + \bigbreak + + H�ufig werden mehrere Objekt-Dateien zu einer "`Bibliothek"' zusammengefa�t. + + �bliche Dateiendungen sind + \begin{itemize} + \item + f�r statische Bibliotheken: .a (Unix), .lib (MS-Windows) + \item + f�r dynamische Bibliotheken: .so (Unix), .dll (MS-Windows) + \end{itemize} + + Derjenige Teil des Betriebssystems, der eine ausf�hrbare Datei in den Arbeitsspeicher l�dt + und dabei ggf.\ den Relocator und den Linker aufruft, hei�t "`Loader"'. + + \goodbreak + \subsection{Die Toolchain} + + Wir k�nnen nun die Werkzeuge, + die vom Schreiben des Quelltextes bis zur Ausf�hrung des Programms verwendet werden, + zu einer Kette, der "`Toolchain"', zusammenfassen: + + \begin{center} + \newcommand{\arrowwithtext}[1]{% + \begin{picture}(0,1) + \put(0,1){\vector(0,-1){1}} + \put(0.1,0.5){\makebox(0,0)[l]{#1}} + \end{picture}} + + \framebox{\shortstack{\strut menschliche Gedanken}} + + \arrowwithtext{Texteditor} + + \framebox{\shortstack{\strut C-Quelltext\\ + (z.\,B.\ hello.c)}} + + \arrowwithtext{Compiler} + + \framebox{\shortstack{\strut Assembler-Quelltext\\ + (z.\,B.\ hello.s, hello.asm)}} + + \arrowwithtext{Assembler} + + \framebox{\shortstack{\strut Objekt- und Bibliothek-Dateien\\ + (z.\,B.\ hello.o, hello.obj)}} + + \arrowwithtext{Linker} + + \framebox{\shortstack{\strut ausf�hrbare Bin�rdatei\\ + (z.\,B.\ hello, hello.exe)}} + + \arrowwithtext{Loader} + + \framebox{\shortstack{\strut Programm im Speicher bereit zur Ausf�hrung}} + \end{center} + + Manche dieser Werkzeuge k�nnen zu einer einzigen Software zusammengefa�t sein: + \begin{itemize} + \item + Das Programm \verb|gcc| fa�t Compiler, Assembler und Linker in einem einzigen Aufruf zusammen. + Was jeweils aufgerufen wird, entscheidet das Programm anhand der Endungen der �bergebenen Dateien. + \item + Eine "`Entwicklungsumgebung"' (z.\,B.\ Eclipse) + umfa�t typischerweise Texteditor, Compiler, Assembler und Linker + plus weitere Werkzeuge. + \end{itemize} + +% \subsection{Das Programm \texttt{make}} +% +% Das Programm \verb|make| dient dazu, den Aufruf der einzelnen Entwicklungswerkzeuge zu automatisieren. +% +% Eine Datei \verb|Makefile| enth�lt Regeln der Gestalt +% \begin{verbatim} +% Ziel: Quellen +% Aktionen\end{verbatim} + + \subsection{Besonderheiten von Mikro-Controllern} + + Auf einem Personal-Computer l�uft st�ndig eine Software, das Betriebssystem, + die in der Lage ist, Anwenderprogramme in den Speicher zu laden + und durch den Prozessor ausf�hren zu lassen. + + Ein Mikro-Controller enth�lt kein Betriebssystem. + Damit ein Mikro-Controller sinnvolle Befehle ausf�hrt, + m�ssen wir also auf andere Weise daf�r sorgen, + da� sie sich im Arbeitsspeicher an der richtigen Stelle befinden. + \begin{itemize} + \item + ROM: + Der Hersteller liefert den Mikro-Controller mit einem nur lesbaren, + bereits mit den richtigen Werten beschriebenen Speicher aus. + Dies lohnt sich bei gro�en St�ckzahlen. + \item + In-System Programmer (ISP): + Der Mikro-Controller enth�lt Flash-Speicher, der von au�en beschrieben werden kann, + z.\,B.\ mit Hilfe einer Zusatzschaltung (ISP) von einem Personal-Computer aus. + \item + Boot-Loader: + Der Mikro-Controller enth�lt Flash-Speicher, + der abschnittweise von der eigenen Software beschrieben werden kann. + Ein Teil des Speichers enth�lt ein Programm (Boot-Loader), + das �ber externe Leitungen (z.\,B.\ eine serielle Schnittstelle) + Daten entgegennehmen und in den verbleibenden Speicher schreiben kann. + \end{itemize} + + In jedem Fall ist es notwendig, die Relokation bereits vor dem Aufspielen der Software vorzunehmen. + G�ngige Formate ausf�hrbarer Dateien (z.\,B.\ ELF) + sind zur direkten Ausf�hrung auf einem Mikro-Controller nicht geeignet. + Stattdessen mu� -- als letzter Schritt der Software-Entwicklung -- + ein Relocator anhand der ELF-Datei ein Abbild des Speichers des Mikro-Controllers erstellen. + + Das Speicherabbild kann unmittelbar als Bin�rdatei gespeichert werden + oder als Text-Darstellung einer Bin�rdatei, z.\,B.\ im Intel-HEX-Format (Dateiendung: .hex). + + Das so entstandene Speicherabbild kann dann mit Hilfe eines ISP oder eines Boot-Loaders + auf den Mikro-Controller aufgespielt werden (Sprechweise: "`Download"'), + oder man l��t es dem Hersteller zukommen, damit dieser eine Serie der Mikro-Controller fertigt, + bei denen die Software bereits fertig im ROM liegt. + + \bigskip + + Die Werkzeuge zur Programmierung von Mikro-Controllern + laufen nicht auf dem Mikro-Controller selbst, sondern auf einem Personal-Computer. + + Die Werkzeuge erzeugen also Code, der nicht auf demselben Rechner lauff�hig ist, + sondern auf einem anderen, dem Mikro-Controller. + Derartige Werkzeuge hei�en "`Cross-Werkzeuge"' (Cross-Compiler, Cross-Assembler, Cross-Linker). + + \section{Bus-Systeme} + + \subsection{Konzept\label{Bus-Systeme: Konzept}} + + Die \emph{International Electrotechnical Commission} (IEC) definiert ein Bus-System als + \begin{quote} + "`ein System zur Daten�bertragung zwischen mehreren Teilnehmern �ber einen gemeinsamen + �bertragungsweg, bei dem die Teilnehmer nicht an der Daten�bertragung zwischen anderen + Teilnehmern beteiligt sind."' + + \strut\hfill \url{http://www.electropedia.org/iev/iev.nsf/display?openform\&ievref=351-32-10}\\ + \strut\hfill �bersetzung: Wikipedia -- Bus (Datenverarbeitung) + \end{quote} + + Kurz: Ein Bus-System ist Daten�bertragung "`ohne Umsteigen"'. + Sobald Teilnehmer daf�r zust�ndig sind, die Daten an andere Teilnehmer weiterzuleiten + (z.\,B.\ Router im Internet), + handelt es sich nicht mehr um ein Bus-System im engeren Sinne, + sondern um eine Kombination mehrerer Bus-Systeme. + + In der Rechnertechnik finden sich Bus-Systeme + \begin{itemize} + \item + von Schaltkreis zu Schaltkreis im Prozessor, + \item + zwischen Prozessor und Speicher, + \item + zwischen Prozessor und Ger�t, + \item + zwischen Prozessor und Controller, + \item + zwischen Controller und Ger�t, + \item + zwischen Netzwerkkarte und Netzwerkkarte + \end{itemize} + \dots\ und in zahlreichen weiteren Anwendungen. + + \subsection{Zu ber�cksichtigen} + + Damit Daten�bertragung funktioniert, + sind beim Entwurf und Aufbau von Bus-Systemen zahlreiche Aspekte zu ber�cksichtigen. + Hier ein �berblick. + + \begin{itemize} + \item + \textbf{Elektromagnetische St�rungen} + + Elektromagnetische Impulse in der Umgebung der Leitungen + k�nnen unerw�nschte St�rsignale induzieren. + Umgekehrt k�nnen in der Leitung �bertragene Signale elektromagnetische Wellen erzeugen, + die Funk�bertragungen in der Umgebung st�rend beeinflussen. + + Zu den Ma�nahmen zur Vermeidung elektromagnetischer St�rungen geh�ren: + \begin{itemize} + \item + Abschirmung + + \item + symmetrische Signal�bertragung + + Dasselbe Signal wird in zwei Leitungen mit entgegengesetzter Polarit�t �bertragen. + Wenn eine St�rung das eine Signal abschw�cht, verst�rkt sie gleichzeitig das andere. + + \item + unterschiedliche Verdrillung ("`Twisted Pair"') + + Mehrere Leiter in demselben Kabel k�nnen sich gegenseitig beeinflussen. + Wenn man dabei jeweils die beiden Leitungen einer symmetrischen Signal�bertragung + mit unterschiedlicher Gangh�he verdrillt, + kommen sich �ber die Kabell�nge verteilt stets unterschiedliche Kabel nahe, + so da� sich gegenseitige St�rungen herausmitteln. + + \item + \dots + \end{itemize} + \goodbreak + \item + \textbf{Reflexion am Kabelende} + + Bei hohen �bertragungsgeschwindigkeiten kann die Ausbreitung des Signals in der Leitung + nicht mehr als "`unendlich schnell"' angenommen werden. + In dieser genauen Betrachtung wird nicht die gesamte Leitung gleichzeitig auf z.\,B.\ +5\,V gezogen, + sondern das Signal breitet sich bis zum Kabelende aus, wird dort reflektiert, + wandert wieder zur�ck, wird wieder reflektiert, usw. + Will man diesen Einschwingvorgang nicht abwarten, sondern sofort das n�chste Signal senden, + wird die Reflexion am Kabelende zum Problem. + Folgende Gegenma�nahmen sind �blich: + + \begin{itemize} + \item + Abschlu�widerstand ("`Terminator"') + + Ein ohmscher Widerstand, der dem Wellenwiderstand der Leitung entspricht, + d�mpft das Signal am Leitungsende herab und verhindert so die Reflexion. + % + (Beispiele: SCSI, BNC-Netz) + + \item + ignorieren + + Bei niedrigen �bertragungsgeschwindigkeiten und/oder kurzen Leitungen + spielen die o.\,a.\ Betrachtungen keine Rolle. + Wer hier Kompromisse eingeht, kann auf Terminierung verzichten. + + (Beispiel: IDE/ATAPI/PATA) + + \item + (Auch hier gibt es weitere Methoden, z.\,B.\ aktive Terminierung.) + \end{itemize} + \goodbreak + \item + \textbf{Kabelwege} + + Verschiedene Einsatzgebiete erfordern verschiedene Verkabelungen. + \begin{itemize} + \item + Wenige Leitungen (seriell) vs.\ viele (parallel) + +% \item +% synchron/asynchron: mit/ohne festen Takt + + \item + Punkt-zu-Punkt-Verbindung vs.\ Adressierung + + Eine Kommunikationsverbindung zwischen genau zwei Teilnehmern\\ + hei�t Punkt-zu-Punkt-Verbindung. + + Wenn man viele Teilnehmer an dieselben Leitungen anschlie�t + und trotzdem mit jedem individuell kommunizieren will, + mu� aus den Signalen hervorgehen, welcher Teilnehmer gemeint ist. + Dieses Konzept hei�t Adressierung. + + (In manchen Kontexten wird erst dann von einem Bus-System gesprochen, + wenn es mehr als zwei Teilnehmer und Adressierung gibt. + Im Gegensatz zu einer Punkt-zu-Punkt-Verbindung + wird ein solches System dann als "`busf�hig"' bezeichnet.) + + \item + Topologie: linear, ring-, sternf�rmig, kaskadierbar + + Bei kurzen Wegen und/oder niedrigen �bertragungsgeschwindigkeiten + kann die Form der Leitungen beliebig sein. + Bei langen Wegen und hohen �bertragungsgeschwindigkeiten + m�ssen Reflexionen an Verzweigungen und an Kabelenden (s.\,o.) + ber�cksichtigt und ggf.\ vermieden werden. + \end{itemize} + + \item + \textbf{Weitere Aspekte} + + In der Nachfolgeveranstaltung "`Vertiefung Rechner- und Netzwerktechnik"' werden u.\,a.\ + die folgenden Aspekte angesprochen werden: + \begin{itemize} + \item + Kollisionsvermeidung + + Wie vermeidet man es, da� mehrere Teilnehmer gleichzeitig senden\\ + und sich dadurch gegenseitig st�ren? + \item + Sicherheitsaspekte + + Wie kann man vermeiden oder es zumindest erkennen, + da� sich unberechtigte Teilnehmer an der Kommunikation beteiligen? + Wie stellt man die Authentizit�t einer empfangenen Nachricht sicher? + \item + u.\,v.\,a. + \end{itemize} + \end{itemize} + + \subsection{Beispiele} + + Im folgenden sollen die Beispiele aus Abschnitt \ref{Bus-Systeme: Konzept} + hinsichtlich der o.\,a.\ Aspekte eingeordnet werden. + + \begin{itemize} + \item + von Schaltkreis zu Schaltkreis im Prozessor:\\ + parallel, Punkt-zu-Punkt + \smallskip + \item + zwischen Prozessor und Speicher:\\ + Adre�- und Datenbus: parallel, Punkt-zu-Punkt + + \begin{picture}(16,5)(-2,-4.7) + \put(0.8,-4.5){\includegraphics[height=4.5cm]{motherboard.jpg}} + \put(7.8,-2.8){\includegraphics[height=3.5cm]{motherboard-ausschnitt.jpg}} + \put(7.8,0.7){\line(-1,-1){2.5}} + \put(7.8,-2.8){\line(-1,0){2.5}} + \end{picture} + + Auf den Hauptplatinen (Motherboards) aktueller Computer erkennt man zahlreiche + parallel verlaufende Leitungen (von m�glichst gleicher L�nge). + \bigskip + \item + zwischen Prozessor und Ger�t:\\ + I$^2$C: seriell, mit Adressierung + + Beispiel: Kompa�modul an RP6 + + \begin{picture}(16,4.5)(0,-4.2) + \put(0,-3.5){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} + \put(5,-4.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} + \put(5,0.2){\line(-2,-1){2.2}} + \put(5,-4.3){\line(-1,1){2.2}} + \end{picture} + \bigskip + \item + zwischen Prozessor und Controller (auf dem Motherboard):\\ + parallel, mit Adressierung + + \bigskip + \item + zwischen Controller und Ger�t: + \begin{itemize} + \item + IEEE 1284 (Centronics): parallel, Punkt-zu-Punkt + \item + RS-232: seriell, Punkt-zu-Punkt + \item + RS-485, USB, CAN: seriell, mit Adressierung + \end{itemize} + \begin{picture}(16,3.55) + \put(0,0){\includegraphics[width=10.9cm]{motherboard-anschluesse.jpg}} + \put(5.45,-0.2){\makebox(0,0)[t]{\footnotesize Anschl�sse an der R�ckseite eines PC-Motherboards}} + \color{white}\bf + \put(3.05,1.5){\mbox{IEEE 1284}} + \put(2.15,0.20){\mbox{RS-232}} + \put(7.7,0.20){\mbox{USB}} + \end{picture} + \bigskip + \item + zwischen Controller und Festplatte: + \begin{itemize} + \item + SCSI: parallel, terminiert,\\ + mit Adressierung, linear + \smallskip + \item + PATA (�ltere Bezeichnungen: IDE, ATAPI):\\ + parallel, nicht terminiert,\\ + mit Adressierung (Master/Slave), linear + \smallskip + \item + SATA: seriell, Punkt-zu-Punkt + + \begin{picture}(16,4.5)(0,1.1) + \put(0,1.8){\includegraphics[width=4.2cm]{festplatte-pata.jpg}} + \put(2.1,1.6){\makebox(0,0)[t]{\footnotesize Festplatte an PATA-Datenkabel}} + \put(5,1.8){\includegraphics[width=4.2cm]{festplatte-sata.jpg}} + \put(7.1,1.6){\makebox(0,0)[t]{\footnotesize Festplatte an SATA-Datenkabel}} + \end{picture} + + Obwohl bei PATA 16 Leitungen zur Daten�bertragung zur Verf�gung stehen und bei SATA nur eine, + hat SATA h�here �bertragungsraten. + Der Grund daf�r liegt darin, da� die Anforderung + des \emph{exakt gleichzeitigen} Bereitstellens der Datenbits + an den nicht terminierten parallelen Leitungen die Taktfrequenz derma�en begrenzt, + da� eine serielle �bertragung der Daten mit wesentlich h�herer Taktfrequenz + letztlich effizienter ist. + \end{itemize} + \bigskip + \goodbreak + \item + zwischen Netzwerkkarte und Netzwerkkarte:\\ + seriell, mit Adressierung + \begin{itemize} + \item + Token Ring: ringf�rmig + \smallskip + \item + BNC-Ethernet: linear, terminiert + \smallskip + \item + Twisted-Pair-Ethernet: Punkt-zu-Punkt,\\ + mit Hubs/Switches: sternf�rmig + \smallskip + \item + WLAN: sternf�rmig (Access-Point),\\ + im Ad-Hoc-Modus: beliebige Topologie + \par + \begin{picture}(16,11)(0,-1) + \put(0,7.0){\includegraphics[width=4.2cm]{bnc-netz-ende.jpg}} + \put(2.1,6.8){\makebox(0,0)[t]{\footnotesize BNC-Netz: Endpunkt (terminiert)}} + \put(0,3.4){\includegraphics[width=4.2cm]{bnc-netz-mitte.jpg}} + \put(2.1,3.2){\makebox(0,0)[t]{\footnotesize BNC-Netz: Mitte (vorbeigef�hrt)}} + \put(0,0){\includegraphics[width=4.2cm]{bnc-netz-falsch.jpg}} + \put(2.1,-0.2){\makebox(0,0)[t]{\footnotesize BNC-Netz: \textbf{falsch} angeschlossen}} + \put(5.5,5.5){\includegraphics[width=4.2cm]{tp-netz.jpg}} + \put(7.6,5.3){\makebox(0,0)[t]{\footnotesize Twisted-Pair-Netz}} + \put(5.5,0.3){\includegraphics[width=4.2cm]{wlan-access-point.jpg}} + \put(7.6,0.1){\makebox(0,0)[t]{\footnotesize WLAN-Access-Point}} + \end{picture} + \end{itemize} + \end{itemize} + + \subsection{Beispiel: Benutzung des I$^2$C-Busses} + + Als konkretes Beispiel f�r die Anwendung eines Bus-Systems + sei hier das Auslesen des bereits erw�hnten Kompa�-Moduls f�r den RP6-Roboter n�her ausgef�hrt. + + Eine C-Funktion zum Auslesen der Kompa�werte lautet: + + \begingroup + \small + \begin{verbatim} +void read_compass (uint16_t *x, uint16_t *y) +{ + I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil + mSleep (1); + I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil + mSleep (5); + uint8_t result[5]; + I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten + mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat + I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen + I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y + result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden + result[2] &= 0b00001111; + *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb + *y = (result[2] << 8) + result[3]; +}\end{verbatim} + \endgroup + + Das Senden von Befehlen an das Kompa�modul erfolgt immer nach demselben Schema. + + Beispiel: \verb|I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten| + \begin{itemize} + \item + Sende das Byte \verb|0x60| + + Hiermit wird das Ger�t "`Kompa�modul"' zum Schreiben adressiert. + + Nachfolgende Bytes werden vom Kompa�modul verarbeitet\\ + und von eventuellen weiteren an denselben I$^2$C-Bus angeschlossenen Ger�ten ignoriert. + + \item + Sende das Byte \verb|0x00| + + Hiermit wird das "`Register Nr.\ 0"' innerhalb des Kompa�moduls zum Schreiben adressiert. + + + \item + Sende das Byte \verb|0x01| + + Dies sind die eigentlichen Nutzdaten -- in diesem Fall der Befehl Nr.\ 1 "`Messung starten"'. + \end{itemize} + + Das Auslesen von Daten erfolgt analog mit einer um 1 erh�hten Adresse:\\ + Zum Lesen wird das Kompa�modul �ber die Adresse \verb|0x61| angesprochen\\ + anstatt, wie zum Schreiben, \verb|0x60|. + + Die Verwendung der Funktion aus einem Programm heraus erfolgt wie folgt: + + \begin{verbatim} + uint16_t compass_x, compass_y; + read_compass (&compass_x, &compass_y);\end{verbatim} + + Als konkrete Anwendung k�nnen wir die Funktion einsetzen, + um das Kompa�modul zu kalibrieren und den Roboter in eine Himmelsrichtung auszurichten. + + Wir lassen den Roboter auf der Stelle rotieren + und rufen dabei wiederholt die Funktion \verb|read_compass()| auf. + Wenn wir die $x$- und $y$-Werte aufzeichnen und gegeneinander auftragen, + erhalten wir n�herungsweise eine Ellipse: + + \begin{center} + \vspace{-1.5\medskipamount} + \includegraphics[height=6cm]{kompass-messung.png}% + \begin{picture}(0,0)(6.1,0.5) + \put(0,3){\vector(1,0){6}} + \put(5.75,2.9){\makebox(0,0)[t]{x}} + \put(3,0){\vector(0,1){6}} + \put(2.9,5.75){\makebox(0,0)[r]{y}} + \end{picture}% + \vspace{1.5\medskipamount} + \end{center} + + Um nun den Roboter in eine Himmelsrichtung auszurichten, k�nnen wir z.\,B.\ folgenderma�en vorgehen: + \begin{itemize} + \item + Achsen normieren: + + Wir berechnen den Mittelpunkt (Mitte zwischen Maximal- und Minimalwerten)\\ + und subtrahieren ihn von den Me�werten. + \item + In den derart normierten Me�werten markiert der Nulldurchgang einer Achse eine Himmelsrichtung. + + Beispiel: $x = 0$ markiert die Nord-S�d-Richtung. + \item + Das Vorzeichen der jeweils anderen Achse sagt aus, welche der beiden Himmelsrichtungen es ist. + + Beispiel: $x = 0$ zusammen mit $y > 0$ markiert Ausrichtung nach Norden. + \end{itemize} + Um also z.\,B.\ den Roboter nach Norden auszurichten, + k�nnen wir ihn zun�chst grob drehen, bis $y$ positiv ist, + und anschlie�end fein drehen, bis $x = 0$ ist. + + \bigskip + + Hinweis f�r die Praxis: Der Funktionsaufruf \verb|I2CTWI_readBytes (0x61, result, 4);| + �berschreibt in der Vari"-ablen \verb|result[]| nicht nur die vier angeforderten Bytes, + sondern noch ein f�nftes Byte f�r interne Zwecke. + (Daher: \verb|uint8_t result[5];| und nicht \verb|uint8_t result[4];|) + + \section{Pipelining} + + \subsection{Konzept} + + \newcommand{\wm}{\raisebox{-0.3cm}{\includegraphics[width=1.0cm]{Waschen_30.pdf}}} + \newcommand{\wt}{\raisebox{-0.3cm}{\includegraphics[width=1.0cm]{Trommeltrocknen.pdf}}} + \newcommand{\be}{\raisebox{-0.3cm}{\includegraphics[width=1.0cm]{Buegeln.pdf}}} + + Wenn eine Aufgabe unter Verwendung mehrerer Ressourcen (z.\,B.\ Werkzeuge) + wiederholt ausgef�hrt werden soll, + ist es sinnvoll, die Aufgabe so in Teilaufgaben zu zerlegen, + da� die Teilaufgaben parallel unter Verwendung der jeweiligen Ressourcen ausgef�hrt werden. + Dieses Konzept hei�t "`Pipelining"'. + + Zur Illustration verwenden wir ein Beispiel aus dem Alltag. + \begin{itemize} + \item + Es sollen drei Ladungen W�sche gewaschen werden. + \item + Der Waschvorgang besteht aus den Teilaufgaben\\ + "`Waschen"' \wm, "`Trocknen"' \wt und "`B�geln"' \be. + \label{WaschenTrocknenBuegeln} + \hfill + \begin{minipage}[b]{4.5cm} + \begin{center} + \vspace*{-2cm} + \wm\quad\wt\quad\be\\ + \figurecaptionurlurl{Symbolbilder f�r "`Waschen"', "`Trocknen"' und "`B�geln"'}% + {http://de.wikipedia.org/wiki/Textilpflegesymbol}% + {23.\,1.\,2012}% + {http://de.wikipedia.org/wiki/Benutzer:Andre_Riemann}% + {\pd} + \end{center} + \vspace*{-0.5cm} + \end{minipage} + \item + Die Teilaufgaben m�ssen in der richtigen Reihenfolge ausgef�hrt werden:\\ + Die W�sche ("`Daten"') "`flie�t"' von einer Ressource zur n�chsten -- "`Datenflu�"'. + \item + Jede Teilaufgabe belegt jeweils eine Ressource (Waschmaschine, Trockner, B�geleisen). + \end{itemize} + + Ohne Pipelining sieht der Waschvorgang folgenderma�en aus: + \begin{center} + \begin{picture}(12,3.5) + \thicklines + \put(1,1){\wm} + \put(2,1){\wt} + \put(3,1){\be} + \put(4,2){\wm} + \put(5,2){\wt} + \put(6,2){\be} + \put(7,3){\wm} + \put(8,3){\wt} + \put(9,3){\be} + \put(-0.1,0.5){\vector(1,0){11.1}} + \put(11.5,0.5){\makebox(0,0){$t$}} + \put(10.5,1.0){\makebox(0,0)[r]{ineffizient}} + \end{picture} + \end{center} + \goodbreak + Um den Waschvorgang effizienter zu gestalten, + k�nnen wir, w�hrend die erste Waschladung im Trockner ist, + bereits die zweite in der Waschmaschine waschen usw. + + Die Zerlegung der Aufgabe in drei parallel ausf�hrbare Teilaufgaben + nennen wir eine "`dreistufige Pipeline"'. + \begin{center} + \begin{picture}(12,3.5) + \thicklines + \put(1,1){\wm} + \put(2,1){\wt} + \put(3,1){\be} + \put(2,2){\wm} + \put(3,2){\wt} + \put(4,2){\be} + \put(3,3){\wm} + \put(4,3){\wt} + \put(5,3){\be} + \put(-0.1,0.5){\vector(1,0){11.1}} + \put(11.5,0.5){\makebox(0,0){$t$}} + \put(10.5,1.0){\makebox(0,0)[r]{effizient}} + \end{picture} + \end{center} + Wenn nur eine Waschmaschine vorhanden ist, + kann die zweite Ladung W�sche solange nicht gewaschen werden, + bis die Waschmaschine wieder frei ist. + + Dies nennt man einen "`Ressourcenkonflikt"'. + \begin{center} + \begin{picture}(12,3.5) + \thicklines + \put(1,1){\wm} + \put(2,1){\wt} + \put(3,1){\be} + \put(1,2){\wm} + \put(2,2){\wt} + \put(3,2){\be} + \put(1,3){\wm} + \put(2,3){\wt} + \put(3,3){\be} + \put(-0.1,0.5){\vector(1,0){11.1}} + \put(11.5,0.5){\makebox(0,0){$t$}} + \put(10.5,1.0){\makebox(0,0)[r]{noch effizienter}} + \color{red} + \thicklines + \put(0.5,0.8){\line(4,1){10}} + \put(0.5,3.3){\line(4,-1){10}} + \put(7.5,1.7){\mbox{\shortstack{Ressourcen-\\konflikt}}} + \end{picture} + \end{center} + Eine andere Randbedingung ist die Reihenfolge der Teilaufgaben: + Es ist nicht zielf�hrend, eine Ladung W�sche zu trocknen, bevor sie gewaschen wurde. + + Entsprechendes gilt im Prozessor: + Es ist nicht m�glich, Rechenergebnisse weiterzuverarbeiten, bevor diese vorliegen. + + Dies nennt man einen "`Datenkonflikt"'. + \begin{center} + \begin{picture}(12,3.5) + \thicklines + \put(1,1){\wm} + \put(2,1){\wt} + \put(3,1){\be} + \put(1,2){\wt} + \put(2,2){\be} + \put(3,2){\wm} + \put(1,3){\be} + \put(2,3){\wm} + \put(3,3){\wt} + \put(-0.1,0.5){\vector(1,0){11.1}} + \put(11.5,0.5){\makebox(0,0){$t$}} + \put(10.5,1.0){\makebox(0,0)[r]{noch effizienter}} + \color{red} + \thicklines + \put(0.5,0.8){\line(4,1){10}} + \put(0.5,3.3){\line(4,-1){10}} + \put(7.5,1.7){\mbox{\shortstack{Daten-\\konflikt}}} + \end{picture}% + \end{center} + + \subsection{Arithmetik-Pipelines} + + \newcommand{\insns}[1]{% + \begin{picture}(0,0) + \put(0,0){\line(1,0){2}} + \put(2,0){\line(0,-1){#1}} + \put(2,-#1){\vector(-1,0){2}} + \end{picture}} + + \newcommand{\insnsup}[1]{% + \begin{picture}(0,0) + \put(0,0){\line(1,0){2}} + \put(2,0){\line(0,1){#1}} + \put(2,#1){\vector(-1,0){2}} + \end{picture}} + + In Kapitel \ref{Speicher- und Registerarchitekturen} + haben wir bereits einen Register-Stack kennengelernt. + + Eine Arithmetik-Pipeline ist gewisserma�en ein "`Register-FIFO"': + In einem Assemblerbefehl wird eine Rechenaufgabe abgeschickt; + eine genau definierte Anzahl Befehle sp�ter ("`L�nge der Pipeline"') + kann das Ergebnis abgerufen werden. + + \bigskip + + Beispiel: Berechnung des Skalarprodukts zweier Vektoren der L�nge 3 + \begin{displaymath} + S = \left(\begin{array}{c}a_1\\a_2\\a_3\end{array}\right) + \cdot\left(\begin{array}{c}b_1\\b_2\\b_3\end{array}\right) + = a_1 \cdot b_1 + + a_2 \cdot b_2 + + a_3 \cdot b_3 + \end{displaymath} + mit einer Pipeline der L�nge 3. + + Zur Vereinfachung verwenden wir anstelle von echten Assembler-Befehlen einen Pseudo-Code: + Mit dem Befehl \texttt{push} wird eine Rechenaufgabe in den "`FIFO"' geschoben. + Drei Befehle sp�ter liegt das Rechenergebnis vor + und kann mit der "`Funktion"' \texttt{pop} abgerufen und weiterbearbeitet werden. + Der -- h�ufig tats�chlich vorhandene -- Assemblerbefehl \texttt{nop} + steht f�r "`no operation"'. + Der Prozessor macht in diesem Fall nichts Neues, rechnet aber im Hintergrund weiter. + + \begin{quote} + \begingroup + \setlength{\unitlength}{\baselineskip}% + \begin{picture}(0,0)(-5.8,-0.25) + \color{red} + \put(0,0.0){\insns{3}} + \put(0.5,-1){\insns{2.9}} + \put(1.0,-2){\insns{3}} + \put(0.5,-4.1){\insns{2.8}} + \put(0.5,-7.1){\insns{2.9}} + \put(-1.5,-9.25){\shortstack{Daten-\\konflikt}} + \end{picture}% + \tt + push $a_1 \cdot b_1$\\ + push $a_2 \cdot b_2$\\ + push $a_3 \cdot b_3$\\ + $s_1$ = pop\\ + push $s_1 + \mbox{pop}$\\ + $s_3$ = pop\\ + nop\\ + push $s_3 + \mbox{pop}$\\ + nop\\ + nop\\ + $S$ = pop\\ + \endgroup + \begin{picture}(0,0) + \color{red} + \put(5,3.8){\makebox(0,0)[l]{$\left.\rule{0pt}{1.2cm}\right\}$ effizient: Pipeline gef�llt}} + \put(5,1.4){\makebox(0,0)[l]{$\left.\rule{0pt}{1.2cm}\right\}$ ineffizient: "`Blasen"'}} + \end{picture} + \end{quote} + An mehreren Stellen ist die Pipeline nicht komplett gef�llt, + und manche Ressourcen bleiben ungenutzt.\\ + Man nennt dieses Ph�nomen "`Blasen"' und erkennt es an den \texttt{nop}-Befehlen.\\ + Blasen entstehen als Folge von Konflikten -- hier: Datenkonflikten. + + Durch die Blasen wirkt der Code eher ineffizient + gegen�ber einer kompakteren Schreibweise ohne Pipeline: + \begin{quote} + \tt + $s_1 = a_1 \cdot b_1$\\ + $s_2 = a_2 \cdot b_2$\\ + $s_3 = a_3 \cdot b_3$\\ + $S = s_1 + s_2$\\ + $S = S + s_3$ + \end{quote} + Tats�chlich jedoch m�ssen die Nicht-Pipeline-Befehle bei jeder Rechenaufgabe warten, + bis das Ergebnis vorliegt. In diesem Beispiel w�ren das drei Taktzyklen; + wir k�nnen uns also unter jeden Nicht-Pipeline-Befehl zwei \texttt{nop}s denken. + + Mit Pipeline ben�tigt die Rechnung 11 Taktzyklen; ohne Pipeline sind es 15. + Bei l�ngeren Rechnungen ist der Unterschied deutlicher. + + \bigskip + + Als reales Beispiel wird im folgenden die Addition zweier beliebig langer Vektoren + mittels einer dreistufigen Pipeline auf einem i860-Prozessor gezeigt. + + Der erste Teil dient der Vorbereitung. + Hier werden Index-Variablen und Zeiger auf die beiden Arrays initialisiert. + Dies soll hier nicht n�her vertieft werden und wird nur der Vollst�ndigkeit halber aufgelistet. + \begin{verbatim} + .align 8 + .globl _vadd + nop + _vadd: + shr 1,r19,r19 + bte r19,r0,exitadd + addu 0x000F,r16,r16 + andnot 0x000F,r16,r16 + adds -16,r16,r16 + addu 0x000F,r17,r17 + andnot 0x000F,r17,r17 + adds -16,r17,r17 + addu 0x000F,r18,r18 + andnot 0x000F,r18,r18 + adds -16,r18,r18 + mov -1,r20 + \end{verbatim} + \goodbreak + Im zweiten Teil erfolgt die eigentliche Addition: + \begin{verbatim} + fld.q 16(r16)++,f16 + fld.q 16(r17)++,f20 + pfadd.dd f16,f20,f0 + bla r20,r19,loopadd + pfadd.dd f18,f22,f0 + loopadd: + d.pfadd.dd f0,f0,f0 + fld.q 16(r16)++,f16 + d.pfadd.dd f0,f0,f24 + fld.q 16(r17)++,f20 + d.pfadd.dd f16,f20,f26 + bla r20,r19,loopadd + d.pfadd.dd f18,f22,f0 + fst.q f24,16(r18)++ + nop + nop + nop + exitadd: + bri r1 + nop\end{verbatim} + \begingroup + \setlength{\unitlength}{\baselineskip}% + \begin{picture}(0,0)(-14.0,-18.9) + \color{red} + \put(0,0){\insns{5.9}} + \put(1.0,-2){\insns{6.0}} + \put(-11,-9){\line(-1,0){1}} + \put(-12,-9){\line(0,-1){2}} + \put(-12,-11){\line(-1,0){1}} + \put(-13,-11){\line(0,1){8}} + \put(-13,-3){\vector(1,0){0.7}} + \put(0.8,-7.8){\insnsup{1.7}} + \put(0.8,-10){\insnsup{1.8}} + \put(0,-12.5){\mbox{sechsmal \texttt{f0} = 2 Blasen}} + \end{picture}% + \endgroup + \texttt{r16} und \texttt{r17} sind ganzzahlige Register, + die hier als Zeiger auf die beiden Arrays verwendet werden. + + \texttt{f16} bis \texttt{f26} sind Flie�kommaregister. + Um doppelt genaue Operationen auszuf�hren (8-Byte- statt 4-Byte-Flie�kommazahlen), + werden jeweils zwei aufeinanderfolgende Flie�kommaregister zusammengelegt. + "`\texttt{f16}"' bezeichnet in diesem Programm also das Registerpaar \texttt{f16/f17}. + + Das Flie�kommaregister \texttt{f0} ist ein Pseudo-Register. + Das Lesen von \texttt{f0} ergibt grunds�tzlich Null, + und in \texttt{f0} geschriebene Werte werden verworfen. + + Der Befehl \texttt{fld} bedeutet: Lade das rechts stehende Flie�kommaregister. + Der Zusatz \texttt{.q} bewirkt, da� zwei Registerpaare, + also insgesamt vier Flie�kommaregister gleichzeitig geladen werden. + Der Speicherort, von dem geladen werden soll, + wird in der ersten Zeile mit \texttt{16(r16)++} angegeben. + \texttt{16(r16)} bedeutet: Lade die Flie�kommaregister von der Speicherzelle, + auf die das Ganzzahlregister \texttt{r16}, erh�ht um 16, zeigt. + Das \texttt{++} bedeutet, da� \texttt{r16} nach dem Ladevorgang um die Zahl vor der Klammer + (hier also 16 Bytes -- die Gr��e von zwei Registerpaaren) erh�ht wird. + + Der Befehl \texttt{pfadd.dd f16,f20,f0} + addiert zwei doppelt genaue Flie�kommaregisterpaare in einer Pipe\-line. + Die Rechnung $\texttt{f16} + \texttt{f20}$ wird begonnen; + das Rechenergebnis, das in diesem Moment aus der Pipeline kommt (hier: undefiniert), + wird im Flie�kommaregisterpaar \texttt{f0} gespeichert (hier also: verworfen). + + Der Befehl \texttt{bla r20,r19,loopadd} ("`Branch on LCC and Add"') ist ein bedingter Sprungbefehl. + Er addiert \texttt{r20} (enth�lt die Konstante $-1$) zu \texttt{r19} (Schleifenz�hler) + und verzweigt dann zu \texttt{loopadd}, + wenn \emph{beim vorherigen \texttt{bla}-Aufruf} das Ergebnis $\ge 0$ war, + wobei vor der Verzweigung noch eine Instruktion ausgef�hrt wird. + F�r den \texttt{bla}-Befehl oberhalb der Schleife + befindet sich das Verzweigungsziel \texttt{loopadd} genau dort, wo es ohnehin weiterginge. + Dieses \texttt{bla} verzweigt also gar nicht, + sondern es sorgt daf�r, da� das \texttt{bla} am Ende der Schleife + einen sinnvollen "`vorherigen \texttt{bla}-Aufruf"' vorfindet. + + F�r das \texttt{bla} am Ende der Schleife ist die zus�tzlich ausgef�hrte Instruktion + in dem roten Pfeil auf der linken Seite mit angedeutet. + + Die den Befehlen vorangestellten \texttt{d.} innerhalb der Schleife bedeuten, + da� der jeweils darunterstehende, einger�ckte Befehl \emph{gleichzeitig} mit ausgef�hrt wird. + + Innerhalb der Schleife werden vier Pipeline-Flie�kommabefehle ausgef�hrt. + Die Pfeile zeigen, wann jeweils das Ergebnis einer Rechnung vorliegt. + Die gleichzeitig ausgef�hrten Lade- und Speicherbefehle laden jeweils zwei neue Operanden + bzw.\ speichern zwei Ergebnisse. + + Obwohl parallel zur eigentlichen Addition + pro Rechenbefehl jeweils zwei Lade- oder Speicherbefehle ausgef�hrt werden, + bleibt das Laden und Speichern der "`Flaschenhals"' der Rechnung. + Dort, wo nicht schnell genug neue Operanden geladen werden k�nnen, + wird die Pipeline-Rechnung durch \texttt{d.pfadd f0,f0,f0} lediglich fortgesetzt, + ohne da� gleichzeitig eine neue Rechnung angeworfen wird. + Durch das Z�hlen der "`leeren"' \texttt{f0}-Operationen + k�nnen wir die Effizienz der Pipeline-Rechnung sofort ablesen: + Jeweils drei \texttt{f0} stehen zusammen f�r einen unproduktiven Taktzyklus + -- eine Blase in der Pipeline. + + Obwohl also der i860 theoretisch in jedem Taktzyklus eine Flie�kommaaddition vollenden k�nnte, + erreichen wir in der Praxis "`nur"' 2 Additionen (und 2 Blasen) in 4 Taktzyklen. + (Ohne Pipeline: 3 Taktzyklen pro Addition) + + \goodbreak + \bigskip + + Zum Abschlu� dieses Beispiels sei noch bemerkt, + da� es sich hier um ein ausgesprochen \emph{einfaches} Beispiel handelt. + �ber die hier kurz angerissenen Befehle hinaus kennt der i860-Prozessor z.\,B.\ noch Befehle, + bei denen gleichzeitig mit einer doppelt genauen Pipeline-Flie�kommaaddition + noch jeweils \emph{eine halbe} doppelt genaue Pipeline-Flie�kommamultiplikation ausgef�hrt wird. + Die Multiplikations-Pipeline steht nur in jedem zweiten Prozessortakt zur Verf�gung, + hat daf�r aber nur zwei Stufen (also vier Takte) anstatt, wie die Additions-Pipeline, drei. + + Bei optimaler Auslastung kann der i860 also pro Takt das Ergebnis einer Flie�kommaaddition + und einer halben Flie�kommamultiplikation abliefern + und gleichzeitig \emph{entweder}\/ bis zu zwei Lade- \emph{oder}\/ bis zu zwei Speicher-Operationen + \emph{oder}\/ eine Ganzzahl-Operation \emph{oder} einen Sprung ausf�hren, + wobei das Erh�hen oder Vergleichen eines Index \emph{keine}\/ Ganzzahl-Operation erfordert, + sondern "`nebenher"' erfolgt. + + Um diese "`Peak Performance"' tats�chlich zu erreichen, + ist zum einen eine "`passende"' Aufgabenstellung erforderlich, + zum anderen aufwendiges Optimieren des Assembler-Codes + -- entweder durch den Compiler oder manuell durch den Programmierer. + + \subsection{Instruktions-Pipelines} + + Ein Prozessor ben�tigt Zeit, um einen Befehl zu verstehen. + Gem�� dem Pipelining-Konzept ist es sinnvoll, + w�hrend der Ausf�hrung eines Befehls bereits die n�chsten Befehle vorauszulesen. + + Dies kann in manchen Situationen zu Problemen f�hren, + insbesondere bei bedingten Spr�ngen. + + Zur Illustration betrachten wir einen bedingten Sprung in einer beliebigen Assemblersprache. + + \begin{verbatim} + .L3: + movw r30,r20 + add r30,r18 + adc r31,r19 + mov r24,r18 + subi r24,lo8(-(1)) + st Z,r24 + subi r18,lo8(-(1)) + sbci r19,hi8(-(1)) + cp r22,r18 + cpc r23,r19 + brge .L3 + ret + \end{verbatim} + + \begin{picture}(0,0)(-0.95,-0.95) + \color{red} + \put(0.5,1.00){\line(-1,0){0.4}} + \put(0.1,1.00){\line(0,1){4.15}} + \put(0.1,5.15){\vector(1,0){0.4}} + \put(0.5,0.90){\line(-1,0){0.4}} + \put(0.1,0.90){\line(0,-1){0.35}} + \put(0.1,0.55){\vector(1,0){0.4}} + \put(4.5,0.825){\begin{minipage}[t]{8cm} + bedingter Sprung: + Welche Befehle vorauslesen?\\[\smallskipamount] + Kontrollflu�konflikt + \end{minipage}} + \end{picture} + + \vspace{-1.5\bigskipamount} + + \texttt{brge} ("`branch if greater or equal"') ist ein bedingter Sprungbefehl. + Vor dessen Ausf�hrung will der Prozessor bereits Befehle vorauslesen -- aber welche? + Wenn er das \texttt{ret} unterhalb von \texttt{brge} vorausliest, + ist diese Information wertlos, wenn nach oben gesprungen wird. + Wenn er das \texttt{movw} am Ziel des Sprunges vorausliest, + ist diese Information wertlos, wenn \emph{nicht} nach oben gesprungen wird. + + Immer wenn die vorausgelesene Information verworfen und neu gelesen werden mu�, + verliert der Prozessor Zeit. + Bei langen Befehls-Pipelines -- mehr als 10 Stufen in modernen Prozessoren -- + kann dies eine erhebliche Einbu�e an Effizienz bedeuten. + Dies nennt man einen Kontrollflu�konflikt. + + Zur Vermeidung von Kontollflu�konflikten versucht man, + Verzweigungen m�glichst zuverl�ssig vorauszusagen. + Hierzu seien mehrere Vorgehensweisen skizziert: + + \begin{itemize} + \setlength{\unitlength}{\baselineskip}% + \item + Wir nehmen an, da� es sich bei Spr�ngen nach oben um Schleifen + und bei Spr�ngen nach unten um Auswahl-Verzweigungen handelt. + In diesem Fall ist es sinnvoll, Spr�nge nach oben grunds�tzlich mit "`ja"' vorherzusagen + und Spr�nge nach unten grunds�tzlich mit "`nein"'. + + Wenn z.\,B.\ eine Schleife 99mal ausgef�hrt und beim 100sten Mal verlassen wird, + ergibt die Zweigvorhersage 99 Treffer und 1 Fehltreffer, + also nur 1 Blase als Folge eines Kontrollflu�konfliktes + gegen�ber 99 korrekt vorausgelesenen Befehlen. + Entsprechendes gilt f�r eine Auswahl von 100 Varianten, von denen nur eine gew�hlt wird. + + Diese primitive Art der Zweigvorhersage schl�gt fehl, + wenn das Programm z.\,B.\ eine Schleife enth�lt, die normalerweise direkt wieder verlassen wird, + oder wenn in einer Reihe von Befehlen jedem einzelnen eine Bedingung ("`\texttt{if}"') voransteht, + die normalerweise erf�llt ist. + + \goodbreak + \item + Ein anderes Konzept der Zweigvorhersage nutzt das Wissen aus, + das der Programmierer oder der Compiler �ber das Programm hat: + verz�gerte Spr�nge -- "`Delayed Branches"'. + + \begin{verbatim} + loopadd: + d.pfadd.dd f0,f0,f0 + fld.q 16(r16)++,f16 + d.pfadd.dd f0,f0,f24 + fld.q 16(r17)++,f20 + d.pfadd.dd f16,f20,f26 + bla r20,r19,loopadd + d.pfadd.dd f18,f22,f0 + fst.q f24,16(r18)++ + \end{verbatim} + \begingroup + \setlength{\unitlength}{\baselineskip}% + \begin{picture}(0,0)(-11.6,-14.3) + \color{red} + \put(-7,-9){\line(-1,0){1}} + \put(-8,-9){\line(0,-1){2}} + \put(-8,-11){\line(-1,0){1}} + \put(-9,-11){\line(0,1){8}} + \put(-9,-3){\vector(1,0){0.7}} + \end{picture} + \endgroup + + \vspace{-\bigskipamount} + + Der auf den Sprungbefehl folgende Befehl wird noch vor dem Sprung ausgef�hrt. + Der Programmierer entscheidet, wie dieser Befehl lautet, + und hat somit die M�glichkeit, die wahrscheinlichere Aktion -- mit bzw.\ ohne Sprung -- vorzubereiten. + + Im o.\,a.\ Beispiel f�r den i860 lautet der Befehl, der vor dem Sprung noch ausgef�hrt wird: + \begin{verbatim} + d.pfadd.dd f18,f22,f0 + fst.q f24,16(r18)++\end{verbatim} + Der Flie�kommateil \verb|d.pfadd.dd f18,f22,f0| + leitet eine neue Rechnung ein und setzt laufende Rechnungen fort, + ist also nur dann sinnvoll, wenn die Schleife fortgesetzt wird. + Der Ganzzahlanteil \verb|fst.q f24,16(r18)++| speichert das Ergebnis einer vergangenen Rechnung, + ist also in beiden F�llen sinnvoll. + Dieses Programm ist also daraufhin optimiert, da� die Schleife oft ausgef�hrt wird, + verliert aber auch im ung�nstigen Fall nur einen halben Taktzyklus (den Flie�kommaanteil). + + \item + Eine aus Hardware-Sicht aufwendigere L�sung ist das Konzept des "`Branch History Tables"': + Der Prozessor merkt sich f�r bedingte Spr�nge, + ob sie beim letzten Mal ausgef�hrt wurden oder nicht. + Wenn Code mehrfach ausgef�hrt wird, \emph{kann\/} dies eine sinnvolle Vorhersage sein. + \end{itemize} + + Diese Liste ist bei weitem nicht vollst�ndig, sondern soll nur einen kleinen Einblick vermitteln, + was alles n�tig ist, um die Leistungsf�higkeit aktueller Prozessoren zu erm�glichen. + + Die Sprung- oder Zweigvorhersage ist ein wichtiges Konzept moderner Prozessoren + und Gegenstand aktueller Forschung. + + \clearpage + \section{Ausblick} + + \begin{itemize} + \item + Aktuelle Prozessoren implementieren + \newterm{explicitly Parallel Instruction Computing (EPIC)}. + \item + \newterm{Field Programmable Gate Arrays (FPGAs)\/} + sind Bausteine, auf denen man per Software Logik-Schaltungen entstehen l��t + (Hardwarebeschreibungssprachen: VHDL, Verilog). + Auf diese Weise erzeugt man spezialisierte Computer-Hardware, + die ihre Aufgaben selbst bei vergleichsweise niedrigen Taktfrequenzen + effizienter erledigen als Allzweck-Computer. + \item + \newterm{C-to-Hardware-Synthese\/}: + Es ist auch m�glich, spezialisierte Hardware direkt anhand von C-Code + (anstelle von VHDL, Verilog) zu generieren. + \end{itemize} + + \clearpage + + \begin{thebibliography}{9} + \bibitem{WP: Rechnertechnik} + \url{http://de.wikipedia.org/wiki/Rechnertechnik}, + abgerufen am 7.\,10.\,2012 +% \bibitem{WP: Galoistheorie} +% \url{http://de.wikipedia.org/wiki/Galoistheorie}, +% abgerufen am 7.\,10.\,2012 + \bibitem{Analogcomputer} + \url{http://www.robotrontechnik.de/html/computer/analogrechner.htm},\\ + \url{http://www.heise.de/tp/artikel/36/36877/1.html}, + beides abgerufen am 7.\,10.\,2012 + \end{thebibliography} + +\end{document} diff --git a/script/rtech-slides-title-2021ss.pdf b/script/rtech-slides-title-2021ss.pdf new file mode 100644 index 0000000000000000000000000000000000000000..61a6cd7fd343334c44fa90bde3c5bd38ae3e0a44 Binary files /dev/null and b/script/rtech-slides-title-2021ss.pdf differ diff --git a/script/rtech-slides-title-2021ss.tex b/script/rtech-slides-title-2021ss.tex new file mode 100644 index 0000000000000000000000000000000000000000..0f848b8eac6f6a8cbd65f8f28a0bf776c9983b31 --- /dev/null +++ b/script/rtech-slides-title-2021ss.tex @@ -0,0 +1,75 @@ +% rtech-slides-title-2021ss.pdf - Title Page for Lecture Slides on Computer Technology +% Copyright (C) 2018, 2019, 2020, 2021 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} + +\setlength{\parskip}{\medskipamount} + +\title{Rechnertechnik} +\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} +\date{Sommersemester 2021} + +\begin{document} + +\maketitleframe + +\nosectionnonumber{Wichtiger Hinweis} + +\begin{frame}[plain] + + \vfill + + \shownosectionnonumber + + \vspace*{-\medskipamount} + + Diese Vortragsfolien dienen dazu, den Vortrag der/des Lehrenden zu unter-\\stützen. + Sie enthalten \textbf{nur einen Teil} der Lerninhalte. + Wie groß dieser Teil ist, hängt von den konkreten Lerninhalten ab + und kann von "`praktisch alles"' bis "`praktisch gar nichts"' schwanken. + Diese Folien alleine sind daher + \textbf{nicht für ein Selbststudium geeignet!} + Hierfür sei auf das Skript verwiesen, + in dem allerdings keine tagesaktuellen Änderungen enthalten sind. + + Mindestens genauso wichtig wie die Vortragsfolien sind die Beispiel-Programme, + die vor Ihren Augen in den Vorlesungen erarbeitet werden. + Diese sind im Git-Repository + (\url{https://gitlab.cvh-server.de/pgerwinski/rtech.git}) + mit allen Zwischenschritten enthalten und befinden sich + in den zu den jeweiligen Kalenderdaten gehörenden Verzeichnissen + (z.\,B.\ für den 6.\kern0.5pt4.\,2021 unter + \url{https://gitlab.cvh-server.de/pgerwinski/rtech/tree/2021ss/20210406/}\kern1pt). + + Wenn Sie die Übungsaufgaben bearbeiten, nutzen Sie die Gelegenheit, + Ihre Lösungen in den Übungen überprüfen zu lassen. + Wer nach Vergleich mit der Musterlösung zu dem Schluß kommt, + alles richtig gelöst zu haben, erlebt sonst in der Klausur oft eine + unangenehme Überraschung. + + \strut\hfill In jedem Fall: \emph{Viel Erfolg!} + +\end{frame} + +\end{document} diff --git a/script/sfmath.sty b/script/sfmath.sty new file mode 120000 index 0000000000000000000000000000000000000000..599e505416fb5a096f751581a66c53bc109e935d --- /dev/null +++ b/script/sfmath.sty @@ -0,0 +1 @@ +../common/sfmath.sty \ No newline at end of file diff --git a/script/sm-code-screenshot.png b/script/sm-code-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fc78b838358ccae0d53997bad05ebda574935306 Binary files /dev/null and b/script/sm-code-screenshot.png differ diff --git a/script/speicher-1.jpg b/script/speicher-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ece214d877b81550fd041f066cf2664b619abc3 Binary files /dev/null and b/script/speicher-1.jpg differ diff --git a/script/speicher-2.jpg b/script/speicher-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea709e972e2ba090f68f9086931b86250fe08a1c Binary files /dev/null and b/script/speicher-2.jpg differ diff --git a/script/tp-netz.jpg b/script/tp-netz.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06db706b2fecc417b526d19a7e065e0813cc6906 Binary files /dev/null and b/script/tp-netz.jpg differ diff --git a/script/wlan-access-point.jpg b/script/wlan-access-point.jpg new file mode 100644 index 0000000000000000000000000000000000000000..511fd8cbef39a7dc49c4167a3eb231bdb457b551 Binary files /dev/null and b/script/wlan-access-point.jpg differ