Forum: Projekte & Code BASIC-Apfelmännchen mit ATmega168


von Ralf R. (voltax)


Angehängte Dateien:

Lesenswert?

Hallo,

dies ist nun noch ein Posting für die Rubrik "Hallo, ich habe auch ein 
Basic". Aber ich hoffe, dass das Thema doch noch den ein oder anderen 
interessiert. Jedenfalls habe ich in den letzten Wochen mein 
Mini-Java-BASIC nach C für den ATmega168 portiert. Es ist zwar noch 
nicht wirklich fertig, und es kennt auch nur ein paar wenige Befehle, 
aber ich kann schonmal etwas zeigen, nämlich ein Apfelmännchen-Programm, 
das ein ebensolches mit Buchstabengrafik an ein Terminalprogramm sendet.

Unten ist das Basic-Programm gelistet,
und gelaufen ist es auf einem Prototype Board von embedit.de,
mit einem 18,432 MHz Quarz
und die Baudrate ist 9600,8,n,1
und oben kann man die HEX-Files downloaden (Flash und EEPROM)
wo schon das Apfel-BASIC-Programm drin ist.

(Vielleicht hat ja einer ein ähnliches Board, und möchte das 
Apfelmännchen mal ausprobieren, über Feedback würde ich mich freuen)

Später werde ich wahrscheinlich (sofern Interesse besteht) ein paar 
Teile aus dem Programm veröffentlichen, zB. die Fixpoint-Arithmetic 
(float war leider zu fett für mein BASIC). Das Basic-Programm wird 
übrigens im Flash gespeichert, woduch man ungefähr 2 KB Programmspeicher 
frei hat (puh das war kniffelig). Die Kontrollstrukturen für die 
BASIC-Zeilen liegen im EEPROM. Man kann etwas über 100 BASIC-Zeilen 
schreiben, und die Zeilennummern liegen zwischen 1 und 999. Und der 
Expression-Parser beherrscht Punkt-Vor-Strich-Rechnung und falls noch 
genug Platz im RAM ein bis drei Klammerebenen. Variablenbezeichner sind 
"a"-"z" und man kann in den Variablen Fixpointzahlen oder kleine Strings 
(max 20 Zeichen) ablegen. Bisher sind folgende Befehle implementiert: 
"LET", "IF", "THEN", "GOTO", "REM", "PRINT", "INPUT", "LIST", "END", 
"RUN", "NBPRINT", und die Operatoren + - * / = < > ; NOT

nundenn, vielleicht ists ja doch interessant, und wahrscheinlich gehts 
mit dem Projekt noch ein Stück weiter, mit der Version 1.00 kommt dann 
noch eine kleine Homepage.

das wars,
Grüße Ralf
1
001 rem Apfel.bas
2
002 rem ---------
3
100 c=0
4
110 l=" "
5
120 rem LOOP1START
6
130 e=1.1
7
140 rem LOOP1
8
150 if e<-1.2 then 570
9
160 if e=-1.2 then 570
10
170 rem LOOP2START
11
180 b=-2
12
190 rem LOOP2
13
200 if b>0.96 then 540
14
220 r=0
15
230 n=0
16
240 rem LOOP3START
17
250 h=128
18
260 rem LOOP3
19
270 if r*r+n*n>3.990 then 340
20
280 h=h-1
21
290 if h<33 then 340
22
300 d=r
23
310 r=r*r-n*n+b
24
320 n=2*d*n+e
25
330 goto 260
26
340 rem LOOP3END
27
400 rem CHAR
28
410 j=" "
29
430 if h<64 then 490
30
440 j="*"
31
441 if h<96 then 490
32
442 j="O"
33
443 if h<112 then 490
34
444 j="H"
35
445 if h<120 then 490
36
446 j="x"
37
447 if h<124 then 490
38
448 j="="
39
449 if h<126 then 490
40
450 j="-"
41
451 if h<127 then 490
42
452 j="+"
43
490 rem l=l;j
44
491 nbprint j
45
520 b=b+0.04
46
530 goto 190
47
540 rem LOOP2END
48
542 print l
49
544 l=" "
50
550 e=e-0.1
51
560 goto 140
52
570 rem LOOP1END

  

von Ralf R. (voltax)


Lesenswert?

