mikrocontroller.net

Forum: Projekte & Code MXE11 - Unix auf dem Mikrocontroller


Autor: Joerg W. (joergwolfram)
Datum:
Angehängte Dateien:

Bewertung
8 lesenswert
nicht lesenswert
Bei den "Kunstwerken" hatte ich es ja schon vor einiger Zeit 
vorgestellt, jetzt gibt es auch eine Doku zum Projekt und somit ein 
erstes öffentliches Release. Und es gibt diesmal wieder einen Emulator. 
Eigentlich war das ursprüngliche Ziel, einen C-Compiler auf dem 
Mikrocontroller zu relisieren, über den cc/pcc bin ich dann irgendwie 
zur PDP11 gekommen.

Beim MXE11 handelt es sich um die Emulation einer PDP11 mit 28 KWorten 
Speicher, auf der ein Mini-Unix läuft.
EIS ist implementiert, eine FPU zur Zeit aber noch nicht. Als 
Massenspeicher werden 3 RK05 Disks via Image auf
einem DataFlash (AT45DB642) oder SD-Karte emuliert, wobei bei der 
SD-Karte das Image "raw" an den Kartenanfang geschrieben wird und somit 
keine Dateisysteme auf der Karte unterstützt werden. Ein 60 HZ Timer 
(KL11) ist vorhanden sowie 2 serielle Interfaces.
Diese sind auf Emulatorebene mit jeweils 256 Bytes großen Puffern 
ausgestattet und arbeiten standardmäßig mit 38400 Baud.

Das Mini-Unix wurde damals entwickelt, um Unix auch auf Maschinen ohne 
MMU laufen lassen zu können. Es handelt sich dabei um ein "abgespecktes" 
V6-Unix, so sind nur max. 4 Nutzer und 13 Prozesse gleichzeitig möglich.
Es gibt eine Vielzahl an Tools und es können  eigene Programme in 
verschiedenen Programmiersprachen erstellt werden (ASM, C, BASIC und
Fortran/Ratfor, wobei ich letztere nicht getestet habe.

Der Emulator läuft auf versciedenen Mikrocontrollern ab 64K RAM, 
entwickelt habe ich ihn parallel auf einem SPC56EL60 und mit SDL-Konsole 
unter Linux. Später sind dann noch einige STM32-Versionen hinzugekommen. 
Freies RAM wird weitestmöglich für Disk-Schreibcache verwendet, bei 64K 
RAM sind es allerdings nur 4 Sektoren. Das reicht aber aus, um 
periodische Zugriffe bei einem User abzufangen.

Außerdem gibt es noch eine optionale RTC mit einem ATMega88, die ist 
aber nicht unbedingt erforderlich. Die interne RTC der STM32 wird nicht 
unterstützt und momentran ist auch nichts in diese Richtung geplant. 
Eher noch eine MSP430-Variante der RTC.

Von der Geschwindigkeit her würde ich den Emulator im "Mittelfeld" 
sehen, auf jeden Fall lässt sich damit arbeiten. Den kompletten Kernel 
neu zu übersetzen, braucht auch auf einem STM32F107 mit 72MHz weniger 
als 10 Minuten. Ansonsten habe ich auch die verschiedenen 
Emulatorvarianten mit zwei Benchmarks getestet und die Ergebnisse mit 
veröffentlicht.

Das Projekt findet sich unter

http://www.jcwolfram.de/projekte/mxe11/main.php

dieses Mal gibt es auch eine englische Version, wobei die Übersetzung 
noch nicht "optimal" ist.

http://www.jcwolfram.de/projekte/mxe11_en/main.php

Alternativ ist meine Seite auch aus dem TOR-Netz erreichbar:

http://tcrkkpvqapdku6vi.onion/projekte/main.php

Für das nächste Release steht analoges/digitales I/O an, wofür ich aber 
erst neue Hardware entwerfen muss. Geplant habe ich auch eine mobile 
Variante, daher gibt es jetzt schon eine SDL-Version, die ein 320x240 
Display emuliert. Gedanken habe ich mir auch über Netzwerkfähigkeit 
gemacht, diese soll über CAN realisiert werden und sowohl eine virtuelle 
serielle Verbindung als auch ein viertes (virtuelles) Laufwerk 
bereitstellen. Aber bis dahin wird es noch etwas dauern...


Jörg

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Irgendwann wird der Tag kommen, an dem ich meine im Keller herumstehende 
PDT-11/150 abstauben und wieder zum Leben erwecken werde! ;-)

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
👏 👏 👏 👏 👏

