(m)ental - aktueller Stand

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von drohne235 »

Das mit dem PC als Internetradio ist auch wirklich nicht der Normalfall, eher im Gegenteil. Ich bin ein großer Fan von einfachen Transistorradios - richtig ohne Digitalplunder und mit großem Frequenzeinstellrad usw. An allen relevanten Orten in der Wohnung steht so ein echtes natives Gerät.

Als Mentalist bin ich dennoch immer mal wieder zwischen mental und TriOS hin und her gerissen. TriOS mit seiner Ausrichtung auf Spin hat ganz klar seinen Platz und dazu gehört halt definitiv ein Basic.

Mental verfolgt da auf einer sehr einfachen Ebene die grundlegende Idee von unixoiden Betriebssystemen: Für jedes Problem gibt es ein kleines Progrämmchen, die man dann alle per Pipe miteinander kombinieren und koppeln kann. Die Pipe in Forth ist der Stack, die Progrämmchen sind die Worte - sowohl Stack wie Worte interaktiv zu handhaben. Mittlerweile habe ich recht brauchbaren Editorwerkzeuge um Quelltexte und Scripte direkt auf dem Hive zu bearbeiten. Da ja mental um "m" gebaut ist, wird beim booten schon ein Script ausgeführt, und wo in m ein Script ausgeführt wird, kann man auf alles Macht im System - inclusive dem Compiler - zugreifen. In einem Script kann sich das System zum Beispiel erst selbst erweitern (neue Worte compilieren) um diesen Erweiterungen dan im gleichen Script sofort zu verwenden.

Aktuell wird unter anderem im Bootscript ein Arbeitsbereich mit meinen experimentellen Worten compiliert. Reset und einen Augenblick später können die neuen Worte interaktiv getestet werden, da sie ja beim starten automatisch compiliert werden. Bei einem Fehler mit "work edrd" den Editor starten und korrigieren, speichern und "reboot" - schon geht es mit den geänderten Worten weiter. Praktisch, da es sich momentan bei den experimentellen Sachen viel um Worte geht, um das System besser bedienbar zu machen. So kann man mit dem Wort "br" (browse) mit den Tasten Bild-hoch/Bild-runter in den Indexzeilen der Screens navigieren, mit "e" startet man den Editor und "w" speichert den geänderten Screen. Das sind also Worte, welche ich gleich weiter verwende, um zum Beispiel Quelltexte zu bearbeiten. Ist irgendwas umständlich bei der Arbeit am System, so kann man ganz schnell das System dauerhaft mit einem Wort erweitern oder ein Wort im Quelltext anpassen, welches das Problem löst. Reboot und mental lebt einen Augenblick später geändert weiter.

Klar muss man wie bei Unixen die grundlegenden Kommandos erstmal lernen, aber dann hat man eine universelles Bausteinsystem um Probleme zu lösen, wo keine Probleme sind... ;)

Hmm, ich glaube ich muss mal wieder ein kleines Video drehen um das ein wenig zu zeigen...
"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
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: (m)ental - aktueller Stand

Beitrag von U-Held »

Hallo Drohne235,

prima Text im Hive-Home zur Alpha-Version. Leider reicht meine Zeit absehbar nur zum Mitlesen, nicht zum Experimentieren.

Trotzdem eine Frage: Wie planst Du die Ansteuerung mehrerer Cogs in Regnatix? In PropForth wurde das schon durchexerziert.

Grüße vom U-Held
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von drohne235 »

Im Prinzip dachte ich mir, in den anderen cogs ebenfalls einen mCore zu starten, aber diese Cores werden dann auf einen speziellen Wort "geparkt", idle würde sich da als Wortname anbieten. Der interaktive mCore kann ihnen dann ein anderes Wort zuweisen, welches sie abarbeiten sollen, etwa in der Form:

wortxyz 1 cogrun

So könnte in Cog 1 das Wort "wortxyz" gestartet werden. Hab da aber noch nicht so genau darüber nachgedacht. Wahrscheinlich werd ich auch nicht alle Regnatix-Cogs starten, da man das effektiv in Regnatix wahrscheinlich nicht braucht. Ich dachte da so an ca. drei Cogs, aber das ist ein wenig spekulativ. Letztlich kostet es jan nichts außer ein paar Byte im Spin-Startcode.

Denkbar wäre auch ein PASM-Spezialcode in einer anderen Cog, um zum Beispiel in PASM Speicherbereiche im eRAM im "Turbomodus" zu verwalten oder ähnliches - quasi wie ein "Spezialprozessor". Wenn ich die ersten Demos schreibe fallen wir da sicher noch ein paar Sachen ein die man so braucht.
"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
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: (m)ental - aktueller Stand

