# Locomotive BASIC

Locomotive Basic es un dialecto del lenguaje de programación BASIC escrito por la compañía británica Locomotive Software para la gama de ordenadores CPC de Amstrad. Fue el antecesor del Mallard BASIC, el intérprete para CP/M suministrado con los Amstrad PCW, y posteriormente editado para los ZX Spectrum +3.

## Historia

Fue publicado en dos versiones:
* Versión 1.0: suministrada con los modelos Amstrad CPC 464 y Amstrad CPC 472 con teclado inglés
* Versión 1.1: suministrada con el resto de la gama CPC.
Ambas venían incluidas en la ROM interna del aparato.

## Características

Se trataba de una implementación del BASIC sencilla, pero potente para su época. Incluía comandos dedicados para el manejo de gráficos, tales como DRAW, DRAWR, PLOT, INK, PAPER, FILL (en la versión 1.1), que incluso permitían la creación de múltiples pantallas y ventanas, aunque el sistema de colores y el manejo de la paleta eran algo incómodos de manejar. Como curiosidad, había una tabla con los códigos numéricos de los 27 colores del sistema impresa sobre la cubierta de la unidad de discos en el modelo CPC664 y posteriores.
Pese a su simplicidad, sobresalía sobre otros BASICs de su época por ofrecer un mecanismo de interrupciones por software basado en temporizadores, usando los comandos EVERY o AFTER. Estos posibilitaban llamar a una línea de programa determinada, bien a intervalos regulares, bien después de un tiempo preseleccionado respectivamente.
También ofrecía un control casi total sobre el chip de sonido de los CPC, el AY-3-8912 con 3 canales melódicos y un canal de ruido (el cual también fue usado en los ZX Spectrum 128 y posteriores, Atari ST y MSX, aunque ninguno de éstos incluía un equivalente al comando SOUND tan completo). Todo, desde seleccionar un canal concreto o una combinación de canales, seleccionar envolventes, volumen, frecuencia, ruido, etc. podía hacerse con un simple comando SOUND, con hasta 7 parámetros. La única cosa que no era posible hacer desde BASIC era, quizás, reproducir sonidos digitales sampleados (para esto había que recurrir al código máquina).
La gestión de discos, cintas y archivos se hacía desde el propio BASIC, y normalmente era suficiente para una sencilla administración de archivos, con comandos como GET, PUT, ERASE, SAVE, MERGE, RUN, CAT, LOAD, etc. De hecho, el Locomotive BASIC hacía las veces de sencillo sistema operativo, al igual que en otros ordenadores domésticos de la época.
Así mismo, disponía de varios comandos especiales para el manejo y de la memoria, como MEMORY, y el comando LOAD con parámetros, que permitía, por ejemplo, cargar un archivo conteniendo una imagen sin comprimir directamente a la memoria de vídeo, siendo ésta mostrada en la pantalla. Usando las direcciones de memoria apropiadas como parámetros de los comandos LOAD y SAVE, se podía manejar imágenes de pantalla de 16KB fácilmente. Llamando a otras direcciones con el comando CALL, se podía obtener un reset forzado del sistema (CALL &0), pausar la ejecución del programa hasta la pulsación de una tecla por el usuario (CALL &BB18), o eliminar el parpadeo de la imagen en animaciones, al sincronizar en pantalla el movimiento de objetos con los ciclos de barrido del monitor (CALL &BD19); precisamente a esta función le fue dedicado un comando en la versión 1.1: FRAME. Con los comandos PEEK y POKE se podían leer y escribir respectivamente bytes individuales en la memoria RAM, lo que proporcionaba un agradable interfaz entre BASIC y el código máquina.

## Ventajas sobre sus rivales

El Locomotive BASIC fue competidor, entre otros, del BASIC del Commodore 64, el cual no disponía de comandos dedicados para gráficos o sonido. En general, el BASIC de Locomotive permitía hacer prácticamente todo de lo que se disponía con las capacidades estándar de la máquina. Esto no es en absoluto desdeñable, ya que en muchas otras máquinas de la época, usar gráficos o sonido estaba sólo restringido a la programación en ensamblador. Las únicas cosas que quedaban fuera del alcance de BASIC eran los modos de pantalla "overscan" usados en algunos juegos y demos, modos usando los 27 colores simultáneamente, reproducción de samples digitales y scroll suavizado.
Al contrario que los BASICs del ZX Spectrum o el Commodore 64, los cuales tenían varios atajos de teclado o teclas especializadas para símbolos o colores, las palabras clave del Locomotive BASIC debían ser tecleadas enteras, y el intérprete las parseaba, reconocía y tokenizaba. Aun así, existían abreviaturas como "?" para el comando PRINT y unos pocos atajos. Los programas podía salvarse y recuperarse en cinta o disco como archivos binarios o ASCII.

## Inconvenientes

Las pegas del Locomotive BASIC incluían la ausencia de programación estructurada, algo común en casi todos los BASICs de su tiempo, excepto el BBC BASIC del BBC Micro fabricado por Acorn Computers.
El Locomotive BASIC requería de números de línea, e interpretaba el código a una velocidad más bien lenta, especialmente cuando se trataba de gráficos. Esto podía ser corregido compilando el código fuente, pero los compiladores, aunque los hubo, eran un extra de pago no incluidos de serie con la máquina. Aún con eso, hubo muchos juegos para el CPC (incluso comercializados) escritos enteramente en Locomotive BASIC, así como aplicaciones de gestión, programas educativos y utilidades.