Locomotive Basic — это фирменный диалект языка программирования BASIC, написанный Locomotive Software на Amstrad CPC (где он был встроен в ПЗУ ), а позднее — Locomotive BASIC-2 как приложение GEM на Amstrad PC1512 и 1640. Он был основным потомком Mallard BASIC [1] , интерпретатора для CP/M, поставляемого с Amstrad PCW .
Существует две версии Locomotive BASIC: 1.0, которая поставлялась только с моделью CPC 464, и 1.1, которая поставлялась со всеми остальными версиями. BASIC 1.1 также поставлялась с машинами серии Amstrad CPC Plus как часть прилагаемого игрового картриджа.
Разработка была основана на существующей работе, недавно предпринятой по написанию Mallard BASIC для Acorn Computers Z80 addon для BBC Micro. Сообщается, что потребовалось около 12 недель, чтобы улучшить существующий код, и он был «очень сильно под влиянием» BBC BASIC , хотя и добавил дополнительные функции для выполнения вещей, которые потребовали бы языка ассемблера на BBC. [1]
Это была довольно простая, но мощная реализация 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 КБ. CALLing по другому адресу давал принудительный сброс системы (вызов 0), знаменитый «Press Any Key» (вызов &bb18) или для устранения мерцания в анимации, позволяя синхронизироваться с растровым сканированием монитора через «sync frame-flyback» (вызов &bd19); этому была предоставлена собственная специальная команда в Basic 1.1 — FRAME. С PEEK и POKE CALL предоставил интерфейс для программирования на языке ассемблера из BASIC.
В отличие от встроенного в Commodore 64 BASIC ( Commodore BASIC ), который не имел специальных команд для графики или звука, Locomotive BASIC позволял делать практически все, что входило в стандартные возможности машины. Это было не так уж и важно, так как некоторые другие машины той эпохи требовали от программистов использования ассемблера для доступа к полным звуковым и графическим возможностям своей системы. MSX, Sinclair Spectrum и некоторые другие предлагали похожий, более или менее полный набор команд для своих звуковых и графических возможностей. Единственное, что явно выходило за рамки возможностей BASIC, — это режимы overscan, используемые в играх и демонстрациях, 27-цветные графические режимы, цифровое воспроизведение звука и плавная прокрутка.
В отличие от Sinclair BASIC или Commodore 64 BASIC, которые имели различные сочетания клавиш или специальные клавиши для выбора символов или цветов, ключевые слова Locomotive BASIC вводились полностью, а интерпретатор анализировал , распознавал и токенизировал их. Однако были сокращения, такие как "?" для "PRINT" и несколько сочетаний клавиш. Программы можно было сохранять на компакт-кассете или дискете и извлекать в виде двоичных или ASCII- файлов.