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
|