summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/avremu/avremu.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/avremu/avremu.tex')
-rw-r--r--macros/latex/contrib/avremu/avremu.tex132
1 files changed, 132 insertions, 0 deletions
diff --git a/macros/latex/contrib/avremu/avremu.tex b/macros/latex/contrib/avremu/avremu.tex
new file mode 100644
index 0000000000..3fe7b693e8
--- /dev/null
+++ b/macros/latex/contrib/avremu/avremu.tex
@@ -0,0 +1,132 @@
+\documentclass{article}
+\usepackage{avremu}
+\usepackage{listings}
+\usepackage{hyperref}
+\usepackage{filecontents}
+\usepackage{tcolorbox}
+\usepackage{ydoc}
+
+\def\fileversion{v0.1}
+\def\filedate{2014/10/09}
+
+\makeatletter
+\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}}
+\def\cmd@to@cs#1#2{\char\number`#2\relax}
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\makeatother
+
+\begin{filecontents*}{hello-world.c}
+#include <avr/io.h>
+
+int
+main(void)
+{
+ char *str = "Hello World!";
+ char *p = str;
+ while (*p) {
+ UDR = *p++;
+ }
+ asm volatile ("break;");
+}
+\end{filecontents*}
+
+\title{The \texttt{avremu} Package}
+\author{Christian Dietrich\\
+\url{stettberger@dokucode.de}\\
+\url{https://gitlab.brokenpipe.de/stettberger/avremu}}
+
+\begin{document}
+
+\maketitle
+
+\begin{tcolorbox}
+ \lstinputlisting[language=C]{hello-world.c}
+ \tcblower
+ \begin{lstlisting}[language=TeX]
+\avrloadc{hello-world.c}
+\avrrun
+UDR='\avrUDR' in \avrinstrcount\ instructions
+\end{lstlisting}
+\end{tcolorbox}
+\begin{tcolorbox}
+\avrloadc{hello-world.c}\avrrun
+UDR='\avrUDR' in \avrinstrcount\ instructions
+\end{tcolorbox}
+
+
+\LaTeX\ is known as a typesetting system. But the underlying \TeX\ system is a powerful macro
+processor. In fact, TeX is a Turing-complete programming language. \TeX\ can compute anything that
+is computable. Computeability is a concept from theoretical computer science. After visiting a
+theoretical computer-science course, you will know that there are things that cannot be solved by a
+machine. Never. Look out for the halting problem.
+
+This package does contain an \emph{CPU emulator} for the 8-bit microcontroller platform Atmel AVR, more
+precisely it implements the instruction-set architecture of the \texttt{ATmega8}.
+
+\begin{tcolorbox}
+\begin{lstlisting}[language=TeX]
+\avrloadc{mandelbrot.c}
+\avrrun
+
+\avrdrawppm{mandelbrot.ppm}
+\immediate\write18{convert mandelbrot.ppm mandelbrot.png}
+
+\includegraphics[width=\linewidth]{mandelbrot.png}
+\end{lstlisting}
+ \tcblower
+ This picture (250x250) took 44 hours to render. The source code can be found in the test-suite
+ directory under mandelbrot.c.\\
+
+ \includegraphics[width=\linewidth]{imgs/mandelbrot-250x250}
+\end{tcolorbox}
+
+\section{Provided Commands}
+
+\DescribeMacro{\avrloadihex}{\meta{filename}}
+Load an Intel HEX formatted image of the flash into the code memory of the AVR
+emulator. Additionally the state of the AVR emulator is set back to zero.
+
+\DescribeMacro{\avrloadc}[\meta{compiler options}]{\meta{filename}}
+Requires \verb|--shell-escape|. Compiles C source code file with \verb|avr-gcc| and the given
+compiler options. The default compiler option set is \verb|-mmcu=atmega8 -Os|. The resulting
+\texttt{.elf} file is transformed to an Intel HEX file and loaded into the code memory of the
+emulator.
+
+\DescribeMacro{\avrrun}
+Run the emulator until a \textbf{break} instruction occurs.
+
+\DescribeMacro{\avrstep}[\meta{steps}=1]
+Run the emulator for N instructions. The default is a single step. The stepping does automatically
+end, if a \textbf{break} instruction is executed.
+
+\DescribeMacro{\avrinstrcount}
+Expands to the number of executed instructions.
+
+\DescribeMacro{\avrsinglestep}
+Starts an interactive single-stepping mode, which was mainly used for implementing the emulator.
+
+\DescribeMacro{\usravremulibrary}{\meta{list of libraryies}}
+
+\subsection{Access to the Serial Console}
+If the program write to the \verb|UDR| IO register, the emulator catched those characters in an
+internal buffer.
+
+\DescribeMacro{\avrUDR}
+Expands to the internal UDR buffer.
+
+\DescribeMacro{\avrUDRclear}
+Clears the internal UDR buffer.
+
+\subsection{Draw Library}
+\DescribeMacro{\useavremulibrary}{avr.draw}
+
+See source/test-suite/mandelbrot.c for more details.
+
+\section{Implementation Details}
+Read the source.
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End: