Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

17 марта 2023

G-BASIC для консоли. Описание языка.

 Все статьи по данной игровой консоли - по тегу G-BASIC


Описание языка G-BASIC.

Для проекта G-BASIC CONSOLE был создан еще один диалект языка BASIC.
Диалект базируется на функционале и синтаксисе диалекта GW-BASIC, но с некоторыми изменениями и упрощениями.
Ниже - краткое описание синаксиса, типов данных, операторов и функций.

G-BASIC

Изменения относительно GW-BASIC.

Убрана нумерация строк.

Для условных и безусловных переходов добавлены метки.

Конструкция IF-THEN-ELSE может располагаться на нескольких строках. Признаком окончания данной конструкции является обязательный оператор END IF.

От GW-BASIC осталась глобальная видимость всех переменных и расположение подпрограмм в тексте основной программы. Файл с текстом программы не может содержать более 65535 строк.

G-BASIC построен по принципу компилятора. Текст программы анализируется и компилируется в байт-код, который в дальнейшем исполняется средой выполнения. Это позволило достичь большей производительности.

Максимальный размер откомпилированного байт-кода - 60000 байт. Столько же памяти доступно для статических и динамических переменных.

Данные ограничения связаны с общим объемом оперативной памяти G-BASIC CONSOLE.

Примененный в G-BASIC CONSOLE дисплей имеет разрешение 240*240 пикселей, каждый из которых может отображать до 65536 цветов. Интерфейс подключения дисплея не позволяет выполнять быстрое чтение данных о пикселях из ОЗУ дисплея. Поэтому в G-BASIC отсутствуют операции, требующие чтение данных из видеопамяти дисплея. 

Дисплей поддерживает 65536 цветов - это 16-битный формат RGB565. Для работы с таким цветом добавлены отдельные функции установки 16-битного цвета и функция конвертации значений RGB в 16-битный цвет. Функция COLOR для задания 16 цветов пера и фона оставлена для совместимости.

В G-BASIC полностью исключены функции работы с файлами, в том числе и с форматными, при помощи операторов PRINT и INPUT. Работа с файлами максимально упрощена. G-BASIC предоставляет 4 функции работы с файлами - чтение строки из файла, запись строки в файл, чтение блока данных из файла в числовой массив и сохранение блока данных из числового массива в файл. Все функции работы с файлами получили другие имена, что бы исключить конфликт с файловыми функциями GW-BASIC.

В проекте G-BASIC CONSOLE отсутствует полноценная клавиатура, поэтому из G-BASIC исключен оператор INPUT. Для обработки нажатий 8 кнопок G-BASIC CONSOLE оставлена функция INKEY$. Эта функция возвращает один из 8 символов - "L", "R", "U", "D", "A", "B", "S", "P" или пустую строку. Так же добавлена функция, которая возвращает байт состояния нажатия кнопок. Каждый бит в этом байте соответствует состоянию одной из 8 кнопок G-BASIC CONSOLE.

Из проекта так же убраны пользовательские функции DEF FN

Переменные и массивы.

Переменные в G-BASIC могут быть четырех типов:
-вещественные одинарной точности (приблизительно -3.4E38..+3.4E38)
-знаковые целочисленные (-32768..32767)
-байтовые (0..255)
-текстовые (до 255 символов на строку)

Вещественные переменные двойной точности не поддерживаются.

Имя переменной может содержать буквы английского алфавита, цифры, символ подчеркивания "_" и один из символов-идентификаторов типа.
Имя переменной не может начинаться с цифры.
Регистр символов значения не имеет.
Если задан символ-идентификатор типа, то имя переменной должно заканчиваться этим символом. Несколько символов-идентификаторов в одном имени переменной не допускаются.

Символы-идентификаторы типов переменных:
"!" - вещественная переменная одинарной точности
"#" - вещественная переменная двойной точности - интерпретируется как "!"
"%" - целочисленная переменная
"&" - байтовая переменная
"$" - текстовая переменная

Если символ-идентификатор типа в имени переменной отсутствует - переменная считается вещественной одинарной точности.

Длина значащей части имени переменной - 24 символа.

Зарегистрированные имена G-BASIC (операторы и функции) не могут выступать в качестве имен переменных.

Массивы.

Массив — это таблица значений, на которые ссылается одно и то же имя переменной. Каждый элемент массива адресуется одним или несколькими индексами, заключенными в круглые скобки сразу после имени переменной. Количество индексов соответствует числу измерений массива. Индексы - это целые неотрицательные значения или вычисляемые выражения. 

Перед использованием массив должен быть объявлен при помощи оператора DIM. Максимальное число индексов массива - 6. Максимальное число элементов на один индекс - 32767. Нумерация элементов в массивах начинается с 0.

Объявление массивов и контроль числа индексов при обращении к элементу массива проверяется статически, при компиляции. Это сократило размер байт-кода обращения к массивам, но может является потенциальным источником ошибок при нелинейном выполнении программы. О данной особенности следует помнить и учитывать при написании программ.

Совпадающие имена переменных

Массивы и одиночные переменные с одинаковыми именами и типами допускаются и считаются разными переменными.
Переменные разных типов с одинаковыми именами считаются разными переменными.
Переменные с одинаковыми именами без идентификатора типа и с идентификаторами "!" и "#" не различаются и считаются одной переменной.

A$, A&, A, A&(10), A$(8) - разные переменные

A, A!, A# - одна переменная 

Метки.

Для условных и безусловных переходов используются метки.

Метки, как и переменные, могут состоять из букв английского алфавита, цифр, символа подчеркивания "_" и обязательно должны заканчиваться двоеточием. Метки не могут начинаться с цифры. Регистр символов значения не имеет.

Длина значащей части имени метки - 24 символа. 

Зарегистрированные имена G-BASIC не могут выступать в качестве меток.

Преобразование типов.

Пи выполнении арифметических и логических операций результат операции приводится к ожидаемому типу. Если ожидаемый тип - знаковое целое или байт - результат округляется до целого значения. При этом, если результат выходит за пределы целочисленного типа (0..255 для байта и -32768..32767 для знакового целого), возникает ошибка переполнения. Так же ошибка переполнения возникает, если ожидаемый тип операции - вещественный, но результат операции выходит за пределы вещественного значения одинарной точности.

Неявное преобразование между строковым и числовым значениями не выполняется, при попытке таких преобразований возникает ошибка несоответствия типов. Для перевода числа в строку и наоборот необходимо пользоваться соответствующими функциями - VAL и STR$.

