Programmier-Projekte
Ultibo / Lazarus / Free Pascal
von Ronald Daleske

Startseite Impressum Warenzeichen

EMUZ80 RPI - Z80 / CP/M - Emulator auf Rapberry PI/PI2/PI3

Site in English / Seite auf englisch (gekürzt)

EMUZ80 RPI ist ein CP/M-Emulator für den Z80 Prozessor auf dem Raspberry PI(2). Dabei wird der Emulator ohne Betriebssystem "Bare Metal" auf den Raspberry PI betrieben. Diese spezielle Anwendung startet in etwa 5 Sekunden.

Möglich wird diese neue Technologie durch einen Lazaus/Free Pascal-Cross-Compiler der Firma Ultibo.

Obwohl das Tool noch sehr neu ist, sind die viele Möglichkeiten bereits erkennbar. Das soll hier gezeigt werden.

Inhaltsverzeichnis

1. Raspberry PI, Bare Metal und Ultibo eine neue Entwicklungsstufe
2. Konzept von Ultibo und Bare Metal
3. Umsetzung des Emulators
4. Installation auf dem Raspberry PI(2)
5. Quelltexte CP/M-Emulator
6. Lizenz

1. Raspberry PI, Bare Metal und Ultibo eine neue Entwicklungsstufe

Die Idee, den Raspberry PI ohne Betriebssystem zu betreiben ist warscheinlich so alt wie der Raspberry PI selbst. In den letzten Jahren haben sich viele creative Programmierer diesem Thema gewidmet. In den entsprechenden Foren, Wikis und Internetseiten hat sich dafür der Name "Bare Metal" etabliert (übersetzt "Rohmetall", also die Programmierung auf dem "nicht vorbearbeitetem Werkstück").

Hier nur einige Beispiele:

Alle Projekte haben gezeigt, dass man den Raspberry PI grundsätzlich Bare Metal programmieren kann. Aber kein Projekt konnte eine wirkliche Alternative zu den Möglichkeiten zu bieten, die die Arduino IDE für die Arduino Mikrocontroller bietet.

Das ist nun anders.

Die australische Firma:

entwickelte einen Lazarus/Free Pascal Entwicklungsumgebung für "Bare Metal" die zum ersten Mal die Möglichkeit bietet, dass sich auch Anwendungsprogrammierer dem Thema Bare Metal widmen können.


2. Konzept von Ultibo und Bare Metal

Man kann sicher viel über das Konzept erzählen, aber ein echter Programmierer kann eine neue Idee am Besten beurteilen, wenn er sich die Quelltexte und Beispiele einmal ansieht.

Unter dem oben angegebenen Portal von Ultibo unter "Downloads" kann man den "Ultibo Core" namens "Ultibo-Core-1.1.015-Cucumber.exe" (Stand 22.03.2016) herunterladen. Nach der Installation hat man eine komplette Lazarus IDE für die Erstellung von Bare Metal Anwendungen für Raspberry PI (Achtung, wer bereits Lazarus/Free Pascal installiert hat, muss dies vorher deinstallieren). Da der Raspberry PI ein ARM SoC ist, handelt es sich hier um einen Cross-Compiler, also einen Compiler, der zwar unter (X86) Windows läuft, dann aber eine Linux-ELF-Datei erzeugt, die nur auf dem ARM-Prozessor lauffähig ist.

Beeindruckend ist die Einfachheit, mit der nach dieser kurzen Installation auch hoch komplexe Anwendungen erstellt werden können.

Beim Blick auf die Free-Pascal-Ultibo-Quelltexte fällt auf, dass hier ein sehr professionelles Team am Werke ist. Das Konzept und die Struktur der Module sind durchdacht und für die Zukunft in vielen Richtungen erweiterbar.

Im "Demo Image" ist ein kleines Demo-Programm enthalten, dass die Möglichkeiten des Tools zeigt.

Unter https://github.com/ultibohub/Examples kann man Beispiele finden, die die Möglichkeiten des Ultibo Frameworks verdeutlicht.


Es macht nun richtig Spaß, mit dem "Ultibo Core" Anwendungen für den Raspberry PI(2) zu erstellen.


