%% LyX 1.3 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[a4paper,ngerman]{article}
\usepackage{palatino}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{hyperref}
%\pagestyle{fancy}
\setlength\parskip{\medskipamount}
\setlength\parindent{0pt}

\makeatletter
\usepackage{babel}
\makeatother
\begin{document}

\title{Forth am Stil — Teil 1}
\author{Carsten Strotmann}

\maketitle

\begin{multicols}{2}
\section{Die Idee}

Anfang dieses Jahres veröffentlichte die Zeitschrift c't zwei interessante
Artikel über das Installieren und Starten von Windows%
\footnote{Windows: XP von USB--Laufwerken booten, S. 188, c't 2/2006%
}-- und Linux%
\footnote{Linux auf dem USB--Stick installieren, S. 212, c't 3/2006%
}--Betriebssystemen von einem USB Stick. Diese Artikel regten mich zu
der Überlegung an, ob nicht auch ein kleines Forth--System direkt von
einem USB--Stick gestartet werden kann. Es wäre doch praktisch, ein
mobiles Forth \emph{in der Tasche} mitzunehmen und direkt starten
zu können (ohne dass erst ein umfangreiches Betriebssystem wie Unix/Linux
oder Windows gestartet werden muss).

USB--Sticks sind aus Kompatibilitätsgründen mit FAT16-- oder FAT32--Dateisystem
formatiert, da diese Dateisysteme von einer Vielzahl von Betriebssystemen
unterstützt werden (DOS, Windows 9x, Windows NT/2000/XP, Linux, Solaris,
MacOS 9/X, OS/2, \dots{}). Das FAT--Dateisystem wurde 1977 von Bill Gates
und Marc McDonald für das Microsoft--Disk--BASIC entworfen, speziell
zur Verwaltung der zur damaligen Zeit erhältlichen Disketten (160
KB). Nachdem das FAT--Dateisystem Anfang der 80er Jahre in MS--DOS eingebaut
wurde und im Laufe der Zeit die Disketten, und später die Festplatten,
immer größer wurden, musste auch das Dateisystem an die neuen Speichergrößen
angepasst werden. Wie oftmals bei \emph{historisch gewachsenen} Systemen
geschah dies nicht ohne Verluste. Obwohl FAT32 die neuste Variante
des FAT--Dateisystems ist (FAT32 wurde Mitte der 90er Jahre mit Windows
95 OSR2 eingeführt), merkt man dem System noch die Vergangenheit als
Disketten--Dateisystem an. Im FAT--Dateisystem werden Sektoren zu Clustern
zusammengefasst. Die Anzahl der Sektoren pro Cluster hängt von der
Gesamtkapazität des Speichermediums ab. Da USB--Speichersticks vom
PC wie Festplatten verwaltet werden, befindet sich am Anfang des Mediums
ein Bootsektor mit der Partitionstabelle. Dieser Bootsektor mit Partitionstabelle
(512 Byte) verbraucht jedoch den vollen ersten Cluster eines mit FAT32
formatierten Mediums, da die FAT--Partition erst am Anfang des zweiten
Clusters beginnen kann.

Auf meinem Test--USB--Stick (Apple iPod Shuffle 512MB) beginnt die FAT
Partition auf Sektor 45. Abzüglich des Bootsektors sind das 44
Sektoren zu je 512 Byte, die nicht genutzt werden und auf dem
USB--Stick brachliegen. Platz genug, um dort ein Forth mitsamt den
Zusatzprogrammen zu \emph{verstecken}.


\section{Der Plan:}

\begin{itemize}
\item ein PC--\emph{real--mode}--Forth, bootbar direkt von USB--Sticks 

\begin{itemize}
\item zuerst VolksForth 8086
\item später "`Begin--Again"' (OpenBIOS)
\end{itemize}
\item kompatibel mit aktueller PC--Technologie und auf Intel--CPU basierenden
Apple--Macintosh--Rechnern
\item Forth--Unterstützung für den Zugriff auf FAT32--Laufwerke

\begin{itemize}
\item grundlegende Dateiverwaltungsbefehle wie {\tt copy}, {\tt delete}
und {\tt rename}
\item ASCII--Textbetrachter
\item ASCII--Texteditor
\item Forth--Entwicklungssystem
\end{itemize}
\item Forth und Hilfsprogramme \emph{versteckt} in ungenutzten Sektoren
des FAT--Dateisystems
\end{itemize}

\section{Der Bootloader}

