GW-BASIC es un dialecto del lenguaje de programación BASIC desarrollado por Microsoft a partir de IBM BASICA . Funcionalmente idéntico a BASICA, su intérprete BASIC es un ejecutable completamente autónomo y no necesita la ROM Cassette BASIC que se encuentra en el original. Microsoft lo incluyó en los sistemas operativos MS-DOS de los equipos IBM PC compatibles .
El lenguaje es adecuado para juegos simples, programas de negocios y similares. Dado que se incluyó con la mayoría de las versiones de MS-DOS, también fue una forma de bajo costo para muchos programadores aspirantes de aprender los fundamentos de la programación informática . [2] [3] Microsoft también vendió un compilador BASIC , BASCOM, compatible con GW-BASIC, para programas que necesitaban más velocidad.
Según Mark Jones Lorenzo, dado el alcance del lenguaje, "GW-BASIC es posiblemente el non plus ultra de la familia de BASIC numerados por líneas de Microsoft que se remonta a Altair BASIC , y quizás incluso del BASIC numerado por líneas en general". [4]
Con el lanzamiento de MS-DOS 5.0, el lugar de GW-BASIC fue tomado por QBasic , una versión ligeramente abreviada de la parte de intérprete del paquete de intérprete y compilador QuickBASIC disponible por separado . [5]
El 21 de mayo de 2020, Microsoft publicó el código fuente del ensamblador 8088 para GW-BASIC 1.0 en GitHub bajo la licencia MIT . [1]
IBM BASICA y GW-BASIC son en gran medida versiones de MBASIC versión 5.x, pero con características añadidas específicamente para el hardware de IBM PC. Las características comunes de BASIC-80 5.x y BASICA/GW-BASIC incluyen:
WHILE...WEND
buclesOPTION BASE
Declaración para establecer el índice inicial de las variables de matriz como 0 o 1LINE INPUT
, que permitía ignorar caracteres separadores de campo como la comaCALL
Declaración para ejecutar rutinas en lenguaje de máquinaCHAIN
y MERGE
ordenaLa capacidad de "comprimir" líneas de programa omitiendo espacios, una característica común de las implementaciones anteriores de Microsoft BASIC, fue eliminada de BASIC-80 5.x y BASICA/GWBASIC.
Los programas BASIC-80 que no utilizan sentencias PEEK
/ POKE
se ejecutan bajo GW-BASIC. BASICA añade muchas funciones para IBM PC, como sonido, gráficos y comandos de memoria. Las funciones que no están presentes en BASIC-80 incluyen la capacidad de ejecutar la RND
función sin parámetros y la capacidad de guardar programas en un formato "protegido", lo que impide que se LIST
editen. BASICA también permite utilizar números de doble precisión con funciones matemáticas y trigonométricas como COS
, SIN
, y ATN
, lo que no estaba permitido en las versiones de 8 bits de BASIC. Esta función normalmente no estaba habilitada y requería el parámetro opcional /D
al inicio, es decir, . La huella de memoriaGWBASIC /D
de BASIC aumentaba ligeramente si se utilizaba.
Microsoft no ofreció una versión genérica de MS-DOS hasta la versión 3.20 en 1986; antes de esa fecha, todas las variantes del sistema operativo eran versiones OEM. Dependiendo del OEM, BASIC se distribuía como BASICA.EXE o GWBASIC.EXE. El primero no debe confundirse con IBM BASICA, que siempre se presentaba como un archivo COM . Algunas variantes de BASIC tienen características adicionales para dar soporte a una máquina en particular. Por ejemplo, las versiones AT&T y Tandy de DOS incluyen un GW-BASIC especial que da soporte a sus capacidades mejoradas de sonido y gráficos.
La versión inicial de GW-BASIC es la que se incluye con Compaq DOS 1.13, lanzada con Compaq Portable en 1983, y era análoga a IBM BASICA 1.10. Utiliza los bloques de control de archivos derivados de CP/M para el acceso al disco y no admite subdirectorios. Las versiones posteriores admiten subdirectorios, gráficos mejorados y otras funciones.
GW-BASIC 3.20 (1986) agrega soporte para gráficos EGA (ninguna versión de BASICA o GW-BASIC tenía soporte VGA ) y es la última versión nueva importante lanzada antes de que fuera reemplazada por QBasic .
Los compradores de tarjetas gráficas Hercules recibieron una versión especial de GW-BASIC en el disco de utilidades de la tarjeta, llamada HBASIC, que agrega compatibilidad con sus gráficos monocromos de 720x348. Otras versiones de BASICA/GW-BASIC no admiten gráficos Hercules y solo pueden mostrar gráficos en esa tarjeta mediante el uso de emulación CGA de terceros , como SIMCGA.
GW-BASIC tiene un entorno de desarrollo integrado (IDE) basado en línea de comandos basado en Dartmouth BASIC . Utilizando las teclas de movimiento del cursor, se puede editar cualquier línea que se muestre en la pantalla. También incluye atajos de teclas de función en la parte inferior de la pantalla. Al igual que otras versiones tempranas de BASIC para microcomputadoras , GW-BASIC carece de muchas de las estructuras necesarias para la programación estructurada , como las variables locales. Los programas de GW-BASIC se ejecutaban con relativa lentitud porque era un lenguaje interpretado . Todas las líneas del programa deben estar numeradas; todas las líneas no numeradas se consideran comandos en modo directo que se deben ejecutar inmediatamente. Los archivos fuente del programa normalmente se guardan en formato binario comprimido con tokens reemplazando palabras clave, con una opción para guardar en formato de texto ASCII . [6]
El entorno de línea de comandos de GW-BASIC tiene comandos para RUN
, LOAD
, SAVE
, LIST
el programa actual o salir al sistema operativo SYSTEM
; estos comandos también se pueden usar como declaraciones de programa. Hay poco soporte para programación estructurada en GW-BASIC. Todas las declaraciones condicionalesIF
// deben escribirse en una línea, aunque las declaraciones / pueden agrupar varias líneas. Las funciones solo se pueden definir utilizando la declaración de una sola línea (por ejemplo, ). El tipo de datos de las variables se puede especificar con un carácter al final del nombre de la variable: es una cadena de caracteres, es un entero , etc. Los grupos de variables también se pueden establecer en tipos predeterminados según la letra inicial de su nombre mediante el uso de las declaraciones , , etc. El tipo predeterminado para las variables no declaradas no identificadas por dichas declaraciones de tipado es punto flotante de precisión simple ( MBF de 32 bits ). [7]THEN
ELSE
WHILE
WEND
DEF FNf(x)=<mathematical function of x>
DEF FNLOG(base,number)=LOG(number)/LOG(base)
A$
A%
DEFINT
DEFSTR
GW-BASIC permite el uso de dispositivos de entrada de joystick y lápiz óptico . GW-BASIC puede leer y escribir en archivos y puertos COM ; también puede realizar captura de eventos para puertos. Dado que la interfaz de puerto de cinta de casete del IBM PC original nunca se implementó en los compatibles, las operaciones de casete no están admitidas. GW-BASIC puede reproducir música simple utilizando la PLAY
declaración, que necesita una cadena de notas representadas en un lenguaje de macro musical , por ejemplo, PLAY "edcdeeL2edfedL4c"
. Es posible un control de nivel más bajo con la SOUND
declaración, que toma los argumentos de una frecuencia en hercios y una longitud en ticks de reloj para el altavoz interno estándar de la PC en las máquinas IBM. En consecuencia, el sonido se limita a pitidos y silbidos de un solo canal, como corresponde a una máquina "comercial". GW-BASIC para Tandy 1000 permite hasta tres canales de sonido para los comandos SOUND
y . [7]PLAY
Existen varias teorías sobre el significado de las iniciales "GW". Greg Whitten , uno de los primeros empleados de Microsoft que desarrolló los estándares de la línea de compiladores BASIC de la compañía, afirma que Bill Gates eligió el nombre GW-BASIC. Whitten se refiere a él como Gee-Whiz BASIC y no está seguro de si Gates le puso su nombre al programa. [8] El Manual de usuario de Microsoft de Microsoft Press también se refiere a él con el nombre Gee-Whiz BASIC. [ cita requerida ] También puede haber sido apodado Gee-Whiz debido a sus numerosos comandos gráficos . [8] Otras teorías comunes sobre el origen de las iniciales incluyen "Graphics and Windows", " Gates, William " (presidente de Microsoft en ese momento) o "Gates–Whitten" (los dos diseñadores principales del programa). [9] [10]