Archive for the ‘Forth’ Category.

Digitaler $%&°*#$-Vergleich und andere spaßige Sachen

Irgendwann will man es halt wissen: Wie schnell ist denn jetzt die selbst geschriebene Programmiersprache auf dem Eigenbaucomputer? Naja, halt der typische digitale $%&°*#$-Vergleich……;) Und da ich heut ein wenig Langeweile habe und draußen so trübes Wetter ist, wollte ich mich halt ein wenig an tachyonischen Geschwindigkeitswerten meines Forthsystems berauschen und ergötzen.

Nun gut, die Werte sind ganz brauchbar, obgleich ich da so ein verdammtes amerikanisches Forth kenne, welches da noch deutlich einen drauflegt. Hab noch keine Ahnung wie er das veranstaltet. Aber dafür ist der Hive mit mental völlig autark programmierbar, ohne einen Hostcomputer oder ähnliche feige Hilfsmittel. Ätsch! 🙂

Was ist also in dem Clip zu sehen?: Ein kleines Demo, welches die Funktion von meinem mental-Forth auf dem Hive-Computer zeigt. Nix großes, einfach nur zur Ansicht der Funktion des Quelltexteditors, Compilers und Interpreters am Beispiel eines „Hello World!“ und eines Fibonacci-Benchmarks mit ganz brauchbaren Werten für so ein Gerät.

Der Quelltexteditor läuft komplett im Bellatrix-Chip (der Hive basiert auf drei Mikrocontrollern) und kennt neben dem farbigen Modus zur Eingabe von Forth-Quelltexten auch einen reinen Textmodus. Mit dem Kommando „br“ (browse) wird der Screenbrowser aufgerufen um in den Screens zu „surfen“, diese zu editieren, speichern usw. Ist so ein typisches gewachsenes „Werkstatt-Tool“ und ungemein praktisch.

Wie man sieht, ist mental durchaus schon benutzbar und man kann schon völlig autark am Hive ohne einen Hostcomputer programmieren. Zudem belegt der Core von dem zu sehenden Forth gerade mal 3694 Bytes, mit den komfortablen Tools wie im Video sind es gerade mal 4432 Bytes! Hey, als Laie und für ein erstes selbst gestricktes Forth ist das ganz brauchbar!…:) Aber unabhängig davon ist mental noch weit entfernt von einem fertigen Status. Letztlich ist es ja auch nicht so wichtig, da es sich ja mehr um ein persönliches Lern- und Spaßprojekt handelt. Just for Fun!

Der erste Außeneinsatz

mental ist nun in einer startbaren Alphaversion angekommen und wird damit für erste Experimente in die freie Wildbahn entlassen, womit eine Minidokumentation fällig wird.

Verfügbar ist dieser „Erste-Schritte“-Text, eine umfangreiche Referenztabelle der aktuell implementierten Worte in mental und ein Text mit Überlegungen und Einsichten aus dem „Maschinenraum“ (1 – Der Weltraum, unendliche Weite) des Systems. Beide Texte beziehen sich auf die Alphaversion, können also in der weiteren Entwicklung von der Realität überholt werden. Zudem gibt es hier noch keine systematische Einweisung, sondern vorerst nur einige nutzbare Beispiele, die den Weg für den Neugierigen ebnen sollen. Es wird also noch nicht genau erklärt, wie diese forthähnliche Sprache im Detail funktioniert, sondern nur auf Besonderheiten und Abweichungen eingegangen.

Der erste Außeneinsatz… Weiterlesen

mental Alphaversion zum Experimentieren

Ich war die letzten Tage eine fleißige Drohne und habe ein nutzbare Version zusammengeschnürt und sogar noch ein paar Texte für den Einstieg geschrieben. Die spannenden Sachen wie Sound und Grafik fehlen noch, aber denen kann ich mich ja nun endlich zuwenden…

Link: Fred im Forum zum Thema für Rückmeldungen und Fragen


Beschreibung:mental Alpha V0.A
Zur Installation bitte im Verzeichnis DOC nachlesen!
mental Alpha V0.A 20.05.2013
Version:20.05.2013 vom: 20.05.2013
Dateigröße:4.66 MB

Der Weltraum. Unendliche Weiten. Wir schreiben das Jahr 2013.

emblem

So komme ich mir manchmal bei meinen Experimenten mit dem Hive vor: Allein TriOS als einfaches Mini-OS ist eine kleine Welt für sich und  mental erscheint mir wie ein Paralleluniversum…

