Бейсик компьютер
-Устройство ввода - обычная клавиатура компьютера
-Устройства вывода - телевизор
-Языка программирования - MK-BASIC
-30x23 символов, 8 цветов
-1-канальный аудиовыход (ноты, шум) с огибающей
-39 строк программы, 27 символов в строке.
-20 программ во внешнем модуле памяти
-Обмен программами и данными через последовательный порт (1200 Baud)
-i/o port порт ввода / вывода на 4 пина
-Графический редактор "Черепашка"
Устройством ввода служит обычная компьютерная клавиатура PS2. Можно использовать USB клавиатуру, если контроллер клавиатуры поддерживает работу через интерфейс PS2. Устройство вывода — телевизор. При подключении телевизора через разъем Scart – изображение цветное, при подключении через композитный выход — чернобелое изображение. Также компьютер подключается к монитору MultiSync. Последовательный порт реализован программно (1200 БОД) , служит для обмена программами и данными с другими устройствами. Для хранения программ используется модуль памяти на микросхеме EEPROM 24с256. В основе устройства микроконтроллер, остальное это пассивные элементы и разъемы.
E2prom память эмулируется в флеш памяти, отъедая 2Kб. Во время загрузки программ с дискового модуля (24с256) или последовательно порта, изображение может мигать или пропадать, т.к. епром эмулируется в режиме совместимости. Прошивается микроконтроллер LGT8f328P программатором , подключается к разъему j1 LgtISP.
Для вывода цветного изображения необходимо изготовить кабель VGA-SCART. Некоторым телевизорам для активации режима RGB, необходимо подать питание на 16 вывод разъема Scart.
Ресурсы USART использует клавиатура, поэтому последовательный порт реализован программно на пинах
PB0 -TXD, PD2 -RXD
Служит для обмена программами и данными с внешним миром 8 Bit ,1200 Baud ,no Parity,1 Stopp-Bit. На свое усмотрение вы можете подключить блютуз, вайфай или usb-uart преобразователь.
Выбранный в данный момент пункт меню отмечен указателем. Перемещение по пунктам производится клавишами ВВЕРХ, ВНИЗ. Выбор осуществляется клавишей ENTER.
РЕДАКТОР - запускается редактор текущей программы
ВЫПОЛНИТЬ - исполняется текущая программа, загруженная в память
ALT+CTRL+DEL - перезагрузка компьютера
CTRL + C - прерывает выполнение программы
ЗАГРУЗИТЬ, СОХРАНИТЬ — загрузка, сохранение программ с внешней памяти 24c256
ПРИНЯТЬ, ОТПРАВИТЬ - обмен листингом программы через последовательный порт
ТАБЛИЦА — таблица символов
ЧЕРЕПАШКА - графический редактор.
В верхней части находится название программы. Как только текст будет изменен, в верхнем левом углу появится указатель. Положение курсора представлено обратным мигающим символом. Внизу, цветная строка состояния, в которой, отображаются ошибки.
ВЛЕВО, ВПРАВО, ВВЕРХ, ВНИЗ - перемещают курсор в текстовом поле, при необходимости текст прокручивается
HOME - помещает курсор на первый символ текущей строки.
END - помещает курсор на последний символ текущей строки.
DEL - удаляет символ справа от курсора.
BACKSPACE - удаляет символ слева от курсора.
ENTER - переходит к началу следующей строки
ALT+INS - вставляет пустую строку в текущей позици. Все строки сдвигаются вниз.
ALT+DEL - удаляет строку , все строки сдвигаются вверх
F2 - сохранить
F3 - отменить все до состояния предыдущего сохранения
F8 - очистить всю программу
F9 - переименовать программу
F10 - выполнить программу
С помощью клавиш курсора выбирается программа, ENTER запускает действие. С помощью ESC вы вернетесь в главное меню.
Пункт меню «ТАБЛИЦА» выводит таблицу символов с адресацией в шестнадцатеричной системе исчисления. Во время редактирования программы, можно выйти в меню и открыть таблицу, чтобы посмотреть адрес графического символа. В памяти компьютера две таблицы символов, переключение производится клавишами «1», «2».
Черепашка позволяет не тратить память доступную для бейсика. Вы можете загрузить программу, затем перейти в графический редактор, нарисовать графику для игры и тут же запустить игру клавишей F10.
Стрелки влево, вправо, вверх, вниз - перемещение по полю
PageUp - поднять черепашку
PageDown - опустить черепашку
Номе, End - выбор символа
Space - нарисовать символ в прошлой позиции черепашки
F10- выполнить программу из памяти
Каждая программа состоит из 39 строк. Все ключевые слова, кроме функции могут быть сокращены до двух символов. После каждого ключевого слова должен быть пробел.
Числа, переменные и функции
ChipBasic знает только один тип данных,int (от -32767 до 32767 включительно). Доступно 26 переменных (A-Z). Константы могут вводится как в десятичной, так и в шестнадцатеричной форме, причем в последней отрицательные значения не допускаются. Шестнадцатеричные числа начинаются с $. Разрешены следующие операции:
+ Сложение
- Вычитание
* Умножение
/ Деление
% Остаток от деления
& Логическая И
# Логическое ИЛИ
Сравнения (=,<>,<,<=,>,>=)
Названия функций сокращать нельзя.После имени функции в скобках указывается выражение.
ABS абсолютное значение
SGN вычисляет знак (-1,0,1) выражения
NOT инверсия
SQR квадратный корень
RND генератор случайных чисел
DIN считывание данных IOport
ADC возвращает аналоговое значение напряжения на указанном пине IOport
XPEEK считывает данные из внешней микросхемы памяти (пятая микросхема EEPROM)
XPOKE сохраняет данные на внешнюю микросхему памяти (пятая микросхема EEPROM)
LO возвращает младший байт
HI возвращает старший байт
KEY считывание клавиатуры
COL флаг столкновения для спрайта 1...4 (0/1)
Ключевые слова
LIMIT v,min,max - ограничение диапазона значений переменной. v-переменная, минимальное значение, max- максимальное
BREAK – прерывает выполнение программы
END - завершает работу программы в текущем месте
GOTO - безусловный переход к определенной строке программы
IF - THEN - условный оператор, состоит из IF за этим следует выражение.
FOR - NEXT Для цикла существует только основная форма без указания ширины шага. Поскольку стек ограничен 9 записями, в программе могут быть только 9 циклов.
CALL - RETURN Оператор перехода в подпрограмму с возвращением из нее. В отличие от большинства диалектов языка basic, GOSUB здесь называется CALL. Так же как и предыдущий оператор, программа ограничена 9 циклами.
CLS - очищает экран
POS Y,X - курсор устанавливается на место с координатами Y, X
PRINT – вывод на экран или на последовательный порт
PRINT “HELLO” – вывод на экран
? “HELLO” – сокращенный ввод оператора PRINT
PRINT #0;”HELLO” – вывод на экран
PRINT #1;”HELLO” – вывод на последовательный порт
PRINT @10,10;”HELLO” – Вывод на экран с указанием координат.
PRINT %16 – вывод символа с указанием адреса в таблице символов
SCREEN n - переключение таблицы символов.0-только для системы,1-первая таблица,2-вторая таблица
EMIT - выводит символы по горизонтали, разделенные запятыми, на экран/последовательный порт, в зависимости от того что было выбрано в последний раз.
YEMIT - Выводит символы по вертикали, разделенные запятыми, на экран/последовательный порт, в зависимости от того что было выбрано в последний раз.
LCHAR n - (Начиная с верхней части изображения), n строк символов перемещаются на один символ влево.
GCHAR v,y,x - определяет символ в позиции y, x и записывает его в переменную v
COLOR v Изменение цвета работает только для операторов PLOT, BOX и FBOX
Где n 0 до 7, 0=черный, 1=синий, 2=красный, 3=пурпурный, 4=зеленый, 5=голубой, 4=желтый и 7=белый. Если цвет равен 0, пиксели удаляются, информация о цвете не изменяется
PLOT Y,X - рисует «пиксель» в координатах X,Y
DRAW Y1,X1,Y2,X2 - Рисует линию
BOX Y1,X1,Y2,X2 - рисует прямоугольник
FBOX Y1,X1,Y2,X2 - рисует заполненный прямоугольник
SDEF n,t,c - определяет спрайт, где n-это номер спрайта (1-4), t- тип (см. ниже) и c- положение знака в таблице символов. Тип t может варьироваться от 0 до 15:
0,8 Один символ
1-7 От 2 до 8 символов по горизонтали
9-15 От 2 до 8 символов по вертикали
Спрайты – состоят из одного символа, но несколько раз бок о бок по горизонтали или друг на друге по вертикали. Доступны 4 спрайта. Отображается ли спрайт в новом месте, он будет удален заранее на старом месте, если он был виден.
SSHOW n,y,x - спрайт n изображается в позицию Y,X. Если спрайт нарисован в новой позиции, то он будет удален из предыдущей позиции. Если в новой позиции уже находился другой символ, то спрайт не рисуется в новой позиции, а поднимается флаг столкновения.
SHIDE n - прячет (удаляет) спрайт
COL(n) - запрос флага на столкновение спрайта n
NOTE n - выводится звук с высотой тона n (полутоновые шаги от 220 Гц), n=от 0 до 63 выводятся ноты, при N=255 шум.
INPUT - оператор ввода. Могут быть указаны переменные, разделенные запятыми, вызывают курсор ввода.
RKEY V - нажатая в данный момент клавиша записывается в переменную V. Если клавиша не нажата, записывается 0.
WKEY V - ожидается нажатие клавиши, и нажатая клавиша записывается в переменную V.
KEY - эта функция обеспечивает различные запросы клавиатуры как значение -1,0,1. Если ни одна из двух кнопок не задействована, возвращается 0 в качестве значения функции.
KEY(0) левая Shift возвращает 1, левая CTRL возвращает -1, оба 0
KEY(1) правая Shift возвращает 1, правая CTRL возвращает -1, оба 0
KEY(2) Клавиша «ВЛЕВО» возвращает -1, клавиша «Вправо» 1
KEY(3) Клавиша «ВНИЗ» возвращает -1, клавиша «ВВЕРХ» 1
WAIT n - пауза на n * 0,1 секунд.
SYNC n - ожидание n синхронизации изображений
TSET n - внутренний таймер (10 Гц) устанавливается в значение N
TGET n - внутренний таймер (10 Гц) считывается и сохраняется в переменную
DIR n - устанавливает направление ввода / вывода IOport
OUT n,b - установка (b=1) или сброс (b=0) пина n для IOport
SPUT n - байт выводится на последовательный порт
SGET n - считывается символ с последовательного порта и сохраняется в переменную
ESET A - сохраняет значение переменной A во внутреннем EEPROM
EGET B - считывает значение из внутреннего EEPROM в переменную B
Динамичная игра. Персонаж по прозвищу Миникот летит сквозь метеоритный дождь на своем звездолете. Вам необходимо пролететь не врезаясь в куски метеорита. Управление клавишами "ВВЕРХ", "ВНИЗ", "ВЛЕВО", "ВПРАВО".
PROGRAM: SPACECAT
01 CO 1:DRAW 21,0,21,29:U=1
02 Y=0:X=30:H=0:V=0:P=10:G=0
03 IF U=1 U=2:SCREEN U:GO 5
04 IF U=2 U=1:SCREEN U:GO 5
05 Y=RND(20):S=RND(6)+9
06 POS Y,X:EMIT S:LCHAR 21
07 GC F,V,H+3:POS V,H:EM 0,0,0
08 K=KEY(3):V=V-K:LIMIT V,0,19
09 L=KEY(2):H=H+L:LIMIT H,1,27
10 IF (F>8)&(F<16) CALL 16
11 POS V,H: EMIT 0,29,30,31
12 NO V+H:IF P<0 GOTO 20
13 IF G>50 P=P+1:G=0:CALL 18
14 IF P>20 NO 55:NO 56:GOTO 22
15 WAIT 1:G=G+1:GOTO 3
16 POS V,H+2:EMIT 122:NO 255
17 WAIT 5:EMIT 0,0,0:P=P-1
18 POS 22,2
19 PRINT "SKILL -";P;" ";:RE
20 CLS :BOX 8,8,12,20
21 POS 10,10:? "GAME OVER":EN
22 POS 10,10:? "YOU WIN!"
#
Вам необходимо нажать на клавишу с буквой, пока падает соответствующая буква.
PROGRAM: KEYSIM
01 CLS :COLOR 5:BOX 0,0,22,29
02 COLOR 1:DRAW 2,4,2,23
03 FOR E=1 TO 28
04 POS 20,E:YEMIT 9,12:NEXT
05 FOR E=0 TO 50
06 POS 1,4:? "RIGHT";T
07 POS 1,16:? "MISSED";E-T
08 X=RND(26)+2:I=RND(25)+65
09 FOR Y=4 TO 20
10 POS Y-1,X: EMIT 0
11 POS Y,X: EMIT I
12 WAIT 1:RKEY P
13 IF P=I T=T+1:NOTE 255
14 IF P=I POS Y,X:EMIT 121
15 IF P=I WAIT 1
16 IF P=I POS Y,X:? " ":Y=20
17 NEXT :NEXT
18 IF T<26 POS 10,10:?"LOST"
19 IF T>25 POS 10,12:?"WIN"
20 WKEY Z:
#
Управление вверх, вниз, влево, вправо. Задача - проехать как можно больший путь не врезаясь.
PROGRAM: STENA-39
01 SC 1:CLS :S=2:V=$E3:T=0
02 SDEF 1,0,$7D
03 FOR I=1 TO 10
04 X=RND(29): Y=RND(22)
05 LI X,5,24:LI Y,5,17
06 POS Y,X:EMIT $6E:NEXT
07 FOR X=0 TO 29
08 POS 0,X:EMIT $62
09 POS 21,X:EMIT $62:NEXT
10 FOR Y=0 TO 21
11 POS Y,0:EMIT $62
12 POS Y,29: EMIT $62:NEXT
13 Y=10:X=10:Q=10:W=9:WAIT 6
14 RKEY V '-----------LOOP
15 IF V=$E2 S=1
16 IF V=$E3 S=2
17 IF V=$E4 S=3
18 IF V=$E5 S=4
19 IF S=1 CALL 30
20 IF S=2 CALL 32
21 IF S=3 CALL 34
22 IF S=4 CALL 36
23 LI X,1,28: LI Y,1,20
24 LI W,1,28: LI Q,1,20:T=T+1
25 PRINT @1,1;"LENGTH";T;"KM"
26 POS Q,W: EMIT $62:SS 1,Y,X
27 IF COL(1) GOTO 38
28 SCREEN 1:WAIT 1:SCREEN 2
29 GOTO 14 '--------END LOOP
30 W=X:Q=Y:X=X-1 'LEFT
31 SHIDE 1:SDEF 1,0,$7B:RETURN
32 W=X:Q=Y:X=X+1 'RITHT
33 SHIDE 1:SDEF 1,0,$7D:RETURN
34 Q=Y:W=X:Y=Y-1 'UP
35 SHIDE 1:SDEF 1,0,$7C:RETURN
36 Q=Y:W=X:Y=Y+1 'DOWN
37 SHIDE 1:SDEF 1,0,$7E:RETURN
38 ? @10,10;"GAME OVER":NO 255
39 WAIT 10:WKEY V:GOTO 01
#
Управление влево, вправо, пробел.
PROGRAM: STAR WARS
01 SCREEN 1:CLS
02 SD 1,0,$1F:SD 2,0,$71
03 SD 3,0,$72:SD 4,0,$74
04 D=0:E=0:F=0:G=28:I=22
05
06 POS 0,0
07 ? "STAR WAR ";X;" <>";Z
08 POS 23,H: EMIT $20
09
10 L=KEY(2):H=H+L:LI H,0,28
11 POS 23,H: EMIT $73
12 Y=Y+1:IF Y>1 Y=0
13 IF Y=1 GOTO 16
14 D=D+1:E=E+1:F=F+1
15
16 IF D>29 X=X+1:SC 1
17 IF D>29 D=RND(5):A=RND(20)
18 IF E>29 E=RND(5):B=RND(20)
19 IF F>29 F=RND(5):C=RND(20)
20 SS 1,A+1,D:SS 2,B+1,E
21 SS 3,C+1,F
22 IF (X>50)#(Z>50) GOTO 36
23
24 SYNC 2
25 RKEY K:IF K=32 CALL 28
26 GOTO 5
27
28 I=I-1:SSHOW 4,I,H
29 IF COL(4)=1 CALL 33
30 NOTE I:SYNC 1
31 IF I>1 GOTO 27
32 SHIDE 4:I=22: RETURN
33 SCREEN 2:NO 20:NO 20
34 I=1:Z=Z+1
35 RETURN
36 CLS : POS 10,10
37 IF Z>X PRINT "YOU WIN"
38 IF X>Z PRINT "YOU LOST"
39 END
#
Управление влево, вправо.
PROGRAM: FOOTBALL
01 Z=10:M=5:N=5
02 SC 1:SD 1,3,6:SD 2,0,15
03 CO 5:BOX 1,0,22,29
04 X=15:Y=10:E=1:F=1
05 FOR I=2 TO 5
06 J=I-1
07 PRINT @Z,I*5-4;%J;%J;%J
08 NEXT
09
10
11 SY 2:B=B+KEY(2)
12 LI B,1,25:SSHOW 1,20,B
13 P=(P+1)%2:IF P>0 GO 5
14 X=X+E:Y=Y+F:SSHOW 2,Y,X
15
16 IF (Y=2)#(Y=21) THEN F=-F
17 IF (X=1)#(X=28) THEN E=-E
18 IF Y=2 THEN NO 20
19 IF (X=1)#(X=28) THEN NO 13
20 IF Y=21 THEN CALL 36
21 IF COL(2)=1 F=-F:CALL 27
22 IF R=M THEN CALL 30
23 IF L=N THEN CALL 33
24 IF (L>50)#(R>50) TH GO 37
25 PO 0,1:?L:PO 0,24:?R
26 GOTO 5
27 Y=Y+F:NO 20
28 IF Y=19 THEN R=R+1
29 RETURN
30 CO 0:DRAW Z,1,Z,28:SYNC 1
31 M=M+5:Z=Z-1:LI Z,5,15
32 RETURN
33 CO 0:DRAW Z,1,Z,28:SYNC 1
34 N=N+5:Z=Z+1:LI Z,5,15
35 LI Z,3,20:RETURN
36 NO 255:L=L+1:RETURN
37 POS 10,9
38 IF L<R ?" YOU WIN"
39 IF L>R ?"COMPUTER WIN"
#