Microsoft BASIC — це серія інтерпретаторів мови програмування BASIC, розроблених компанією Microsoft у 1970–1980-х роках. Вони були одними з найпоширеніших засобів програмування для перших персональних комп’ютерів і входили до складу ПЗ багатьох моделей як у вигляді окремих програм, так і у вбудованому ПЗП.

Перша версія — Altair BASIC, створена для мікрокомп’ютера Altair 8800 — стала водночас і першим продуктом компанії Microsoft. Написаний Біллом Гейтсом і Полом Алленом у 1975 році, цей інтерпретатор поклав початок лінійці Microsoft BASIC, яку згодом було адаптовано для десятків платформ: від Commodore BASIC і AppleSoft BASIC до GW-BASIC, QBasic і Visual Basic.

Altair BASIC та створення Microsoft

Першою реалізацією мови BASIC від Microsoft став Altair BASIC, розроблений у 1975 році Біллом Гейтсом та Полом Алленом для мікрокомп’ютера Altair 8800. Розробка велася на мейнфреймі PDP-10, де вони створили емулятор процесора Intel 8080, аби писати та тестувати код, не маючи доступу до самого Altair.

Основою для синтаксису Altair BASIC став діалект BASIC-PLUS, який використовувався на комп’ютерах PDP-11 компанії DEC. Початкова версія підтримувала лише цілочисельну арифметику, однак завдяки інженеру Монте Девідоффу, який створив бібліотеку чисел з плаваючою комою, була реалізована підтримка дійсних чисел. Цей формат отримав назву Microsoft Binary Format.

Особливості Altair BASIC мав багато рис, запозичених із BASIC-PLUS, зокрема:

використання символів % для цілих чисел і $ для рядків, розділення операторів у рядку за допомогою :, обробку файлів за допомогою FIELD, GET, PUT, LSET, RSET, доступ до файлів за допомогою дескрипторів #, підтримку прямого доступу до файлів, по-рядкове редагування програм через команду EDIT.

Ранні версії та розширення Початкова версія Altair BASIC уміщувалася в 4 КБ пам’яті та підтримувала обмежений набір команд. У цій версії не було підтримки рядків, а змінні могли мати лише одно- або дволітерні імена. Подальші розширення додали:

підтримку рядкових змінних та функцій роботи з рядками (MID$, LEFT$, RIGHT$), визначення змінних різного типу (% — цілі, ! — одиничної точності, # — подвійної точності), арифметику з плаваючою комою, більш інформативні повідомлення про помилки, підтримку користувацьких функцій (DEF FN), оператори IF...THEN...ELSE, ON...GOTO, ON...GOSUB.

У 12-КБ версії BASIC підтримувались 64-бітові дійсні числа, що було суттєвим покращенням над ранніми 32-бітовими.

Поширення на інші архітектури На базі Altair BASIC компанія Microsoft створила універсальне ядро, яке пізніше було портовано на інші процесори:

BASIC-80 для Intel 8080/8085 та Zilog Z80, BASIC-86 для Intel 8086/8088, BASIC-68 для Motorola 6800, BASIC-69 для Motorola 6809, 6502 BASIC для процесора MOS 6502 (використовувався в Apple, Commodore, Atari та ін.).

Ці варіанти стали основою для багатьох домашніх комп’ютерів 1970–80-х років. Незалежно від платформи, більшість програм, написаних на Microsoft BASIC, були взаємно сумісними.

Ліцензування Microsoft BASIC для домашніх комп’ютерів Успіх Altair BASIC започаткував новий напрямок у бізнесі Microsoft — ліцензування BASIC для інших виробників комп’ютерів. Упродовж кінця 1970-х і всього 1980-х років компанія уклала десятки контрактів на постачання адаптованих версій BASIC для найрізноманітніших систем.

Більшість таких версій вшивалися у постійну пам’ять (ПЗП) комп’ютерів, тож BASIC автоматично завантажувався при ввімкненні пристрою. Таким чином, мова програмування фактично ставала частиною операційного середовища машини, доступною одразу з командного рядка (запитом на кшталт READY).

Унікальна модель розробки В ті часи будь який програмний продукт доводилось вручну адаптувати до різних архітектур процесорів, що потребувало значних витрат часу. Microsoft же централізовано підтримувала кодову базу BASIC та адаптувала її до десятків процесорів і архітектур. Для цього вона використовувала систему умовної компіляції, яка дозволяла з однієї кодової бази згенерувати інтерпретатор для:

Intel 8080, 8085, 8086, 8088 Zilog Z80 MOS 6502 Motorola 6800, 6809 та інших процесорів

Весь процес проходив на комп’ютері DECsystem-20, який Microsoft використовувала для крос-компіляції.

Масштабне поширення До 1981 року Microsoft BASIC був настільки популярним, що навіть компанії, які мали власні реалізації мови, ліцензували Microsoft BASIC заради сумісності. Наприклад:

IBM придбала ліцензію для використання BASIC у своєму IBM PC, попри наявність альтернатив; Atari одночасно постачала Atari Microsoft BASIC і власний Atari BASIC; Commodore отримала безстрокову ліцензію на BASIC за одноразову оплату, що дозволяло їм вільно його модифікувати.

Дон Естридж з IBM з цього приводу сказав:«Microsoft BASIC має сотні тисяч користувачів по всьому світу. Як ти можеш посперечатися з цим?»

Універсальні й OEM-версії Microsoft також випускала власні версії BASIC для:

операційної системи CP/M — як MBASIC; клонів IBM PC — GW-BASIC, що був аналогом IBM Advanced BASIC (BASICA), але не потребував ROM-модуля; менш відомих систем, зокрема Laser 128 (аналог Apple IIc), що отримав варіант, сумісний з AppleSoft BASIC.

Цей підхід дозволив Microsoft BASIC стати де-факто стандартом серед мов програмування для персональних комп’ютерів свого часу.

Extended BASIC-80 та спеціалізовані версії Після створення базової 8-КБ версії Microsoft BASIC для процесора Intel 8080, компанія розпочала розробку розширених варіантів для конкретних клієнтів та платформ. Один з таких варіантів отримав назву Extended BASIC-80 — універсальна модифікація, що включала підтримку додаткових команд, удосконалені засоби роботи з рядками, змінними та масивами.

Цей варіант ліцензували кілька виробників, серед яких:

Tangerine Microtan 65 (британський комп’ютер початку 1980-х), Spectravideo SV-318 та SV-328 (домашні комп’ютери з графічними розширеннями), NCR — для терміналу введення даних NCR 7200 VI, де використовувався варіант з назвою BASIC Plus 6. (Mentions an 8080-based cassette-based NCR 7200 model VI with NCR Basic Plus 6 (Extended BASIC) to be delivered in Q1/1977. The NCR 7200 model I and model IV were already released in 1975-11, but did not came with BASIC.)

Розробкою деяких таких адаптацій вже займалися перші наймані співробітники Miscrosoft. Наприклад, NCR-версію Extended BASIC-80 адаптував програміст Марк Макдональд у 1976–1977 роках.

Disk BASIC-80 (Дискові версії для CP/M) Для популярної операційної системи CP/M-80 Microsoft випустила дискову версію BASIC під назвою MBASIC. Цей варіант був апаратно-незалежним і широко застосовувався на Z80-комп’ютерах, що працювали під CP/M.

Хоча MBASIC мав менший функціональний набір, ніж спеціалізовані варіанти, він забезпечував базову сумісність із іншими реалізаціями Microsoft BASIC. Наприклад, CP/M-карта для Apple II містила адаптований MBASIC, який частково підтримував графічні команди з AppleSoft BASIC (такі як HPLOT), хоч і не в повному обсязі.

Standalone Disk BASIC-80 Першу реалізацію Microsoft BASIC з підтримкою файлової системи FAT було створено не для IBM PC, а ще у 1977–1978 роках — для терміналів на базі Intel 8080, випущених компанією NCR (моделі 7200, 7520, 7530). Ця версія отримала назву Standalone Disk BASIC-80 і підтримувала 8-дюймові дисководи.

Саме тут було вперше реалізовано базову структуру FAT, яка згодом стане стандартом для DOS.

BASIC-компілятор Паралельно з інтерпретаторами, Microsoft розробила і компілятор BASIC, що був відомий під назвою BASCOM. Його використовували на системах з CP/M, і він дозволяв створювати виконувані .COM-файли зі звичних .BAS-програм.http://www.bitsavers.org/pdf/microsoft/cpm/Microsoft_BASIC_Compiler_1980.pdf

BASCOM підтримував більшість можливостей MBASIC, однак вимагав явного оголошення всіх змінних (DEFINT, DEFSTR тощо) для оптимізації коду.

TRS-80 Level II / III BASIC Одна з найуспішніших OEM-реалізацій Microsoft BASIC була створена для TRS-80 — серії домашніх комп’ютерів від Tandy/RadioShack.

Перші моделі TRS-80 використовували Level I BASIC, заснований на Tiny BASIC. Однак дуже швидко його замінили на Level II BASIC, який був адаптацією Microsoft BASIC-80. Ця версія додала:

повноцінну підтримку рядків і масивів, нові оператори (включно з IF...THEN...ELSE, FOR...NEXT, GOSUB), покращену обробку помилок, збереження програм на дискетах.

У Model 4 використовувалась вдосконалена версія BASIC-80 5.x з підтримкою імен змінних до 40 символів, циклів WHILE...WEND, користувацьких функцій (DEF FN) та викликів до DOS (SYSTEM).

Базова модель включала тільки по-рядковий редактор, однак розширені версії (з LS-DOS) дозволяли виконувати команди на кшталт LIST, RENUM, EDIT та отримали можливості налагодження (TRON, TROFF, CONT).

Реалізації Microsoft BASIC для різних архітектур

BASIC-86 Після успіху на 8-бітних платформах Microsoft перенесла BASIC на 16-бітні процесори, зокрема на Intel 8086/8088. Першим прикладом став BASIC-86, створений у 1979 році для одноплатного комп’ютера з шиною S-100 від Seattle Computer Products. Ця версія вже включала файлову систему FAT і підтримувала роботу з дисководами — майже за два роки до появи IBM PC.

У 1980 році Microsoft запропонувала Standalone BASIC-86 — окрему, самодостатню версію для комп’ютерів SBC-86 на базі Intel 8086. Ці реалізації стали попередниками GW-BASIC і BASICA, які пізніше увійшли до складу DOS-систем.

BASIC для Texas Instruments Хоча інтерфейс TI BASIC для комп’ютера TI-99/4A нагадував Microsoft BASIC, фактично він не був розроблений компанією Microsoft. За свідченнями інженера Ханса Шурмана, Microsoft допомагала з BASIC для іншого проєкту (SR-70), але для TI-99/4A мову написала команда Texas Instruments.

TI BASIC базувався на Dartmouth BASIC і відповідав американському стандарту мінімального BASIC (ANSI X3.60-1978). Він був повільнішим за інші BASIC, оскільки працював через інтерпретатор GPL, що взаємодіяв з мовою машинного коду.

6502 BASIC У 1976 році Microsoft портувала BASIC на 8-бітовий процесор MOS Technology 6502 — популярний у комп’ютерах Apple, Commodore, Atari, Oric та інших.

Ця версія мала деякі відмінності від оригінального BASIC-80:

замість 32-бітових чисел з плаваючою крапкою використовувався 40-бітовий формат, який став типовим для платформ на 6502; підтримувалося динамічне виділення пам’яті для рядків (на відміну від попередніх реалізацій, де треба було вказувати обсяг вручну); були обмеження в точності чисел і кількості функцій, однак її можна було конфігурувати — деякі OEM-версії поверталися до 32-бітових чисел, щоб заощадити пам’ять.

Стандартна 9-КБ версія 6502 BASIC мала:

типи змінних: рядкові ($), цілі (%), числа з плаваючою крапкою (!); синтаксичний аналіз без обов’язкових пробілів між операторами; обробку клавіш (GET) і підтримку компактного коду в пам’яті; скорочене порівняння імен змінних: важливими вважались лише перші 2 символи.

Розширення в OEM-реалізаціях (наприклад, Commodore BASIC) У 1980-х більшість виробників додавали до Microsoft BASIC власні розширення. Наприклад, Commodore BASIC (у версіях для C64 та C128) включав:

Команди для роботи з дисками: DIRECTORY, DLOAD, DSAVE, SCRATCH, RENAME; Графічні функції: PLOT, DRAW, CIRCLE, PAINT, SCALE; Роботу зі спрайтами; Звукові команди (SOUND, PLAY, ENVELOPE, FILTER); Структуроване програмування: DO...LOOP, EXIT, IF...ELSE, WHILE; Команди налагодження: TRON, TROFF, CONT; Редагування коду: RENUMBER, MONITOR, RREG.

Таким чином, багато OEM-версій перетворили Microsoft BASIC на повноцінне середовище розробки для своєї платформи.

BASIC-68 та BASIC-69 Окрім підтримки процесорів Intel і MOS, Microsoft також створила версії BASIC для мікропроцесорів Motorola 6800 та 6809:

BASIC-68 — використовувався в системах на базі 6800 з ОС FLEX; BASIC-69 — став основою для Color BASIC у TRS-80 Color Computer, а також для систем Dragon 32/64.

Ці версії зберігали ядро Microsoft BASIC-80, але адаптувались до архітектури процесора та особливостей машин.

MSX BASIC