Nun ja, diese aktuelle Version von mental bezeichne ich mal als Alphaversion. Startbar unter TriOS oder auch völlig eigenständig nutzbar, indem der Chipcode im Flash gespeichert wird. Eine Minidokumentation „Der erste Außeneinsatz“ ist ebenfalls verfügbar. Ohne Grafik und Sound kann man zwar noch nicht so viel spannende Sachen damit machen, aber das steht als nächstes auf dem Plan – immer schön einen Schritt nach dem anderen.

Im folgenden Text werde ich die Entstehung und inneren Mechanismen von mental ein wenig genauer beleuchten. Interessant für Neugierige, aber mit Sicherheit auch für Einsteiger in die Programmierung der Cogs in Assembler. Wer nicht so der Typ „Scotty“ ist und mental nur nutzen möchte, sollte besser nicht den Maschinenraum betreten und gleich mit dem Text „Der erste Außeneinsatz“ fortfahren! Alle Boardingenieure sind aber herzlich eingeladen zu einem Rundgang…

Alles begann im Jahr 2008…  Weiterlesen

Und hier noch, quasi als Rundumversorgung, die passende Musik für den Artikel, frisch am Hive aufgenommen, folgend die DMP-Dateien um die Musi selbst auf dem Hive mit dem SID-Player anzuhören.


Beschreibung:Star Trek Musik im DMP-Format
Star Trek Musik im DMP-Format 20-05-2013-dr235
Version:20-05-2013-dr235 vom: 20.05.2013
Dateigröße:14.71 kB


Beschreibung:1_der_weltraum_unendliche_weite Artikel im PDF-Format
1_der_weltraum_unendliche_weite Artikel im PDF-Format 20-05-2013-dr235
Version:20-05-2013-dr235 vom: 20.05.2013
Dateigröße:1.69 MB

Was ist Tachyon?

.:.:– TACHYON –:.:.

 

Hmm, hab ich doch in dem Beitrag zum Geschwindigkeitsvergleich glatt vergessen zu erwähnen was Tachyon überhaupt ist. Ok, das holen wir hier mal nach! Lassen wir einfach Peter Jakacki – dem Entwickler von Tachyon – zu Wort kommen: „TACHYON – A Fast and small Forth byte code VM„. Tachyon ist also wie m ein Forth-Derivat mit einigen wirklich interessanten Eigenschaften.  Das primäre Ziel ähnelt PropForth: Es soll ein interaktives Entwicklungswerkzeug sein, welches auf einem Propellerchip läuft und typisch über die serielle Schnittstelle und ein Terminalprogramm auf einem Hostcomputer bedient wird. Man kann es also nicht wirklich mit m und mental vergleichen, welches ja dem Hive mit seinen drei Propellerchips auf den Leib geschneidert ist. Im Gegensatz zu PropForth ist Tachyon sehr schnell und wahrscheinlich auch recht klein – genaue Zahlen zum Speicherverbrauch habe ich aber leider noch nicht. Da es aber ein klassisches Forthmodell ist, dürfte es auch mehr Speicher belegen als der m-Core, welcher ja viele Aufgaben nebenläufig auf die beiden Slaves verteilt. Continue reading ‘Was ist Tachyon?’ »

m: Weg mit dem nutzlosen Plunder…

Nach einer kreativen Pause nun weiter in diesem Film. Die letzten Tage habe ich mich intensiv jenen m-Funktionen gewidmet, mit welchen ich Quelltexte auf dem Massenspeicher bearbeiten, verwalten und auszuführen/compilieren kann. Geplant waren eigentlich FAT16/32-Containerdateien für ein Blockinterface. Diesen Plan habe ich aber aus verschiedensten Gründen verworfen. Ein gravierender Grund ist die fehlerhaften seek-Funktion, die relativ geringe Performance des FAT-Layers und der enorme Speicherverbrauch in Administra. Ganz nebenbei hat mich schon lange die mit FAT32 einhergehende Komplexität gestört. Es ist wie mit vielen Dingen im Computerbereich, die uns das Leben bequem gestalten: Diese Bequemlichkeit wird durch Komplexität erkauft, welche dann irgendwann immer schwerer beherrschbar ist.  Ein einfaches Blockinterface dagegen gibt alle Freiheit aber auch die Verantwortung die Daten selbst zu strukturieren. Wie man nun sinnvoll in einem solchen System Daten strukturiert, ist ein kleines Abenteuer für sich und wird mir wohl noch einige Ideen abverlangen. Genau das  richtige Experimentierfeld, um langweilige Abende zu füllen. Also frisch ans  Werk und weg mit dem komplizierten Plunder… 😉

