пятница, 7 марта 2014 г.

AVR BASIC интерпретатор

Решил сделать  миникомпьютер  для обучения программированию, и типа игрушки детям. Режим работы -интерпретатор, язык - BASIC, причем для упрощения ввода команд сделал по типу Sinclair BASIC (автоматический ввод команд одной клавишей).
[Image]

Аппаратная часть:
  • atmega328 (2кб RAM - весьма скромно, 32кб FLASH)
  • дисплей 128х64 на st7565 (вроде аналог SED1565)
  • SD карточка для сохранения программ
  • PS/2 клавиатура для ввода

Ограничения:

  • Максимальный размер программы 1400 байт или 255строк
  • Переменные только целого типа (-32768...32768), имя переменных - один символ верхнего регистра в диапазоне A ..Z
  • Для циклов переменные из диапазона A .. J 
  • Массивы 3х типов byte char и int, используется память для программы
  • Нельзя создавать новые файлы на SD, только перезаписывать существующие. Поэтому необходимо подготовить нужно кол-во файлов шаблонов по 2кб (см. папку utils) и записать их на SD card.
Комбинация клавиш
  • ESC - Прервать выполнение / Очистка командной строки (Ctrl+B для Linux console)
  • CapsLock - переключать раскладку Rus/Lat (Rus(cp1251) только для текстов или пометок)

папка проекта тут

исходники тут

Примеры программ:

Посадка на луну(псевдографика)
5 GOSUB 251
10 DIM bZ(5)
15 LET Z(0)=10
16 LET V=70
17 LET F=500
18 LET H=800
19 LET G=1
20 LET U=0
30 REM main
33 LET H=H-V
34 LET V=((V+G)*10-U*2)/10
35 LET F=F-U
36 IF F<0 THEN  LET F=0
37 LET T=H/100
38 IF T<8 THEN  LET Z(1)=7-T
39 GOSUB 225
40 GOSUB 235
41 IF H <= 0 THEN  GOTO 100
44 LET U=0
45 FOR I=0 TO 9                                            
46 LET K=INKEY
47 IF K=32 THEN  LET U=U+10
48 IF U THEN  BEEP 100,RND(20)-60
49 PAUSE 50
50 NEXT I
51 LET Z(4)=0
53 IF F=0 THEN  LET U=0
55 IF U>0 THEN  LET Z(4)=1
60 GOTO 30
100 IF V<5 THEN  GOTO 140
105 LET X=RND(3)+Z(0)-1
106 LET Y=RND(4)+4
108 AT X,Y
110 PRINT $RND(10)+32;
112 BEEP 50,RND(60)-30
115 PAUSE 100
120 GOTO 105
139 STOP
150 STOP                                                   
225 REM p
226 AT 0,0
227 PRINT "V:",V,"m/s ";
228 AT 15,0
229 PRINT "H:",H,"m ";
230 AT 0,1
231 PRINT "F:",F,"tn ";
234 RETURN
235 REM d
237 IF Z(1)>7 THEN  LET Z(1)=7
239 AT Z(2),Z(3)
240 PRINT " ";
241 AT Z(0),Z(1)
242 PRINT "A";
243 IF Z(1)>6 THEN  GOTO 248
244 AT Z(2),Z(3)+1
245 PRINT " ";
246 AT Z(0),Z(1)+1
247 IF Z(4) THEN  PRINT "*";                               
248 LET Z(2)=Z(0)
249 LET Z(3)=Z(1)
250 RETURN
251 FOR A=0 TO 20
252 AT A,RND(2)+6
253 PRINT ".";
254 NEXT A
255 RETURN
Быки и коровы

5 PRINT "Игра быки и коровы"
6 DIM bR(5)
7 DIM bK(5)
10 FOR A=0 TO 4
20 LET R(A)=RND(9)+1
30 FOR B=0 TO A-1
40 IF R(A) <> R(B) THEN  GOTO 50
45 IF A>0 THEN  GOTO 20
50 NEXT B
55 NEXT A
60 PRINT "Введите 5 чисел"
62 FOR A=0 TO 4
65 INPUT C
66 IF C<1 THEN  GOTO 70
67 IF C>9 THEN  GOTO 70
68 GOTO 73
70 PRINT "вводите от 1 до 9"
71 GOTO 65
73 LET K(A)=C
75 NEXT A                                                 
77 LET C=0
78 LET D=0
80 FOR A=0 TO 4
85 FOR B=0 TO 4
90 IF K(A) <> R(B) THEN  GOTO 100
91 IF A <> B THEN  GOTO 96
92 LET C=C+1
95 GOTO 100
96 LET D=D+1
100 NEXT B
110 NEXT A
115 PRINT "Быков:";
120 PRINT C;
124 PRINT " Коров:";
125 PRINT D
130 IF C<5 THEN  GOTO 60
140 PRINT "Угадал!"

2 комментария:

  1. Интересно,для обучения думаю самое то.Только схема pdf "битая" не читается,перезалейте плиз.Да и вообще сэру Клайву Синклеру следовало бы памятник в Москве поставить,сколько народу к программированию приучил :) Да,были времена.

    ОтветитьУдалить
    Ответы
    1. У меня все нормально смотрится, незнаю в чем причина.

      Удалить