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
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
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.