Введение

Диалект языка программирования BASIC

Vilnius BASIC, иногда известный как BK BASIC, — это диалект языка программирования BASIC, работающий на компьютерах Elektronika BK 0010 01/BK 0011M и UKNC. Он был разработан в Вильнюсском университете, расположенном в Литве, которая в то время являлась республикой Советского Союза. В отличие от большинства микрокомпьютерных диалектов BASIC того времени, которые были интерпретаторами, Vilnius BASIC был языком, выполняющим компиляцию и запуск, компилируя исходный код при вводе пользователем команды RUN. В остальном он был схож с GW BASIC и MSX BASIC по стилю и большинству функций, хотя ему не хватало некоторых мультимедийных команд, присутствующих в MSX. Одной из особенностей было то, что он не позволял размещать более одного оператора на одной строке, что обычно реализовывалось с помощью двоеточия. Также отсутствовала возможность одновременного открытия более одного файла данных. Полноэкранный редактор был только в версии для UKNC, а версии машин серии 0010 использовали редактор строк. Аппаратно-зависимые функции, такие как графические операторы, параметры и адреса PEEK/POKE, также различались между машинами.

Редактирование программы

В отличие от большинства диалектов BASIC того времени, Vilnius BASIC был системой компиляции и запуска, а не интерпретатором. Когда пользователь вводит код, компилятор считывает его и генерирует исполняемый код, организованный в виде цепочки команд, который затем запускается. Однако эта деталь оставалась в основном незаметной для пользователя, поскольку система по-прежнему позволяла вводить операторы без номера строки для непосредственного режима, или с номером строки для косвенного режима, в этом случае новая строка добавлялась в программу или заменяла строку с тем же номером, если она уже существовала. К концу 1970-х годов большинство диалектов BASIC для микрокомпьютеров предлагали полноэкранный редактор, в котором пользователь мог использовать клавиши управления курсором для навигации по программе и внесения изменений в любую видимую строку кода. Системы Electronica эмулировали PDP 11 – компьютеры, созданные в эпоху, когда терминалы с возможностью позиционирования курсора еще не были широко распространены, и поэтому сохраняли более старый стиль редактора строк. В этих системах отображалась командная строка, позволяющая пользователю вводить одну строку кода или восстанавливать ранее введенную строку для последующего редактирования непосредственно в ней.

Команды и инструкции

Список ключевых слов, поддерживаемых в Вильнюсе, можно разделить на две группы: те, которые могут использоваться только в прямом режиме, и те, которые могут быть прямыми или косвенными. Первые, известные как команды, включали стандартные загрузку и сохранение программ на кассету, автоматическое включение нумерации строк, перенумерацию строк в текущей программе и удаление диапазонов строк, используя тот же формат "to", что и в команде LIST; например, команда удаляла все строки от начала программы и до строки 200 включительно. Примитивы Вильнюса были схожи с другими BASIC того времени и поддерживали большинство элементарных операторов, таких как. В отличие от большинства диалектов, Вильнюс не допускал более одного оператора на строку.

Числовые переменные, операторы и функции

Как и в большинстве диалектов, имена переменных должны были начинаться с буквы и могли содержать другие буквы или цифры. Имена переменных могли быть любой длины, но в памяти сохранялись и сравнивались только первые два символа, то есть ввод за ним приводил к тому, что в памяти создавалась одна переменная PR со значением 5. Vilnius BASIC поддерживал четыре основных типа данных: строки, числа с плавающей точкой одинарной и двойной точности, а также целые числа. Если не указано иное, переменные считались двойной точности, хранились в восьми байтах и обеспечивали точность около 17 знаков. Для сравнения, большинство диалектов MS использовали 5-байтовый формат для чисел с плавающей точкой. Если к имени переменной добавлялся суффикс , значение хранилось в одинарной точности, используя четыре байта и обеспечивая точность около 7 знаков. указывало на целое число, используя одно 16-битное слово для хранения значений в диапазоне от -32768 до +32767. Если переменной с меньшей точностью присваивалось значение с большей точностью, избыток просто отбрасывался; в результате A% получит значение 1. Числовые константы в исходном коде также можно было указать как определенный тип, используя те же обозначения; сохранит константу как целое число, или сохранит значение одинарной точности 0.05, а или сохранит то же значение в формате двойной точности по умолчанию. Vilnius также предоставлял возможность вводить числовые константы в виде строк в двоичной, восьмеричной или шестнадцатеричной системе счисления, добавляя к строке префикс и одну букву, обозначающую тип: B, O, H. Например, преобразует шестнадцатеричную строку H9A8B в эквивалентное десятичное значение 39563 и сохранит его в A. Операторы для числовых значений включали сложение , целочисленное деление и для получения остатка. Таким образом, возвращает 2, а возвращает 1. Числовые функции включают стандартную функцию . Также был предусмотрен оператор , аналогичный , но всегда округляющий в сторону нуля, так что возвращает 1 вместо 2, как INT. В дополнение к PEEK и POKE, которые возвращали 16-битные значения, система также предлагала , которые были аналогичны, но применяли битовую маску к значениям, позволяя устанавливать или сбрасывать отдельные биты. очищал экран. Системные функции включают , которая возвращала объем свободной памяти, и , которая перемещала курсор в указанный столбец. работал аналогично TAB, но перемещал курсор в указанные координаты X,Y.

Струнки

Суффикс переменной с «$» указывал, что это строка. Стринговые функции включают в себя общие функции, такие как функция копирования заданной строки-шаблона, чтобы, например, получить строку из 17 символов «X». Включена только одна функция манипуляции – , которая работает аналогично MS, но также может использоваться для замены символов в существующей строке; например, заменит первую букву в строке A$ на Y. возвращает текущую нажатую клавишу, если таковая имеется. использовался для конкатенации строк, как и в большинстве диалектов. Функции возвращали строку, кодирующую переданное значение. Например, возвращает FF, а возвращает 0000000011111111.

Дополнения к графике

Системы Electronica включали поддержку компьютерной графики, а Vilnius BASIC – ряд операторов для работы с графикой. Одной из интересных особенностей этой системы было то, что координаты X и Y записывались в круглых скобках. Система запоминала последнюю указанную точку, и новые координаты можно было задавать относительно неё, например, если последняя команда рисования была в точке (100,100), то можно было изменить цвет пикселя в точке (105,105) на 3-й с помощью . Существовало пять цветовых значений, от 0 до 3. Помимо , можно было рисовать линии от точки к точке, используя пару координат, разделенных знаком минус, как в команде LIST, например, . В простейшем виде, принимала координаты центра, радиус и цвет. Она также могла рисовать дуги, задавая начальный и конечный углы в радианах, , и могла "сжимать" вертикальную ось для получения эллипса. выполняла заливку области, начиная с (100,100), заполняя её 3-м цветом и распространяясь наружу до тех пор, пока не встречала 1-й цвет. Наконец, была универсальная команда . Она принимала строку, кодирующую последовательность шагов рисования, позволяющую создать сложную фигуру в одной строке кода. Четыре основных направления обозначались U, D, L и R (вверх, вниз, влево, вправо). Углы в 45 градусов, по часовой стрелке, обозначались E (вверх-вправо), F, G и H (вверх-влево). Например, создавала квадрат со стороной 20 пикселей, начиная с последней нарисованной позиции. Помимо направлений, команда M могла использоваться для указания абсолютных координат, например, "M100,120", при этом круглые скобки не требовались. C меняет цвет, B перемещает курсор без рисования линии, а N восстанавливает координаты, которые были до команды DRAW. Существует одна графическая функция, , которая возвращает номер цвета пикселя в указанной точке экрана.