FORTH - Der Thread zur Programmiersprache

Dein Hive sagt kein Pieps mehr? Du hörst kein Heartbeat-Ton? Hier findest Du Hilfe.
quix
Beiträge: 233
Registriert: Sa 22. Okt 2011, 16:10

Re: Auch Probleme mit der Forth Variante

Beitrag von quix »

Komischerweise habe ich im HIVE (mit ESC-1,-2,-3) die jeweiligen COGs und im Terminal (XP-PC) habe ich COG 6. Keine Ahnung, ob das richtig ist.
Klaus-Peter
Beiträge: 754
Registriert: Sa 29. Okt 2011, 14:34

Re: Auch Probleme mit der Forth Variante

Beitrag von Klaus-Peter »

Hmmm, das wüsste ich leider nicht - vieleicht kann Drohne 235 dazu was sagen.

ein Vorschlag für die Installationsanleitung für TriOS mit Forth:
Da ja scheinbar einige Leute (nebst mir) hierbei ins stolpern kommen, könnte man die Konfiguration des Regnatix - Code mit in die Anleitung aufnehmen.

Man überliest in der bisherigen Anleitung leicht, dass in der Konfiguration was geändert werden muss - und wenn mans denn gelesen hat, fragt man sich als Laie : "Was muss Wo geändert werden" :?:
Drohne 206 ist ein HIVE R14-u
Drohne 266 ist ein HIVE R14-V
Der Mensch ist das wichtigste und kostbarste Peripheriegerät einer Computeranlage.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Auch Probleme mit der Forth Variante

Beitrag von PIC18F2550 »

quix hat geschrieben:Komischerweise habe ich im HIVE (mit ESC-1,-2,-3) die jeweiligen COGs und im Terminal (XP-PC) habe ich COG 6. Keine Ahnung, ob das richtig ist.
Die COG's werden vom Propeller frei vergeben das ist abhänig welcher frei und zu diesem zeitpunkt gerade an der Reihe ist.
Mach dir über die COG-Nummer bezüglich deren Software inhalt keinen kopf der code läuft auf allen.
Nachdenklich währe wenn eine COG-Nummer mehrfach vergeben sein würde. :shock:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Auch Probleme mit der Forth Variante

Beitrag von drohne235 »

Man überliest in der bisherigen Anleitung leicht, dass in der Konfiguration was geändert werden muss - und wenn mans denn gelesen hat, fragt man sich als Laie : "Was muss Wo geändert werden"
Ein bekanntes Leiden: Wenn man es selbst programmiert hat, ist einem alles klar. Etwas kurz und dennoch verständlich zu beschreiben ist manchmal nicht einfach und oft fehlt auch Zeit und Lust. Ich habe es mir auf die Todo-Liste geschrieben. :)
Komischerweise habe ich im HIVE (mit ESC-1,-2,-3) die jeweiligen COGs und im Terminal (XP-PC) habe ich COG 6. Keine Ahnung, ob das richtig ist.
Das ist völlig korrekt so und eine echt coole Angelegenheit, wenn man genauer darüber nachdenkt. Das Wort "cog?" listet dir die aktuelle Belegung der COGs in Regnatix unter Forth auf. Sollte dieses Wort nicht im System sein, kannst du es mit einigen anderen nützlichen Kommandos wie folgt dauerhaft einbinden: "sys tools.mod saveforth". Hier die Ausgabe von "cog?" im Terminal:

Code: Alles auswählen

Prop0 Cog6 ok
cog?
Cog:0 #io chan:1                          drv:ldr
Cog:1 #io chan:1 PropForth v4.0 2010NOV28 13:00 3  1(0)->5(0)
Cog:2 #io chan:1 PropForth v4.0 2010NOV28 13:00 3
Cog:3 #io chan:1 PropForth v4.0 2010NOV28 13:00 3
Cog:4 #io chan:1 PropForth v4.0 2010NOV28 13:00 3
Cog:5 #io chan:1                          drv:int  5(0)->1(0)
Cog:6 #io chan:1 PropForth v4.0 2010NOV28 13:00 3  6(0)->7(0)
Cog:7 #io chan:1                          drv:ext  7(0)->6(0)
Prop0 Cog6 ok
Auf COG 1,2,3,4 und 6 laufen frei verfügbare und interaktive Forth-Systeme. Auf den COGs 0,5 und 7 laufen folgende Treiber:

COG 0 - drv:ldr - Das ist der TriOS-Loader
COG 5 - drv:int - Diese COG stellt eine Verbindung zu VGA und Keyboard in Bellatrix her.
COG 7 - drv:ext - Diese COG stellt über die Hostschnittstelle eine serielle Verbindung zum Terminal her.

Jedes Forth hat einen einstellbaren Ausgabe- und einen nicht einstellbaren Eingabekanal. So kann man die Ausgabe eines Forthsystems in der COG A so einstellen, das er mit der Eingabe der COG B verbunden ist, und COG B sendet seine Ausgaben zum Beispiel zu COG A. Es ist auch möglich mehrere COGs zu einem Ring zu verbinden.

Wozu braucht man das jetzt? Wenn ich möchte, das ein Forth seine Eingaben und Ausgaben über die serielle Schnittstelle zum Terminal abwickelt, so verbindet man diese COG in obiger Form mit drv:ext. In der letzten Spalte der Tabelle ist genau diese Verbindung ablesbar:

Cog:6 ... 6(0)->7(0)
Cog:7 ... 7(0)->6(0)

In COG 7 läuft nun unsere serielle Schnittstelle, empfängt Zeichen vom Terminal und sendet sie als Eingabedatenstrom zu dem Forth in COG 6. Alle Zeichenausgaben vom Forth in COG 6 aber, werden zu COG 7 und dort über die serielle Schnittstelle zum Terminalprogramm gesendet. Deshalb erscheint COG 6 im Terminalfenster. Mit einem Kommando kann man übrigens auch jede andere Forth-COG auf das Terminal schalten.

Ähnlich läuft das mit den COGs 1..3, nur sind diese über drv:int mit dem "Terminal" Bellatrix verbunden. Der VGA-Treiber in Bella verwaltet nun drei Textscreens. Mit den Tastenkombis ESC-1..3 kann man diese drei Screens und die entsprechenden COGs 1..3 umschalten.

Wozu diese ganze Geschichte? Man kann damit Programme teilweise parallel laufen lassen. Gib mal folgendes am Hive in COG 1 ein:

: test1 0 do i . loop ;

Mit dem Kommando "words" kannst du sehen, dass du das neue Wort "test1" compiliert hast. Wenn die Ausgabe von words zu schnell scrollt, kannst du sie auch mit ESC pausieren und wieder fortsetzen. Das Wort test1 ist eine Schleife, in welcher einfach der Schleifenindex ausgegeben wird. Einfach mal mit "10 test1" testen. Es werden zehn Schleifendurchläufe gemacht und der Index angezeigt. Nichts besonderes.

Interessant wird es, wenn du nun mal im Terminal schaust: Hier arbeitest du ja mit dem Forth in COG 6. Auch dort zeigt ein "words" dir an, das sich im Wörterbuch ebenfalls das neu compilierte Wort "test1" befindet, da das Wörterbuch für alle COGs gleich ist. Nun kannst du ja mal mit "1000000 test1" COG 6 ein wenig beschäftigen - keine Kunst. Lustig ist aber, das du nun immer noch mit dem Forth in COG 1 direkt am Hive arbeiten kannst. Du kannst dort "words" eingeben oder ebenfalls unser neues Word test1 verwenden - die Systeme laufen völlig parallel! Du kannst also - übertrieben dargestellt - im Terminal auf COG 6 eine umfangreiche und zeitaufwändige Berechnung durchführen oder Schach spielen (sofern man ein Schach in Forth programmiert) und auf den anderen COGs ganz normal weiter arbeiten. Oder du compilierst in einer COG und kannst einen Test der compilierten Worte in einer anderen COG direkt auf dem Hive ausführen - sie laufen echt parallel.

Eine coole Sache wie ich finde. :twisted:
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
quix
Beiträge: 233
Registriert: Sa 22. Okt 2011, 16:10

Re: Auch Probleme mit der Forth Variante

Beitrag von quix »

: test1 0 do i . loop ;