(Für diejenigen, deren Browser die obigen Zeichen nicht darstellen 
können: Unicode Character 'CLAPPING HANDS SIGN' (U+1F44F))

Autor: Joerg W. (joergwolfram)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Da sich die FPU-Emulation noch etwas hinziehen wird, gibt es erst mal 
einen "Zwischenstand".

Eine wesentliche Änderung betrifft den Anschluss der emulierten 
Festplatte, beim Start wird automatisch erkannt, ob eine SD-Karte oder 
ein DataFlash angeschlossen sind.

Außerdem gibt es jetzt Analog- und Digital-IO, dazu habe ich auch 
passende Kernelmodule entwickelt. Alternativ lassen sich die 
Speicherzellen direkt ansprechen.

- 4 digitale Inputs, ansprechbar über /dev/gpio

/dev/gpio ist ein Character-Device, beim Lesen wird der Status der 4 
Inputs (mit Pull-up) als Hex-Char zurückgegeben.


- 4 digitale Outputs, ansprechbar über /dev/gpio

Beim Schreiben auf /dev/gpio werden nur Hex-Chars ausgewertet, die 4 
Ausgänge folgen dem entsprechenden Bitmustern.

- 4 analoge Inputs (10 Bits Auflösung) über /dev/adc0 ... /dev/adc3

Die Werte werden als 4-stellige Dezimalzahlen und LF als Trenner 
ausgegeben.

- 4 analoge Outputs (PWM mit 10 Bits Auflösung) über /dev/pwm0 ... 
/dev/pwm3

Hier wird ein numerischer String erwartet, bei Leerzeichen oder LF im 
String, wird der aktuelle Wert ausgegeben.

Außerdem gibt es jetzt noch einen (Pseudo-)Zufallszahlengenerator über 
/dev/random und einen Tick-Counter mit 12KHz für Echtzeitaufgaben.

Auf der anderen Seite habe ich die Unterstützung für den STM103 
eingestellt, da ich auf meinem "Board" (Dead-Bug BGA) nicht mehr an die 
I/O zum Testen herankomme. Ebenfalls eingestellt habe ich die englische 
Version der Dokumentation.

Jörg

Autor: Joerg W. (joergwolfram)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Da ich (aus einem anderen Grund) mir heute den aktuellen MinGW 
Crosscompiler installiert habe, gibt es hiermit auch eine Version, die 
unter Windows laufen sollte. Getestet habe ich es allerdings nur mit 
wine. Dazu einfach das Verzeichnis entpacken und die Exe in dem 
Verzeichnis starten. Die DLLs und das Image-File müssen auch im gleichen 
Verzeichnis liegen. Bei genügend Interesse würde ich das ggf. mit in den 
Hauptzweig aufnehmen.

Jörg

: Bearbeitet durch User
Autor: Joerg W. (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

1. Das Executable ist eine 64-Bit Version
2. Virustotal hat keine Beanstandungen gemeldet
3. Anstelle AltGr muss man Alt verwenden
4. Ich habe es unter W7 testen können, Z und Y sind noch vertauscht

Die anderen Tasten (# * + - ...) hatte ich schon reingepatcht, weil die 
auch unter Wine nicht gingen. Dabei sieht es so aus, dass ein QWERTY 
Tastaturlayout verwendet wird. Das scheint aber nur ein Problem bei dem 
Cross-compilierten Programm zu sein, die Linux-SDL Version verhält sich 
richtig und nimmt den Keycode

Vielleicht weiß jemand, wie man es hinbekommt, dass die 
Cross-compilierten SDL-Programme das aktuelle Layout verwenden?

Jörg

Autor: Peter S. (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse, was du da wieder gezaubert hast!!

Ich würde mich sogar mehr für eine bare Metal pdp11 Emulation 
interessieren.
Quasi das Gegenstück zur PDP11Gui:

Danke+Gruß,
Peter

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

passt zwar zu meinem Alter, passt aber wohl nicht wirklich zu meinen 
C-Kenntnissen...

Anschauen werde ich mir das auf jeden Fall. Den Kram für den ESP32 
gebaut, WLAN mit rein und die Terminals per putty z.B. wäre doch 
irgendwie lustig.

Gruß aus Berlin
Michael

Autor: Joerg W. (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die PC-Version ist eigentlich nur mit abgefallen, weil ich sie bei der 
Entwicklung benötigt habe.
Für Emulation auf dem PC gibt es ja schon SIMH. Zielplattformen sind 
diverse Mikrocontroller, das sollte "Bare Metal" genug sein.

Außerdem läuft z.B. RT11 nicht.

Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.