Неявное преобразование числа в строку выполняется в единственном случае - чтение числового значения оператором READ в строковую переменную из оператора DATA.

Комментарии.

G-BASIC поддерживает однострочные комментарии.
Комментарий в строке начинается с оператора REM или с апострофа (').

REM это комментарий
' и это тоже комментарий

Константы.

G-BASIC поддерживает следующий синтаксис задания констант:
Целочисленные константы в десятичном виде: от -32768 до 32767
Целочисленные значения в шестнадцатеричном виде: от &H0 до &HFFFF
Константы с плавающей запятой в обычном виде: 123.4567 ; -0.00045
Константы с плавающей запятой в научной форме 1.23E2; -4.5E-4
Строковые константы - любые строки длиной от 0 до 255 символов, взятые в кавычки: ""; "Text"

Арифметические, логические операции, операции сравнения и операции со строками.

Арифметические операции.

"^" - возведение в степень
"-" - унарный минус
"*" - умножение
"/" - деление
"+" - сложение
"-" - вычитание

Целочисленные деление и получение остатка от деления.

Доступны две дополнительные операции:
"\" - целочисленное деление
"MOD" - остаток от целочисленного деления

Перед выполнением этих операций аргументы приводятся к целочисленному типу. Если аргумент выходит за пределы целочисленного диапазона -32768..32767, возникает ошибка переполнения.

Операции сравнения.

"=" - Равенство
"<>" - Неравенство
"<" - Меньше
">" - Больше
"<=" - Меньше или равно
">=" - Больше или равно

Операции сравнения возвращают целое число -1 в случае истинности сравнения или 0 - если сравнение ложно.

Логические операции.

Операнды в логических операциях преобразуются в 16-разрядные знаковые целые числа в диапазоне от -32768 до +32767 (если операнды не входят в этот диапазон, возникает ошибка). Логические операции выполняются над этими целыми числами побитово; то есть каждый бит результата определяется соответствующими битами в операндах. -1 в битовом представлении - это FFFF, 0 - это 0000. Соответственно, когда оба операнда представлены как 0 или -1, логические операции возвращают 0 или -1. 

"NOT" - унарная операция, возвращает побитовую инверсию аргумента
"AND" - побитовое логическое И
"OR" - побитовое логическое ИЛИ
"XOR" - побитовое логическое Исключающее ИЛИ
"EQV" - побитовое равенство
"IMP" - побитовая имплементация

Операции со строками.

Для манипуляции со строками применима единственная операция:
"+" - конкатенация строк. 

Если длина результирующей строки будет более 255 символов - возникнет ошибка.

Для сравнения строк применимы все операции сравнения.
Строки сравниваются посимвольно, путем сравнения кодов ASCII. Если коды ASCII в каждой строке одинаковы, строки равны. Если коды ASCII различаются, меньший номер кода будет предшествовать старшему коду. Если строки разной длины, но совпадают в пределах длины более короткой строки, то более короткая строка считается меньшей. Ведущие и конечные пробелы имеют значение.

Приоритет операций.

Ниже представлены все операции и индексы их приоритета в порядке убывания.

10 : "^"
9 : "*", "/", "\", "MOD"
8 : "+", "-"
7 : "="
6 : "<>", "<", ">", "<=", ">="
5 : "NOT"
4 : "AND"
3 : "OR"
2 : "XOR"
1 : "EQV"
0 : "IMP"

Операции с одинаковым приоритетом выполняются в порядке их следования в выражении.
Если необходимо изменить порядок обработки операций в выражении, следует воспользоваться скобками.

Операторы

Присвоение.

Синтаксис:  variable = expression

Так же допустим устаревший формат:
LET variable = expression

В данном случае операция "=" выступает, как оператор присвоения.

При выполнении присвоения сначала вычисляется всё выражение справа от "=", после чего вычисленное значение сохраняется в переменной, указанной слева от "=".

Управление массивами и переменными

CLEAR - очистка всех переменных.

Оператор аргументов не имеет.
Оператор при выполнении:
-обнуляет все числовые переменные
-очищает все строковые переменные
-удаляет все объявленные массивы
-закрывает все открытые файлы
-выключает все звуки
-выключает режим воспроизведения звуков в фоне


DIM - объявление массивов
Синтаксис: DIM variable(subscripts)[,variable(subscripts)]... 

Максимальное число индексов для массива - 6, максимальное количество элементов массива на один индекс - 32767.
Минимальное значение индекса всегда равно 0.                      

Пример:
DIM A$(3,3) - двумерный массив строк размером 4х4
DIM A%(9), A(4), A&(7,8,9) - массив целочисленных переменных размером 10 элементов, массив вещественных переменных размером 5 элементов, трехмерный массив байтов размером 8х9х10 элементов


ERASE - удаление массивов, освобождение занимаемой массивами памяти
Синтаксис: ERASE array_variable [, array_variable, .....]

Массив удаляется из памяти, область памяти, выделенная для массива, освобождается.
Дальнейшее обращение в программе к элементам массива будет приводить к ошибке.

Для возможности дальнейшей работы с массивом его необходимо повторно объявить оператором DIM


SWAP - обмен значениями меду двумя переменными
Синтаксис: SWAP variable1, variable2

Переменные variable1 и variable2 обмениваются своими значениями. Переменные variable1, variable2 должны быть одного типа.


Операторы ветвлений, условных и безусловных переходов, завершения программы.

GOTO - безусловный переход
Синтаксис: GOTO label

Производится переход к выполнения оператора, стоящего сразу за меткой label.
Если такая метка в программе не объявлена - возникает ошибка на этапе компиляции программы.


GOSUB - переход к подпрограмме
Синтаксис: GOSUB label

Производится переход к выполнения оператора, стоящего сразу за меткой label.
Если такая метка в программе не объявлена - возникает ошибка на этапе компиляции программы.
Максимально допускается до 32 вложенных вызовов подпрограмм, в т.ч. и рекурсивных.


RETURN - возврат из подпрограммы

Оператор аргументов не имеет.
Производится переход к оператору, следующему за оператором GOSUB, которым был произведен переход к подпрограмме.
Если оператор RETURN встретится вне подпрограммы, возникает ошибка выполнения.


ON .. GOTO
ON .. GOSUB
- индексный переход / вызов подпрограммы

Синтаксис:
ON expression GOTO label1 [, label2, ....]
ON expression GOSUB label1 [, label2, ....]

Значение выражения определяет, какая метка по счету в списке будет использоваться для ветвления. Если значение не является целым числом, оно округляется до целого. Если значение выражения равно нулю или превышает количество элементов в списке (но меньше или равно 255), G-BASIC переходит к следующему исполняемому оператору. Если значение выражения отрицательное или больше 255, возникает ошибка.

При вызове одной из подпрограмм в случае ON .. GOSUB управление из подпрограммы возвращается к следующему после ON .. GOSUB оператору.


IF .. THEN .. ELSE .. END IF - условное выполнение

Синтаксис:
IF expression THEN statement(s) [ELSE statement(s)] END IF
IF expression GOTO label [ELSE statement(s)] END IF

Если результат выражения ненулевй (true), выполняется ветка после оператора THEN.
Если результат выражения нулевой (false), выполняются операторы после ELSE.
Если оператор ELSE отсутствует, то в случае ложного результата управление переходит на оператор, следующий за END IF
Поскольку для оператора IF всегда должен быть завершающий оператор END IF, нет требования к записи всего условного выражения в одну строку.
Допускается до 16 вложенных операторов IF-END IF.


END - завершение работы программы.

Оператор аргументов не имеет.
Выполнение данного оператора приводит к завершению программы. Данный оператор может встречаться в любом месте программы.


SYSTEM - оператор оставлен для совместимости, в G-BASIC выполняет ту же функцию, что и END.


Циклы

FOR .. TO .. STEP .. NEXT - выполнение заданных инструкций определенное количество раз

Синтаксис:
FOR variable=x TO y [STEP z]
[loop statements]
NEXT [variable][,variable...]

Переменная variable используется в качестве счетчика. Эта переменная не может быть элементом массива.
x, y и z - числовые выражения.
Шаг z задает приращение счетчика для каждого шага цикла. Если STEP z не указан, инкремент принимается равным 1.

Первое числовое выражение (x) - это начальное значение счетчика. Второе числовое выражение (y) - конечное значение счетчика. Конечное выражение вычисляется один раз, перед началом цикла, и сохраняется во внутренней переменной.

Строки программы, следующие за оператором FOR, выполняются до тех пор, пока не встретится оператор NEXT. Затем счетчик увеличивается на величину, указанную в STEP.

Выполняется проверка, больше ли теперь значение счетчика, умноженное на знак шага, чем конечное значение (y), умноженное на знак шага. Если оно не больше, G-BASIC возвращается к оператору после оператора FOR, и процесс повторяется. Если значение больше, то выполнение продолжается с оператора, следующего за оператором NEXT. 

Тело цикла пропускается, если начальное значение цикла, умноженное на знак шага, превышает конечное значение, умноженное на знак шага.

Допускаются вложенные циклы FOR-NEXT; то есть цикл FOR-NEXT может быть помещен в контекст другого цикла FOR-NEXT. Когда циклы вложенные, каждый цикл должен иметь уникальное имя переменной в качестве счетчика.

Оператор NEXT для внутреннего цикла должен появляться перед оператором NEXT для внешнего цикла.

Если вложенные циклы имеют одну и ту же конечную точку, то для всех них можно использовать один оператор NEXT с перечислением переменных для этих циклов.

Переменная(ые) в операторе NEXT может быть опущена, в этом случае оператор NEXT будет соответствовать последнему оператору FOR.

Если оператор NEXT встречается до соответствующего оператора FOR, выдается соответствующее сообщение об ошибке компиляции. Аналогично, если для оператора FOR не найден соответствующий NEXT - возникнет ошибка компиляции.


WHILE .. WEND - цикл с предусловием

Синтаксис:
WHILE expression
[loop statements]
END 

Если результат выражения ненулевой (true), то операторы цикла выполняются до тех пор, пока не встретится оператор WEND. Затем G-BASIC возвращается к оператору WHILE и заново проверяет выражение. Если оно по-прежнему истинно, процесс повторяется.
Если выражение ложно, выполнение возобновляется с оператора, следующего за оператором WEND.

Циклы WHILE и WEND могут быть вложены друг в друга. Каждый WEND соответствует последнему WHILE.
Непарность операторов WHILE и WEND вызывает соответствующую ошибку компиляции.


G-BASIC позволяет использовать до 16 вложенных циклов. При этом не имеет значения, какие это циклы, FOR или WHILE.


Вывод текстовой информации.

CLS - очистка экрана.

Оператор аргументов не имеет.
Команда очищает всю текстовую и графическую информацию на дисплее, заполняя его черным цветом.
Позиция вывода текста устанавливается в левый верхний угол.
Перо помещается в левый верхний угол.


COLOR, COLOR565 - выбор текущего цвета пера и/или цвета фона для вывода текстовой информации.

Синтаксис:
COLOR [FG_COLOR][,BG_COLOR]
COLOR565 [FG_COLOR565][,BG_COLOR565]

FG_COLOR / FG_COLOR565 - цвет пера, которым в дальнейшем будет вывводиться текстовая и графическая информация.
BG_COLOR / BG_COLOR565 - цвет фона. Данный цвет актуален только при выводе текстовой информации.

Аргументы оператора COLOR - это значения от 0 до 15 (для фона - от -1 до 15), сответствующие 16 стандартным цветам:
-1 - (только для фонового цвета) режим прозрачности текста
0 - черный
1 - темносиний
2 - темнозеленый
3 - темноголубой
4 - темнокрасный
5 - темнофилетовый
6 - коричнвевый
7 - светлосерый
8 - темносерый
9 - синий
10 - зеленый
11 - голубой
12 - красный
13 - филетовый
14 - желтый
15 - белый

Аргументы оператора COLOR565 - это 16-битные значения цвета в формате RGB565 - 5 бит значения красного, 6 бит значения зеленого и 5 бит значения синего компонента цвета. Это число от &H0 до &HFFFF в 16-ричном значении или от -32768 до 32767 - в десятичном (так же см. функцию MAKE565COLOR).

Прозрачность текста. 
В обычном режиме, когда задан явный цвет фона, цветом пера заполняются пиксели, относящиеся к начертанию символа и цветом фона - остальные пиксели. Т.е. символ рисуется на прямоугольнике с цветом фона. В случае, если фоновый цвет задан оператором COLOR как -1, прямоугольник под символом не выводится, меняются только пиксели, относящиеся к начертанию символа. Данный режим вывода текста может работать несколько медленней, из-за особенностей аппаратной архитектуры дисплея.


FONT - выбор размера шрифта для вывода информации на дисплей.

Синтаксис: FONT size

size - константа или математическое выражение.
Результат выражения должен быть целым числом от 0 до 3. Если значение выходит за эти пределы - возникает ошибка.
0 - шрифт 6 х 8 пикселей, на дисплее помещается 40 символов, 30 строк
1 - шрифт 8 х 12 пикселей, на дисплее помещается 30 символов, 20 строк
2 - шрифт 12 х 16 пикселей, на дисплее помещается 20 символов, 15 строк
3 - шрифт 16 х 24 пикселя, на дисплее помещается 15 символов, 10 строк


LOCATE, LOCATEXY - выбор позиции для вывода текста на дисплее

Синтаксис:
LOCATE [row][,col]
LOCATEXY [x_coord][,y_coord]

Текстовые данные выводятся в текущую позицию пера. Координаты пера соответствуют левому верхнему углу выводимых данных.
LOCATE устанавливает позицию пера, соответствующую курсору в колонке col строки row. Нумерация столбцов и строк начинается с 1.
Если какой то из аргументов опущен, соответствующая координата пера не поменяется.
Координаты пера при использовании оператора LOCATE зависят от выбранного оператором FONT размера шрифта.

Оператор LOCATEXY оперирует экранными координатами и явно устанавливает координаты пера не зависимо от размера шрифта. При этом для функций POS и CSRLIN вычисляется максимально близкая позиция курсора.


PRINT - вывод текстовой информации.

Синтаксис: PRINT [list of expressions][;].....
Если список выражений опущен, отображается пустая строка. 

Если в операторе присутствуют выражения, отображаются значения выражений. Выражения в списке могут быть числовыми и/или строковыми выражениями, разделенными запятыми, пробелами или точками с запятой. Строковые константы в списке должны быть заключены в двойные кавычки.
После выполнения оператора PRINT перо перемещается в следующую позицию вывода текста, а именно - в левый верхний угол этой позиции.

G-BASIC делит строку на зоны печати по 8 символов.
Позиция каждого напечатанного элемента определяется пунктуацией, используемой для разделения элементов в списке:
Запятая (,) указывает на позицию начала следующей 8-символьной зоны;
Точка с запятой (;) указывает на позицию сразу после последнего значения;
Пробел(ы) - указывают на позицию сразу после последнего значения.

Если запятая, точка с запятой, функция SPC или TAB заканчивают список выражений, перевод строки не выполняется и следующая инструкция PRINT начинает печать с той же позиции, где закончилась предыдущая печать. 

Если список выражений заканчивается без запятой, точки с запятой, функций SPC или TAB, в конце строки помещается возврат каретки (G-BASIC помещает позицию печати в начало следующей строки). 

Если при печати позиция достигает конца строки, печать продолжается с новой строки. Если печать достигла последней строки, она продолжится с первой строки без скроллинга изображения.

См. функции SPC и TAB


PRINT USING - форматированный вывод.

Синтаксис: PRINT USING format_expression;list of expressions[;]
format_expression - строковое выражение или переменная, содержащая литералы форматирования.

Литералы определяют поле и формат печатаемых строк или чисел.
Литералы для вывода строк:
"!" - печатает только первый символ выражения
"\n пробелов\" - печатает n+2 символов выражения. Если выражение короче - дополняется пробелами справа.
"&" - печатает выражение как оно есть.

Литералы для выода числовых значений:
"#.#" - печать числа по формату. Количество # определяет число знаков до и после десятичной точки. В зависимости от количества # дробная часть либо округляется, либо дополняется нулями до нужной длины. Целая часть дополняется пробелами слева. Если число длиннее формата - выводится полностью. Если точки нет, печатается только целая часть.
"+" - знак плюс в начале или в конце строки формата приводит к тому, что знак числа (плюс или минус) печатается до или после числа.
"-" - знак минус в конце поля формата приводит к тому, что отрицательные числа печатаются со знаком минус в конце.
"**" перед форматом числа дополняет символами "*" слева целую часть числа до заданной длины, при этом "**" в формате расцениваются как "##"
"$$" - двойной знак доллара в начале строки формата приводит к тому, что знак доллара печатается непосредственно слева от отформатированного числа. "$$" расценивается как еще две позиции цифр "##", одна из которых является знаком доллара. Экспоненциальный формат нельзя использовать с "$$". Отрицательные числа нельзя использовать, если только не указано расположение знака минус справа от выводимого значения.
"**$" в начале строки формата сочетает в себе действие двух вышеуказанных символов: ведущие пробелы заполняются звездочками, а перед числом печатается знак доллара. При этом "**$" расценивается как три позиции цифр "###", одна из которых является знаком доллара.
"^^^^" - последовательность может быть помещена после символов позиций цифр, чтобы указать необходимость вывода числа в экспоненциальном формате. Последовательность определяет позицию вывода порядка числа "E+xx". В формате может быть указана любая позиция десятичной точки. Значимые цифры выравниваются по левому краю, а показатель степени корректируется. Если не указан начальный "+" или конечный "+" или "-", одна позиция "#" используется слева от десятичной точки для печати пробела или знака минус.
"_" Подчеркивание в строке формата приводит к тому, что следующий символ выводится как литеральный символ.


Ввод текстовой информации.

Поскольку консоль не имеет полноценного устройства ввода, в G-BASIC отсутствует оператор ввода INPUT. 

Обработка нажатий кнопок консоли производится при помощи функций INKEY$ и PRESSED.


Вывод графической информации.

Операторы CLS, COLOR и COLOR565 были описаны ранее, в описании операторов вывода.

Все графические примитивы, у которых есть аргумент, задающий цвет, оперируют со стандартной 16-цветной палитрой.

Для задания одного из 65536 цветов необходимо пользоваться оператором COLOR565 и опускать задание цвета в графических операторах.


PSET, PRESET - отображение точки в указанном месте на экране.

Синтаксис:
Абсолютная форма:
PRESET (x,y)[,color]
PSET (x,y)[,color]

Относительная форма:
PRESET STEP (x,y)[,color]
PSET STEP (x,y)[,color]

При выполнении перо помещается в координаты x,y (для абсолютной формы) или смещается на x,y (для относительной формы).
Далее, если задан цвет color, пикселю на экране с координатами пера присваивается заданный цвет.
Если цвет не задан, то оператор PSET присваивает пикселю текущий цвет пера, а PRESET - цвет фона.


LINE - линия или прямоугольник.

Синтаксис: LINE [(x1,y1)]-(x2,y2) [,[color][,B[F]]]
Отрисовка линии из точки x1,y1 в точку x2,y2. После отрисовки перемещение координат пера в точку x2,y2.
Если координаты x1,y1 не заданы, линия рисуется из текущей позиции пера до точки x2,y2.
Если задан параметр color, то линия рисуется заданным в параметре цветом. Иначе линия рисуется текущим цветом пера.
Если после цвета задан атрибут B или BF, то рисуется не линия, а прямоугольник (B) или закрашенный прямоугольник (BF) с точками (x1,y1) и (x2,y2) в противоположных углах.
Если параметр color не задан, перед B или BF необходимо использовать две запятые.


CIRCLE - окружность

Синтаксис: CIRCLE (xcenter, ycenter), radius [,color]
Рисуется окружность с центром в точке x, y с заданным радиусом.
Если параметр color задан - окружность рисуется с заданным в параметре цветом. Иначе окружность рисуется текущим цветом пера.
После отрисовки окружности перо перемещается в точку (x,y).


PUT - вывод сохраненного в массиве спрайта на дисплей.

Синтаксис: PUT (x, y), array
x, y - координаты левого верхнего угла спрайта.
array - двумерный целочисленный массив с данными спрайта.
Размер спрайта определяется размерностью массива. Каждый элемент массива отвечает за 16-битный цвет соответствующего пикселя спрайта.
Спрайт может быть сгенерирован программно, загружен из операторов DATA или из файла.


PLOAD - загрузка спрайта из файла в целочисленный массив.

Синтаксис: PLOAD array_name, filename
array_name - заранее объявленный двумерный целочисленный массив.
filename - имя файла с изображением в формате 16-битного цвета, подготовленное утилитой Img2GBasicRGB.
Имя файла может быть либо абсолютное, либо задано относительно файла программы.
Размер изображения в файле должен соответствовать размеру массива. Следует помнить, что индексы массивов всегда начинаются с 0.


PDRAW - отрисовка изображения непосредственно из файла.

Синтаксис: PDRAW (x,y), filename
x,y - координаты левого верхнего угла выводимого изображения.
filename - имя файла с изображеним в формате 16-битного цвета, подготовленное утилитой Img2GBasicRGB.
Имя файла может быть либо абсолютное, либо задано относительно файла программы.


Хранение констант в тексте программы.

DATA - оператор хранения константных данных для их чтения оператором READ.

Синтаксис: DATA constants
constants - это строковые константы, заключенные в двойные кавычки и числовые константы в любом формате (с фиксированной точкой, с плавающей запятой или целым числом), разделенные запятыми. В списке не допускаются никакие выражения.

В программе допускается любое количество операторов DATA в любо месте программы. Данные операторы не выполняются и не влияют на ход выполнения программы.


READ - чтение констант, заданных операторами DATA

Синтаксис: READ list_of_variables
Оператор READ обращается к операторам DATA по порядку их следования в программе.
Содержащиеся в них данные можно рассматривать как один непрерывный список элементов, независимо от того, сколько элементов находится в каждом операторе или где эти операторы расположены в программе. Тип переменной (числовой или строковый), указанный в операторе READ, должен совпадать с соответствующей константой в операторе DATA, в противном случае возникает ошибка «Несоответствие типов».
Исключение - чтение числовой константы в строковую переменную. В этом случае происходит преобразование числа в строку аналогично функции STR$.

Операторы DATA можно перечитать с самого начала или с указанного места с помощью оператора RESTORE.


RESTORE - Восстановление указателя на константы операторов DATA для повторного чтения данных оператором READ.

Синтаксис: RESTORE [label]
Если указана метка label, следующая инструкция READ обратится к первому элементу оператора DATA, расположенного после метки в тексте программы. Если метка не указана, следующая инструкция READ обратится к первому элементу самого первого оператора DATA.


Случайные числа. 

Генератор псевдослучайных чисел (ГПСЧ) - математическая функция, которая генерирует последовательность практически случайных чисел. Эта последовательность чисел конечна, но период ее повторения очень большой. Последовательность чисел, создаваемая ГПСЧ, зависит от числа, которым инициализируется генератор. При инициации ГСПЧ одним и тем же числом генератор будет выдавать одну и туже последовательность чисел.

RANDOMIZE - инициализация ГПСЧ

Синтаксис: 
RANDOMIZE expression
RANDOMIZE TIMER
RANDOMIZE expression - инициализация ГПСЧ результатом выражения.
Это позволяет отлаживать программы на одной и той же последовательности псевдослучайных чисел.
RANDOMIZE TIMER - инициализация ГПСЧ значением системного таймера. 

См. так же функцию RND


Воспроизведение звука.

BEEP - Звуковой сигнал частотой 800 Гц длительностью 1/4 сек.
Оператор аргументов не имеет.
Громкость звука зависит от оператора PLAY.


SOUND - звуковой сигнал заданной частоты и длительности.

Синтаксис: SOUND freq,duration
Частота freq - от 37 до 32767 Гц.
Длительность duration в оригинальном GW-BASIC - это количество тиков системного таймера, следующих с частотой 18.2 Гц.
В G-BASIC такой расчет длительности оставлен для совместимости. Каждая единица duration соответствует времени 55 мс.
Звук воспроизводится на переднем или заднем плане в зависимости от оператора PLAY.
Громкость звука так же зависит от оператора PLAY.


PLAY - воспроизведение мелодий 

Синтаксис: PLAY string_expression
string_expression может состоять из следующих элементов:

A-G[#,+,-] - A-G - это ноты. "#" или "+" после ноты означает диез; "-" означает бемоль.
Любая нота, за которой следует #, + или -, должна относиться к черной клавише на фортепиано.

Ln - Устанавливает длительность каждой ноты. L4 - четверть ноты, L1 - целая нота и так далее. n может быть от 1 до 64. Длина может также следовать за нотой, чтобы изменить длительность только для этой ноты. A16 эквивалентна L16A.

MF - Музыкальный передний план. Операторы PLAY и SOUND должны выполняться на переднем плане. То есть, каждая последующая нота или звук не запускается, пока не закончится предыдущая нота или звук. При этом программа ожидает окончание выполнения операторов PLAY и SOUND. Это начальное значение по умолчанию.
MB - Музыкальный задний план. Операторы PLAY и SOUND должны выполняться в фоновом режиме. То есть, каждая нота или звук помещаются в буфер, позволяя программе BASIC продолжать выполнение, пока музыка играет в фоновом режиме. Одновременно в фоновом режиме может проигрываться последовательность до 32 нот.

MN - Нормальный стиль музыки. Каждая нота играет семь восьмых времени, определяемого L (длиной).
ML - Стиль легато. Каждая нота играет полный период, заданный L.
MS - Стиль стаккато. Каждая нота играет три четверти времени, определенного L.

Nn - Играть ноту n. n может варьироваться от 0 до 84. В 7 возможных октавах есть 84 ноты.
n, равное 0, означает паузу. 1 соответствует ноте До контр-октавы.

On - Выбор октавы. Существует 7 октав (от 0 до 6). По умолчанию - 4. Среднее До находится в начале октавы 3.
Номера октав: 0 - контр-октава, 1-большая, 2-малая, 3,4,5,6 - первая, вторая, третья и четвертая октавы.

Pn - Пауза. P может находиться в диапазоне 1-64.

Tn - Темп, задает количество тактов L4 в минуту. n может находиться в диапазоне 32-255. По умолчанию - 120.

. (точка) - Точка после ноты добавляет ко времени воспроизведения ноты еще 1/2 ее текущей длительности. После ноты может стоять несколько точек, и время воспроизведения увеличивается  на 1/2 от уже установленной длительности. Точки могут также появляться после P (паузы) и увеличивать длительность паузы, как описано выше.

>n - Символ "больше, чем", предшествующий ноте n, воспроизводит ноту в следующей более высокой октаве.

<n - Символ "меньше, чем", предшествующий ноте n, воспроизводит ноту в следующей более низкой октаве.

Vn - Установка громкости звучания нот. n может варьироваться от 0 до 7: 0 - тишина, 7 - макс. громкость

Так же см. функцию PLAY(X).


Работа с файлами.

Функционал работы с файлами в G-BASIC отличается от принятого в GW-BASIC. Он сильно упрощен.
Поскольку ОЗУ в консоли ограничено, место выделено только для трех файловых дескрипторов. Т.е. одновременно можно открыть только 3 файла.  Загрузка изображений в массив или вывод изображения из файла на дисплей так же используют один из свободных дескрипторов, это нужно учитывать при работе с файлами.

FOPEN - открытие файла

Синтаксис: FOPEN fnumber, filename [, mode]
fnumber - номер открываемого файла, числовая константа или выражение, результат которого округляется до целого числа, должно быть в диапазоне от 1 до 3 (соответствует одному из файловых дескрипторов).
filename - имя файла, текстовая константа или выражение. Имя файла может быть либо абсолютное, либо задано относительно файла программы.
mode - режим доступа к файлу, одно из четырех зарезервированных слов: READ, WRITE, APPEND, RANDOM.

READ - открытие файла в режиме только чтение, указатель чтения устанавливается в начало файла. Если файл не существует, возникает ошибка.
WRITE - открытие файла в режиме только записи. Указатель устанавливается в начало файла. Если файл существует - он усекается до нулевой длины. Если файл не существует - он будет создан.
APPEND - открытие файла в режиме только записи, указатель записи устанавливается в коней файла. Если файл не существует - он будет создан.
RANDOM - открытие файла в режиме произвольного доступа - чтение и запись. Если файл не существует - он будет создан.

Если режим доступа не указан, используется режим READ.


FCLOSE - закрытие ранее открытого файла.

Синтаксис: FCLOSE [fnumber]
Выполняется закрытие ранее открытого файла.
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
Если файл не открыт - никакой ошибки не возникает.
Если номер не задан, закрываются все открытые файлы.


FSEEK - установка указателя чтения/записи на определенную позицию в файле

Синтаксис: FSEEK fnumber, seek_pos
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
seek_pos - новая позиция указателя чтения/записи в файле, числовая константа или выражение, не должна превышать текущий размер файла.
Позиция чтения/записи - это номер байта, с которого будет осуществляться следующее чтение или запись данных. Нумерация байт в файле начинается с нуля.


FREAD$ - чтение строки из текстового файла

Синтаксис: FREAD$ fnumber, string_var
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
Производится чтение строки из файла в строковую переменную string_var.
Признаком конца строки является пара символов CR+LF с кодами 13 и 10. Одиночный символ CR так же считается концом строки.
Если строка в файле более 255 символов, будет прочитано только 255 символов. Продолжение строки будет прочитано при следующем вызове FREAD$.


FWRITE$ - запись строки в текстовый файл

Синтаксис: FREAD$ fnumber, string_var
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
Производится запись строки из переменной string_var в файл. После записи строки в файл автоматически записываются символы перевода строки CR+LF.


FREAD - чтение блока данных из файла в числовой массив

Синтаксис: FREAD fnumber, numeric_arr, count
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
numeric_arr - объявленный массив любого числового типа
count - число байт для чтения. Должно быть не менее 1 и не более размера ОЗУ, занятого массивом.

Элемент массива байтовых переменных занимает 1 байт, массива целочисленных переменных - 2 байта, массива вещественных переменных - 4 байта.
Чтение данных никак не учитывает тип переменных массива и просто заполняет count байт ОЗУ, отведенного под массив, начиная с самого первого элемента массива. Если число читаемых байт не будет кратно размеру переменной массива, то в последней переменной данные, прочитанные из файла, комбинируются с предыдущим значением переменной в соответствии с внутренним представлением переменных.


FWRITE - запись блока данных из числового массива в файл

Синтаксис: FWRITE fnumber, numeric_arr, count
fnumber - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
numeric_arr - объявленный массив любого числового типа
count - число байт для записи. Должно быть не менее 1 и не более размера ОЗУ, занятого массивом.

Запись данных никак не учитывает тип переменных массива и просто сохраняет в файл count байт ОЗУ, отведенного под массив, начиная с самого первого элемента массива. 


KILL - удаление файла

Синтаксис: KILL filename
filename - имя файла, текстовая константа или выражение. Имя файла может быть либо абсолютное, либо задано относительно файла программы.
Производится удаление файла. Файл должен существовать и быть закрыт.


RUN - запуск программы с диска

Синтаксис: RUN filename
filename - имя файла ранее скомпилированной программы, текстовая константа или выражение. Имя файла может быть либо абсолютное, либо задано относительно файла программы.

Возможен запуск и выполнение только ранее скомпилированной программы - файл с разрешением .bbc

Перед загрузкой новой программы выполняется закрытие всех открытых файлов, остановка воспроизведения всех мелодий, выключение перехвата ошибок. После этого старая программа выгружается из ОЗУ консоли.
Далее выполняется загрузка исполняемого файла в ОЗУ, проверка его контрольной суммы. При успешной загрузке управление передается загруженной программе.

При ошибке загрузки возникает ошибка и работа прерывается. Данные ошибки не перехватываются оператором ON ERROR, поскольку старая программа в ОЗУ уже отсутствует и при возникновении ошибки управление в нее передать невозможно.


Перехват и обработка ошибок.

ON ERROR GOTO - включене/выключение перехвата ошибок

Синтаксис:
ON EROORO GOTO label - включение перехвата ошибок
ON EROORO GOTO 0 - выключение перехвата ошибок
Если перехват ошибок включен, то при возникновении любой ошибки во время выполнения программы управление передается по метке label, в подпрограмму обработки ошибок.
Выход из подпрограммы обработки ошибок производится оператором RESUME.
Если внутри подпрограммы обработки ошибок возникнет любая ошибка - выполнение программы прервется.

См. функции ERR и ERL


RESUME - возврат из подпрограммы обработки ошибок.

Синтаксис:
RESUME  - возврат управления тому же оператору, при выполнении которого возникла ошибка
RESUME 0 - то же, что и просто RESUME
RESUME NEXT - возврат управления на следующий за вызвавшим ошибку оператор
RESUME label - передача управления в конкретную точку программы


ERROR - вызов ошибки

Синтаксис: ERROR expression
expression - числовая константа или выражение, результат которого округляется до целого числа, должно быть в диапазоне от 1 до 255.
При выполнении оператора имитируется возникновение ошибки с кодом, определяемым выражением.
Ошибки с кодами от 1 до 36 - стандартные ошибки G-BASIC, перечислены в приложении. Коды 37 и выше предназначены для пользовательских ошибок.


Управление аппаратными возможностями консоли.

TURBO - управление скоростью процессора консоли

Синтаксис: TURBO expression 
expression - числовая константа или выражение, результат которого округляется до целого числа, должно быть в диапазоне от 0 до 3.
Чем больше значение, тем быстрее работает процессор консоли, но при этом и выше потребление энергии от аккумулятора.
По умолчанию при запуске программ устанавливается минимальная скорость работы процессора.


LIGHT - управление яркостью подсветки дисплея консоли

Синтаксис: LIGHT expression 
expression - числовая константа или выражение, результат которого округляется до целого числа, должно быть в диапазоне от 0 до 15.
0 - подсветка выключена полностью, 15 - максимальная яркость подсветки.
По умолчанию при запуске программ включается максимальная яркость подсветки.


VIBRO - включение вибромотора консоли на заданное время

Синтаксис: VIBRO expression 
expression - время работы вибромотора в миллисекундах, числовая константа или выражение, результат которого округляется до целого числа, должно быть в диапазоне от 0 до 4095.
На время работы вибромотора работа программы не прерывается.
При повторном вызове оператора таймер работы вибромотора переопределяется новым значением. Если значение равно нулю - вибромотор выключается.


Функции.

Математические функции.

ABS(X) - функция возвращает -X, если X отрицательное , или X в противном случае

CINT(X) - функция округляет X до целого числа по правилам округления. Если результат выходит за пределы -32768..32767 - возникает ошибка.

INT(X) - функция возвращает ближайшее целое число, меньшее X.

FIX(X) - функция отбрасывает дробную чаасть числа, усекая его до целого.

SGN(X) - функция возвращает -1, если X<0; 1, если X>0; иначе функция вернет 0.

ATN(X) - функция возвращает арктангенс X. Результат-  значение угла в радианах.

TAN(X) - функция возвращает тангенс X. Значение X - в радианах.

COS(X) - функция возвращает косинус X. Значение X - в радианах.

SIN(X) - функция возвращает синус X. Значение X - в радианах.

EXP(X) - функция возвращает e в степени X (e - основание натурального логарифма). Значение X не должно превышать 88.029.

SQR(X) - функция возвращает квадратный корень из X. X не должен быть отрицательным.

LOG(X) - функция возвращает натуральный логарифм X. X должен быть больше нуля.

RND[(X)] - функция генерации случайных чисел. Если аргумент функции не указан или больше нуля, функция возвращает следующее случайное (псевдослучайное) число из последовательности ГСПЧ. Если аргумент равен нулю, функция повторяет последнее значение.

Преобразования

ASC(X$) - функция возвращает код ASCII первого символа строки X$. Если строка пустая - возникает ошибка.

CHR$(X) - функция возвращает строку из одного символа, соответствующего ASCII-коду X. Если X больше 255 или меньше 0 - возникает ошибка.

HEX$(X) - функция возвращает строку, соответствующую 16-ричному представлению значения числа X. X должен быть в пределах -32768..65535.

STR$(X) - функция возвращает преобразованное в строку значение X.

VAL(X$) - функция возвращает числовое значение, записанное в строке X$. Пробелы и символы табуляции в строке игнорируются. Если первый символ строки нечисловой, функция вернет 0.

Функции работы со строками.

LEFT$(X$,N) - функция возвращает не более N крайних левых символов строки X$.

RIGHT$(X$,N) - функция возвращает не более N крайних правых символов строки X$.

MID$(X$,N [,M]) - функция возвращает не более M символов, начиная с позиции N строки X$.
Если M не задано, возвращается подстрока, начиная с символа N.
N должно быть в пределах 1 .. 255, M - в пределах 0 .. 255.

INSTR([N,] X$, Y$) - функция возвращает позицию вхождения строки Y$ в строке X$.
Поиск производится с символа N или, если N не задан, с первого символа.
N, если задан, должен быть в пределах 1 .. 255.

LEN(X$) - функция возвращает длину строки X$

SPACE$(X) - функция возвращает строку из X пробелов. X должен быть в пределах 0 .. 255

STRING$(X, N) - функция возвращает строку из X символов, соответствующих ASCII-коду N. X и N должны быть в пределах 0 .. 255

STRING$(X, Y$) - функция возвращает строку из X символов, соответствующих первому символу строки Y$. Строка не должна быть пустая. X должен быть в пределах 0 .. 255.

Функции ввода-вывода

POS(X) - функция возвращает позицию курсора в строке. Нумерация позиций в строке начинается с 1. X - фиктивный аргумент. Может быть любой. Максимальное возвращаемое значение зависит от текущего размера шрифта - см. оператор FONT.

CSRLIN - функция возвращает номер строки, в которой находится курсор. Нумерация строк начинается с 1. Максимальное возвращаемое значение зависит от текущего размера шрифта - см. оператор FONT.

SPC(X) - функция пропускает (печатает пробелы) X символов в операторе PRINT. X должен быть в пределах 0 .. 255. Если X больше ширины экрана, будет использован остаток от деления X на ширину экрана. Функция может использоваться только внутри оператора PRINT.

TAB(X) - функция пропускает (печатает пробелы) до указанной позиции X в операторе PRINT. Нумерация позиций в строке начинается с 1. Если текущая позиция курсора больше X, функция перейдет в эту позицию на следующей строке. X должен быть в пределах 1 .. 255. Максимальная адресуемая позиция зависит от текущего размера шрифта - см. оператор FONT. Функция может использоваться только внутри оператора PRINT.

INKEY$ - если в процессе выполнения программы бвла нажата какая либо кнопка консоли, функция вернет строку с символом, соответствующим этой кнопке. В противном случае функция вернет пустую строку.

Соответствие кнопок консоли и возвращаемых символов.
Вверх - символ "U"
Влево - символ "L"
Вниз - символ "D"
Вправо - символ "R"
Кнопка A - символ "A"
Кнопка B - символ "B"
Кнопка S - символ "S"
Кнопка P(power) - символ "P"

PRESSED - функция возвращает состояние кнопок. Нажатой кнопке соответствует одна из числовых констант, не нажатой - 0. Возвращается сумма этих констант.

Соответствие кнопок консоли и числовых констант:
Вверх - 1
Влево - 2
Вниз - 4
Вправо - 8
Кнопка A - 32
Кнопка B - 16
Кнопка S - 64
Кнопка P(power) - 128

Файловые функции

LOC(file_number) - Функция возвращает текущую позицию чтения-записи в файле.
file_number - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.
Позиция чтения/записи - это номер байта, с которого будет осуществляться следующее чтение или запись данных. Нумерация байт в файле начинается с нуля.

LOF(file_number) - Функция возвращает текущий размер файла в байтах.
file_number - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.

EOF(file_number) - Функция возвращает -1 (истина), если указатель чтения-записи достиг конца файла. Если указатель не достиг конца файла - возвращается 0 (ложь).
file_number - номер открытого файла, числовая константа или выражение, результат которого округляется до целого числа, должен быть в диапазоне от 1 до 3.

Функции для обработки ошибок

ERL - Функция возвращает номер строки, в которой возникла ошибка. Функция работает только внутри обработчика ошибок. В других местах программы функция возвращает 0.

ERR - Функция возвращает код возникшей ошибки. Функция работает только внутри обработчика ошибок. В других местах программы функция возвращает 0.

Другие функции.

PLAY(X) - функция возвращает число нот, находящихся в очереди при фоновом воспроизведении музыки. X - фиктивный аргумент, может быть любым.

TIMER - функция возвращает вещественное число одинарной точности, содержащее количество секунд, прошедшее с полуночи. Миллисекунды пересчитываются в дробную часть значения.

MAKE565COLOR(R,G,B) - функция возвращает целое число - значение 16-битного цвета в формате RGB565, по значениям трех компонент R, G и B.
R, G и B должны быть в диапазоне 0 .. 255.
Функция предназначена для совместной работы с оператором COLOR565 либо для работы со спрайтами в массивах.

Коды ошибок.

1 - No memory for compiler - нет памяти для размещения данных компиляции.

2 - The maximum source lines is reached - достигнуто максимальное количество строк исходного файла (65535).

3 - Program size limit is reached - длинапрограммы достигла ограничения памяти программ

4 - Syntax error - ошибка синтаксиса.

5 - Out of memory - недостаточно памяти для размещения массива или строки

6 - Array not defined - попытка обращения к необъявленному массиву

7 - Subscript out of range - некорректное количество индексов при работе с массивом

8 - Type mismatch - несоответствие типов операндов

9 - Duplicate definition - повторное объявение массива 

10 - Too many dimensions - число индексов массива превышает допустимое

11 - Label not found - в тексте программы есть обращение к отсутствующей метке

12 - Duplicate label - в тексте программы втречено повторное объявление метки

13 - Line too complex - ограничение синтаксического анализатора компилятора. Строку необходимо разделить на две.

14 - String too long - строковая константа либо результат слияния строк превышают 255 символов.

15 - NEXT without FOR - Встречен оператор NEXT без предшествующего FOR

16 - FOR without NEXT - для объявленного FOR не найден соответствующий NEXT

17 - WEND without WHILE - Встречен оператор WEND без предшествующего WHILE

18 - WHILE without WEND - для объявленного WHILE не найден соответствующий WEND

19 - END IF without IF - Встречен оператор END IF без предшествующего IF

20 - IF without END IF - для объявленного IF не найден соответствующий END IF

21 - Many nested GOSUB - слишкм много вложенных вызовов подпрограммы

22 - RETURN without GOSUB - встречен оператор RETURN вне выполнения подпрограммы

23 - RESUME without ERROR - встречен оператор RESUME вне обработчика ошибок

24 - No RESUME - если достигнут конец программы (без оператора END) при выполнении обработчика ошибок

25 - Illegal function call - некорректный вызов функции - один или более аргументов функций или операндов операторов имеет недопустимое значение

26 - Overflow - значение результата выражения выходит за допустимые пределы 

27 - Division by zero - на ноль делить нельзя

28 - Out of DATA - попытка чтения данных оператором READ, когда данные в операторах DATA отсутствуют либо уже все прочитаны

29 - Bad array subscripts for image - некорректное количество индексов в массиве для чтения спрайта в массив из файла 

30 - Bad image format - некорректный формат файла с изоюражением. Файл должен быть с изображеним в формате 16-битного цвета, подготовленный утилитой Img2GBasicRGB.

31 - Bad file number - некорректный номер файла. Номер должен быть от 1 до 3.

32 - File open error - ошибка открытия файла.

33 - File read error - ошибка при чтении файла.

34 - File write error - ошибка при записи в файл.

35 - Unable to delete file - Ошибка при удалении файла.

36 - File seek error - ошибка при позиционировании указателя чтения/записи в файле.

©2022, 2023 by GoldenAndy & Fluffy

Комментариев нет:

Отправить комментарий

======= !!! ВНИМАНИЕ !!! ======================================================================
Гугл умный и боится спама. Поэтому иногда ваши комментарии Гугл отправляет мне на премодерацию. Отправлять или нет - решаю не я, а алгоритмы Гугла. Если ваш комментарий не появился сразу, значит я получу уведомление и опубликую ваш комментарий через некоторое время. Я стараюсь это делать достаточно оперативно.