% 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}