Ich habe auch schon oft darüber nachgedacht, direkt in SPASM zu coden. Aber ich vermute, dass es letztlich zu umständlich ist, da es zu sehr auf die objektorientierte Metaebene von Spin ausgerichtet ist. Habt ihr eigendlich irgendwo mal eine Liste/Übersicht mit den SPASM Befehlen in lesbarer Form gefunden?
Forth ist natürlich obercool!
Zumindest wenn man Forth mag...
Naja, man muss aber nicht unbedingt in Forth programmieren, sondern könnte auch in MASM (mental-Assembler
direkt den m-Core in Assembler programmieren. Was von Forth dann ohne Wörterbuch bleibt, ist eine schnelle CPU mit Datenhandling auf dem COG internen Stack statt der Verwendung von Universalregistern.
Was mir aber die Geschichte mit mental gezeigt hat: es ist recht einfach, eine eigene spezielle CPU in einer COG zu modellieren. Was hindert uns eigentlich daran, uns eine solche universelle CPU unabhängig von Spin und Forth für den Hive zu erstellen, gleich mit passenden Bus & eRAM-Befehlen? Den ganzen objektorientierten Ansatz von Spin könnte man auf dieser Ebene weglassen, was den Maschinencode dann auch wieder einfach macht, wie man das von einer klassischen (Retro-) CPU gewohnt ist. Dann einen Assembler in Spin dazu geschrieben und es ist nicht mehr weit bis zum C-, Basic-, oder XXX-Compiler. Wir müssten nur ganz genau darüber nachdenken, was für ein Befehlssatz für den Hive-Computer sinnvoll wäre, gerade auch in Bezug zu den verschiedenen Speichermodellen (cRAM/hRAM/eRAM) und den damit zusammenhängenden Zugriffsgeschwindigkeiten. Da muss man einen gesunden Kompromiss finden zwischen viel Speicher für Code, ausreichender Arbeitsgeschwindigkeit und einfacher/sauberer Struktur des Maschinencodes. Aber sch denke, das wäre letztlich in jedem Fall cooler und effektiver, als irgendwelchen anderen unverständlichen Code zu recyclen, der dann auch nur mit Abstrichen und so lala für unsere Zwecke funktioniert. Nicht das ich nicht versucht hätte, mich durch Sphinx/Spinix und Co. zu wühlen, aber das ist letztlich ein ziemlich sinnloses Unterfangen...…DIY ist da so unendlich viel cooler und befriedigender!
An sich ist Spin schon toll für genau das, wofür es gedacht ist: für genau einen Propellerchip, ohne Nutzung von externem RAM und zur Ausführung von genau einer Spin Anwendung auf dem Chip, also ohne zum Beispiel eine weitere Spin-Anwendung von SD nachladen zu wollen. Ohne diese Sachen ist Spin cool und einfach, aber dem entsprechend umständlich ist dann auch das Handling genau dieser Dinge, wie wir das ja nunmal auf dem Hive brauchen.
Was könnte man also in einer COG in 512 Befehlen/Registen unterbringen? Ich war anfangs skeptisch, dann aber sehr überrascht: Im mCore habe ich 64 Maschinencodebefehle und zwei Stacks (Return- und Datenstack) mit je 32 Einträgen in die COG integrieren können! Im Befehlssatz enthalten sind zum Beispiel auch Multiplikation/Division (um*, um/mod), Interchip Kommunikation (a!, a@, b!, b@) und der Zugriff auf die erste eRAM-Bank (x!, x@). Und das war mehr oder weniger mein erster umfangreicherer PASM-Code!
"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