\documentclass[twoside,a4paper,10pt]{report}
\usepackage[german]{babel} %% Use your own babel language
\usepackage[top=3cm,bottom=3cm,left=2.5cm,right=2.5cm]{geometry}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage{pslatex}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{supertabular}
\usepackage{pdflscape} %% Used for very big table
\usepackage{moreverb}
\usepackage{color}
\usepackage{listings}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage{ulem}
\usepackage{textcomp}
\usepackage{wasysym}
\usepackage{wrapfig} %%Usefull for image 
%\usepackage{fguill} %%Use this package for guillemot[left|right] useless with babel set to french
\usepackage{eso-pic} %% Background
\pagestyle{fancy}%
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\chaptermark}[1]{%
	\markboth{\chaptername\ \thechapter.\ #1}{}}

\renewcommand{\sectionmark}[1]{%
	\markright{#1}{}}

\fancypagestyle{plain}{%
\fancyhf{}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\fancyhf{}
\fancyhead[L]{\rightmark}
\fancyhead[R]{\leftmark}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}

\definecolor{codegray}{gray}{.95}
\lstset{language=C,
	numbers=left,
	tabsize=2,
	basicstyle=\scriptsize,
	stringstyle=\textrm,
	showstringspaces=false,
	frame=none,
	xleftmargin=3pt,
	backgroundcolor=\color{codegray}}

\newcommand{\settexitref}[2]{(\ref{#1}p\pageref{#1})}
\newcommand{\dokutitlelevelone}[1]{\chapter{#1}}
\newcommand{\dokutitleleveltwo}[1]{\section{#1}}
\newcommand{\dokutitleleveltree}[1]{\subsection{#1}}
\newcommand{\dokutitlelevelfour}[1]{\subsubsection{#1}}
\newcommand{\dokutitlelevelfive}[1]{\paragraph{#1}}
\newcommand{\dokufootnote}[1]{\footnote{#1}}
\newcommand{\dokufootmark}[1]{\footnotemark[#1]}
\newcommand{\dokubold}[1]{\textbf{#1}}
\newcommand{\dokuitalic}[1]{\textsl{#1}}
\newcommand{\dokumonospace}[1]{\texttt{#1}}
\newcommand{\dokuunderline}[1]{\underline{#1}}
\newcommand{\dokuoverline}[1]{\sout{#1}}
\newcommand{\dokusupscript}[1]{\textsuperscript{#1}}
\newcommand{\dokusubscript}[1]{$_{#1}$}
\newcommand{\dokuhline}{\line(1,0){400}}
\newcommand{\dokulabel}[1]{\label{#1}}
\newcommand{\dokuitem}{\item}
\newcommand{\dokuquoting}{\textbar}
\newcommand{\dokutabularwidth}{\textwidth}
\newcommand{\dokusupertabularheadbreak}{\small\sl continued from previous page}
\newcommand{\dokusupertabulartailbreak}{\small\sl continued on next page}
\newcommand{\dokuheadingstyle}[1]{\textbf{#1}}
\definecolor{dokuheadingcolor}{rgb}{0,0,0.60}
\newcommand{\dokubackground}[1]{%
\AddToShipoutPicture{%
  \AtTextCenter{%
    \makebox(0,0)[c]{\resizebox{\textwidth}{!}{%
      \rotatebox{25}{\textsf{\textbf{\textcolor[gray]{0.90}{#1}}}}}}%
  }%
 }%
}

\hypersetup{
pdftitle = {Gforth EC R8C},
pdfauthor = {Bernd Paysan},
pdfcreator = {DokuTeXit},
pdfproducer = {dokuwiki + TeXit + latex + dvipdf}
}
\title{Gforth EC R8C}
\author{Bernd Paysan}
\dokubackground{http://www.forth-ev.de/wiki/}
\begin{document}
\thispagestyle{empty}
\maketitle
\thispagestyle{empty}
\cleardoublepage
\tableofcontents
\newpage
\thispagestyle{plain}
\cleardoublepage
\newpage



\dokutitlelevelone{R8C-Forth}
\label{14af015ec63ce917057f8bc2d26717e2}%% r8c-forth
\label{e9f8d6c1f7218405e1f4a0144a1ea100}%%Start: r8c_forth => /var/www/forth-ev/public_html/wiki/data/pages/r8c_forth.txt

In der Dezember-Ausgabe der \href{http://www.elektor.de}{Elektor} wurde ein \href{http://eu.renesas.com/}{Renesas}-\href{http://eu.renesas.com/fmwk.jsp?cnt=r8ctiny_series_landing.jsp&fp=/products/mpumcu/m16c_family/r8c_tiny_series/}{R8C}-\href{http://www.elektor.de/Default.aspx?tabid=109}{Board} von \href{http://www.glyn.de}{Glyn} verteilt. Die Software von Glyn beinhaltet einen C-Compiler, aber interessanter ist es natürlich, ein Forth auf der CPU laufen zu lassen.

Hier auf der Seite wird kurz beschrieben, wie das Gforth-ec in den R8C kommt und benutzt werden kann. 

Wer sich mit Unix etwas auskennt, wird sich leicht zurecht finden. Wer so rein gar nichts mit Unix zu tun hatte in seinem Leben, wird aber auch nicht im Stich gelassen. Denn es gibt auch noch die Schritt für Schritt bebilderten Anleitungen um mit Gforth erste Versuche auf dem R8C machen zu können - \hyperref[1120bae408e328e27c7e4f810f84eda9]{für Windows XP} - \hyperref[64fd8ce2afbaf5705b96d82830cdb6fb]{für Linux} - (und leider bisher nur ein \hyperref[9e03bcfd978e74a3f50c44ce3f93dfc4]{Error log Mac OSX}). 


\dokutitleleveltwo{Aufgabenverteilung}
\label{1fe04df43ea9e3453beb88b07df400f4}%% aufgabenverteilung

\begin{itemize}
\dokuitem  Heinz Schnitter schreibt den Assembler $<$latex$>${\textbackslash}checkmark$<$/latex$>$
\dokuitem  \href{http://www.jwdt.com/~paysan}{Bernd Paysan} passt Gforth-EC an den R8C an $<$latex$>${\textbackslash}checkmark$<$/latex$>$
\end{itemize}

\dokutitleleveltwo{Status 09jul2006}
\label{252c0a0afa8272a58ac059b0b2ced232}%% status_09jul2006

Das System ist fertig.

\begin{wrapfigure}{r}{0pt}
\includegraphics{/var/www/forth-ev/public_html/wiki/lib/plugins/tmp/texitimages/texitvDbVdm.ps}
\end{wrapfigure}




\begin{itemize}
\dokuitem  Das Forth sagt OK über die UART, kann LEDs und LCD ansteuern, legt selbstdefinierte Programme per Default im (sehr knappen) RAM ab. Umschalten zwischen RAM und ROM mit den Wörtern \dokumonospace{ram} und \dokumonospace{rom} \includegraphics[height=1em]{/var/www/forth-ev/public_html/wiki/lib/plugins/tmp/texitimages/texitr4d96b.ps}.
\dokuitem  Das Daten-Flash kann mit \dokumonospace{flashc!} und \dokumonospace{flash!} programmiert werden.
\dokuitem  Gforth ist so anpasst, dass Code Flash-gerecht abgelegt wird (also jedes Bit genau einmal gelöscht wird). Immediate- und Compile-only-Bit sind also zunächst gesetzt (bedeutet natürlich "nicht immediate" und "nicht compile-only"), und werden bei Bedarf gelöscht. Ebenso ist \dokumonospace{:dovar} an einer Adresse, die das Ändern auf andere Doer (mit \dokumonospace{DOES$>$}) ermöglicht ({\textdollar}C0FE).
\dokuitem  Gforth EC R8C erlaubt das Anlegen von bis zu 4k Forth-Programmen im Datenflash. Ein \dokumonospace{savesystem} speichert eine Kopie des RAMs in dieses Flash; damit sind auch Turnkey-Applikationen möglich. Das Datenflash kann öfter neu programmiert werden als das Programmflash, damit ist auch mehr Platz für Experimente. Ein \dokumonospace{empty} löscht das gespeicherte System wieder.
\dokuitem  Der Assembler ist jetzt wirklich komplett.
\dokuitem  Der Rest des im ROM zur Verfügung stehenden Platzes ist mit benutzerfreundlichen Fehlermeldungen gefüllt
\dokuitem  Es gibt ein Terminal-Programm, das auch das Nachladen von Dateien über ein einfaches Handshake erlaubt (Xon/Xoff scheitert am Polling-Intervall des USB-Controllers, krude Abhilfe: 250ms Newline-Delay)
\dokuitem  Eine Adaption von \dokumonospace{tt.fs} passt in die 4K ROM.
\dokuitem  Millisekunden werden über Timer C realisiert.
\dokuitem  Nested \dokumonospace{include} ist möglich (neu).
\dokuitem  Alle bisher bekannten Bugs sind behoben.
\end{itemize}

\dokutitleleveltwo{Download von gforth}
\label{70e5e9ea8d5009a89c41fc45a13b72e6}%% download_von_gforth

Die \dokubold{aktuelle} Entwicklerversion von \href{http://www.jwdt.com/~paysan/gforth.html}{Gforth} kann über \href{http://www.complang.tuwien.ac.at/forth/gforth/cvs-public/}{pserver-CVS geladen} werden. Mit älteren Versionen des Gforth kann manches der weiter unten aufgeführten Beispiele nicht ausgeführt werden, so war früher z.B. noch kein GforthTerminal für den r8c dabei. Wer die \href{http://www.complang.tuwien.ac.at/forth/gforth/Docs-html}{Doku von Gforth} nicht auf der \href{http://www.jwdt.com/~paysan/gforth.html}{Gforth-Seite} suchen will, findet sie \href{http://www.complang.tuwien.ac.at/forth/gforth/Docs-html}{hier}. Da GforthEC nur ein Subset der Wörter im normalen Gforth hat, hilft ein \dokumonospace{WORDS}, um alle im R8C verfügbaren Wörter aufzulisten.

Für Windows-Nutzer, die keine Lust haben, Cygwin zu installieren, gibt's einen \href{http://www.jwdt.com/~paysan/gforth-0.6.2-20060709.exe}{Snapshot} in Form einer \dokumonospace{setup.exe} der aktuellen Entwicklerversion. 


\dokutitleleveltwo{Download von gforth-ec}
\label{42825dcb90286920d5c947aeaf1cbe01}%% download_von_gforth-ec

Das \href{http://www.jwdt.com/~paysan/gforth-r8c.mot}{Gforth-R8C} selbst ist als S-Record-Datei abgelegt und wird in dieser Form in das Flash-Memory des R8C geladen.


\dokutitleleveltwo{Installation und Handhabung des gforth}
\label{56cb366ade3fa361c8456e0e296e1e0a}%% installation_und_handhabung_des_gforth

Installiert man zunächst \href{http://www.cygwin.com}{Cygwin} und dann Gforth aus den Sourcen, sollte man vor dem \dokumonospace{./configure \&\& make} noch die \href{http://loreley.ath.cx/cygwin/cygwin-1.5/libffi-cygwin-standalone/libffi-2.00-beta-1.tar.bz2}{libffi} installieren.

Installiert man obige \dokumonospace{setup.exe}, werden alle benötigten Libraries mitinstalliert. 

\dokubold{Hinweis:} \dokumonospace{setup.exe} installiert in Windows-XP eine Gruppe von Programmen. Dies sind: Bash, Gforth, Gforth Manual, Gforth Manual (PDF\dokufootnote{Portable Document Format}) und noch einige. Gehe zu dieser Programmgruppe und starte die \dokumonospace{Bash} (Start $>$ Alle Programme $>$ Gforth $>$ Bash) \dokumonospace{Bash} ist eine Shell (die "Bourne Again SHell"). Diese meldet sich im Bash-Fenster nun als \dokumonospace{sh:-3.00{\textdollar}} oder ähnlich. Auf dieser Komandozeile werden alle Anweisungen, die nun folgen, eingegeben.

Alle folgenden Anweisungen gehen also von einer frisch geöffneten Shell aus (für Cygwin-Nutzer: Im Gforth-Verzeichnis). Innerhalb der \dokumonospace{shell} muss tatsächlich \dokumonospace{/} benutzt werden (der \dokuitalic{slash} und nicht wie in Windows sonst üblich \dokumonospace{{\textbackslash}} der \dokuitalic{backslash})  also zeichengenau so abtippen wie es hier im Folgenden nun geschrieben steht. \includegraphics[height=1em]{/var/www/forth-ev/public_html/wiki/lib/plugins/tmp/texitimages/texitr4d96b.ps}


\dokutitleleveltree{ROM-Image für den R8C erzeugen}
\label{3ebee9b1f5cd384d927b786558552384}%% rom-image_fuer_den_r8c_erzeugen

Mit



\small
\begin{verbatimtab}

./build-ec r8c

\end{verbatimtab}
\normalsize

erzeugt man eine Datei \dokumonospace{rom-r8c.mot} (sie sollte der \dokumonospace{\href{http://www.jwdt.com/~paysan/gforth-r8c.mot}{gforth-r8c.mot}} von oben entsprechen). Es wird auch noch ein \dokumonospace{data-r8c.mot} erzeugt, mit dem man ein zerschossenes Daten-Flash wieder in Ordnung bringen kann. Das \dokumonospace{rom-r8c.mot} lädt man in's Flash. Danach kann man ein Terminal mit 38400 Baud 8N1 anschließen (etwa das Hyperterm, das in Windows eingebaut ist  Verbindung auf "COMx" setzen), und interaktiv mit dem Forth im R8C arbeiten. Die Kommunikation findet über dieselbe serielle Schnittstelle statt, mit der man das Flash programmiert  kein Umstöpseln nötig. Das Nachladen von Dateien geht mit einem normalen Terminalprogramm nur, wenn man ca. 250ms als Newline-Verzögerung einstellt, da Xon/Xoff zu langsam reagieren.

Spielen Sie ein wenig mit dem Forth das nun im R8C ist, etwa


\lstset{language=forth}
\begin{lstlisting}
1 2 + .
lcdpage
s" Hello World" lcdtype
adc@ .

\end{lstlisting}
Alle erlaubten Wörter werden mit


\lstset{language=forth}
\begin{lstlisting}
words

\end{lstlisting}
gelistet (zuletzt definierte zuerst).


\dokutitleleveltree{Forth-Terminal von gforth aus}
\label{9faaccb1148ba04d7618db8ffc54102f}%% forth-terminal_von_gforth_aus

Mit



\small
\begin{verbatimtab}

./gforth arch/r8c/terminal.fs

\end{verbatimtab}
\normalsize

startet man das in Gforth eingebaute Terminal. Das Terminal hat kein eigenes Fenster, sondern läuft nun \dokuitalic{innerhalb der shell}. Wenn die Verbindung zum r8c steht, gibt es ein \dokumonospace{ok} sobald man \dokuitalic{$<$return$>$} gedrückt hat. 

Mit diesem Terminal kann man nun auch



\lstset{language=forth}
\begin{lstlisting}
include arch/r8c/tt.fs

\end{lstlisting}

eingeben, und das adaptierte Tetris-for-Terminals von Dirk Zoller laden (dauert etwas  der R8C compiliert den Code schließlich selbst). Starten mit



\lstset{language=forth}
\begin{lstlisting}
tt
\end{lstlisting}
Es folgen einige Hinweise für die verschiedenen Betriebssysteme.


\dokutitlelevelfour{Windows XP}
Das Terminal nimmt per Default die Verbindung über COM2 auf  wenn nötig, die Datei \dokumonospace{terminal.fs} editieren: Ganz gegen Ende der Datei wird das grad angelegte Terminal aufgerufen, die Schnittstelle ausgewählt und das Skript verlassen \dokumonospace{terminal COM2 bye}. Hier kann man statt dessen \dokumonospace{COM1} eintragen; stimmt der Port nicht, reagiert das Terminal nicht! 

Weiterer Hinweis: Auf dem \href{http://www.elektor.de/Default.aspx?tabid=27&year=2006&month=1&art=5550655&PN=On}{Application-Board für den R8C/13} von Elektor ist der USB-serial-Wandler PL2303X von Prolific schon mit drauf. Der braucht einen  \href{http://www.prolific.com.tw/eng/downloads.asp?ID=31}{passenden Treiber}. Dieser trägt sich im System als COMx ein, wobei x für den nächsten freien COM-Port steht  bei mir war es COM5. Diesen Portnamen in der Datei terminal.fs wie beschrieben eintragen und das Gforth-Terminal arbeitet über USB mit dem Gforth im r8c.

Oder  bei Verwendung eines USB-Adapters  die Schnittstelle über den Gerätemanager auf COM2 festlegen. 


\dokutitlelevelfour{Linux}
Hier wird \dokumonospace{/dev/ttyUSB0} verwendet und auch hier kann man entsprechend durch Editieren eine andere Schnittstelle festlegen.


\dokutitleleveltree{Lauflicht im R8C}
\label{5b5067a2b828844cd80960ba4596b79a}%% lauflicht_im_r8c

Ein einfaches Lauflicht, das nach dem Reset gleich losläuft, bis man über's Terminal eine Taste drückt:


\lstset{language=forth}
\begin{lstlisting}
rom
: licht!  led!  &100 ms ;
: lauf  1 licht! 2 licht! 4 licht! 8 licht!
  4 licht! 2 licht! ;
: dauerlauf  BEGIN  lauf  key?  UNTIL ;
' dauerlauf is bootmessage
ram
savesystem

\end{lstlisting}

\dokutitleleveltree{ADC Wandler im R8C}
\label{c04e962505ac17f9496a3b7274f16a45}%% adc_wandler_im_r8c

Eine Schleife, die vom ADC liest und auf dem LCD ausgibt:


\lstset{language=forth}
\begin{lstlisting}
: adcmeter
  BEGIN  6 adc@ 0 <# #s #> lcdpage lcdtype &200 ms
         key? UNTIL ;

\end{lstlisting}

\dokutitleleveltree{Multitasker}
\label{b2d47518702097e86b6eaf0c0a91fe1a}%% multitasker

Und hier gibt's einen ganz einfachen Multitasker, der genau \dokubold{einen} Hintergrundtask erlaubt:


\lstset{language=forth}
\begin{lstlisting}
rom

Variable bgtask ram $20 cells allot rom
:noname  bgtask @ 0= ?EXIT
    rp@ bgtask @ sp@ cell+ bgtask ! sp! rp! ;
IS pause
: task r> bgtask $20 cells + !
  bgtask $20 cells + bgtask $10 cells + !
  bgtask $10 cells + bgtask ! ;
:noname echo @ IF
     BEGIN pause key? UNTIL THEN (key) ;
is key

ram

\end{lstlisting}
Als Beispiel eine adaptierte Version des Lauflichts von oben:


\lstset{language=forth}
\begin{lstlisting}
rom
: licht!  led!  &100 ms ;
: lauf  1 licht! 2 licht! 4 licht! 8 licht!
  4 licht! 2 licht! ;
: dauerlauf
  task  BEGIN  lauf  AGAIN ;
ram

\end{lstlisting}

\dokutitleleveltree{Lauftext}
\label{27a76f54117f2cbcc89be5038f5ca9e5}%% lauftext

Analog zum Lauflicht kann man auch einen Lauftext erzeugen  und über das Poti die Textgeschwindigkeit einstellen:


\lstset{language=forth}
\begin{lstlisting}
rom

Create text
," GNU Forth EC R8C -- Mikroprozessor -- "
Create ledtable 1 c, 2 c, 4 c, 8 c, 4 c, 2 c,
Variable /text

: lauftext  task
  BEGIN  text count /text @ over mod /string
         16 min dup >r lcdpage lcdtype
         r@ 16 < IF  text 1+ 16 r@ - lcdtype  THEN
         rdrop 1 /text +!
         /text @ 6 mod ledtable + c@ led!
         6 adc@ 2/ ms
  AGAIN ;

ram

\end{lstlisting}

\dokutitleleveltwo{Tipps und Tricks}
\label{accdae196bd4428a419c6db91c338a07}%% tipps_und_tricks

Wenn man sich \hyperref[c0ac45f045c31f413c0474906e63249b]{Ausgesperrt} hat, hilft dieser Trick von Erich Wälde.


\dokutitleleveltwo{Links}
\label{807765384d9d5527da8848df14a4f02f}%% links

\begin{itemize}
\dokuitem  Peter Ouwehand beschreibt das \href{http://home.iae.nl/users/pouweha/lcd/lcd0.shtml\#hd44780}{HD44780 LCD}. Und hier kann man das \href{http://www.ak-modul-bus.de/stat/lcd_modul_162b.html}{LCD-Modul 162b} kaufen (hat auch ein Link auf das \href{http://www.ak-modul-bus.de/cat/documentation/162b series-v12.pdf}{Datenblatt} drin)
\dokuitem  \href{http://www.elektor.de/default.aspx?tabid=29&view=topic&forumid=23&postid=3645}{Thread zum Programmieren des Daten-Flashs}
\dokuitem  Thomas Fischl hat einen \href{http://www.fischl.de/thomas/elektronik/r8c/r8c_flasher.html}{Flasher für Linux und Mac OS X} an den R8C angepasst.
\end{itemize}
\end{document}