Funktioniert. Zumindest erscheint keine Fehlermeldung. Wobei hingegen bei cog? erhalte ich "UNDEFINED WORD cog?". Aber egal.

Leider bin ich ein absoluter FORTH-Analphabet. Heute kam mit dr Post das Buch "Forth auf dem Kleincomputer" von Claus Kühnel. Mal sehen, ob ich damit was anfangen kann.

Noch mal ne Frage. Ich habe Reg mit Forth (wohl richtig) ins Eprom installiert. wenn ich nun den Inhalt des Eproms überschreibe ist Forth wieder weg. Kann ich den Inhalt des Eproms auslesen und als BIN-Datei auf Platte sichern, um es später ohne PC-Terminalprogramm wieder ins Eprom schreiben zu können? Auch weiß ich überhaupt nicht, was ich da genau mache, wenn ich mit dem Terminal diese Prozedur ausführe.
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Auch Probleme mit der Forth Variante

Beitrag von drohne235 »

quix hat geschrieben:: test1 0 do i . loop ;

Funktioniert. Zumindest erscheint keine Fehlermeldung. Wobei hingegen bei cog? erhalte ich "UNDEFINED WORD cog?". Aber egal.

Leider bin ich ein absoluter FORTH-Analphabet. Heute kam mit dr Post das Buch "Forth auf dem Kleincomputer" von Claus Kühnel. Mal sehen, ob ich damit was anfangen kann.

Noch mal ne Frage. Ich habe Reg mit Forth (wohl richtig) ins Eprom installiert. wenn ich nun den Inhalt des Eproms überschreibe ist Forth wieder weg. Kann ich den Inhalt des Eproms auslesen und als BIN-Datei auf Platte sichern, um es später ohne PC-Terminalprogramm wieder ins Eprom schreiben zu können? Auch weiß ich überhaupt nicht, was ich da genau mache, wenn ich mit dem Terminal diese Prozedur ausführe.
Die Fehlermeldung bedeutet, das sich dieses Wort nicht im Wörterbuch befindet. Du musst es einfach an das System compilieren wie ich oben beschrieben habe:
Sollte dieses Wort nicht im System sein, kannst du es mit einigen anderen nützlichen Kommandos wie folgt dauerhaft einbinden: "sys tools.mod saveforth".
Zum Vorgang beim flashen: Mit dem kopieren von basic.mod im Terminal compilierst du die nötigen Worte ins Forth, damit dieses auch über Bella und nicht nur über das Terminal zu dir sprechen kann. Dabei wird gleich der Autostartmechanismus vom PropForth vervollständigt, damit sich das Forth nach dem Reset dann auf dem VGA meldet.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
quix
Beiträge: 233
Registriert: Sa 22. Okt 2011, 16:10

Re: Auch Probleme mit der Forth Variante

Beitrag von quix »

Also muss ich zuerst sys tools.mod saveforth eintippen, damit bestimmte Befehle "angelernt" werden. ok. Dann war da noch was mit saveforth: Damit speichere ich den aktuellen Befehlssatz (oder auch Kommandos?) im Eprom ab. Klar. Nach Neustart erkennt mein HIVE nun immer noch den Befehl cog?.

Das ist aber eine totale Insellösung. Wie weiß ich denn nun, was für Befehle bei HIVE 0815 aktiviert sind? Nach dem Prinzip kann ich doch kein Programm in Forth schreiben, das auf einem anderen, außer meinem HIVE läuft? Im Gegensatz dazu, habe ich in BASIC immer den gleichen Befehlssatz und muss mit den Befehlen meine Aktionen und Funktionen zusammenstellen. Kann denn nicht ein Standard-Befehlssatz in Forth gleich eingebaut werden?
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Auch Probleme mit der Forth Variante

Beitrag von drohne235 »