m6m7m8

Continue reading ‘m: Weg mit dem nutzlosen Plunder…’ »

m: Also daran muss ich mich erstmal gewöhnen… ;)

Konsequente UPN-Syntax ist ja schick und einfach zu implementieren, wie ich im letzten Artikel beschrieben habe. Aber an einigen Stellen bürstet UPN echt gegen den Strich der langjährigen Konditionierung durch den Mainstream. So zum Beispiel bei dem cd-Kommando, mit welchem man im Verzeichnisbaum navigieren kann. So wird nun aus

cd system

durch die Konsequente Anwendung natürlich

system cd

Ich nehme das mal sportlich, und werde das erste Mal, wenn ich in einer Linux-Kommandozeile UPN eintippe rot am Kalender markieren als jenen Tag, an welchem ich mehr Zeit am Hive als unter Linux zugebracht habe. Naja und mal ehrlich, Infix kann und hat  ja jeder… 😉

Continue reading ‘m: Also daran muss ich mich erstmal gewöhnen… ;)’ »

Jeden Tag ein gutes Wort: perform und andere tolle Sachen


Weiter auf meinem Weg zur Weltherrschaft zu Forth einer forthähnlichen Sprache auf dem Hive. An sich funktionieren ja schon einige Sache bei m: Der Interpreter läuft, ausführbare Worte können compiliert und Quelltexte können in einem Screeneditor bearbeitet werden. Dennoch erinnerte ich mich an einige Leichen im Keller: Die Worte „token“ und „m“ enthielten noch als erste Fassung eine recht unübersichtliche Struktur. Nicht das diese Worte nicht funktionierten, aber irgendwie war die Realisierung nicht wirklich handlich und elegant.

Wir erinnern uns: Da m ein verteiltes System ist, enthält der Core in Regnatix keinen Parser für eine Eingabezeile und auch keine Worte für eine formatierte Ausgabe. Schließlich habe wir ja ein massiv paralleles System, soll sich doch Bellatrix um diesen Krempel kümmern, in Regnatix haben wir dafür keinen Platz! Und Bella kann sich auch wirklich viel besser um die Interaktionen mit dem Benutzer kümmern, da ja alle Ressourcen (Tastatur und Bildschirm) an diesen Chip angeschlossen sind. Continue reading ‘Jeden Tag ein gutes Wort: perform und andere tolle Sachen’ »

m: Lebenszeichen

Es scheint im Moment zwar etwas ruhig, aber ich arbeite aktuell intensiv an m. Allerdings brauche ich bald ein wenig Abwechslung und werde mich mal wieder ein wenig TriOS und Spin zuwenden. Dennoch hat m schon enorme Fortschritte gemacht, wie man auf den Screenshots sicher erkennen kann. So ist eine erste Version eines Quelltexteditors integriert, welcher komplett in Bellatrix läuft. Auch grundlegende SD-Funktionalitäten sind schon verfügbar (ls, lsl, cd) und die Quelltexte können bearbeitet und in einer Screendatei gespeichert werden. Der nächste Quantensprung wird mit Eingabeumlenkung und dem damit realisierbaren load-Kommando kommen. Dann können die Quelltexte auch den Interpreter/Compiler füttern. Es können also nicht nur die Quelltexte auf dem Hive bearbeitet, sondern auch compiliert und interpretiert werden.  Ach ja, aktueller Landmark: 3246 Bytes.

m2 m3 m4 m5

An einigen Stellen ist der Code aber noch nicht optimiert. Ich denke einige Codefragmente zur Kommunikation mit den Slaves können noch ausfaktorisiert werden um Speicher zu sparen. Auch das literal-Wort ist mir noch zu einfach, denn es compiliert momentan immer default ein Long-Literal in den Code, aber ich habe auch ein Word-Literal und ein im Code ingebettetes sehr platzsparendes 6Bit-Literal für Werte zwischen 0..63. Da ich momentan noch von Hand im Assembler compiliere, erledigt das noch mein Kopf, aber spätestens wenn es direkt aus dem Quelltext kommt, wird das ein Thema.

