Forth für den AVR Atmega

Gast #430816
Lesenswert?
• ▲
▼
Hi,

auf http://sourceforge.net/projects/amforth bastele ich an einem
kleinen Forthsystem für den Atmega(32) unter der GNU Public License 
(GPL).

Das System wird in Assembler (avra unter Linux und AVR Studio unter
Windows) programmiert und kommuniziert über die serielle Schnittstelle
mit dem Host-Rechner. Es ist kein Cross-Compiler, der PC wird nur
zur Erstellung der Hexfiles benötigt.

Forth-seitig strebe ich ein ANS94 Core mit einigen Extensions an. Dafür
fallen aber auch einige Core-Worte weg, die IMHO auf dem Atmega keinen
Sinn ergeben. Fernziel ist u.a. ein Forth für den Asuro (wenngleich der
Atmega8 etwas zu klein ist) und den ct-bot.

Gegenwärtig (Version 0.2) läuft der Interpreter und der Colon-Compiler.
Neue Worte werden über den self-programming Mechanismus direkt in den
Flash geschrieben. Voller Zugriff auf Flash (i@, i!), EEPROM (e@, e!)
und RAM (@, !, c@, c!) ist gegeben.

Wer Lust hat und sich nicht von einem frühen Entwicklungsstand
abschrecken läßt, kann es ja mal ausprobieren. Ach, Dokumentation
gibt es natürlich auch keine. Die Wortliste erhält man mit dem
Befehl words, was die Worte im Einzelnen machen, steht in jeder
Forth-Beschreibung.

Matthias
Gast #430883
Lesenswert?
• ▲
▼
auch erstmal : respekt !

hab mir mal den quellcode angeschaut, bin aber nicht so fit in avr-asm, 
sieht aber witzig aus (erst befehlsnamen, daten, dann programmcode und 
am ende immer ein schöner rjmp DO_NEXT :-))

auch mal direkt eine frage dazu :
wie hast du das mit dem dictonary gemacht wenn du neue befehle 
hinzufügst ? hälst du die keywords im RAM (und den entsprechenden 
forth-code dazu) ?
ich bin im moment am überlegen wie man einen kleinen ByteCode 
interpreter selbst schreiben kann mit dem sich unterschiedlichste 
aufgaben programmieren und ausführen lassen kann. Java ist mir zu dick 
(->NanoVM) und forth kenne ich nicht so gut.
Gast #430921
Lesenswert?
• ▲
▼
Der Colon-Compiler schreibt direkt (via i!) ins Flash. Eine Zelle nach
der anderen. Der Algorithmus in i! führt aber nur dann ein Erase der
betreffenden Page durch, wenn sich ein Bit von 0 nach 1 ändert.

Im RAM liegt nichts vom Dictionary. Dort sind die diversen Buffer
(TIB, HLD etc). Im EEPROM liegen einige Dictionaryvariable, um einen
Reset zu überstehen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.