IBM Personal Computer Basic , обычно сокращаемый до IBM BASIC , — это язык программирования , впервые выпущенный IBM с IBM Personal Computer, Model 5150 (IBM PC) в 1981 году. IBM выпустила четыре различные версии интерпретатора Microsoft BASIC , лицензированные у Microsoft для PC и PCjr . Они известны как Cassette BASIC, Disk BASIC, Advanced BASIC (BASICA) и Cartridge BASIC. Версии Disk BASIC и Advanced BASIC были включены в IBM PC DOS до PC DOS 4. В дополнение к функциям стандартного ANSI BASIC , версии IBM предлагали поддержку графического и звукового оборудования линейки IBM PC. Исходный код можно было вводить с помощью полноэкранного редактора, и были предоставлены ограниченные возможности для элементарной отладки программ . IBM также выпустила версию компилятора Microsoft BASIC для PC одновременно с выпуском PC DOS 1.10 в 1982 году.
IBM лицензировала Microsoft BASIC для IBM Personal Computer, несмотря на то, что у нее уже была собственная версия BASIC для мэйнфреймов компании. Дон Эстридж сказал: «У Microsoft BASIC были сотни тысяч пользователей по всему миру. Как вы собираетесь с этим спорить?» [1]
IBM Cassette BASIC поставлялся с 32 килобайтами (КБ) постоянной памяти (ПЗУ), отдельной от 8 КБ BIOS ROM оригинального IBM PC, и не требовал операционной системы для запуска. Cassette BASIC предоставлял пользовательский интерфейс по умолчанию, вызываемый BIOS через INT 18h , если не был установлен дисковод или если загрузочный код не находил загрузочную дискету при включении питания. Название Cassette BASIC произошло от использования кассетных лент вместо дискет для хранения программ и данных. Cassette BASIC был встроен в ПЗУ оригинального PC и XT, а также ранних моделей в линейке PS/2 . Он поддерживает загрузку и сохранение программ только на интерфейсе кассетной ленты IBM , который недоступен в моделях после оригинальной модели 5150. Начальная версия 5150 поставлялась всего с 16 КБ оперативной памяти (ОЗУ), чего было достаточно для запуска Cassette BASIC. Однако Cassette BASIC использовался редко, поскольку немногие ПК продавались без дисковода, и большинство из них продавались с PC DOS и достаточным объемом ОЗУ, чтобы, по крайней мере, запустить Disk BASIC — многие также могли запустить Advanced BASIC. Существует три версии Cassette BASIC: C1.00 (встречалась на ранних IBM PC с материнскими платами 16–64K), C1.10 (встречалась на всех более поздних IBM PC, XT, AT и PS/2) и C1.20 (встречалась на PCjr).
IBM Disk BASIC (BASIC.COM) был включен в оригинальный IBM PC DOS . Поскольку он использовал 32 КБ Cassette BASIC ROM, [2] BASIC.COM не работал даже на высокосовместимых клонах ПК , таких как Compaq Portable . [3] Название Disk BASIC произошло от использования дискет , а также кассетных лент для хранения программ и данных. Код на основе диска исправлял опечатки в резидентном коде ПЗУ и добавлял поддержку дискет и последовательного порта .
Disk BASIC можно узнать по букве D, предшествующей номеру версии. Он добавляет поддержку дисков и некоторые функции, отсутствующие в Cassette BASIC, но не включает расширенные звуковые или графические функции BASICA. Основной целью Disk BASIC было создание «облегченной» версии для IBM PC с памятью всего 48 КБ: BASIC.COM тогда имел бы около 23 КБ свободного пространства для пользовательского кода, тогда как BASICA имел бы только около 17 КБ. К 1986 году все новые ПК поставлялись с памятью не менее 256 КБ, а версии DOS после 3.00 сократили Disk BASIC до небольшой заглушки, которая вызывала BASICA.COM для совместимости с пакетными файлами. Даже со всем этим избыточным объемом оперативной памяти BASIC все еще выделял и управлял только около 61 КБ для пользовательских программ, будь то Cassette BASIC, BASIC.COM или BASICA.
IBM Advanced BASIC (BASICA.COM) также был включен в исходную IBM PC DOS и требовал резидентного кода Cassette BASIC. [2] Он добавлял такие функции, как доступ к файлам на дискете, хранение программ на диске, монофонический звук с использованием встроенного динамика ПК, графические функции для установки и очистки пикселей , аналогичные функции для рисования линий и окружностей и установки цветов, а также обработки событий для связи и нажатия джойстика. BASICA не будет работать на компьютерах, отличных от IBM (даже так называемых «100% совместимых» машинах) или более поздних моделях IBM, поскольку у них отсутствует необходимый ROM BASIC.
Версии BASICA такие же, как и соответствующие им DOS, начиная с v1.00 и заканчивая v3.30. Ранние версии BASICA не поддерживали подкаталоги, и некоторые графические команды функционировали немного иначе. Например, если оператор LINE
использовался для рисования линий, которые выходили за пределы экрана, BASIC просто пересекал их с ближайшей соседней линией, в то время как в BASIC 2.x и выше линии выходили за пределы экрана и не пересекались. Команда PAINT
в BASIC 1.x начинала заполнение с указанной координаты и расширялась наружу попеременно вверх и вниз, в то время как в BASIC 2.x она заполняла все ниже начальной координаты, а затем, после завершения, все выше нее. PAINT
Команда BASIC 1.x также использовала системный стек для хранения, и при заполнении сложных областей она могла выдавать OVERFLOW
ошибку. Чтобы исправить это, CLEAR
оператор можно было использовать для расширения стека BASIC (размер по умолчанию составляет 128 байт). BASIC 2.x не использовал стек при PAINTing и, таким образом, был свободен от этой проблемы.
Compaq BASIC 1.13 был первым автономным BASIC для ПК (для работы которого не требовался Cassette BASIC), а также единственной версией BASIC, помимо IBM BASICA 1.00 и 1.10, которая использовала FCB [ необходимо разъяснение ] и включала оригинальный оператор LINE с пересекающимися линиями (оператор PAINT
в Compaq BASIC 1.13 работал так же, как и во всех более поздних версиях BASICA/GW-BASIC: он использовал новый алгоритм заполнения и не имел стека).
Ранние версии PC DOS включали несколько примеров программ на языке BASIC, демонстрирующих возможности ПК, в том числе игру на языке BASICA DONKEY.BAS .
GW-BASIC идентичен BASICA, за исключением включения в программу кода Cassette BASIC, что позволяет запускать ее на компьютерах, отличных от IBM, и на более поздних моделях IBM, в ПЗУ которых отсутствует Cassette BASIC.
Версия BASIC для картриджа ROM была доступна только на IBM PCjr , поставленном в 1984 году, и поддерживала дополнительные графические режимы и звуковые возможности, возможные на этой машине. [4] Это надмножество расширенного BASIC. [5] BASIC для картриджа мог работать только в пределах первых 128 КБ памяти на PCjr и не работал с расширенной оперативной памятью, то есть функция DEF SEG не могла использоваться для указания сегментов памяти выше &H1FF0.
Cartridge BASIC активировался путем ввода BASICA в командной строке DOS. Напротив, IBM BASICA версий 2.1 и выше отказывались запускаться, если обнаруживали PCjr, но их можно было пропатчить, чтобы обойти это ограничение.
Cassette BASIC загружается, когда ПК или PCjr загружаются без загрузочного диска или картриджа. Disk BASIC и Advanced BASIC загружаются, когда их имя команды (BASIC и BASICA соответственно) набирается в командной строке DOS (за исключением PCjr, который вместо этого активирует Cartridge BASIC), с некоторыми дополнительными параметрами для управления распределением памяти. При загрузке сообщение идентификации входа отображает номер версии программы, и запускается полноэкранный текстовый редактор (см. изображения справа). Функциональным клавишам назначаются общие команды, которые отображаются в нижней части экрана. Команды могут быть введены для загрузки или сохранения программ, а выражения могут быть введены и выполнены в прямом (непосредственном) режиме . Если строка ввода начинается с цифры, языковая система сохраняет следующую строку текста как часть исходного кода программы, позволяя программисту вводить всю программу построчно, с номерами строк перед каждым оператором. При перечислении на экране строки отображаются в порядке возрастания номера строки. Изменения можно вносить в отображаемую строку исходного кода программы , перемещая курсор на строку с помощью клавиш курсора и печатая поверх текста на экране. Исходный код программы хранится внутри в токенизированной форме, в которой зарезервированные слова заменяются однобайтовым токеном для экономии места и времени выполнения. Программы можно сохранять в компактной токенизированной форме или опционально сохранять как текстовые файлы DOS ASCII [6] , которые можно просматривать и редактировать с помощью других программ. Как и большинство других приложений DOS, IBM BASIC является программой текстового режима и не имеет функций для окон, значков, поддержки мыши или редактирования методом вырезания и вставки .
GW-BASIC , выпущенный в 1983 году, представляет собой дисковый продукт Microsoft, который распространялся с компьютерами MS-DOS, отличными от IBM , и поддерживает все графические режимы и функции BASICA на компьютерах, на которых не установлен IBM Cassette BASIC.
Преемником BASICA для версий MS-DOS и PC DOS, в настоящее время не поддерживаемым, является QBasic , выпущенный в 1991 году. Это урезанная версия компилятора Microsoft QuickBASIC : QBasic является интерпретатором и не может компилировать исходные файлы, в то время как QuickBASIC может компилировать и сохранять программы в формате исполняемого файла .EXE . QuickBASIC также включает некоторые расширенные языковые операторы и функции (в основном, включающие интерфейс ОС и низкоуровневое программирование на машинном языке ), поддерживает многомодульные программы и включает расширенные функции отладки, все из которых отсутствуют в QBASIC.