www.mikrocontroller.net

Forum: Projekte & Code AVR Tiny BASIC anpassung für ATmega8


Autor: Sigint 112 (sigint)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,
  ich hab vor ein paar Tagen folgende Webseite gefunden:
http://www.retards.org/library/technology/electron...
http://www.retards.org/library/technology/electron...

Dort gab es eine TinyBasic Version für den alten AT90S8515. Da ich 
leider nur noch ein paar MEGA8 hatte dachte ich mir, daß es nicht so 
schwer sein sollte das Programm anzupassen. Leider lief der Code nicht 
direkt (kann es sein, daß die originale Version garnicht läuft?) und so 
musste ich ein paar kleinere Fehler beseitigen, bis ich eine brauchbare 
Version vorliegen hatte.
Ich werde bei gelegenheit den Code noch etwas erweitern, wenn ich die 
Funktionsweise ganz verstanden habe und dann die LOAD und SAVE befehle 
reparieren...

Ich hoffe jemand kann damit was anfangen.

Gruß,
  SIGINT

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi sigint,

das ist ja der uralte basic interpreter fuer 8080/z80 der im buch :
"BASIC - Interpreter. Funktionsweise und Implementierung in 8080/ Z-80- 
Computern von Rolf-Dieter Klein" beschrieben wird. Das original kommt 
aus den 70er...
Den gibt es auf fuer m68k und andere micros.. :)
interessant das der fuer AVR portiert wurde ;)
siehe http://www.nicholson.com/rhn/basic/

es gibt (wenn ich mich richtig errinere) 3/4 routinen, die man dem 
interpreter geben muss um, zeichen einlesen, zeichen ausgeben und 
pruefen ob ein zeichen vorliegt oder nicht.
Fuer den 68k waren es paar bytes bzw. paar zeilen um die uart 
anzusteuern um den interpreter zum fliegen zu bringen ... man lief der 
schnell auf 68020 mit eingeschaltetem cache ...


gruss
roman



Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Buch kenne ich leider nicht... aber das Original soll von Li-Chen 
Wang sein. Es gab wohl noch eine anderes TinyBasic, was zeitgleich von 
jemand anderen vertrieben wurde. Dieses TB setzte aber eine Art 
VirtuelleMaschiene ein  (TBIL) um den Basicinterpreter auszuführen.
Der vorliegende Code wurde von Jeff Hunsinger auf den ATmega8515 
portiert.
Leider lief der Code nicht direkt auf dem ATmega8... deswegen musste ich 
den Code etwas anpassen. Ich hab einiges an Code rausgenommen (die 
Videogenerierung und sonstiges) was ich nicht benötigt habe.
Bei gelegenheit werde ich die SAVE und LOAD-Routinen für das interne 
EEPROM anpassen. Im Moment ist der Code relativ "broken" und nur zum 
rumspielen gedacht. Ich muss bei gelegenheit versuchen zu verstehen, wie 
alles zusammenspielt um den Code etwas aufzuräumen.

Gruß,
  SIGINT

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kommt es dir bekannt vor ??

hier ein auszug aus dem m68k version:
* Character-matching tables:
TAB1  DC.B  'LIS',('T'+$80)         Direct commands
  DC.B  'LOA',('D'+$80)
  DC.B  'NE',('W'+$80)
  DC.B  'RU',('N'+$80)
  DC.B  'SAV',('E'+$80)

bei dem original gab es diese routinen fuer das rundherum :
*
* Standard jump table. You can change these addresses if you are
* customizing this interpreter for a different environment.
*
START  BRA.L  CSTART    Cold Start entry point
GOWARM  BRA.L  WSTART    Warm Start entry point
GOOUT  BRA.L  OUTC    Jump to character-out routine
GOIN  BRA.L  INC    Jump to character-in routine
GOAUXO  BRA.L  AUXOUT    Jump to auxiliary-out routine
GOAUXI  BRA.L  AUXIN    Jump to auxiliary-in routine
GOBYE  BRA.L  BYEBYE    Jump to monitor, DOS, etc.
*


Oder aus der 8080 version :

