MBASIC
Реализация языка программирования BasicMBASIC — это реализация диалекта Microsoft BASIC языка программирования BASIC для операционной системы CP/M, работающий на 8-битных процессорах Intel 8080. MBASIC это потомок оригинального интерпретатора Altair BASIC являющегося одним из первых продуктов компании Microsoft. MBASIC был одной из двух версий BASIC связанных с компьютером Osborne 1. Название “MBASIC” закрепилось за данной реализацией от названия файла интерпретатора BASIC.
Окружающая среда
Версия MBASIC 5 требовала систему CP/M, не менее 28 Кб оперативной памяти (RAM) и дисковод.
В отличие от версий BASIC Microsoft 80, которые настраивались изготовителями домашних компьютеров для использования специфических аппаратных возможностей компьютера, MBASIC полностью полагался на операционную систему CP/M, запрашивая весь ввод и вывод. MBASIC были доступны только консоль CP/M, устройство печати, дисковые устройства.
MBASIC в ненастроенной форме не имел никаких функций для работы с графикой, цветами, джойстиками, мышкой, передачей данных, работы с сетью, звуком и даже функции для работы с часами реального времени. MBASIC на поддерживал в полном объеме возможности операционной системы CP/M, например, он не поддерживал области пользователей CP/M. Так как системы CP/M были однопользовательскими и автономными, не существовало методов блокирования файлов и не могло быть и речи о многозадачном режиме работы. Несмотря на эти ограничения MBASIC считался мощной и полезной реализацией BASIC.
Особенности
MBASIC является интерпретатором. Исходный код программ сохранялся в памяти с заменой ключевых слов BASIC однобайтовыми лексемами, которые сохранялись в памяти и ускоряли исполнение программы. Программы можно было отображать на экране для редактирования или сохранения в сжатом двоичном формате или в ASCII тексте. Каждая линия программы идентифицировалась числом, которое могло использоваться как адресат в команде GOTO. Однако редактирование исходного кода путем перемещения курсора не было доступно из–за ограничений операционной системы.
Исходный код программы, переменные, дисковые буфера и операционная система CP/M должны были совместно использовать 64-килобайтное адресное пространство процессора 8080. Обычно после запуска MBASIC оставалось менее 32 Кб доступных для программы и данных даже на машинах, оборудованных 64 Кб оперативной памяти. Для обеспечения запуска больших и более сложных программ более поздние версии MBASIC поддерживали функции, которые позволили читать и исполнять частями программу (CHAIN
и MERGE
). Однако так и не была введена поддержка исполнения команд оболочки, однако эта возможность могла быть реализована программистом.
Данные могли считываться и записываться на диске как последовательные файлы или как файлы произвольного доступа с фиксированной длиной записи, данная возможность могла использоваться для организации подобия базы данных.
Поддерживаемые типы данных MBASIC:
- 8-битовные символьные данные в строках длиной от 0 до 255 символов
- 16-битные целые числа
- 32-битные числа с плавающей точкой (одинарной точности)
- 64-битные числа с плавающей точкой (двойной точности)
Операции со строками включали извлечение подстроки, соединение строк, присваивание и проверку на равенство.
MBASIC поддерживал массивы до седьмой размерности, но не имел функций для их обработки (например, отсутствовало присваивание массивов).
В отличие от некоторых реализаций BASIC того времени, MBASIC не имел поддержки операций с матрицами, комплексными числами, десятичными числами (BCD) для финансовых операций.
Все операции с числами с плавающей точкой имели программную реализацию, так как система CP/M не имела аппаратных средств работы с числами с плавающей точкой. Встроенные математические функции (синус, косинус, тангенс, десятичный логарифм, экспонента, квадратный корень) обеспечивали результат с одинарной точностью. Генератор псевдослучайных чисел основывался на нажатых клавишах пользователем.
Преимуществом MBASIC были полные сообщения об ошибках, которые предусматривали ошибки синтаксиса и ошибки времени исполнения программы. MBASIC также имел функцию для трассирования программы, которая отображала номера интерпретируемых строк, эта функция была полезна для обнаружения ошибок в логике программы (например, зацикливание).
Порядок работы программы обеспечивался условными операторами IF...THEN... ELSE...
, циклами WHILE...WEND
, и командами GOTO
, GOSUB
. Отсутствовал оператор выбора, хотя при помощи ON...GOTO...
можно было организовать многоуровневые переходы. Подпрограммы не имели параметров и как следствие все переменные были глобальными. MBASIC не способствовал развитию структурного программирования и было весьма просто написать запутанную программу.
Ранние реализации BASIC имели скудное ограничение в один или два символа в имени переменной, которое ограничивало выбор имени переменной в сложных программах. Версия MBASIC 5 позволяла давать имена переменным длиной до 40 символов длиной, что обеспечивало читаемые названия переменных.
PEEK, POKE и функции пользователя
Ни одно обсуждение BASIC конца 70-ых начала 80-ых не обходилось без обсуждения важности функций PEEK
и POKE
для прямого чтения/записи участков памяти. Ни одна система того времени не имела защиты памяти, что позволяло программисту обращаться к частям операционной системы или к функциям, к которым не возможно получить доступ иначе. Однако это приводило к неограниченным возможностям программ
Для обеспечения более сложных операций MBASIC позволял определять функции, которые можно было вызывать из программы. Они обычно размещались в зарезервированной области памяти или преобразовывались в строковые константы как последовательность машинных кодов. MBASIC также поддерживал аппаратные команды INP
, OUT
, которые считывают или записывают аппаратные порты ввода-вывода. Это могло использоваться для работы с периферийными устройствами.
Использование PEEK
, POKE
и машинных кодов приводило к непереносимости программами.
Наследники MBASIC
Microsoft также продавала компилятор BASIC для CP/M (BASCOM), который имел похожий исходный код как e MBASIC. Программа, отлаженная под MBASIC, могла быть откомпилирована при помощи BASCOM. И так как исходный код программы больше не находился в памяти и элементы времени исполнения компилятора были меньше чем у интерпретатора, то больший объем памяти стал доступен для данных пользователя. Скорость исполнения программ увеличилась на порядок.
Все функции MBASIC для CP/M были доступны в BASICA или GWBASIC на ПК IBM-PC, что уже обеспечивало определенную переносимость программ.
Значение MBASIC
MBASIC являлся весьма значимым инструментом разработки на протяжении всей эпохи 8-битовых компьютеров CP/M. Опытные пользователи могли реализовывать подпрограммы в MBASIC для автоматизирования задач. По крайней мере один компилятор языка высокого уровня был написан на MBASIC и множество игр и утилит объемом от нескольких строк до нескольких тысяч.
Примечание
MBASIC это также название коммерческого компилятора для микроконтроллеров Microchip Technology, который не связан с интерпретатором для CP/M.
Комментарии
]]>blog comments powered by Disqus
]]>