Ich habe gerade zur letzten Meldung zum Thema m vom 11. März zurückgeblätter und festgestellt, das noch wesentlich mehr hinzugekommen ist. Kurz in Stichpunkten:

  • for..i..next
  • if..else.then
  • do..i..loop/+loop
  • begin..leave..until/again
  • Systemcounter: cnt wait clkfreq
  • PASM-Code für externen RAM: x! x@
  • SDCard: ls lsl cd mount unmount ?mount
  • Screendatei: open close read write list scr! scr@ pos! scrnr scrmax
  • Editor: ed edrd edwr ed+ ed- ed0

Der Editor ist typisch Forth weniger ein monolithischer Code, sondern vielmehr ein Editorbaukasten. Mit „open work.blk ed0“ wird die Screendatei geöffnet, Screen 0 in den Editor geladen und der Editor selbst gestartet. Die Worte ed+/ed- rufen den nächsten/vorigen Screen im Editor auf. Änderungen werden mit „edwr“ auf SDCard geschrieben. Die Benutzung der Kommandos geht schon nach kurzer Zeit ziemlich flott von der Hand. Grundlegend sollte das reichen, sobald Quelltexte compiliert werden können, folgen dann bei Bedarf komfortablere Erweiterungen.

Ich gebe zu, das ist für Außenstehende ziemlich esoterisch und trocken, aber mir macht es viel Spaß. Außerdem war das eine gute Gelegenheit, sich intensiv mit PASM auseinanderzusetzen. Bin gespannt, wie das Abenteuer mit mental weitergeht.

m: Interpreter läuft

Hab ich schon erwähnt, dass seit gestern abend der Interpreter läuft? 🙂 Ab jetzt kann ich im wesentlichen direkt unter m debuggen und testen. Und das motivierende an der Geschichte ist der freie Speicher in Regnatix: 31365 Byte! Das wird noch schrumpfen, aber ich habe ein gutesGefühl, dass Ziel von 2 KB für den m-Core zu erreichen.

Jetzt ein paar Werkzeuge wie dump um den Speicher direkt in m anzuzeigen und dann kommen schon die ersten Compilerworte. Als nächstes Blockinterface und Screeninterface und ich kann schon ohne Host autark programmieren.

Kein Screen sagt mehr als tausend Worte…

m1

Ok, ich bekenne mich schuldig: Es hat mich wieder gepackt und ich bastle momentan an einem neuen Softwaresystem für den Hive. Das System wird eine Alternative zum TriOS und besitzt als Kern eine eigene Programmiersprache, die ich ganz unerotisch auf den Namen „m“ getauft habe. Im Gegensatz zu TriOS, Spin und PropForth ist es ein völlig neuer Ansatz, dessen Ziele man in vier Worten zusammenfassen kann: autark, klein, schnell und einfach.

Autark: Das System soll sowohl Interpreter, Compiler, Debugger, Quelltexteditor enthalten und mit diesen Funktionen sofort und ohne Bootzeit (also aus dem EEPROM) einsatzbereit sein.

Klein: Ziel ist eine Größe von 2 KB Speicherverbrauch in Regnatix – 30 KB stehen also für die eigentliche Anwendung zur Verfügung.

Schnell: Die Kernroutinen sind in PASM geschrieben. Ein erster Vergleich ergab, dass m deutlich schneller als Spin und PropForth ist.

Einfach: Ein kleiner und übersichtlicher, klar verständlicher Befehlssatz.

Das sind die Ideen. Momentan läuft die VM, also der innere Interpreter. Der äußere Interpreter und der Parser inklusive Zeileneditor ist zum überwiegenden Teil fertig und ich hoffe dieses Wochenende das erste mal ohne Spin-Debugger interaktiv mit m arbeiten zu können.

 

TriOS = Regime + Forth

Ein kleiner Etappensieg auf dem Weg zur Weltherrschaft: Ich habe PropForth in TriOS integriert. Klingt nicht sehr spektakulär, ist aber eine ziemlich coole Sache. Das Forth residiert dabei zusammen mit dem Loader im unteren EEPROM und ist somit sofort nach dem Einschalten des Gerätes nutzbar. Für die Nutzung von Forth ist es also nicht mehr nötig, einen ROM mit 64K zu verwenden.

Continue reading ‘TriOS = Regime + Forth’ »