MBASIC es la implementación de BASIC de Microsoft BASIC para el sistema operativo CP/M . MBASIC es un descendiente de los intérpretes BASIC originales de Altair que se encontraban entre los primeros productos de Microsoft. MBASIC fue una de las dos versiones de BASIC incluidas con la computadora Osborne 1. El nombre "MBASIC" se deriva del nombre de archivo de disco MBASIC.COM del intérprete BASIC.
Ambiente

La versión 5 de MBASIC requería un sistema CP/M con al menos 28 KB de memoria de acceso aleatorio (RAM) y al menos una unidad de disquete.
A diferencia de las versiones de Microsoft BASIC-80 que fueron personalizadas por los fabricantes de computadoras para el hogar para utilizar las características de hardware particulares de la computadora, MBASIC dependía únicamente de las llamadas del sistema operativo CP/M para todas las entradas y salidas. Solo estaban disponibles la consola CP/M (pantalla y teclado), la impresora de línea y los dispositivos de disco.
MBASIC en su forma no personalizada no tenía funciones para gráficos , color, joysticks, ratones, comunicaciones seriales , redes , sonido o incluso una función de reloj en tiempo real . MBASIC no era totalmente compatible con las características del sistema operativo CP/M anfitrión, por ejemplo, no era compatible con las áreas de usuario de CP/M para organizar archivos en un disquete. Dado que los sistemas CP/M eran típicamente de un solo usuario y autónomos, no había ninguna disposición para el bloqueo de archivos o registros, o cualquier forma de multitarea . Aparte de estas limitaciones, MBASIC se consideró en ese momento una implementación poderosa y útil de BASIC.
Características
Sistema de lenguaje
MBASIC es un intérprete . El texto fuente del programa se almacenaba en la memoria en forma de tokens, con palabras clave de BASIC reemplazadas por tokens de un byte que ahorraban espacio en la memoria y aceleraban la ejecución. Cualquier línea prefijada con un número de línea se almacenaba como texto del programa; las instrucciones de BASIC que no tenían un número de línea prefijado se ejecutaban inmediatamente como comandos. Los programas se podían listar en la pantalla para editarlos o guardar en el disco en un formato binario comprimido o como texto ASCII simple . Cada línea fuente se identificaba con un número, que se podía usar como destino de una transferencia GOTO o GOSUB . Solo se proporcionaban comandos de edición de línea. [1] A menudo era beneficioso guardar un programa como texto simple y editarlo con un editor con todas las funciones.
El texto del programa, las variables , los buffers de disco y el propio sistema operativo CP/M tenían que compartir el espacio de direcciones de 64 kilobytes del procesador 8080. Normalmente, cuando se iniciaba MBASIC por primera vez, había menos de 32 kB de memoria disponible para programas y datos, incluso en una máquina equipada con 64 kilobytes de RAM. Las líneas de comentarios, precedidas por la REM palabra clave o un apóstrofo, se podían colocar en el texto del programa, pero ocupaban un espacio valioso en la memoria, lo que desalentaba a los usuarios de BASIC a documentar completamente su código. Para permitir la ejecución de programas más grandes y complejos, las versiones posteriores de MBASIC admitían funciones que permitían leer y ejecutar partes del texto del programa bajo el control del programa (las declaraciones " CHAIN " y MERGE ). No se proporcionaba soporte para la ejecución de comandos "shell", aunque esta funcionalidad podía ser duplicada por un programador determinado.
Una ventaja particular de MBASIC eran los mensajes de error de texto completo que proporcionaba para errores de sintaxis y de tiempo de ejecución. MBASIC también tenía una función de "rastreo" que mostraba los números de línea a medida que se ejecutaban. Si bien esto ocupaba el mismo espacio de pantalla que la salida normal del programa, era útil para detectar condiciones como bucles infinitos .
Archivos y entrada/salida
Los datos se podían leer y almacenar en el disco como archivos secuenciales (delimitados por la convención CP/M de CR / LF al final de cada línea) o como archivos de acceso aleatorio de longitud de registro fija, que, con un programador lo suficientemente decidido, se podían utilizar para realizar manipulaciones de registros de tipo base de datos. El formato binario de Microsoft para números de punto flotante era propiedad de la implementación, lo que significaba que los datos solo se podían intercambiar con otros programas que utilizaran la representación de texto ASCII o con una programación extensa para convertir el formato binario.
Variables y tipos de datos
MBASIC admite los siguientes tipos de datos:
- Datos de caracteres de 8 bits, en cadenas de longitud de 0 a 255 caracteres;
- enteros de 16 bits ;
- Punto flotante de 32 bits (precisión simple), equivalente a seis dígitos decimales, con un exponente de dos dígitos;
- Punto flotante de 64 bits (doble precisión), equivalente a dieciséis dígitos decimales, con un exponente de dos dígitos.
Los operadores de cadena incluían selección de subcadenas, concatenación, asignación y prueba de igualdad.
Se permitían matrices de los tipos anteriores con hasta 7 dimensiones, pero no funcionaban funciones ni operadores en matrices; por ejemplo, no había asignación de matrices. A diferencia de otras implementaciones de BASIC de la época, MBASIC no proporcionaba soporte para operaciones matriciales , números complejos o un tipo de datos decimal (BCD) para cálculos financieros. Todas las operaciones de punto flotante se realizaban en software, ya que los sistemas CP/M típicos no tenían hardware de punto flotante . Las funciones matemáticas integradas ( seno, coseno , tangente , logaritmo natural , exponencial , raíz cuadrada ) solo proporcionaban resultados de precisión simple. Se proporcionaba un generador de números pseudoaleatorios de software ; esto dependía de que el usuario ingresara un número semilla para obtener una secuencia de números útiles para juegos y algunas simulaciones. MBASIC permitía pero no requería la LET palabra clave para las declaraciones de asignación.
Las primeras versiones de BASIC en microcomputadoras eran famosas por sus nombres de variable de uno o dos caracteres, lo que dificultaba recordar su significado en programas complejos. La versión 5 de MBASIC permitía identificadores de hasta 40 caracteres, lo que permitía a los programadores dar nombres legibles a las variables.
Control de flujo del programa
El control del flujo del programa en MBASIC se controlaba mediante IF...THEN...ELSE... pruebas condicionales, WHILE...WEND bucles e GOTO instrucciones GOSUB . No CASE había ninguna instrucción disponible, aunque un ON...GOTO... GOTO (calculado) proporcionaba ramificaciones de múltiples vías. Las subrutinas no tenían parámetros y todas las variables eran globales. MBASIC no hizo que la programación estructurada fuera obligatoria para los programadores y era fácil escribir código espagueti .
PEEK, POKE y funciones de usuario
Ninguna discusión sobre BASIC en las computadoras de 8 bits de finales de los años 70 y principios de los 80 estaría completa sin mencionar la importancia de las funciones PEEK y POKE para leer y escribir directamente en la memoria. Dado que estos sistemas normalmente no tenían protección de memoria , esto permitía a un programador acceder a partes del sistema operativo o funciones que de otra manera no estarían disponibles. Esto también brindaba oportunidades para que los programas de usuario colgaran el sistema (por accidente, generalmente). Por ejemplo, un programador CP/M podría usar una POKE función para permitir que BASIC cambie el dispositivo de consola al puerto serie, si el BIOS del sistema lo admitía. Para máquinas con relojes de tiempo real, PEEKse podría haber usado un conjunto de instrucciones para acceder a la hora.
Para operaciones más complejas, MBASIC permitía funciones definidas por el usuario que podían ser invocadas desde un programa BASIC. Estas se ubicaban típicamente en un área reservada de la memoria, o se insertaban en constantes de cadena, como una serie de códigos de máquina ( opcodes ). MBASIC también proporcionaba hardware INPe OUTinstrucciones que leían y escribían directamente en los puertos de entrada/salida del hardware del 8080. Esto podía usarse para controlar dispositivos periféricos desde un programa BASIC si el hardware del sistema lo permitía.
Cualquier programa MBASIC que hiciera uso de PEEKy POKE, y de funciones de usuario de código de máquina, no era portable entre máquinas sin modificaciones.
Sucesores de MBASIC
Además del BASIC-80 de Microsoft para CP/M, también estaba disponible una variante de MBASIC para el sistema operativo ISIS-II .
MSX-BASIC también es un conocido sucesor de MBASIC, con varias extensiones específicas para las máquinas MSX .
Todas las funciones de CP/M MBASIC estaban disponibles en el BASICA o GWBASIC basado en disco de IBM PC , lo que hizo posible la migración de programas de sistemas CP/M a sistemas compatibles con PC. Los tokens utilizados para representar palabras clave eran diferentes, por lo que los programas CP/M debían guardarse en formato fuente ASCII. Normalmente, las secuencias de escape de formato de pantalla incluidas en la versión CP/M se reemplazaban con los comandos de posicionamiento del cursor que se encuentran en las versiones de BASIC para PC; de lo contrario, no se necesitaba reescribir mucho.
BASCOM
Microsoft vendió un compilador BASIC CP/M (conocido como BASCOM ) que utilizaba un lenguaje fuente similar al de MBASIC. Un programa depurado con MBASIC podía compilarse con BASCOM. Como el texto del programa ya no estaba en la memoria y los elementos de tiempo de ejecución del compilador eran más pequeños que los del intérprete, había más memoria disponible para los datos del usuario. La velocidad de ejecución del programa real aumentó aproximadamente tres veces.
Los desarrolladores acogieron con agrado BASCOM como una alternativa al popular pero lento y torpe CBASIC . A diferencia de CBASIC, BASCOM no necesitaba un preprocesador para el código fuente de MBASIC, por lo que podía depurarse de forma interactiva. [2] Una desventaja era el requisito de Microsoft de una regalía del 9% por cada copia compilada de un programa [3] y 40 dólares por combinaciones de hardware y software. La empresa también se reservaba el derecho de auditar los registros financieros de los desarrolladores. Debido a que las tasas de regalías típicas de los autores para el software eran del 10 al 25%, InfoWorld en 1980 afirmó que la tasa de regalías adicional del 9% de BASCOM "podría hacer que el desarrollo de software fuera totalmente no rentable", concluyendo que "Microsoft tiene la solución técnica [a los defectos de CBASIC], pero no la económica". [2]
Importancia del MBASIC
MBASIC fue una herramienta importante durante la era de las computadoras CP/M de 8 bits. Los usuarios expertos podían escribir rutinas en MBASIC para automatizar tareas que en los sistemas actuales se realizarían mediante comandos de programas de aplicación potentes o lenguajes de programación. El intercambio de programas MBASIC útiles era una función común de los grupos de usuarios de computadoras . Introducir largas listas BASIC de un artículo de revista era una forma de "arrancar" el software en un nuevo sistema CP/M. Al menos un compilador para un lenguaje de alto nivel se escribió en MBASIC, y se escribieron muchos juegos pequeños y programas de utilidad que iban desde unas pocas líneas hasta unos miles de líneas de código.
Otros usos
MBASIC también es el nombre de un compilador BASIC comercial para la familia de microcontroladores PIC de Microchip Technology desarrollado por Basic Micro, Inc., no relacionado con el intérprete CP/M.
Referencias
- ^ Los productos CP/M que ofrecían compatibilidad con edición en pantalla completa requerían sus propias rutinas de instalación para personalizar el software para la terminal informática específica utilizada como consola del sistema. CP/M no ofrecía compatibilidad para estandarizar las capacidades de la terminal.
- ^ ab "Editorial". InfoWorld . 1980-08-18. pág. 8.
- ^ Pournelle, Jerry (diciembre de 1980). «BASIC, lenguajes informáticos y aventuras informáticas». BYTE . p. 222 . Consultado el 18 de octubre de 2013 .
- Thom Hogan y Mike Iannamico, Guía de referencia del usuario de Osborne 1 (1982), Osborne Computer Corporation
- David A. Lien, The BASIC Handbook , 2.ª edición, Enciclopedia del lenguaje informático BASIC (1981), Compusoft Publishing
- Manual de referencia de BASIC 80 , Microsoft Corporation, sin fecha