www.mikrocontroller.net

Forum: Codesammlung AVR Tiny BASIC anpassung für ATmega8


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

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:

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:

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:

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:

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:

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:

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:

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net