Das Forth--System soll direkt vom Bootsektor aus geladen werden. Das
Bootprogramm im Bootsektor muss daher die Partitionstabelle lesen
und das Forthsystem in den nicht von Partitionen belegten Sektoren
finden. Dies ist meist einfach, da die freien Sektoren direkt mit
Sektor 1 nach dem Bootsektor beginnen. Wer im Internet nach Bootloadern
für die PC--Plattform sucht, wird schnell an mehreren Stellen fündig,
inklusive Beschreibungen und Quellcode. Ich habe mich bei diesem Projekt
für den Bootloader von Alexei Frounze%
\footnote{\url{http://alexfru.chat.ru/epm.html\#bootprog%
}s} entschieden. Dieser Bootloader kann MS--DOS--COM-- und --EXE--Programme
direkt laden und starten, was die Entwicklung beschleunigt, da VolksForth
schon als MS--DOS--COM--Datei vorliegt und nicht jedesmal die Forth--Programmdatei
in die freien Sektoren kopiert werden muss, sondern das System auch
direkt aus dem Dateisystem \emph{gebootet} werden kann.

Auf die Sektoren des USB--Speichers muss mit Hilfe der erweiterten
BIOS--Schnittstellen%
\footnote{\url{http://home.teleport.com/~brainy/interrupts.htm%
}} für Festplatten zugegriffen werden, da in den meisten BIOS--Versionen
die regulären BIOS--Schnittstellen nur auf Festplatten und nicht auf
USB--Speicher zugreifen.


\section{VolksForth--Anpassungen}

Das VolksForth wird nun direkt von Bootloader im Bootsektor geladen
(wie Forth--Systeme in der "`guten alten Zeit"'). Daher mussten
alle Abhängigkeiten zu MS--DOS aus dieser Version des VolksForth entfernt
werden. Das Forth--System wird direkt, Sektor für Sektor, auf den USB
Stick zugreifen und das FAT32--Dateisystem mitsamt der Dateistrukturen
interpretieren. Derzeit (Stand März 2006) kann die Partitionstabelle
und der FAT--Bootsektor gelesen und interpretiert werden. Auch können
Verzeichnisse gelesen und aufgelistet werden, sowie Dateien geöffnet
werden.

Da der Treiber für das FAT32--Dateisystem auch für das MicroUSB%
\footnote{\url{http://www.microusb.org/%
}}--Projekt verwendet wird, ist dieser Treiber unabhängig vom VolksForth
gehalten und kann als Modul auch in anderen Forth--Systemen und Projekten
eingesetzt werden.


\section{Entwicklung}

Programme, die direkt über BIOS--Funktionen auf die Festplatte zugreifen,
sollten nicht direkt auf dem Entwicklungsrechner ausgetestet werden.
Neben den langen "`Turn--Around"' Zeiten (Reboot, USB--Boot Test,
Betriebssystem laden, Forth--Kernel ändern, auf USB--Stick speichern,
Reboot \dots{}) kann auch ein Programmierfehler die gesamte Festplatte
durcheinanderwürfeln und wichtige Dateien zerstören. Aus diesem Grund
führe ich die Programmtests innerhalb einer VMWare Workstation%
\footnote{\url{http://www.vmware.com/%
}} VirtuellenMaschine durch. VMWare simuliert eine virtuelle PC--Hardware
innerhalb eines gestarteten PC--Betriebssystems. Programme innerhalb
der VMWare können nicht auf die Festplatte des Wirt--Systems zugreifen.
Für die Entwicklung kann auch der kostenlose VMWare Player verwendet
werden. Das VMWare--BIOS unterstützt USB--Sticks sowie die erweiterten
BIOS--Funktionen zu Lesen und Schreiben von Sektoren. Leider kann VMWare
derzeit noch nicht von USB--Speichern booten. Für den Test der Programme
boote ich daher das modifizierte VolksForth von Diskette und greife
dann auf den USB--Speicher zu. Verläuft der Test erfolgreich, so wird
das VolksForth von der Diskette auf den USB--Stick übertragen und in
einem richtigen PC gebootet. Für den Boot von einem USB--Stick müssen
ggf. die Boot--Einstellungen im BIOS angepasst werden, bei einigen
BIOS--Versionen muss auch "`USB--Keyboard"'%
\footnote{\url{http://rz-obrian.rz.uni-karlsruhe.de/knoppix-usb/%
}}--Unterstützung aktiviert werden. Informationen zum Booten von
USB--Speichern finden sich im Internet%
\footnote{\url{http://www.weethet.nl/english/hardware\_bootfromusbstick.php%
}}.


\section{Ausblick}

Bisher ist das VolksForth angepasst und kann sowohl von Diskette wie
auch vom USB--Stick gebootet werden. Derzeit arbeite ich an den FAT32
Routinen. Mein Plan ist es, bis zum Sommer eine fertig benutzbare
Version auf der VolksForth--Webseite%
\footnote{\url{http://volksforth.sf.net/%
}} bereitzustellen. Über die weitere Entwicklung werde ich im zweiten
Teil dieses Artikels in der VD 3/2006 berichten.
\end{multicols}
\end{document}