ooch, ... schade kein Feedback :((
naja, HEX-Files sind vielleicht auch nicht so spannend.

Den Sourcecode kann ich aber erst später irgendwann einmal 
veröffentlichen, momentan sind einfach noch zu viele Baustellen und Bugs 
drin. Aus den Downloadzahlen des HEX-Files schließe ich mal, dass doch 
eventuell ein gewisses Interesse an meinem AVRFlashBasic besteht, also 
werde ich mal weitermachen.

Falls das x-te BASIC hier aber nun keiner mehr sehen will, dann sind 
aber eventuell ein paar spannende Teilprojekte darin enthalten, und da 
mache ich jetzt schonmal Werbung für:
- zeilenorientierte Datenspeicherung im Flash (als Ringpuffer),
- schnelle und platzsparende Fixpoint-Arithmetik,
- naja und halt ein BASIC-Interpreter, alles in C geschrieben.

Oder ist das alles langweilig? Dann sagts bitte. Würde mir einiges an 
Mühe sparen.

Grüße Ralf

von SIGINT112 (Gast)


Lesenswert?

Hi Ralf,
  das was ich gesehen habe sieht schonmal interesannt aus. Ein Problem 
ist aber eventuell, daß du einen ATmega168 verwendest... der dürfte 
weniger verbreitet sein als z.B. der ATmega8 oder ATmega16. Ich hab 
leider keinen passenden AVR um dein Programm zu testen und kann deshalb 
wenig darüber sagen. An einem kleinen BASIC-Interpreter hab ich aber 
immer interesse... sowas wie das 8051-Basic für den AVR wäre echt super. 
Aber im Moment hoffe ich auf folgendes Projekt:
Beitrag "Mini-Computer mit BASIC"
Wenn die 20 Zeilen beschränkung fällt und externes EEPROM unterstüzt 
wird, dann wäre das echt ein Traum.
Wenn ich aber irgendwann einen passenden AVR habe, dann werd ich dein 
BASIC auch mal auf Herz und Nieren prüfen. Also nicht vom Weg abbringen 
lassen und einfach weiterproggen.... irgendwann werden die Leute auf 
dein Projekt aufmerksam.

Gruß,
  SIGINT

von Ralf R. (voltax)


Lesenswert?

Hallo SIGINT,

... das klingt ja ganz ermutigend :)

Wegen ATmega168: Ich habe nur den einen, aber ich kanns ja heute abend 
einfach mal für ein oder zwei andere Typen compilieren und uploaden. 
Muss aber einer mit wenigstens 16kB Flash sein, und 512 Byte Ram. Was 
für einen AVR hättest Du denn da, und mit wieviel MHZ läuft der?

Ich kann für einen anderen Processor kein HEX-File mit fertig 
einprogrammiertem Basic-Programm machen. Das müsstest Du dann noch per 
Terminalprogramm übertragen. (9600Baud, 8, n, 1, Xon/Xoff Protokoll, 
plus einige zehn ms Delay nach jedem Zeichen, ist zumindest bei 
Hyperterm nötig).

>auf Herz und Nieren

Du wirst vermutlich noch reichlich Bugs finden. Und das Apfelmännchen 
ist auch ein bischen grumpelig, was vermutlich an der zwangsweise 
geringen Genauigkeit meiner Fixpoint-Zahlen liegt (nur 10 Bit für die 
Nachkommastellen). Aber immerhin kommt etwas heraus, was ungefähr so wie 
ein Apfelmännchen aussieht ;)

jo, dann bis dann, Grüße Ralf

von Karl H. (kbuchegg)


Lesenswert?

Ralf Rosenkranz wrote:
>
> Oder ist das alles langweilig?

Überhaupt nicht!

Nur. Na ja. Im Moment hab ich keinen Bedarf danach.

Allerdings würden mich die Abfallprodukte die
du da hast durchaus interessieren.

von SIGINT112 (Gast)


Lesenswert?

Hi Ralf,
  im Moment hab ich nur ATmega8, ATtiny2313,ATtiny13 und einen AT90S8515 
da... mehr als 8kiB Flash hab ich bis jetzt noch nicht benötigt,da ich 
gerade mit AVRs anfange. [Ich brauch für alles etwas länger ;-) ]
In einigen Wochen wollte ich aber was bei Reichelt bestellen... da 
besorg ich mir dann mal nen größeren AVR und teste dein Basic.

Gruß,
  SIGINT

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.