Angesichts des noch frühen Entwicklungssadiums des "Ultibo Core" gibt es einige Module, die schon ganz gut laufen, sowie einige die noch nicht fertig oder teilweise unvollständig sind.

Was läuft schon recht gut

Was muss noch gemacht werden


Hinweis: Dateien abspeichern

Im Beispiel "08-FileHandling" oder in der Emulator-Unit "wincpm.pas" kann man sich ansehen, wie Dateien auf der SD-Karte abgespeichert werden können. Wichtig ist, dass vor dem Abspeichern einer Datei zuerst kontrolliert wird, ob die Datei bereits vorhanden ist. Wenn ja muss sie vorher gelöscht werden. Wird dies nicht getan, "hängt" sich die Anwendung auf (hat mir einige Zeit Fehlersuche gekostet). Der Free Pascal Compiler unter X86 speichet Dateien auch ab, wenn sie bereits vorhanden sind.


+

Anschließend muss die RTL neu übersetzt werden ("Werkzeuge" -> "Build Ultibo RTL").

Weiterhin wurden einige Sondertasten mit speziellen CP/M Funktionen belegt:


3. Umsetzung des Emulators

Unter EMUZ80 - Z80 / CP/M - Emulator ist der Kern des Emulators grundsätzlich schon beschrieben worden (hier aber ohne Zusatzfunktionen). Da beide Projekte in Lazarus/Free Pascal programmiert wurden, war nur eine Anpassung an die spezielle Umgebung des "Ultibo Cores" notwendig.

In dieser Version können 2 CP/M Laufwerke genutzt werden (A und B). Auf der SD-Karte werden herfür die beiden Ordner "CPM_LW_A" und "CPM_LW_B" genutzt.

Abspeichern von geändeten CP/M-Dateien

In dieser Version können 2 CP/M Laufwerke genutzt werden (A und B). Auf der SD-Karte werden hierfür die beiden Ordner "CPM_LW_A" und "CPM_LW_B" genutzt. In diese Ordner können beliebige CP/M-Dateien eingespielt werden. Beim Start des CP/M-Emulators werden die beiden Verzeichnisse in zwei Images für CP/M-Laufwerke eingelesen.

Wenn keine CP/M-Dateien geändert werden, braucht auch nichts weiter gemacht werden. Sollen aber geänderte CP/M-Dateien für spätere Nutzungen abgespeichert werden, so muss das CP/M-Komando "s" oder "S" in der CP/M-Konsole (CCP) eingegeben werden. Dadurch wird die Datei "S.COM" gestartet, die den Export beider CP/M-Images veranlaßt. Wenn sich CP/M-Dateien veränder haben, oder neue CP/M-Dateien hinzugekommen sind, werden diese in dem jeweiligen Order abgespeichert. Das Kommando "S" kann jederzeit eingegeben werden. Danach kann man wie gewohnt weiter arbeiten.

ANSI-Steuerzeichen der Konsole

