\documentclass[11pt,a4paper]{article}
% save as utf-8-emacs-unix

% language support
\usepackage[german]{babel}
%\usepackage{german}
\usepackage[utf8]{inputenc} % can use Umlauts now ü instead of "u

\usepackage{url} % \url{} \path{} with correct "hyphenation"
\parindent=0pt
\begin{document}

\title{DosBox --- Laufzeitverlängerung für Forth unter DOS}
\shorttitle{DosBox --- Laufzeitverlängerung für Forth}
\author{Carsten Strotmann}

\maketitle

\begin{abstract}\itshape
Auf modernen Betriebssystemen wird es immer schwieriger, alte Forth Programme aus der MS--DOS--Zeit zu betreiben. Die Kompatibilität der DOS--Umgebung von Microsoft--Windows--Betriebssystemen wird von Version zu Version schlechter. Neue Rechnersysteme, wie das Google Chrome Notebook, werden mit ARM--CPUs betrieben und können daher keine DOS--Programme, welche ja für 80x86 geschrieben sind, ausführen. Ein für die Ausführung von Spiele--Software geschriebenes OpenSource--Programm namens DosBox kann helfen. 
\end{abstract}

\begin{multicols}{2}

% --------------------------------------------------------------------
\section{Dos in der Box}
\label{sec:intro}
Wenn im Folgenden von "DosBox" gesprochen wird, so ist der PC-Emulator, jedoch nicht die in Windows--Betriebssystemen eingebaute DOS--Umgebung gemeint (die umgangssprachlich auch oft 'dosbox' genannt wird).

