Forum: Mikrocontroller und Digitale Elektronik Stack Maschine


von Lupin (Gast)


Lesenswert?

Gibt es eine standard stack machine architektur, für die es compiler
gibt und die sich leicht auf einen Mikrocontroller implementieren
lässt?

Forth ist ja auch eine stack machine, ist aber zu komplex glaube ich.
Vor allem gefällt mir die sprache an sich nicht :)

Am besten wäre ein C ähnlicher compiler der in einen einfachen code
kompiliert und eine virtuelle maschine die ich auf dem controller in
ASM implementieren kann (also keine riesigen Klassen/Funktionen/etc wie
bei Java).

Ich könnte auch einen compiler für eine richtige CPU nehmen und die
emulieren, das müsste dann aber eine extrem einfache CPU sein.

Hat da jemand eine Idee?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Ich hatte auf dem AIM-65 (6502-Prozessor) damals (1979/80) auch ein
Forth, das hatte 4 kByte.
Eigentlich fand ich die umgekehrt polnische Notation von meinem HP25
ganz praktisch und leicht verständlich, aber mit Forth habe ich auch
nichts anfangen können.

von Philipp Sªsse (Gast)


Lesenswert?

Forth ist die wohl einfachste Stackmaschine, mit der man arbeiten kann
(man muß ja nicht den ganzen ANSI-Standard implementieren). Da ist
nichts komplex, höchstens ungewohnt.

Was Du möchtest, ist dagegen extrem komplex: C wurde für "normale
Registerarchitekturen" geschrieben, aus C-artigem Code
Stackmaschinencode zu compilieren, ist ein gewaltiger Aufwand, viel
schwieriger als einen normalen C-Compiler zu schreiben. Wer würde sich
diesen Aufwand antun für die paar Stackprozessoren, die es gibt? Und
welchen Sinn hätte es, mit großem Aufwand aus C Stackcode zu
generieren, um diesen dann wieder mit Aufwand auf einem gewöhnlichen
Controller in einer emulierten Stackmaschine laufen zu lassen?

Eher könntest Du es mit Lisp versuchen, das ist ja ein bißchen wie
"Forth rückwärts" von der Syntax. Aber das wird Dir dann ja wohl auch
nicht gefallen.

Ein Forth-Interpreter/Compiler samt Stackmaschine braucht dagegen nur
ein paar hundert Byte und wird dann in sich selbst weitergeschrieben.
So einfach, so elegant, so schön. Saß neulich noch in einem Seminar
über Embedded-Software-Tests und dachte die meiste Zeit: "wie einfach
ist das doch dagegen mit Forth!". Man muß sich einfach nur einmal
darauf einlassen, daß Sprachen nicht prozedural (oder objektorientiert)
sein müssen, daß Variablen, Operatoren und Programme eigentlich alles
dasselbe sind und daß wir nur wieder lernen müssen, Programme so zu
schreiben, wie wir denken statt so, wie man es uns antrainiert hat.
Aber gegen die Macht der Gewohnheit kommt man mit Argumenten ja sowieso
nicht an ... )-: Nichts für ungut.

Also bleibt für Dich wohl nur so eine Minimal-Java-Maschine. Google
hilft Dir weiter.

von A.K. (Gast)


Lesenswert?

@db1ug: Waren 2 ROMs, also 8KB.

@Lupin: Stack-Maschinen in Hardware sind schwer aus der Mode gekommen,
ausgenommen zur Unterstützung von Java Bytecodes. Sind zwar im Prinzip
sehr einfach zu implementieren, aber mit heutiger Technik viel zu
ineffizient.

von thomas (Gast)


Lesenswert?

Man könnte es vielleicht so sagen:

Die Java Fritzen wollten Forth verwenden , durften das aber nicht sagen
:)))))....

Es gibt kaum etwas einfacheres als Forth.


Gruß Thomas

von Hans-Christian (Gast)


Lesenswert?

Hallo Lupin,

da gab es vor vielen vielen Jahren, in der Anfangszeit von Pascal so um
1976, den P4-Pascal-Compiler, der einen P-Code für eine virtuelle
Maschine erzeugt hat. Es handelt sich um eine 16bittige Stack-Maschine
die sich meinererachtens gut auf einem uController interpretieren
lassen müßte. Du könntest auch aus dem P-Code direkt den Maschinencode
deines uC erzeugen. Ich habe das mal für den 68000 gemacht.

Den Source für den Compiler und den Interpreter der P-Codes, selbst in
Pascal geschrieben, findest Du hier, auch die Beschreibung der P-Code
Maschine:

http://homepages.cwi.nl/~steven/pascal/

Mit "P4 Pascal" läßt sich manches ergooglen.

Dann gab es sogar "Concurrent Pascal", das Nebenläufigkeit
ermöglichte und auf einem erweiterten P-Code aufsetzt.

Gruss
Hans-Christian

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

@A.K. stimmt, der Assembler hatte 4k , Basic und Forth je 8, die Eproms
mit 4 k kosteten über 100 DM. Und die ROMs gingen gern mal kaputt

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ROM des Jupiter Ace, ein Z80-"home computer" aus den frühen 80ern,
der als einziger von Hause aus mit Forth arbeitete, war auch 8 kByte
groß.

Mittlerweile existieren Schaltpläne und auch kommentierte
Assemblerlistings des ROMs dieses "Schätzchens". Genügend Masochismus
vorausgesetzt, lässt sich damit ja vielleicht was anfangen.

@Hans-Christian:
Hat dieses Pascal irgendeine Verwandtschaft zum UCSD-Pascal? Mit dem
musste ich mir mal auf einem Apple II die Finger beim Diskettenwechseln
brechen ...
Wenn ich mich recht erinnere, verwendete auch dieses eine virtuelle
P-Maschine.

von Ingo (Gast)


Lesenswert?

Klassische Stack Maschinen waren die Transputer von Inmos. Dazu gab es
C-Compiler und OCCAM. Von OCCAM gibt es auch noch freie
Implementierungen. ggl mal danach.

von A.K. (Gast)


Lesenswert?

Nicht ganz so klassisch - ein Stack mit 3 Speicherplätzen war doch arg
wenig. Und die Transputer waren dermassen strikt auf Occam optimiert,
dass Befehle und Funktionalitäten, die für C wichtig waren, für Occam
aber nicht, komplett fehlten und C-Compiler dementsprechend ineffezient
waren.

von Hans-Christian (Gast)


Lesenswert?

@Rufus
Ja, das UCSD-Pascal auf dem AppleII basiert auf dem P-Code-Pascal. Wenn
der P-Code Interpreter auf dem 6502 läuft, sollte auch jeder moderne uC
(mit ausreichend Speicher) genügen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.