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


von Sigint 112 (sigint)


Angehängte Dateien:

Lesenswert?

Hi zusammen,
  ich hab vor ein paar Tagen folgende Webseite gefunden:
http://www.retards.org/library/technology/electronics/avr/avrfreaks_projects/bss02_home_computer_system/BSS02.html
http://www.retards.org/library/technology/electronics/avr/avrfreaks_projects/bss02_home_computer_system/

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

von Roman (Gast)


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



von Sigint 112 (sigint)


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

von Roman (Gast)


Lesenswert?

kommt es dir bekannt vor ??

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

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


Oder aus der 8080 version :
1
;*
2
;**************************************************************
3
;*
4
;* *** OUTC *** & CHKIO ****!
5
;* THESE ARE THE ONLY I/O ROUTINES IN TBI.
6
;* 'OUTC' IS CONTROLLED BY A SOFTWARE SWITCH 'OCSW'.  IFF OCSW=0
7
;* 'OUTC' WILL JUST RETURN TO THE CALLER.  IFF OCSW IS NOT 0,
8
;* IT WILL OUTPUT THE BYTE IN A.  IFF THAT IS A CR, A LF IS ALSO
9
;* SEND OUT.  ONLY THE FLAGS MAY BE CHANGED AT RETURN, ALL REG.
10
;* ARE RESTORED.
11
;*
12
;* 'CHKIO' CHECKS THE INPUT.  IFF NO INPUT, IT WILL RETURN TO
13
;* THE CALLER WITH THE Z FLAG SET.  IFF THERE IS INPUT, Z FLAG
14
;* IS CLEARED AND THE INPUT BYTE IS IN A.  HOWERER, IFF THE
15
;* INPUT IS A CONTROL-O, THE 'OCSW' SWITCH IS COMPLIMENTED, AND
16
;* Z FLAG IS RETURNED.  IFF A CONTROL-C IS READ, 'CHKIO' WILL
17
;* RESTART TBI AND DO NOT RETURN TO THE CALLER.
18
;*


gruss
roman


von Roman (Gast)


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

von Sigint 112 (sigint)


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

von Peter Sieg (Gast)


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

von Peter Sieg (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.