Das Programm DosBox\footnote{\url{http://www.dosbox.com/}} ist ein x86--Emulator mit eingebauten DOS (MS--DOS--kompatibel). Anders als Virtualisierungslösungen, wie KVM/Qemu, VirtualBox oder VMWare und Hyper--V, ist DosBox ein echter Emulator. Die x86--Instruktionen werden nicht an die CPU im Rechner unter Aufsicht eines Hypervisors weitergegeben, sondern in einer virtuellen Maschine vom Emulator abgearbeitet. Dies braucht mehr CPU--Rechenkapazität, erlaubt es aber, dass DosBox DOS--kompatible Programme auf beliebigen CPUs ausführen kann (ARM, MIPS, PowerPC, und auch x86).

\section{Benutzung}
\label{sec:usage}

Auf der DoxBox Webseite sind Installationspakete für die gängigen Betriebssysteme (Windows, MacOS X, Linux) und auch für weniger genutzte Systeme (Solaris Sparc, RISC-OS, FreeBSD, OS/2, BeOS ...) zu finden. Für alle anderen Systeme gibt es den Quellcode. DosBox gibt es auch für eine Reihe von mobilen Geräten wie Smartphones oder tragbaren Spielekonsolen.

\includegraphics[scale=0.32]{2011-02/dosbox1}

Nach dem Start der Anwendung findet der Benutzer sich auf dem gewohnten DOS--Prompt wieder, jedoch nicht auf Laufwerk C: sondern auf Laufwerk Z:. Eine Besonderheit von DosBox ist, dass kein separates DOS--Betriebssystem installiert werden muss (FreeDOS, MS-DOS, PC-DOS etc), sondern dass DosBox ein DOS mitbringt. Dieses DOS befindet sich au"serhalb des emulierten PCs, so dass ganze 632KB im unteren Speicher des PCs für die Anwendungsprogramme zur Verfügung stehen.

Im Laufwerk Z: des DosBox--PCs befinden sich Hilfsprogramme, mittels der die DOS--Umgebung angepasst werden kann. Diese Hilfsprogramme sind auch emuliert und nicht physisch vorhanden, die angezeigte 'AUTOEXEC.BAT' ist (wenn vorhanden) nicht als echte Datei vorhanden, sondern wird von DosBox aus Informationen in der DosBox-Konfiguration erstellt.

\section{Serielle Schnittstellen über TCP/IP}
\label{sec:serial-ports}
Echte serielle Schnittstellen sind selten geworden in modernen PCs. Es gibt zwar seriell--zu--USB--Adapter, doch lassen sich diese Adapter mit alter DOS--Software (die ja auch auf die echte UART--Hardware zugreifen will) oft nicht zuverlässig nutzen.

DosBox erlaubt es dem Benutzer, die serielle Schnittstelle umzulenken. So kann über die Konfigurationseinstellung 'directserial' eine serielle Schnittstelle des Hostrechners (auf dem das Programm DosBox läuft) an eine serielle UART Schnittstelle innerhalb der DosBox weitergeleitet werden. Unter Unix/MacOS X kann die DosBox--Schnittstelle an jedes beliebige Zeichen--Ein/Ausgabe--Gerät gebunden werden. Im folgenden Beispiel (MS Windows) wird die serielle Schnittstelle 1 innerhalb der DosBox mit dem Gerät 'com1' unter Windows verbunden:

{\small\texttt{serial1=directserial realport:com1 startbps:1200 parity:e bytesize:8 stopbits:1 irq:4}}

Programme innerhalb der DosBox sehen eine echte Hardware--UART--serielle Schnittstelle, auch wenn auf dem Hostsystem nur eine USB--serielle Schnittstelle vorhanden ist. Die Umleitungseinstellungen werden in der Konfigurations--Datei 'dosbox.conf'\footnote{siehe \url{http://www.dosbox.com/wiki/Dosbox.conf}} vorgenommen. 

Sehr nützlich ist die Möglichkeit, eine serielle Schnittstelle über das Netzwerk umzuleiten. DosBox sendet in diesem Modus die Daten über eine Telnet--Verbindung über TCP zu einem entfernten Rechner. Damit lassen sich zwei Programme, die beide auf verschiedenen Rechnern innerhalb der DosBox laufen, über ein TCP/IP--Netzwerk verbinden. Die Programme sehen eine Nullmodemverbindung zwischen den beiden Maschinen. Damit lassen sich DOS--Forth--Programme mit Netzwerkfunktionen aufrüsten, ohne dass ein Netzwerk--Stack oder Netzwerk--Karten--Treiber unter DOS benötigt werden. 

Beispiel einer Nullmodem--über--TCP--Konfiguration:
{\small\texttt{serial1=nullmodem server:my.other.doxbox.example.com port:20000}}

Neben dem Netzwerk über serielle Schnittstellen unterstützt DosBox auch das alte IPX--Netzwerkprotokoll\footnote{\url{http://de.wikipedia.org/wiki/Internetwork_Packet_Exchange}}.

\section{DosBox--Debugger}
\label{sec:debugger}

Bestandteil des DosBox--Quellcodes ist auch ein sehr guter Debugger. Mit diesem Debugger kann die gesamte DOS--Umgebung innerhalb des DosBox--Programms untersucht werden. Der Debugger muss beim Kompilieren des DoxBox--Programms angeschaltet werden \texttt{./configure  --enable-debug}. Da die vorgefertigten DosBox--Pakete im Internet, aber auch in Linux Distributionen, eher Spieler denn Programmierer als Zielgruppe sehen, ist in diesen Installationspaketen der Debugger leider nicht enthalten. Aber zum Glück kann der Sourcecode geladen und selbst kompiliert\footnote{Windows Benutzer finden eine DosBox Version mit Debugger unter\\ \url{http://kannan.jumbledthoughts.com/index.php/howto-use-dosbox-as-a-quick-dirty-disassembler/}} werden.

Ist der Debugger im Programm enthalten, kann dieser mit einer Tastenkombination \footnote{Tastenkombination einstellbar mit dem Tastaturmapper, CTRL+F1} oder mit dem Programm 'debug.com <exe-datei>' (aus Laufwerk Z:) aufgerufen werden.

\includegraphics[scale=0.32]{2011-02/dosbox2}
 
Diese Ausgabe des Debuggers erscheint im Terminal/Consolen--Fenster, DosBox muss daher von einer Kommandozeile gestartet werden (und nicht über ein Programm--Icon). Das Debugger--Fenster ist in fünf Bereiche aufgeteilt:
\begin{enumerate}
\item "`Register Overview"' zeigt die Prozessor--Register der emulierten CPU an.
\item "`Data Overview"' bietet eine Hex-- und ASCII--Anzeige des Hauptspeichers. Mit den Tasten 'Bild--auf'/'Bild--ab' kann ueber den Inhalt des Speichers gescrollt werden.
\item "`Code Overview"' zeigt einen symbolischen Disassembler. Hier können Programme im Speicher der DosBox im Assemblercode betrachtet werden. Mittels der Cursor--auf/--ab--Tasten kann der Programmtext ausgewählt werden.
\item "`Variable Overview"' ermöglicht es, bestimmte Speicherstellen immer im Blick zu halten. Mit dem Befehl 'IV segment:offset name' kann ein Speicherbereich benannt werden. Dieser wird nun im "`Variable Overview"' Bereich angezeigt und laufend aktualisiert. Beispiel: 'IV 0:413 memsize'. Über den Befehl 'SV datei' kann die Variablenliste gespeichert werden, mit 'LV datei' wird eine gespeicherte Liste wieder eingeladen.
\item "`Input/Output"': In diesem Bereich zeigt der Debugger Status-- und Fehlermeldungen an. Auch die Kommando-Liste wird durch den Befehl 'help' hier ausgegeben. Dieser Bereich wird über die Tasten 'Pos1' und 'Ende' gescrollt.
\end{enumerate}

\section{Klappe, die Erste}
\label{sec:video}
DosBox bietet verschiedene Möglichkeiten, Ton-- und Bildschirm--Ausgabe aus dem Emulator aufzunehmen. CTRL+F5 speichert den aktuellen Bildschirm--Inhalt als Bildschirmphoto im PNG\footnote{Portable Network Graphics \url{http://de.wikipedia.org/wiki/Portable_Network_Graphics}} Format. CTRL+ALT+F5 startet eine Videoaufzeichnung. Bis wieder CTRL+ALT+F5 gedrückt wird, speichert DosBox den Bildschirm--Inhalt als AVI--Film auf die Festplatte. Ideal für kleine Filme zu Schulungs-- und Dokumentations--Zwecken.

Töne lassen sich aus der DosBox im WAV--, DRO--\footnote{siehe \url{http://de.wikipedia.org/wiki/Yamaha_YM3812}} oder MIDI--Format aufnehmen.

DosBox ist ein hilfreiches Programm für Programmierer, die 'legacy' Forth--Programme unter MS-DOS warten. Alte PC--Hardware wird sehr zuverlässig emuliert, und man muss nicht auf den Komfort neuer Rechner verzichten.

Und nicht vergessen: Spielen kann man in der DosBox auch!
\end{multicols}

\end{document}