Das ist aber eine totale Insellösung. Wie weiß ich denn nun, was für Befehle bei HIVE 0815 aktiviert sind? Nach dem Prinzip kann ich doch kein Programm in Forth schreiben, das auf einem anderen, außer meinem HIVE läuft? Im Gegensatz dazu, habe ich in BASIC immer den gleichen Befehlssatz und muss mit den Befehlen meine Aktionen und Funktionen zusammenstellen. Kann denn nicht ein Standard-Befehlssatz in Forth gleich eingebaut werden?
Nun ja, man muß ja die Befehle nicht per saveforth speichern, das macht man nur mit Tools die man oft benötigt. Außerdem kann man diese Erweiterungen auch jederzeit wieder löschen. Für die Tools geht das mit "forget mod:tools" - forget entfernt alle Worte aus dem Wörterbuch ab dem angegebenen Wort. Ein "saveforth" speichert dann wieder das aktuelle Forthssystem - in diesem all wieder ohne die Tools-Erweiterung. Und wenn du nur "sys tools.mod" verwendest, sind die Tool-Befehle nachdem nächsten Reset halt wieder weg.

Du mußt dir die Worte einfach vorstellen wie Unterprogramme. Wenn du ein Programm schreibst, lieferst du alle nötigen Unterprogramme (Worte) mit. Wenn ich dein Programm starten möchte, lade ich den Quelltext, der dann compiliert wird. Wenn dein Programm in der Datei xyz.mod ist und mit dem Wort "run" gestartet wird, dann kann ich mit "sys xyz.mod run" das Programm starten. Nach einem Reset, oder wenn du es passend machst um es mit "forget mod:xyz" zu löschen, ist dein Forth wieder clean.

Ist doch genau wie in Basic: ich habe bei jedem Forth auf dem Hive den gleichen Grundwortschatz. Diesen erweitere ich mit meinem Programm dynamisch bis ich letztlich ein Wort wie "run" oder "starte-mein-superpro" habe, mit welchem ich mein Programm aufrufe. Die Worte in tools.mod sind dabei weniger Befehle die man in eigenen Programmen verwendet - was will man da schon mit einem "cog?" - sondern vielmehr, nunja, halt Tools, also Werkzeuge UM zu programmieren.

Und der Standartwortschatz ist doch drin: gib doch mal bei einem Forth ohne Erweiterungen den Befehl "words" ein, denn dieser listet ja alle vorhandenen Worte (Befehle/Unterprogramme) die aktuell vorhanden sind auf. Wenn du jetzt schon tools.mod drin hast, einfach mit "forget mod:tools saveforth" entfernen und speichern, dann hast du wieder den Grundwortschatz. Forth ist mit Basic in keiner weise vergleichbar. Neben dem Wörterbuch gibt es noch einige wesentlich fortschrittlichere Lösungen in Forth, zum beispiel um Wörter Unterprogramme) nicht doppelt zu compilieren, wenn sie schon im Wörterbuch vorhanden sind. Solche Funktionen kann man meist sehr einfach selbst programmieren und sie sind in vielen Fällen nur winzige Zweizeiler.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
quix
Beiträge: 233
Registriert: Sa 22. Okt 2011, 16:10

Re: Auch Probleme mit der Forth Variante

Beitrag von quix »

Langsam verstehe ich das. Klar ähneln sich zwei Programmiersprachen nicht sonderlich. Darum gibt es ja auch so viele - für den jeweiligen Zweck. Ich hatte damals auch für den C64 eine FORTH-Variante. Leider ohne Dokumentation. Deshalb hatte ich mich damit nie beschäftigt. Basic war immer verfügbar und für die paar Kleinigkeiten auch völlig ausreichend. Aber man(n) lernt ja nicht aus.

Also könnte ich eine immerwiederkehrende Formel zum Beispiel in ein "WORD" packen, um somit eine übersichtlichere Struktur im Forth Programm zu haben? Oder bestimmte Abfragen ebenfalls?

Wie baue ich ein Programm auf. Gibt es hier auch Programmzeilen wie im Basic?
Klaus-Peter
Beiträge: 754
Registriert: Sa 29. Okt 2011, 14:34

Re: Auch Probleme mit der Forth Variante

Beitrag von Klaus-Peter »

Kann man den Titel eines Thread eigentlich nachträglich noch ändern ?

Dann könnten wir einfach hier einen richtigen Forth - Thread draus machen.

"Forth - die vierte Dimension" oder so :mrgreen:
Drohne 206 ist ein HIVE R14-u
Drohne 266 ist ein HIVE R14-V
Der Mensch ist das wichtigste und kostbarste Peripheriegerät einer Computeranlage.
Antworten