Beitrag von U-Held »

Schreib mal ein Wort cogmload, das in den nächsten freien Cog m lädt und idle startet. Wenns geklappt hat, bekommt der Starter die CogID+1 auf den Stack, sonst 0. Cogrun kommt gleich danach an die Reihe.

Grüße
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: (m)ental - aktueller Stand

Beitrag von U-Held »

Dann wäre sicher noch ein "is idle" sinnvoll, um Aufgaben dynamisch zu verteilen. Sollte man die Cog-Kommunikation und -Synchronisierung von Propforth abkupfern oder aus Spaß am Experiment selbst entwickeln?

Grüße...
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von drohne235 »

Vorerst wollte ich gleich beim Systemstart die nötigen Cogs starten, da ich den Platz vom Cog-Maschinencode im hRAM natürlich recycle (und dem entsprechend später mangels Code keine Cog mehr starten kann) - sind immer hin satte 2 KByte... :twisted: Naja,
Sollte man die Cog-Kommunikation und -Synchronisierung von Propforth abkupfern oder aus Spaß am Experiment selbst entwickeln?
Also ich beschreite da momentan meinen eigenen Weg. Mich hat bei PropForth unter anderem gestört, dass ich an verschiedenen Stellen immer so meine Verständnisschwierigkeiten hatte wie das funktioniert und zu faul war mich da durch Tonnen Quelltext zu wühlen. Deshalb wollte ich es lieber selbst programmieren, dann brauche ich nix zu lernen... :LACHEN Ob's was taugt werden wir sehen.

Auf der anderen Seite kann PropForth eine ganze Menge, aber verbraucht dafür auch eine massig Ressourcen. Für mental finde ich es persönlich nicht reivoll, dass jede Cog interaktiv sein kann. Mit PropForth war es zum Teil nötig und interessant, da man ja bei der Programmentwicklung immer noch mit dem Host kommunizieren muss, mental braucht aber zum Beispiel keinen Host mehr. Ich will es kompakt halten.
"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
Benutzeravatar
Micha
Beiträge: 812
Registriert: Sa 24. Mär 2012, 21:45
Wohnort: Merseburg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von Micha »

Gestern hab ich mal das Tutorial "der erste ausseneinsatz" gelesen. zunächst im Trockendurchlauf, den Hive muss ich das WE erst mal wieder fit machen. Sehr gute Beschreibung, kann es kaum erwarten damit selber zu experimentieren.

Zwei kleine Fragen hab ich zu dem Text, beide auf Seite 14 bezogen:

t1 0 do i . loop next ;

Irgendwie kann ich mir keinen Reim auf das next machen - ist das aus Versehen reingerutscht oder gehört es wirklich dazu?

Ausserdem zu dem kleinen Benchmark: was wären denn so die vergleichbaren Ausführungszeiten mit PropForth oder der früheren Version des Spin-basierten Forth?
Also vonder Sache här tätch jetz ma behaupten "Mischn ägomplischd" un so...
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von drohne235 »

Micha hat geschrieben: Zwei kleine Fragen hab ich zu dem Text, beide auf Seite 14 bezogen:

t1 0 do i . loop next ;

Irgendwie kann ich mir keinen Reim auf das next machen - ist das aus Versehen reingerutscht oder gehört es wirklich dazu?
Jo, ist ein Fehler. Korrekt entweder:

t1 0 do i . loop ;

oder

t1 for i . next ;

Die for..next Schleife ist etwas schneller, aber in einigen Fällen ungünstiger bei dem Handling vom Schleifenindex, welcher rückwärts gezählt wird um den Nulldurchlauf auszuwerten.

Danke für den Hinweis, wird korrigiert. :)
"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
Benutzeravatar
Micha
Beiträge: 812
Registriert: Sa 24. Mär 2012, 21:45
Wohnort: Merseburg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von Micha »

jetzt hab ich's inzwischen fertiggebracht, mental auf meinen Hive draufzuspielen ;)

Als Neueinsteiger der gerade die ersten Schrittchen versucht kommt mir die Notwendigkeit, dauernd per Funktionstasten umzuschalten, zunächst sehr nervig vor. Aber ich vermute mal, wenn es auf Dauer wirklich nervig wär hättest Du das nicht so angelegt?
Das Konzept muss also wohl auch Vorteile haben. Mir fällt auf Anhieb Übersichtlichkeit ein - gibt es noch mehr gute Gründe?

