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.
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.