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

%\newcommand{\code}[1]{\texttt{#1}}
%\newcommand{\ret}{\textsf{$<$ret$>$}\xspace}
%\newcommand{\ret}{$\hookleftarrow$\xspace}

\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}
\renewcommand{\reftextfaraway}[1]{auf Seite \pageref{#1}}
%\renewcommand{\figurename}{Listing}

\title{Neues von VFX Forth}
%\ifx\shorttitle\undefined\else
%\shorttitle{} 
%\fi

\author{Stephen Pelc} 


\begin{document}

\maketitle

\begin{abstract}
Gefragt, was sich beim VFX Forth tut, war Stephen so freundlich, einige
Notizen zur jüngsten Entwicklung des VFX--Forth--Systems und seiner Werkzeuge
zu übermitteln, die hier übersetzt wiedergegeben sind. mk 

\end{abstract}

\begin{multicols}{2}
\section{Die Cross Platform GUI}

MPE hatte nach einer geeigneten GUI--Bibliothek Ausschau gehalten, die für
verschiedene Betriebssysteme tauglich sein sollte. Und vor einigen Jahren
haben wir uns für GTK+ entschieden. Und da es nun VFX Forth für Windows,
Mac OS X und Linux gibt, war es an der Zeit, sich ausgiebiger dem Prototyp
des Linux--Interfaces zuzuwenden. Zur selben Zeit wünschte ein Kunde sich
dringend ein grafisches Interface zurück, das ähnlich seines geliebten
Borland--BGI--Systems aus der DOS--Zeit funktionieren sollte. Mit etwas
Überlegung fanden wir heraus, dass es durchaus möglich ist, mit einer cross
plattform GUI portable Grafik zu erzeugen.

Die drei Bilder sind einmal mit Windows, dann Mac OS X und schließlich
Linux gemacht worden. Alle drei wurden erzeugt, indem der gleiche Quellcode
ohne irgendeine Änderung kompiliert worden ist. Das Bibliotheks--Interface
enthält eine kleine Anzahl bedingter Kompilationen für einige Dateinamen aus
der Sammlung, doch das ist auch schon alles, was die Betriebssysteme
unterscheidet.

 
\begin{figure}
\begin{center}
\includegraphics[width=1.0\textwidth]{2011-04/Pelc_GraphicsLin.eps}
\caption{Linux--Beispiel}
\end{center}
\end{figure}

Die GUI ist mit Hilfe des Glade--GUI--Designers entworfen worden, der
daraus eine XML--Beschreibung der GUI erstellte. Diese XML--Beschreibung
wurde in den Builder geladen. Der Code zeigt als Beispiel einen callback
(eine Aktion, die benötigt wird, wenn ein bestimmtes Ereignis eintrifft) und
den Code, der das Display erzeugt.

\begin{footnotesize}
\begin{verbatim}
2 0 CCBproc: on_about1_activate	\ *widget *user -- ; -- entry
\ *G Callback to run the About dialog.
  2drop  MainAbout runDlg drop
;
\end{verbatim}
\end{footnotesize}

Der obige Code erzeugt einen callback in der Form einer C--Konvention, so
wie auch GTK sie benötigt. Der Name des callbacks wurde auch mit Glade
definiert. Ein callback im Builder verknüpft den Glade--Namen mit dem
Forth--callback--Namen. In diesem Falle startet der About--Dialog, wenn der
``Help--About''--Knopf angeklickt wird.

\begin{footnotesize}
\begin{verbatim}
: showGraphics3	\ --
\ *G Test word to read a Glade Builder XML file and run the
\ ** GUI it describes.
  initGTK  +gtimer			\ start GTK and timer

  z" gdemo3bld.ui" loadBuilderXML	\ load GTK builder design
  0= abort" Can't load builder file"
  z" window1" builderObject to window1	\ get handles
  z" drawingarea1" builderObject to DrawingArea1
  z" aboutdialog1" builderObject to MainAbout
  freeBuilder

  window1 gtk_widget_show_all		\ show design
  DrawingArea1 win2 initGWin		\ initialise graphics area
  win2 enable-graphics  win2 onto  dirty
  black cleardevice			\ drawing commands
  white  50 circle
  green  200 100 line
  red 30 30 at  70 30 filled rectangle
  80 70 at  100 40 blue filled ellipse
;
\end{verbatim}
\end{footnotesize}


\section{Der Cortex--Mx--Cross--Compiler}

Die Cortex--Mx--Prozessoren verwenden eine erweiterte Version des
ARM--Thumb--Befehlssatzes. Zunächst wurde dieser originale
Thumb--1--Befehlssatz und seine 16--Bit--Opcodes benutzt, um die
Forth--Decodierung in ARM--32--Bit--Befehle zu übersetzen. Der
Thumb--1--Befehlssatz war aber für sich genommen dafür nicht mächtig genug
und musste daher um einige ARM--32--Bit--Befehle ergänzt werden.

Für die Cortex--M0/M1--CPUs wurde daher der Thumb--1--Befehlssatz zu einem
eigenständigen, aber minimalen Befehlssatz ergänzt. Die Cortex--M0--CPUs
sind hauptsächlich für kostensparenden Ersatz von 8--Bit--CPUs gemacht,
manche Nuvoton--Bauteile kann man bei gewissen Mengen schon für 0,55 US\$
haben. Ihr niedriger Preis wird aber durch einen ziemlich hässlichen
Befehlssatz mit niedriger Leistung erkauft. Doch ungeachtet dessen
leistet der VFX--Code--Generator auch dabei nun gute Arbeit.

All diese Einschränkungen finden sich nicht mehr bei den
Cortex--M3/M4--Prozessoren, und sie verdrängen daher schnell die
ARM7--Designs eingebetteter Systeme. Die zusätzlichen Befehle und
Adressierungsarten der Cortex--M3/M4--CPUs ermöglichen es auch dem
VFX--Code--Generator, einen äußerst guten Code zu erzeugen, selbst bei sehr
komplexen Codings. Die Tests (performance benchmarks) dieser Teile sind
beeindruckend geworden.

Der MPE--ARM/Cortex--cross--compiler kann nun Code sowohl für den ARM--,
als auch für den Cortex--Befehlssatz erzeugen. Schalter im Compiler wählen
den geeigneten Befehlssatz und seine Variationen aus. Unterstützung für
ARM-- und Cortex--M0/M1/M3--CPUs sind im VFX--cross--compiler bereits
verfügbar. Die Unterstützung der Cortex--M4--CPU wird es Ende 2011 geben.


\begin{figure}
\begin{center}
\includegraphics[width=1.0\textwidth]{2011-04/Pelc_GraphicsWin.eps}
\caption{Windows--Beispiel}
\end{center}
\end{figure}

\begin{figure}
\begin{center}
\includegraphics[width=1.0\textwidth]{2011-04/Pelc_GraphicsOsx.eps}
\caption{Mac--OS--X--Beispiel}
\end{center}
\end{figure}

\hrulefill
\section{Link}
Stephen Pelc\\
stephen@mpeforth.com\\
MicroProcessor Engineering\\
+44 (0)23 8063 1441\\
\\
http://www.mpeforth.com/\\
\end{multicols}

\vspace*{\fill}

\begin{center}
\includegraphics[width=0.8\textwidth]{2011-04/Pelc_xcomps8b}
\end{center}


\end{document}