Der Emulator fängt die ANSI-ESC-Sequenzen an die Konsole ab und setzt sie auf der emulieten Konsole bestmöglich um. Da es hier aber viele proritäre Steuerzeichen gibt wird das nicht immer gelingen. Der vorliegende Emulator ist auf die VT100-Steuerzeichen von Turbo Pascal optimiert (es funktioniert sogar das arbeiten Mit Blöcken im Turbo Pascal Editor (Strg+K+B = Blockanfang, Strg+K+K = Blockende, Strg+K+C = markieten Block kopieren usw.).


4. Installation auf dem Raspberry PI(2/3)

Die Installation von Bare Metal Programmen auf dem Raspberry PI(2/3) ist recht einfach. Man benötigt lediglich eine leere SD-Karte (oder Micro-SD-Karte für die neueren Varianten). Die SD-Karte muss mit dem Dateisystem FAT oder FAT32 formatiert werden.

Danach werden alle Dateien aus dem Ordner "boot..." direkt in das Hauptverzeichnis auf die SD-Karte geschrieben (inklusive der Unterordner "CPM_LW_A" und "CPM_LW_B").


4.1. Boot-Dateien des CP/M Emulators (deutsches Tastaturlayout) optimiert für VT100 Monitor WordStar 3 (invertiert)

Hinweis: Word Star 3 ist optimiert für die CP/M Auflösung von 80x24 Zeichen mit invertierter Zeichendarstellung.

CP/M Beispielprogramme für RPI: 10_BOOT_RPI_DE_WS.ZIP

CP/M Beispielprogramme für RPI2: 12_BOOT_RPI2_DE_WS.ZIP

CP/M Beispielprogramme für RPI3: 14_BOOT_RPI3_DE_WS.ZIP


4.2. Boot-Dateien des CP/M Emulators (deutsches Tastaturlayout) optimiert für VT100 Monitor Turbo Pascal 3 und dBase III (nicht invertiert)

Hinweis: Der Turbo Pascal Editor ist optimiert auf die CP/M Auflösung von 80x24 Zeichen ohne invertierte Zeichendarstellung.

CP/M Beispielprogramme für RPI: 20_BOOT_RPI_DE_TP_DB.ZIP

CP/M Beispielprogramme für RPI2: 22_BOOT_RPI2_DE_TP_DB.ZIP

CP/M Beispielprogramme für RPI3: 24_BOOT_RPI3_DE_TP_DB.ZIP


4.3. Boot-Dateien des CP/M Emulators (deutsches Tastaturlayout) optimiert für VT100 Monitor mit maximaler Zeilenzahl

CP/M Beispielprogramme für RPI: 30_BOOT_RPI_DE_BAS_ASM_M2.ZIP

CP/M Beispielprogramme für RPI2: 32_BOOT_RPI2_DE_BAS_ASM_M2.ZIP

CP/M Beispielprogramme für RPI3: 34_BOOT_RPI3_DE_BAS_ASM_M2.ZIP


5. Quelltexte CP/M-Emulator (Version 2.2 vom 08.03.2017)

Hinweis: Die hier aufgeführen Quelltexte beziehen sich auf die Ultibo core Version 1.3.077 (vom 28.12.2016).

CP/M Emulator EMUZ80 für Raspberry PI : EMUZ80_RPI.ZIP

Getestet mit RaspberryPi B und RaspberryPi A+.

CP/M Emulator EMUZ80 für Raspberry PI 2: EMUZ80_RPI2.ZIP

Getestet mit RaspberryPi 2B.

CP/M Emulator EMUZ80 für Raspberry PI 3: EMUZ80_RPI3.ZIP

Getestet mit RaspberryPi 3B.


6. Lizenz

Creative Commons Lizenzvertrag
Diese(s) Werk bzw. Inhalt von Ronald Daleske steht unter einer Creative Commons Namensnennung-Nicht-kommerziell 3.0 Deutschland Lizenz.


keine Mängelgewähr

DIESE SOFTWARE WIRD VOM URHEBERRECHTSINHABER "OHNE MÄNGELGEWÄHR" BEREITGESTELLT. ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH DER STILLSCHWEIGENDEN GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK (JEDOCH NICHT DARAUF BESCHRÄNKT), WERDEN AUSGESCHLOSSEN. DER URHEBERRECHTSINHABER IST IN KEINEM FALL UND NACH KEINER HAFTUNGSTHEORIE (SEI ES AUF VERTRAGSBASIS, AUF DER BASIS STRENGER HAFTUNG ODER UNERLAUBTER HANDLUNGEN, EINSCHLIESSLICH FAHRLÄSSIGKEIT) FÜR BELIEBIGE VERURSACHTE DIREKTE, INDIREKTE, ZUFÄLLIGE, BESONDERE, EXEMPLARISCHE SCHÄDEN ODER FOLGESCHÄDEN (EINSCHLIESSLICH, JEDOCH NICHT BESCHRÄNKT AUF BESCHAFFUNG VON ERSATZPRODUKTEN ODER -LEISTUNGEN, NUTZUNGSAUSFALL, DATEN- UND GEWINNVERLUST ODER GESCHÄFTSAUSFALL) HAFTBAR, DIE AUFGRUND DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN KÖNNEN. DIES GILT AUCH, WENN AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDE.


THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.




Startseite Impressum Warenzeichen