%% LyX 1.5.4 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[german]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}
\usepackage{graphicx}

% \makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
%% Special footnote code from the package 'stblftnt.sty'
%% Author: Robin Fairbairns -- Last revised Dec 13 1996
%\let\SF@@footnote\footnote
%\def\footnote{\ifx\protect\@typeset@protect
%   \expandafter\SF@@footnote
% \else
%   \expandafter\SF@gobble@opt
% \fi
%}
%\expandafter\def\csname SF@gobble@opt \endcsname{\@ifnextchar[%]
% \SF@gobble@twobracket
% \@gobble
%}
%\edef\SF@gobble@opt{\noexpand\protect
% \expandafter\noexpand\csname SF@gobble@opt \endcsname}
%\def\SF@gobble@twobracket[#1]#2{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{mathptmx}
\usepackage[scaled=.90]{helvet}
\usepackage{courier}

\usepackage{babel}
\makeatother

\begin{document}

\title{Forth ohne/als Betriebssystem}

% \renewcommand{\footnote}{\endnote}
\makeatletter
\renewcommand\footnoterule{%
  \kern-3\p@
  \hrule\@width0.667\textwidth
  \kern2.6\p@}
\makeatother

\author{Carsten Strotmann%
\thanks{mit Hilfe von Stefan Reinauer%
}}

\maketitle
In der VD 3+4/2007 fragt Fred Behringer als Notiz zur Besprechung
des XO Laptops (One Laptop per Child):\\\glqq\ldots Gibt es eine Möglichkeit,
dieses BIOS (die OpenFirmware des XO Laptops) zeitweilig (so wie bei
Zeichensätzen), vielleicht anstelle eines Schatten--BIOS, in meinen
Rechner zu schalten? Am liebsten über einen Bootmanager (bei mir XFDisk)\grqq\/.

Nachdem ich für die Forth--Gesellschaft im Jahre 2007 zusammen mit
dem LinuxBIOS--Team auf dem LinuxTag anwesend war und wir dort die
{}\emph{Forth--Flagge} hochgehalten haben, lag die Idee, einen Artikel
über den Status von OpenFirmware zu schreiben, schon recht lange auf
meinem Tisch. Freds Anfrage hat mir den notwendigen Impuls gegeben,
diesen Artikel fertigzustellen.

\begin{multicols}{2}

\section{PC Real Mode}

Um die Kompatibilität mit alten 16--Bit--Betriebssystemen wie MS--DOS
oder CP/M aufrechtzuerhalten, starten selbst moderne PCs immer noch
im 16--Bit--{}\emph{Real--Mode}. In diesem Modus wird selbst bei neuesten
PCs ein (sehr schneller) Original--IBM--PC mit 1 MB Hauptspeicher und
VGA Karte eingerichtet. Neben dem werbewirksamen Einblenden von Markennamen
des Rechner--, BIOS--, \mbox{Motherboard--,} CPU-- und Grafikkarten--Herstellers
ist diese Einrichtung des 16--Bit--Real--Modes verantwortlich, warum der
BIOS--Startvorgang auf modernen Rechnern immer noch so langsam ist
wie beim Original--IBM--PC von 1981 (zum Teil, man mag es nicht glauben,
sogar noch langsamer).

Moderne BIOS--Ersatz--Technologien wie EFI oder CoreBoot starten den
Rechner im 32--Bit--Modus erheblich schneller. Doch dazu später. 

Zuerst schauen wir uns an, welche Optionen wir heutzutage haben, um
ein Forth--System ohne Betriebssystem zu starten. Hierbei beziehe ich
mich auf x86--kompatible PCs, welche in den letzten 4--5 Jahren hergestellt
und verkauft wurden.


\subsection{Forth vom PC--BIOS gebootet}

Die Idee, Forth direkt, d.~h.\ ohne Umwege über MS--DOS oder ein anderes
Betriebssystem, vom BIOS aus zu starten, ist so alt wie die ersten
Forth--Systeme für den IBM--PC. Damals, in der ersten Hälfte der 1980er
Jahre, war diese Technik eher die Norm als denn die Ausnahme. Ein
Forth wurde direkt von einer Boot--Diskette gestartet. 

Das war die Zeit der Disketten, vor der Zeit der Festplatten. Nach
dem Anschalten des PCs wird das BIOS aktiv, initialisiert die Hardware
(Tastatur, Floppykontroller, Grafikkarte, Schnittstellen) und lädt
den ersten Sektor (Master Boot Sektor). Das Programm in diesem Sektor
übernimmt die Kontrolle über den Rechner und lädt das Forth--Programm,
direkt vom Datenträger (meist Diskette). 

Auf der Diskette befindet sich meist ein Forth--eigenes (Block--) Dateisystem.
Ein-- und Ausgabe (Bildschirm, Datenträger) erfolgt über die vom BIOS
bereitgestellten Systemroutinen. Insofern läuft ein solches Forth nicht
vollständig unabhängig von einem Betriebssystem, da das Rechner--BIOS
ein sehr simples Betriebssystem bereitstellt (genannt Basic--Input--Output--System
= BIOS).

Auch heute kann man Forth--Systeme über dieses System starten, doch
finden sich auch immer mehr Rechner, bei denen dieser Weg nicht mehr
funktioniert:

\begin{itemize}
\item keine Diskettenlaufwerke
\item ein versehentlicher Zugriff des Forth--Systems auf die Festplatte kann
Gigabytes an Daten zerstören
\end{itemize}

\subsection{Syslinux COMBOOT 16--Bit}

Das Syslinux Programm%
\footnote{http://syslinux.zytor.com%
} erlaubt das Starten von Betriebssystemen (nicht nur Linux) von FAT--formatierten
Datenträgern (Disketten, Festplatten oder USB--Speicher), von CD--ROM oder
über PXE--Netzwerkboot. Dabei unterstützt Syslinux ein spezielles Format,
das so genannte COMBOOT--Format. COMBOOT--Dateien sind Standard--MS--DOS--COM--Programm--Dateien
%
\footnote{http://en.wikipedia.org/wiki/COM\_file%
} (64--KB--Speicher, Start bei \$100).

Über das Syslinux--COMBOOT--Verfahren lassen sich MS--DOS--kompatible
Forth--Systeme, welche als COM--Dateien vorliegen, direkt starten. Im
Vergleich zum direkten Start über das BIOS unterstützt Syslinux den
Start von beliebigen, FAT--formatieren Datenträgern. Voraussetzung
allerdings ist, dass die Forth--Systeme keine MS--DOS--Systemaufrufe benutzen,
sondern ausschließlich direkt mit der Hardware sprechen oder das BIOS
benutzen. Ein Forth--System, welches auf diesem Wege gestartet werden
kann, ist die VolksForth--8086--Version ohne MS--DOS--Abhängigkeiten (VFORTHN.COM).

Über die MEMDISK%
\footnote{http://syslinux.zytor.com/memdisk.php%
}--Erweiterung ist es auch möglich, Forth--Systeme auf Disketten--Abbilddateien
von CD--ROM oder sogar über das Netzwerk (PXE--Boot) zu starten. Mit
MEMDISK kann man z.~B.\ FreeDOS%
\footnote{http://www.freedos.org%
} von einem kleinen (230K) Diskettenabbild vom USB--Stick laden.
Das FreeDOS erkennt den FAT--formatierten USB--Stick als Laufwerk C:
(das MEMDISK Diskettenabbild ist Laufwerk A:). Von dort aus kann jedes
MS--DOS--basierte Forth (z.~B.\ VolksForth) geladen werden.


\section{PC--Protected--Mode}

Um heutige 32--Bit oder 64--Bit--Hardware von Forth ausnutzen zu können,
sollte das Forth--System im so genannten {}\emph{Protected--Mode}%
\footnote{http://en.wikipedia.org/wiki/Protected\_mode%
} gestartet werden. Im Gegensatz zum {}\emph{Real--Mode}\/, welcher
einen schnellen 8086 Prozessor mit 1 MB Adressraum zur Verfügung stellt,
stehen dem Entwickler im {}\emph{Protected--Mode} alle erweiterten Funktionen
moderner Prozessoren zur Verfügung.

Da nicht jeder Entwickler das Rad neu erfinden und das Umschalten
in den {}\emph{Protected--Mode} sowie das Laden des Programmes von einem
Speichermedium selbst neu programmieren möchte, gibt es eine Reihe
von Boot--Loadern, Ladeprogramme, welche den Prozessor in den {}\emph{Protected--Mode} 
setzen, das Programm (z. B. das Forth--System) laden und dann
die Ausführung an das geladene Programm übergeben. 


\subsection{Syslinux COM32}

Syslinux unterstützt das Laden von speziellen 32--Bit--Programmen mit
einem sehr einfachen Programmaufbau, ähnlich dem von MS--DOS--{}\emph{COM}--Dateien.
Programme im Dateiformat COM32%
\footnote{http://syslinux.zytor.com/comboot.php%
} müssen ab Speicherstelle 0x101000 lauffähig sein und dürfen keine
Segmente ansprechen, stattdessen muss das {}\emph{Flat--Memory}%
\footnote{http://en.wikipedia.org/wiki/Flat\_memory\_model%
} Modell des i386--Prozessors benutzt werden. 

Syslinux stellt für COM32 Programme eine simple, BIOS--ähnliche API
für Ein-- und Ausgabe zu Verfügung, so dass Programme im 32--Bit--Protected--Mode 
diese Funktionen anstatt BIOS--Funktionen benutzen können.

Es sollte möglich sein, mit einwenig Programmieraufwand bestehende
Linux-- oder Windows--32 oder --64--Bit--Forth--Systeme umzuschreiben, um im
COM32--Modus zu laufen. Erweiterte I/O--Funktionen wie Zugriff auf die
Grafikkartenfunktionen oder Datenspeicher (USB etc), müssen über Treiber
im Forth--System realisiert werden. Dies kann für den einen oder anderen
eine interessante Herausforderung darstellen.


\subsection{GRUB}  % \footnote{http://www.gnu.org/software/grub/} (legacy)}

GRUB (ein Akronym für GRand Unified Bootloader) ist ein sehr flexibler
Bootloader für PC--Systeme, welcher für eine Vielzahl von Betriebssystemen
eingesetzt wird (z. B. Linux und OpenSolaris x86). Grub kann von verschiedenen
Medien gestartet werden (Festplatten, Floppy--Disk, CD-- und DVD--Laufwerken
sowie Flash--Disks) und ist in der Lage, von einer großen Anzahl von
Dateisystemen%
\footnote{ext2, ext3, UFS, UFS2, ReiserFS, FAT, NTFS, ISO9660, JFS, Minix, FFS,
XFS%
} Betriebssystemkerne zu starten. Grub wird in der Regel vom PC--BIOS
gestartet und bietet dem Benutzer ein Auswahlmenü, über das Betriebssysteme
gestartet werden können. 

Grub kann Betriebssysteme nach dem Multiboot--Standard%
\footnote{http://www.gnu.org/software/grub/manual/multiboot/multiboot.html%
}, Linux, FreeBSD, NetBSD und OpenBSD direkt starten. Andere Betriebssysteme
(z. B. OS/2 oder Windows) werden über das so genannte Chain--Load geladen,
bei dem Grub einen Original--Bootsektor für das gegebene Betriebssystem
aus einer Datei lädt und startet.

Um ein 32--Bit--Forth--System über Grub zu starten, sollte dieses Forth
System dem Multiboot--Standard entsprechen.

Ein separates Projekt, Grub4Dos%
\footnote{http://grub4dos.sourceforge.net/%
}, bietet Grub und die Grub--Installations--Werkzeuge für DOS--basierte
Systeme an.

\subsection{CoreBoot}
%\footnote{http://www.coreboot.org%
%} (aka LinuxBIOS)}

CoreBoot ist ein OpenSource--Projekt, welches an einem quelloffenen
BIOS--Ersatz arbeitet. Das Projekt firmierte lange unter dem Namen
{}\emph{LinuxBIOS}\/, da es sich aber nicht primär um ein Linux--Projekt
handelt, und das Ergebnis kein {}\emph{BIOS} ist, hat sich das Projekt
Anfang 2008 in {}\emph{CoreBoot} umbenannt. Im Folgenden sind daher
die Begriffe LinuxBIOS und CoreBoot synonym.

CoreBoot bietet ein modulares System, um Betriebssysteme von Datenspeichern
(Festplatten, USB--Sticks etc) oder direkt aus dem Flash--ROM zu starten.
CoreBoot selbst ist nur ein kleiner, in C geschriebener Programmteil,
welcher den PC soweit vorbereitet, dass ein Betriebssystem geladen
und gestartet werden kann. CoreBoot initialisiert hierzu:

\begin{itemize}
\item die CPU(s)
\item den Speicher
\item den Bus (PCI)
\item Controller (IDE, ATA, SATA, USB ...)
\item Grafikkarte 
\end{itemize}
Um CoreBoot benutzen zu können, muss man ein von CoreBoot/LinuxBIOS
unterstütztes PC--Board besitzen. Leider halten die meisten PC--Hersteller
wichtige Informationen über die verwendete Hardware und deren Schnittstellen
unter Verschluss, so dass nicht alle PC--Boards von CoreBoot unterstützt
sind. Eine Liste der Boards und Systeme, welche mit CoreBoot gestartet
werden könnnen, findet sich auf der CoreBoot--Webseite%
\footnote{http://www.coreboot.org/Supported\_Motherboards%
}.


\subsubsection{Payloads}

CoreBoot kann verschiedene Betriebssysteme oder Bootloader starten
(die so genannten Payloads):

\begin{itemize}
\item Linux \textemdash{} direkter Start eines Linux--Kerns
\item FILO \textemdash{} ein einfacher Bootloader mit Dateisystem--Unterstützung.
Dies ist ein GRUB ohne PC--BIOS Unterstützung.
\item GRUB2 \textemdash{} wird FILO ablösen, ist aber noch in der Entwicklung
und noch nicht einsatzbereit
\item Mitch Bradley's Open Firmware
\item CodeGen's SmartFirmware
\item OpenBIOS
\item GNUFI%
\footnote{http://www.gnu.org/software/gnufi/%
} (UEFI)
\item Etherboot%
\footnote{http://www.coreboot.org/Etherboot%
} \textemdash{} beinhaltet FILO und unterstützt neben Netzwerkboot
auch SATA und USB--Speicher
\item ADLO \textemdash{} Verbindungsschicht, um ein 16--bit--Bochs--BIOS zu
laden. Dies erlaubt den Start von Betriebssystemen, welche PC--BIOS--Aufrufe 
machen, wie z. B. Windows und OpenBSD. 
\item Plan 9%
\footnote{http://www.coreboot.org/Plan\_9%
} \textemdash{} ein verteiltes Betriebssystem
\end{itemize}

\subsubsection{Motivation für CoreBoot}

Es gibt verschiedene Motivationen, um CoreBoot anstatt eines Standard--PC--BIOS
einsetzen zu wollen:

\begin{itemize}
\item um ein komplettes Rechner--System aus freier Software zu erstellen
\item um volle Kontrolle über den Rechner (Persönlichen Computer = PC) zu
behalten, da moderne kommerzielle BIOS--Systeme und --Erweiterungen über
DRM (Digital--Rights--Management) den Benutzer zu kontrollieren versuchen
\item um Ansatzpunkte für Behörden--Schnüffelsoftware (aka Bundestrojaner)
zu verhindern
\item um den Rechner--Startvorgang zu verkürzen
\item um Lizenzgebühren für ein kommerzielles BIOS zu sparen
\end{itemize}
Auf Youtube%
\footnote{http://www.youtube.com/watch?v=nuzRsXKm\_NQ%
} gibt es ein Video, welches zeigt, wie schnell ein LinuxBIOS--Start
bis in eine grafische Unix--X11--Oberfläche sein kann.

Auf der FOSDEM--2007--Konferenz hat Projekt--Mitbegründer Ron Minnich%
\footnote{Interview: http://archive.fosdem.org/2007/interview/ronald+g+minnich%
} einen interessanten Vortrag über CoreBoot (damals noch unter dem
Titel LinuxBIOS) gehalten, in welchem er auch über die Motivation
hinter LinuxBIOS spricht. Der Vortrag ist als Video im Medienarchiv%
\footnote{http://archive.fosdem.org/2007/media/video%
} der FOSDEM--Seite abrufbar.


\subsubsection{CoreBoot und Forth}

CoreBoot kann benutzt werden, um ein (oder mehrere) Forth--Systeme
direkt aus dem Flash--Speicher zu laden. Was mit großen Betriebssystem--Kernen
wie Linux bei geringem Flash--Speicher auf dem Motherboard (512 KB,
1 MB) ein Problem sein kann, ist für Forth eine Tugend. In 256 KB
bekommt man viel Forth hinein. 

Mit OpenBIOS und Mitch Bradleys OFW sind schon zwei OpenFirmware--kompatible 
Forth--Systeme für CoreBoot verfügbar.


\subsection{EFI}

EFI, das Extensible Firmware Interface, ist ein von Intel entwickelter
PC--BIOS Ersatz. EFI wurde im Jahre 1989--2000 zusammen mit den ersten
Itanium--Prozessoren veröffentlicht. Vom Konzept her gleicht EFI dem
schon älteren OpenFirmware, so lässt EFI z.~B.\ auch plattformneutrale
Gerätetreiber in ByteCode zu. Allerdings ist im EFI kein Forth--Interpreter
eingebettet. In der Realität sind aber die meisten EFI--Treiber in
EFI--kompatiblen (PCI--) Geräten in x86--Programmcode und nicht ByteCode.
Die ByteCode--Möglichkeit wird bisher von den Herstellern nicht benutzt
(da es EFI bisher auch hauptsächlich auf der x86--Hardwareplatform
gibt).

Im Jahre 2005 wurde die Weiterentwicklung von EFI in die Hände von
UEFI, dem {}\emph{Unified EFI Forum}\/, gelegt. Einige Grundkomponenten
von EFI und die Grund--Spezifikationen%
\footnote{http://developer.intel.com/technology/efi/%
} sind seitdem öffentlicht zugänglich. Während sich EFI bei Standard--PCs
noch nicht durchgesetzt hat, ist EFI bei auf Intel--CPU basierten Rechnern
der Firma Apple die Firmware.

Das EFI ist bei Apple--Rechnern für den Benutzer {}\emph{unsichtbar}\/.
Um bei Apple--Rechnern das EFI--Interface für den Anwender {}\emph{nutzbar}
zu machen, kann das EFI--Toolkit des {}\emph{rEFIt}--Projektes installiert
werden%
\footnote{http://refit.sourceforge.net/%
}. rEFIt bietet dem Apple--(x86--CPU)--Benutzer ein grafisches Boot--Menü,
Zugriff auf den Apple--Hardwaretest und die EFI--Shell.

%
\begin{figure*}
\begin{center}
\includegraphics[width=0.7\paperwidth]{2008-02/screen2}
\caption{rEFIt--Bootmenü}
\end{center}
\end{figure*}



\subsubsection{EFI--Programme}

EFI kann neben Betriebssystemkernen auch direkt Programme starten.
Der Apple--Hardwaretest und die EFI--Shell sind zwei Beispiele hierfür.
Für diese Programme bietet EFI dem Programm eine simple I/O--Schnittstelle,
ähnlich dem PC--BIOS.

Amit Singh, Autor des Buches {}\emph{MacOS X Internals --- A Systems approach}%
\footnote{http://www.osxbook.com/%
} (viele, zusätzliche Kapitel als PDF auf der Webseite erhältlich),
beschreibt im Kapitel {}\emph{EFI Programming on Mac OS X}%
\footnote{http://www.osxbook.com/book/bonus/chapter4/efiprogramming/%
}, wie Programme erstellt werden, welche dann direkt unter EFI ausführbar
sind. Mit dieser Anleitung sollte es möglich sein, ein bestehendes
32--Bit-- oder 64--Bit--Forth mit einem EFI--Wrapper zu versehen und dann
direkt von der EFI--Shell oder dem rEFIt--Bootmenü aus zu starten.

Die TianoCore--Webseite%
\footnote{https://www.tianocore.org/%
} hat weitergehende Informationen über EFI--Programmierung, inklusive
des EFI--Toolkits. Das EFI--Toolkit bietet einfachen Zugriff auf EFI--Ressourcen
wie

\begin{itemize}
\item Standard--C--Library
\item die Libz--Kompressions--Library
\item die BSD--Datenbank--Routinen, libdb
\item die Serial--Port--Library, libtty
\item TCP/IP--v4-- und PPP--Netzwerkzugriff
\item Python--Interpreter für EFI
\item ein Text--Editor
\item RAM--Disk für EFI
\end{itemize}
An dieser Auflistung sieht man, dass EFI mehr ein embedded Betriebsystem
denn ein Bootloader ist. Auch ist nicht jeder von EFI begeistert,
wie E--Mails%
\footnote{http://kerneltrap.org/node/6884%
} vom Linux--Oberentwickler Linus Torvals zeigen ({}\glqq EFI is this other
Intel brain--damage (the first one being ACPI).\grqq).

\begin{figure*}[t]
\begin{center}
\includegraphics[width=0.7\paperwidth]{2008-02/OpenBIOS-VMWare}
\caption{OpenBIOS in VMWare}
\end{center}
\end{figure*}


\section{Open--Firmware--Implementierungen}

Derzeit gibt es fünf IEEE--1275--(aka OpenFirmware)--kompatible Implementierungen,
welche unter verschiedenen OpenSource--Lizenzen im Quellcode verfügbar
sind. Zentrale Anlaufstelle für alle diese Implementierung ist die
Seite des OpenBIOS--Projektes%
\footnote{http://www.openbios.info%
}. Dort kann man den Quellcode der meisten dieser OpenFirmware--Versionen
einsehen und laden.

Die verschiedenen OpenFirmware--Implementierung sind eine Schatzgrube
für Forth--Programmierer, enthalten sie doch Treiber für Dateisysteme
(FAT, ext2, HFS...) und Hardwarekomponenten (USB, IDE/ATA, Grafik
...), sowie einen Webserver in Forth.


\subsection{OpenBIOS (OpenBIOS--Projekt)}

OpenBIOS wurde als Projekt gegründet mit dem Ziel, eine quelloffene
(OpenSource) Implementierung von IEEE--1275 für x86--Architekturen zur
Verfügung zu stellen. Als das Projekt startete (2000), gab es am Markt
nur proprietäre Implementierungen von IEEE--1275. Im Jahre 2006 wurde
OpenBIOS durch die in kurzen Zeitabständen erfolgte Freigabe fast
aller dieser proprietären Versionen unter einer OpenSource--Lizenz
überholt. Derzeit aktuell ist die Version 1.0rc2 vom April 2007. 

Die Weiterentwicklung des OpenBIOS ist nach der Freigabe der anderen
OpenFirmware--Versionen verlangsamt worden. Hier können Forth--affine
Entwickler ein interessantes Projekt zur Mitarbeit finden, im OpenBIOS
über die letzten Meter zur Versionsnummer 1.0 zu bringen. Das 
QEmu--System--Emulator Projekt%
\footnote{http://fabrice.bellard.free.fr/qemu/%
} benutzt OpenBIOS, um für die SUN--Sparc--Emulation eine IEEE--1275--Umgebung
bereitzustellen.

OpenBIOS war seit der Gründung als Projekt eng mit dem LinuxBIOS--(nun
CoreBoot--)Projekt verbunden. Daher wundert es nicht, dass OpenBIOS
als eines der möglichen {}\emph{Payloads} mit dem CoreBoot in einen
BIOS--Flashbaustein geschrieben werden kann. Zusammen mit CoreBoot
ermöglicht OpenBIOS einen direkten Start des IEEE--1275--Forth--Systems
aus dem BIOS--Flash--ROM.

Alternativ kann OpenBIOS auch über einen Bootloader (GRUB, Syslinux,
FILO), oder als normales Programm unter Linux oder anderen Unix--Systemen
gestartet werden. Mit OpenBIOS kann ein ISO--CD--ROM--Image mit OpenBIOS
erstellt werden, welches dann zum Testen von OpenBIOS in Emulatoren
wie QEmu oder VMWare benutzt werden kann.


OpenBIOS kann für die Architekturen x86, amd64, Xbox(1), SPARC und
PPC erstellt werden. Als Zusatzprogramme beinhaltet OpenBIOS einen
IEEE--1275--Tokenizer und De--Tokenizer, um Forth zu IEEE--1275--Tokencode
(FCODE) umzuwandeln und Tokencode auch wieder zurück in Forth--Quellcode.


\subsection{OpenFirmware (Firmworks)}

OpenFirmware%
\footnote{http://openbios.org/Open\_Firmware%
} ist die IEEE--1275--Version von Mitch Bradley (Firmworks%
\footnote{http://firmworks.com/%
}). OpenFirmware wird im OLPC XO (One Laptop per Child) als Start--Firmware
benutzt und steht unter einer BSD--ähnlichen OpenSource--Lizenz zur
Verfügung.

Die OpenFirmware--Quellen stellen mehrere Zielarchitekturen (ARM, x86,
PPC ..) zur Verfügung und beinhalten eine Anzahl von Hardware-- und
Dateisystemtreibern (in Forth geschrieben).

OpenFirmware kann über verschiedene Wege gestartet werden:

\begin{itemize}
\item direkt im (Flash--)ROM
\item über CoreBoot/LinuxBIOS
\item über einen Booloader wie Grub oder Syslinux
\item im Unix--Betriebssystem als normaler Prozess
\end{itemize}
Der derzeitige Fokus der OpenSource--Version ist der OLPC--Laptop. Alle
anderen Architekturen und Ladevarianten (im OpenSource--Quellcode--Tree)
sind derzeit nicht vollständig getestet und benötigen ggf.\ manuelle
Änderungen und Aktualisierungen, bevor diese übersetzt und benutzt
werden können.

OLPC--Laptops sind sehr schwierig zu bekommen, aber der kleine 
Linutop--Rechner%
\footnote{http://www.linutop.com, http://www.linuxkistchen.de%
} verfügt über eine recht ähnliche Hardwareausstattung (AMD--Geode--Chipsatz
und --CPU) im Vergleich zum OLPC XO und ist ein gutes Testgerät für
CoreBoot-- und OpenFirmware--Experimente.


\subsection{Smart Firmware (CodeGen)}

Smart Firmware%
\footnote{http://openbios.org/SmartFirmware%
} der Firma CodeGen%
\footnote{http://codegen.com/%
} ist eine in C geschriebene Implementierung von IEEE--1275, welche auch
im Jahr 2006 unter einer OpenSource--Lizenz freigegeben wurde. Smart
Firmware ist die Firmware--Basis des EFIKA--PPC--Boards, welches das
Referenz--Board des PowerPC--Development--Forums ist.

Das EFIKA--Board wurde von der deutschen Firma bplan%
\footnote{http://www.bplan.de%
} für die US--Firma Genisi entwickelt. Das EFIKA--Board kann unter dem
Namen {}\emph{OpenClient} zusammen mit 2.5''--Harddisk, Grafikkarte
und kleinem Gehäuse erworben werden%
\footnote{http://www.vesalia.de%
}%
\footnote{http://www.genisi.com%
}. Der {}\emph{OpenClient} ist eine interessante Plattform, um Smart--Firmware 
auf PPC--CPU auszutesten.

In den Smart--Firmware--Quellen findet man als Besonderheit einen {}\emph{C--zu--Forth}--Compiler%
\footnote{http://www.codegen.com/SmartFirmware/ccfcode.html%
}, welcher aus C--Quellcode IEEE--1275--kompatiblen Forth--Quellcode erzeugt,
welcher dann mit einem Tokenizer in FCODE (ByteCode) übersetzt werden
kann.


\subsection{OpenBOOT (SUN Microsystems)}

OpenBOOT%
\footnote{http://openbios.org/OpenBOOT%
} ist die IEEE--1275--Implementierung von SUN Microsystems, welche sich
in allen SPARC--SUN--Rechnern findet. Im Jahre 2006 hat SUN Microsystems
die SUN4V--Architektur, besser bekannt unter dem Namen {}\emph{SPARC--T1
Niagara}, unter eine OpenSource--Lizenz gestellt. Teil dieser Freigabe
war nicht nur die Prozessorarchitektur, sondern auch die dazugehörige
IEEE--1275--Implementierung für diese Prozessoren.

Die wenigsten Mitglieder der Forth--Gesellschaft werden eine T1--Sparc--Prozessor--Maschine 
besitzen, aber vielleicht gibt es den Prozessor
in Kürze als FPGA, da Open Source. Die OpenBOOT--Quelldateien sind
auf jeden Fall eine Besichtigung wert.


\subsection{SLOF (SlimLine Open Firmware)}

SlimLine Open Firmware, oder kurz SLOF%
\footnote{http://www-128.ibm.com/developerworks/power/pa-slof/%
}, ist die jüngste OpenSource--IEEE--1275--Implementierung. SLOF wurde
von der IBM für Cell--Prozessor--Maschinen erstellt.

Die Quellen von SLOF stehen auf den IBM--Seiten zum Download zur Verfügung,
jedoch muss man sich für den Zugriff registrieren.


\section{Forth auf alternativen, {}\emph{mini}--32/64--Bit--Betriebssystemen}

Auch Forth--Programmierer möchten nicht immer das Rad wieder neu erfinden
(ok, jedenfalls nicht {}\emph{jeder} Forth--Programmierer möchte das).
Anstatt Forth auf großen, Mega-- oder Gigabytes an Haupt-- und Plattenspeicher
verbrauchenden Betriebssystemen zu starten, kann Forth auch auf kleinen,
sehr kompakten Alternativ--Betriebsystemen ausgeführt werden. 

Diese alternativen Betriebsysteme sind meist direkt in Assembler geschrieben
und werden von einer kleinen, engagierten Gruppe von Entwicklern gepflegt. 

Anbei eine Auswahl dieser alternativen Systeme:

\begin{itemize}
\item DexOS%
\footnote{http://www.dex4u.com/index.htm%
} --- ein 100 KB Betriebssystem für i386+--Rechner. Es gibt schon eine
Retro--Forth--Portierung
\item KolibriOS%
\footnote{http://kolibrios.org/%
} --- ein kompaktes Betriebssystem aus Russland
\item Solar\_OS%
\footnote{http://www.oby.ro/os/%
} --- ein kompaktes Echtzeit--Betriebsystem mit GUI. Benötigt nur 8 MB
RAM, für 32-- or 64--Bit--x86--CPU.
\item OcatOS%
\footnote{http://octavio.vega.fernandez.googlepages.com/octaos%
} --- ein kleines OS für 486 (und besser) mit 4MB Hauptspeicher, GUI.
\item MenuetOS%
\footnote{http://www.menuetos.net/%
} --- OS in Maschinensprache mit Ethernet und TCP/IP
\end{itemize}
Alle diese Mini--Betriebssysteme lassen sich von einer 3.5''--Diskette
starten oder schnell in einer Virtualisierungslösung wie VMWare, VirtualBox
oder QEmu testen.


\section{Fazit}

Eine ausführliche Anwort auf die kurze Frage von Fred aus der vorherigen
VD. Leider gibt es sie nicht, die ganz einfache Lösung: {}\glqq Nimm
diese Software, klicke dort und hier, und in zwei Minuten bist Du
am Ergebnis...\grqq.

Stattdessen gibt es eine reichhaltige Auswahl von möglichen Lösungen,
in den verschiedensten Schwierigkeitsstufen. Eine Einarbeitung in
das Thema ist immer notwendig.

Aber, hey, wir arbeiten mit Forth, {}\emph{klicki--bunti} ist woanders.
Wir wollen {}\emph{verstehen}, was das System im Innersten zusammenhält.
Oder nicht?

\end{multicols}
% \theendnotes

\end{document}
