Решил сделать миникомпьютер для обучения программированию, и типа игрушки детям. Режим работы -интерпретатор, язык - BASIC, причем для упрощения ввода команд сделал по типу Sinclair BASIC (автоматический ввод команд одной клавишей).
Аппаратная часть:
Ограничения:
папка проекта тут
исходники тут
Примеры программ:
Посадка на луну(псевдографика)
Аппаратная часть:
- 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 "Угадал!"