Введение

Locomotive Basic — это запатентованный диалект языка программирования BASIC, разработанный компанией Locomotive Software для Amstrad CPC (где он был встроен в ПЗУ) и более поздняя версия Locomotive BASIC 2 в виде GEM-приложения для Amstrad PC1512 и 1640. Он являлся основным наследником Mallard BASIC, интерпретатора для CP/M, поставлявшегося с Amstrad PCW. Существуют две версии Locomotive BASIC: 1.0, которая поставлялась только с моделью CPC 464, и 1.1, которая поставлялась со всеми остальными версиями. BASIC 1.1 также поставлялся с компьютерами серии Amstrad CPC Plus в составе прилагаемого игрового картриджа.

Разработка

Разработка основывалась на ранее проделанной работе по созданию Mallard BASIC для расширения Z80 для компьютеров Acorn и BBC Micro. Сообщается, что на доработку существующего кода ушло около 12 недель, и она находилась под сильным влиянием BBC BASIC, хотя и добавляла дополнительные функции для выполнения задач, которые на BBC потребовали бы использования языка ассемблера.

Особенности

Это была довольно простая, но мощная реализация BASIC по меркам того времени, с выделенными командами для работы с графикой (такими как DRAW, PLOT, INK и PAPER во всех версиях; плюс FILL в v1.1), даже позволяющая создавать несколько экранов, окон и тому подобное, хотя система цветов и обработка палитры были неудобными. Таблица с числовыми кодами для 27 системных цветов была напечатана на корпусе встроенного 3-дюймового дисковода на 664 и более поздних моделях. Несмотря на свою простоту, она выделялась среди других BASIC того времени, предлагая механизм программного прерывания на основе таймера с использованием команд EVERY или AFTER; это обеспечивало временное повторение или однократный вызов, соответственно, на номер строки BASIC, выбранный пользователем. Кроме того, по сравнению с другими домашними компьютерами того времени, Amstrad через Locomotive BASIC предоставлял относительно высокий уровень управления звуковым чипом CPC, AY 3 8912 с 3 мелодическими и 1 шумовым каналами. Тот же чип использовался и в поздних моделях ZX Spectrum, а также в компьютерах Atari ST и MSX, но ни в одном из них не было столь полной встроенной команды SOUND. Многие вещи, от выбора конкретного канала или комбинации каналов до настройки огибающих, громкости, высоты тона, шума и так далее, можно было сделать с помощью одной команды SOUND, с использованием до 7 параметров. Однако особенно сложные и/или низкоуровневые приемы не могли быть реализованы в BASIC из-за необходимости более точного или прямого доступа к аппаратному обеспечению, например, сложная музыка от трекеров (включая имитацию аккордов с помощью арпеджио и т. д.), воспроизведение оцифрованных звуков, как в игре RoboCop, и тому подобное. Управление дисками, лентами и файлами осуществлялось самим BASIC и обычно было достаточно для простых операций с файлами, с использованием команд GET, PUT, ERASE, SAVE, MERGE, RUN, CAT, LOAD и т. д. Фактически, в те годы BASIC, поставляемый в комплекте с большинством недорогих домашних компьютеров, также выполнял функции более или менее простой операционной системы. Также были доступны специальные команды для выделения и управления памятью, такие как MEMORY и параметрическая команда LOAD, позволяющая, например, загрузить файл, содержащий "сырые" данные изображения, в видеопамять, что приводило к его отображению с помощью нескольких инструкций BASIC. Добавление правильного адреса памяти в качестве параметра к командам LOAD или SAVE позволяло легко загружать несжатые 16 КБ изображения экрана. Вызов другого адреса приводил к принудительной перезагрузке системы (call 0), отображал знаменитое сообщение "Press Any Key" (call &bb18) или устранял мерцание в анимации, позволяя синхронизироваться с растровым сканированием монитора через "sync frame flyback" (call &bd19); для этого в Basic 1.1 была предусмотрена специальная команда FRAME. Вместе с PEEK и POKE, CALL обеспечивал интерфейс для программирования на языке ассемблера из BASIC.

Современные конкуренты

В отличие от BASIC, встроенного в Commodore 64 (Commodore BASIC), в котором не было специальных команд для графики или звука, Locomotive BASIC позволяла выполнять практически любые задачи, которые были в пределах стандартных возможностей машины. Это было немаловажно, так как для доступа к полному звуковому и графическому потенциалу некоторых других машин того времени программистам требовалось использовать ассемблер. MSX, Sinclair Spectrum и некоторые другие предлагали аналогичный, более или менее полный набор команд для управления звуком и графикой. Единственное, что явно выходило за рамки возможностей BASIC, – это режимы развертки, используемые в играх и демо, 27-цветные графические режимы, цифровое воспроизведение звука и плавное скроллирование. В отличие от Sinclair BASIC или Commodore 64 BASIC, которые предлагали различные сочетания клавиш или специализированные клавиши для выбора символов или цветов, ключевые слова Locomotive BASIC набирались полностью, а интерпретатор анализировал, распознавал и токенизировал их. Однако существовали сокращения, например, "?" вместо "PRINT" и несколько других. Программы можно было сохранять на компакт-кассету или дискету и загружать как в бинарном, так и в ASCII формате.