;*
;**************************************************************
;*
;* *** OUTC *** & CHKIO ****!
;* THESE ARE THE ONLY I/O ROUTINES IN TBI.
;* 'OUTC' IS CONTROLLED BY A SOFTWARE SWITCH 'OCSW'.  IFF OCSW=0
;* 'OUTC' WILL JUST RETURN TO THE CALLER.  IFF OCSW IS NOT 0,
;* IT WILL OUTPUT THE BYTE IN A.  IFF THAT IS A CR, A LF IS ALSO
;* SEND OUT.  ONLY THE FLAGS MAY BE CHANGED AT RETURN, ALL REG.
;* ARE RESTORED.
;*
;* 'CHKIO' CHECKS THE INPUT.  IFF NO INPUT, IT WILL RETURN TO
;* THE CALLER WITH THE Z FLAG SET.  IFF THERE IS INPUT, Z FLAG
;* IS CLEARED AND THE INPUT BYTE IS IN A.  HOWERER, IFF THE
;* INPUT IS A CONTROL-O, THE 'OCSW' SWITCH IS COMPLIMENTED, AND
;* Z FLAG IS RETURNED.  IFF A CONTROL-C IS READ, 'CHKIO' WILL
;* RESTART TBI AND DO NOT RETURN TO THE CALLER.
;*




gruss
roman


Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SIGINT,
nicht das mich falsch verstehst, das ist mega cool..
ich moechte dir nur hints geben, wo bzw. wie man mehr erfahren kann 
ueber den tbasic. Meines wissens nach war es ein reine interpreter, ohne 
byte codes wie der von C64 zb.

gruss
roman

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Roman,
  ich hab den originalen Code gefunden:
http://members.shaw.ca/gbrandly/68ktinyb.html
Der ist wohl basierend auf dem Code von Li-Chen Wang.
http://en.wikipedia.org/wiki/Li-Chen_Wang

Die TinyBasic Versionen scheinen sehr ähnlichen Code zu enthalten... ich 
hab das aber nicht alles angeschaut.
Aber du hast Recht, daß TinyBasic keinen Bytecode erzeugt, sondern alles 
in Echtzeit interpretiert. Nur die Schlüsselworte wie "FOR,NEXT,GOTO, 
etc." werden in Tokens umgewandelt um Speicherplatz zu sparen.
Für mich ist das aber zweitrangig, da ich das TinyBasic nur als 
Spielzeug einsetze um meinem AVR-Board etwas leben einzuhauchen. Ich 
versuche mich gerade an CLIs und Expression-Parsern... und das TB war 
ein passender "Ausflug". Ich hoffe irgendwann einen eigenen 
Basic-Interpreter schreiben zu können ... aber das dürfte noch relativ 
lange dauern.

Gruß,
  SIGINT

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo. Womit assembliere ich den die Datei 'TinyBasic.asm'?? Bzw. 
erstelle eine HEX Datei zum flaschen in den ATmega8.
AVR Studio meckert 'm8def.inc' nicht gefunden..
gavrasm hört nach 41 Fehlermeldungen auf..

Kann ich die Oszillatorfrequenz einfach von 8 auf 16MHz ändern?
Möchte das auf einem Pollin Eval.Board probieren..

Auch die Baudrate von 2400 möchte ich eigendlich gerne auf den quasi 
Standard 9600 8N1 setzen.

Danke für Hilfe.
Peter

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So. Problem war:
Hatte AVR Studio 3.x genutzt. Nutze jetzt 4.x. Dann habe ich trotzdem 
noch einige Fehlermeldungen bekommen, die aber alle zu den sowieso nicht 
implementierten Funktionen save, load, etc. gehörten.. Also raus damit.

Dann ging compilieren! Habe außerdem auf Clock=16MHz und 9600 8N1 Baud
umgestellt. Läuft jetzt so auf dem Pollin.Eval.Board und ATmega8.

Aber noch nicht groß getestet!! Nur:
10 for n=1 to 10
20 print n
30 next n

..läuft einwandfrei :-)

Siehe:
http://www.petersieg.de - AVR - Tiny Basic

Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.