Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
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 в составе прилагаемого игрового картриджа.
Locomotive Basic is a proprietary dialect of the BASIC programming language written by Locomotive Software on the Amstrad CPC (where it was built in on ROM) and the later Locomotive BASIC 2 as a GEM application on the Amstrad PC1512 and 1640. It was the main descendant of Mallard BASIC, the interpreter for CP/M supplied with the Amstrad PCW. There are two versions of Locomotive BASIC: 1.0 which only came with the CPC model 464, and 1.1 which shipped with all other versions. BASIC 1.1 was also shipped with the Amstrad CPC Plus series machines, as part of the included game cartridge.
Разработка
Разработка основывалась на ранее проделанной работе по созданию Mallard BASIC для расширения Z80 для компьютеров Acorn и BBC Micro. Сообщается, что на доработку существующего кода ушло около 12 недель, и она находилась под сильным влиянием BBC BASIC, хотя и добавляла дополнительные функции для выполнения задач, которые на BBC потребовали бы использования языка ассемблера.
Development was based on existing work recently undertaken writing Mallard BASIC for Acorn Computers Z80 addon for the BBC Micro. It is reported to have taken around 12 weeks to enhance the existing code, and was "very influenced" by BBC BASIC, though adding additional functions to do things that would have required assembly language on the 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.
It was a rather simple but powerful BASIC implementation by the standards of the day, featuring dedicated commands for handling graphics (such as DRAW, PLOT, INK, and PAPER in all versions; plus FILL in v1.1), even allowing the creation of multiple screens, windows, and the like, although the color system and palette handling was awkward. A table giving the numeric codes for the 27 system colors was printed over the built in 3" disk drive casing on the 664 and later machines. Simple as it was, it did stand out however among other BASICs of the time by offering a timer based software interrupt mechanism using the EVERY or AFTER commands; this offered a timed repeating or one off call respectively to the BASIC line number of the user's choice. Also, when compared to other home computers of the time, the Amstrad via Locomotive BASIC granted a relatively high level of control over the CPC sound chip, an AY 3 8912 with 3 melodic channels and 1 noise channel. The same chip was also used on late model ZX Spectrums, as well as the Atari ST and MSX computers, but none of those had such a complete built in SOUND command. Many things, from selecting a particular channel or a combination of channels, setting envelopes, volume, pitch, noise, and so on could be done with a single SOUND command, with up to 7 parameters. Granted, especially complex and/or low level techniques could not be done with BASIC due to their requiring more precise or direct access to the hardware, e. g. especially complex music from trackers (including simulated chords using arpeggios, etc. ), the playback of digitally sampled sounds as in the game RoboCop for example, and so on. Disk, tape, and file management were managed by BASIC itself, and were usually good enough for simple file management, with commands such as GET, PUT, ERASE, SAVE, MERGE, RUN, CAT, LOAD etc. In fact, during those years, the BASIC supplied as standard with most low cost home computers also acted as a more or less simple operating system. Also available were some special commands for memory allocation and handling, like MEMORY and a parametric LOAD command, allowing, for example, to load a file containing "raw" picture data into video memory, causing it to be displayed, with a couple of BASIC instructions. Adding the right memory address(es) as parameter to the commands LOAD or SAVE would allow easy loading of raw uncompressed 16 KB screen pictures. CALLing another address gave a forced system reset (call 0), the famous "Press Any Key" (call &bb18) or for eliminating flicker in animation by allowing you to synchronize with the monitor's raster scan via "sync frame flyback" (call &bd19); this was given its own dedicated command in Basic 1.1 FRAME. With PEEK and POKE, CALL provided an interface to assembly language programming from BASIC.
Современные конкуренты
В отличие от BASIC, встроенного в Commodore 64 (Commodore BASIC), в котором не было специальных команд для графики или звука, Locomotive BASIC позволяла выполнять практически любые задачи, которые были в пределах стандартных возможностей машины. Это было немаловажно, так как для доступа к полному звуковому и графическому потенциалу некоторых других машин того времени программистам требовалось использовать ассемблер. MSX, Sinclair Spectrum и некоторые другие предлагали аналогичный, более или менее полный набор команд для управления звуком и графикой. Единственное, что явно выходило за рамки возможностей BASIC, – это режимы развертки, используемые в играх и демо, 27-цветные графические режимы, цифровое воспроизведение звука и плавное скроллирование. В отличие от Sinclair BASIC или Commodore 64 BASIC, которые предлагали различные сочетания клавиш или специализированные клавиши для выбора символов или цветов, ключевые слова Locomotive BASIC набирались полностью, а интерпретатор анализировал, распознавал и токенизировал их. Однако существовали сокращения, например, "?" вместо "PRINT" и несколько других. Программы можно было сохранять на компакт-кассету или дискету и загружать как в бинарном, так и в ASCII формате.
Unlike the Commodore 64's built in BASIC (Commodore BASIC), which had no dedicated commands for graphics or sound, Locomotive BASIC allowed doing pretty much anything that was within the standard capabilities of the machine. This was not unimportant, as some other machines of the era required programmers to use assembler in order to access the full sound and graphics capabilities of their system. MSX, Sinclair Spectrum and some others offered a similar, more or less complete command set for their sound and graphics capabilities. The only things going clearly beyond BASIC capabilities were the overscan modes used in games and demos, 27 color graphics modes, digital sound playback, and smooth scrolling. Unlike Sinclair BASIC or Commodore 64 BASIC, which had various keyboard command shortcuts or specialized keys for choosing symbols or colors, Locomotive BASIC keywords were typed in full and the interpreter parsed, recognized and tokenised them. However, there were abbreviations like "?" for "PRINT" and a few shortcuts. Programs could be saved onto Compact Cassette or floppy disk and retrieved as binary or ASCII files.