% Content-encoding: UTF-8 \documentclass[ngerman]{article} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} \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} \renewcommand{\figurename}{Listing} \begin{document} \title{Forth von der Pike auf — Teil 9} \author{Ron Minke} \maketitle \vspace{-0.5ex} Die mit freundlicher Genehmigung der HCC--Forth--gebruikersgroep in der Vierten Dimension in einer Übersetzung von Fred Behringer wiedergegebene achtteilige Artikelserie erschien ursprünglich in den Jahren 2004 und 2005 in der Zeitschrift \emph{Vijgeblaadje} unserer niederländischen Forth--Freunde. Die Firma Atmel hat inzwischen größere Bausteine ihrer Serie entwickelt. Das reizte den Autor dazu, sein Projekt auf einen größeren Mikro--Controller zu übertragen. Auch die vorliegende Übersetzung aus dem Niederländischen stammt von Fred Behringer. Hier kommt nun Teil neun der Wiedergabe des Versuchs, ein AVR--Forth--System mit der Voraussetzung \emph{from scratch} zu erstellen. \vspace{-0.5ex} \begin{multicols}{2} Die Hardware--Entwicklung steht nicht still. Also wurde auch für die Hardware--Basis, auf welcher \emph{Forth von der Pike auf} läuft, ein Update fällig. Und speziell das Modell, Forth ganz im inneren Speicher des Prozessors ablaufen zu lassen, rief nach einer Neufassung. In der Schaltung von Teil 7 dieser Serie war der Prozessor ein ATmega162 mit 1 kB RAM \emph{an Bord}. Wenn wir den Platz, den die Forth--Verwaltung selbst benötigt (Stacks, Terminal--Puffer etc) abziehen, bleibt da für eigene Definitionen ungefähr 0,5 kB übrig. Das ist nicht viel, aber es reicht für ein paar Experimente. \section{Forth goes MEGA} Inzwischen hat die Firma Atmel eine Anzahl von \emph{großen} Chips auf den Markt gebracht. Für eine bestimmte Anwendung am Arbeitsplatz (in der Sprache C) wurde ein solcher \emph{großer Chip} benötigt. Die Wahl fiel auf den größten, den Atmel zur Zeit (Sommer 2007) liefern kann, den ATmega2560/ATmega2561. Intern sind beide Versionen gleich, am 2560 sitzen jedoch 100 Beine und am 2561 \emph{nur} 64. Jedenfalls groß genug... Was haltet ihr von 256 kB Flash und 8 kB internem Speicher? Die 256 kB Flash sind nie vollzukriegen (obwohl... eine Webseite in den Chip?) und die 8 kB an internem Speicher können wir für Forth gut gebrauchen. Auf einmal stehen nun 7,5 kB für eigene Definitionen zur Verfügung! Um auf diesem Prozessor ein Forth unterzubringen, müssen am ursprünglichen Quelltext ein paar Anpassungen vorgenommen werden. \section{Die Version mit innerem RAM} Woraus bestand noch gleich die Version mit innerem RAM? Wenn wir uns den Forth--Quelltext im Speicherplan des ursprünglich eingesetzten ATmega162 genauer anschauen (vergleiche Zeichnung in Teil 8), bemerken wir zwei Dinge: \begin{itemize} \item Internes RAM beim MEGA162: Von 0100 bis 0500 \item Flash: Die Forth--Header im Kernel beginnen bei (ungefähr) 0500. \end{itemize} Wir unterschieden zwischen Gebieten unterhalb der Adresse 0500 und solchen oberhalb 0500. Gebiete unterhalb der Adresse 0500 sahen wir für den Zugang zum internen RAM vor, und oberhalb der Adresse 0500 machten wir von einem speziellen Befehl Gebrauch, um uns den Zugang zum Flash zu sichern. In einer Anzahl von Worten wurde ein Test eingebaut, um herauszufinden, ob die angebotene Adresse kleiner als 0500 ist. Wenn ja, dann handelt es sich um eine \emph{innere} Adresse im internen RAM. Wenn nein, dann ist es eine Adresse im \emph{vorgefertigten} Teil, der nur die Header und externen Links enthält. Das Ergebnis dieses Adressentests zeigt an, mit welchem Befehl die Daten hereingeholt werden müssen. In allen diesen Worten muss der Wert 0500 angepasst und durch einen entsprechenden Wert für den neuen ATmega2561 ersetzt werden. Der Wert beträgt 2200. Er setzt sich aus dem Wert 0200 für die erweiterte E/A--Ansteuerung und der Größe des internen RAMs (8 kB = 2000) zusammen. \section{Die neue Speicheraufteilung} Im neuen Speicherplan entsteht nun aber im Flashbereich eine Lücke von 0500 bis 2200 (der ursprüngliche Kernel ist ja nicht größer geworden). Aber bei einer Gesamtgröße von 256 kB fällt das überhaupt nicht ins Gewicht. Dieser freigewordene Platz kann für Kernelerweiterungen verwendet werden. Anzumerken bleibt zudem, dass von der Flash--Gesamtgröße nur die ersten 64 kB zum Einsatz kommen. Das um dem so genannten \emph{extend\-ed addressing} zuvorzukommen. Der Speicherplan sieht jetzt also wie folgt aus: \begin{center} \includegraphics[width=0.90\columnwidth]{2007-0304/pike9-memmap} \end{center} \end{multicols} \end{document}