Und gleich noch 'ne Frage: mit dem Kommando tapes bekam ich zunächst nur die beiden Tapes sys und usr angezeigt. Hab mal auf die SD-Karte geschaut - diese beiden sind read-only gesetzt, die tap0 bis tap7 dagegen read+write. Erst wenn ich diese Dateien auf read-only setze bekomme ich sie mit tapes angezeigt. Ist das Absicht?
Also vonder Sache här tätch jetz ma behaupten "Mischn ägomplischd" un so...
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: (m)ental - aktueller Stand

Beitrag von drohne235 »

Micha hat geschrieben:jetzt hab ich's inzwischen fertiggebracht, mental auf meinen Hive draufzuspielen ;)

Als Neueinsteiger der gerade die ersten Schrittchen versucht kommt mir die Notwendigkeit, dauernd per Funktionstasten umzuschalten, zunächst sehr nervig vor. Aber ich vermute mal, wenn es auf Dauer wirklich nervig wär hättest Du das nicht so angelegt?
Das Konzept muss also wohl auch Vorteile haben. Mir fällt auf Anhieb Übersichtlichkeit ein - gibt es noch mehr gute Gründe?

Und gleich noch 'ne Frage: mit dem Kommando tapes bekam ich zunächst nur die beiden Tapes sys und usr angezeigt. Hab mal auf die SD-Karte geschaut - diese beiden sind read-only gesetzt, die tap0 bis tap7 dagegen read+write. Erst wenn ich diese Dateien auf read-only setze bekomme ich sie mit tapes angezeigt. Ist das Absicht?
Die Notwendigkeit mit den Funktionstasten umzuschalten ist bei der Eingabe erstmal umständlich. Letztlich hat es aber folgende Vorteile:

1. Da man mit dem einhergehenden Colortag die Funktion festlegt, ist der Interpreter in Regnatix sehr einfach. Ohne Farben müsste der Interpreter viel öfter mit dem Parser kommunizieren, welcher sich ja in Bellatrix befindet. Durch die Farben wird der Ablauf viel geradliniger und der Code einfacher, denn der Interpreter muss nicht erst aus dem Kontext der Eingabe die Funktion extrahieren, was an sich schwierig ist, da sich der Eingabepuffer ja ebenfalls in Bella befindet. Der m-Core in Regnatix muss so nur noch einzelne Token + Colortag bekommen, du kannst dich mit ihm also nicht mal in ganzen Sätzen unterhalten...…;) Das Zerlegen der Eingabe und Tokenisieren übernimmt so komplett Bella, weshalb hier auch schon die Funktion festgelegt werden muss - in unserem Fall durch die Farbe. Einfacher heißt aber auch, dass es so wesentlich weniger Speicher verbraucht, was ja ein erklärtes Ziel war, denn wir wollen ja in Regnatix den meisten Platz für den Nutzercode freihalten.

2. Wie du schon geschrieben hast, ergibt sich aus der Farbe gleich eine entsprechende Übersichtlichkeit des Quelltextes - ich schreibe es als Programmierer gleich bunt und mental versteht es auch bunt.

3. Letztlich ist aber ein normaler monochromer Quelltext auch manchmal seltsam: Man verpackt die Funktion in abtrakte Symbolik, um sie später durch eine weiteres Programm (Syntax-Highlighting) wieder mit Farben anzureichern. Warum? Warum muss ich einen komplexen Code zur übersichtlichen Darstellung verwenden, wenn ich es gleich als Programmierer farbig schreiben kann? Als Programmierer habe ich so die exakte und sehr direkte Kontrolle darüber was mein Interpreter und Compiler tut UND gleichzeitig Syntax-Highlighting.

Im übrigen hat mich die Verwendung der Funktionstasten am Anfang auch gestört, und ich war mir nicht sicher, ob ich dasso lasse. Aber ich habe mich sehr schnell daran gewöhnt und nun finde ich es super. :) Die Schwelle war auch sehr niedrig, da mich die daraus ergebende extrem einfache Implementierbarkeit fasziniert hat. Naja, als "Macher" bin ich aber auch in der tollen Position mental nicht wirklich lernen zu müssen...…;)

Für den Neueinsteiger fehlen jetzt leider noch einige Demos.

Zu den Tapes: Die Tapes werden mit dem Schreibschutzflag von normalen Dateien unterschieden - ist Absicht. Ich dachte mir: mit dem Schreibschutzflag hat man unter FAT auch gleich noch eine "kleine Sperre" um die Tapes nicht unkontrolliert zu verschieben oder ähnliches. In der "make.bat" setze ich deshalb extra die Attribute der Tapes im Verzeichnis bin. Hast du sie von dort auf die SD-Card kopiert?
"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
Antworten