% Content-encoding: UTF-8
\documentclass[ngerman]{article}
\usepackage[utf8]{inputenc}
\usepackage{multicol,babel}
\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{0}

\renewcommand{\reftextbefore}{auf der vorherigen Seite}
\renewcommand{\reftextfacebefore}{auf der gegenüberliegenden Seite}
\renewcommand{\reftextafter}{auf der nächsten Seite}
\renewcommand{\reftextfaceafter}{auf der gegenüberliegenden Seite}


\begin{document}
% \renewcommand{\figurename}{Tabelle}
\newcommand{\amforth}{{amforth}}

\title{Dump — Kleine Helfer fürs \amforth}
\author{Michael Kalus}
\maketitle
\begin{multicols}{2}
In Microcontrollern wie dem AVR--Atmega gibt es drei verschiedene Speicherbereiche --- Ram, Flash und Eeprom --- die unterschiedlich organisiert sind. Auf das Ram kann byteweise zugegriffen werden. Das Flash wird zellenweise angesprochen, ebenso wie das Eeprom. So braucht jeder Speicherbereich sein eigenes fetch, um daraus einen Wert zu lesen und auf den Forth--Daten--Stack zu holen. \texttt{i@} \texttt{e@} und \texttt{@} erledigen das im \amforth\footnote{Das \texttt{i} im \texttt{i@} stammt aus der Bezeichnung des Flash als \emph{instruction memory}.}.

Für allzu kompliziert formulierte \emph{Dumper} ist da z.~B.\ im Butterfly kein Platz. Üppigere Versionen von \texttt{dump}, wie für Ram--basierte Systeme, kann man nicht importieren. Deshalb macht man sich seine eigenen kleinen Helfer. Für jeden Bereich ist ein eigenes \texttt{dump} schnell gemacht; je ein \texttt{idump} für das Flash, \texttt{edump} für das Eeprom und \texttt{dump} für das Ram. Gut ausfaktorisiert hat der Code dann zwar zunächst mehr Header, liefert dafür aber gleich die Minitools wie das \texttt{?} (Fragezeichen) mit. Mit dem Fragezeichen wird bekanntlich der Inhalt einer Adresse angezeigt. Hier gibt es dann naturgemäß ein \texttt{i?} \texttt{e?} und \texttt{?} sozusagen gratis dazu. Da \texttt{dump} traditionell auch die ASCII--Werte der Daten mit anzeigt, aus Platzgründen aber auf komplizierte Aufbauten hier im \amforth\ verzichtet wird, gibt es zumindest ein \texttt{i??} \texttt{e??} und \texttt{??}, welche neben dem Wert in einer Adresse auch seine ASCII--Werte wiedergibt. Dargestellt wird immer der Wert einer Zelle (cell), also 2 Bytes. Dies geschieht, weil im Flash jede Adresse einer Zelle entspricht und der Einfachheit halber im Forth mit \texttt{@} auch aus dem Ram und Eeprom gleich eine Zelle geholt wird. Das folgende Beispiel illustriert die Verwendung. Die Dumper liegen auch als Assemblerquelle vor. 

\begin{verbatim}
> : test  ." hallo" ;  test 
hallo ok 
> ' test 10 - 20 idump 
 C58   4B2 1E98 1DC3 1E63 1E63  797 1C8D   72 
 C60    98 1E98 1EAD 1DC3 1E5C 1E5C  797 1C41 
 C68  7404 7365   74 1FEB 1C0A  235 6805 6C61 
 C70  6F6C  261 1C41 FFFF FFFF FFFF FFFF FFFF 
 C78  FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF  
 ok 

> c68 i?? 
7404 t.  ok 
> c70 i?? 
6F6C ol  ok 
\end{verbatim}
\end{multicols}

\subsection*{Wörter} 
\texttt{i?} \texttt{e?} \texttt{?} \texttt{i??} \texttt{e??} \texttt{??} \texttt{idump} \texttt{edump} \texttt{dump} \\
Die übrigen Wörter dieser Quelle können auch headerless gehalten werden, wenn man mag. 

\section*{Quellen}
\url{http://amforth.sourceforge.net/}\\
\url{http://www.forth-ev.de/wiki/doku.php/words:dump}

%\newpage
\section*{Listing} 
\begin{quote}
\listinginput[1]{1}{2008-04/dumper.fs}
\end{quote}

% \end{document}