MSX - Arbeiten an damaligen und heutigen PCs

 

Was ist ein Cross-Assembler?

In den voran gegangen Kapiteln haben wir den Assembler einmal als Programmiersprache und einmal gleichnamig als Programm kennengelernt. Letzteres nimmt Anweisungen in Form der Assemblersprache und setzt diese um in Maschinencodes die ein Prozessor versteht und  als Befehle für sich ausführt. In einem Abschnitt haben wir auch damalige Assemblerprogramme (champ, etc..) kennengelernt, die auf damalige original Computern gestartet worden sind um eben des Problemlösungsvorhabens entsprechenden Maschinencode zu erzeugen und dem Computer selbst zur Ausführung bereitzustellen. 
In der heutigen Zeit haben jedoch nicht alle Interessierten die original Hardware in Form eines Computers von damals zur Verfügung. Die heutigen Computer haben andere Prozessoren die deren Herzstück sind. Es gibt für die heutigen Computer ebenso Assembler als Programme. Die erzeugen jedoch, wie auch deren damaligen "Kumpels", Maschinencode für den derzeit genutzten Prozessor. (Etwas vereinfacht und bestimmte Nuancen weggelassen).
Ein Cross Assembler läuft also auf einem heutigen Computer. Es kann Assembleranweisungen einlesen oder direkt in sich wie in Word, in einem Editor, als Eingabe annehmen. Es versteht dass es die Assembleranweisungen in Maschinencode übersetzen soll, welches vom eigenen Prozessor NICHT verstanden wird. Es verlässt sich auf bestimmte Definitionen die ein Programmierer des Cross-Assembler-Programs implementiert hat. "Naja, wenn er sagt dass ich aus diesem A ein damaliges Hallo machen soll, dann mach ich das. Obwohl für mich es eigentlich ein Auf Wiedersehen wäre.". Das Ergebnis von diesem Übersetzen (assemblieren) ist dann letztendes genau so eine Anordnung von Maschinencode, die passend sind für einen Prozessor, der in einem damaligen existenten Computer genutzt worden ist. Als letztes muss dieses Ergebnis einem "alten" Computer oder eben einem Emulator wie unten beschrieben bereitgestellt werden. Näheres zu Cross Assembler auf der linken Seite.

Was ist ein Emulator ?

Wir haben ja ebenso in den vorrangegangen Kapiteln ein bisschen den Aufbau eines Computers und den Aufbau eines Betriebssystems (bei OK -Computern durch den BASIC Interpreter/direkmode implementiert) kennengelernt. 

Wie wäre es, wenn jemand ein Programm programmiert, welches in der Lage ist bestimmte OPCodes,oder Maschinencode zu lesen (sei es von Tastatur, reservierter Speicherbereich, von Diskette, von einer Datei) und diese Dinger in ein Unterprogramm gibt welches das auswertet und weitere Unterpogramme anstartet, die z.B. ein Rechteck mit einem OK-Prompt malen? 
Letztendenes drehen wir uns nur in einem "Speicherorientiertem" Gerät, wobei der Speicher auf verdrahteten Transistoren besteht und irgendwo Strom fliesst und irgendwo nicht. Und da wo was fliesst, da passiert was. Und wenn zufällig ein Speicher irgendwelche Drätchen nach außen führt, wo ein Bildschirm angeschlossen und dieser der Meinung ist, anhand den Stromfluss oder kein Stromflusskombinationen eine Linie zu zeichnen, oder einen Buchstaben darzustellen - dann tut das der Bildschirm. 
Wenn irgendjemand also tatsächlich etwas programmiert, und seine OPCodes so arrangiert (bzw. sein Programm so schreibt) dass das was hinten "sinnig" rauskommt, damit es sich verhält wie ein echter physischer MSX Computer, … tjo Freunde… dann ist das ein Programm welches etwas "emuliert". Also ein Emulator. 
Und ein Vertreter der Emulator-Programme ist openMSX. Das sinnige was da hinten rauskommt, ist ein Fensterchen auf der Windows Oberfläche das das zeigt, was in den 80zigern der alte Fernseher gezeigt hat. das OK Prompt oder ein PacMan spiel Mehr dazu links im Menü.

Was ist ein Cross Compiler ?

Ein cross compiler ist wie heute ein compiler. z.B. werden Programme die in der Sprache "C" beschrieben worden sind, von einem compiler gelesen und in assembler umgesetzt. In nachfolgenden Schritten wird ein Assembler gestartet der letztenendes das Maschinenprogramm erzeugt. Als letzter Schritt wird ein Linker genutzt um weiter notwendige, bereits assemblierte Programmteile - Betriebssystemroutinen o. ä. mit dem eben erzeugten Maschinenprogramm zu verknüpfen.
Der Bezeichner Cross, bedeutet wie beim Cross Assembler, dass die "Zielanweisungen" nicht passend auf dem aktuellen Computer, sondern nur so getan wird als. Letztenendes kann nur die anvisierte "Ziel"-Architektur den Code ausführen.