Articulo de referencia

HP Time-Shared BASIC

[https://www.wkbpic.com/wkbx/SA/1968/1968-09-01.pdf HP ad: \"a measure of progress\"]. ''Scientific American'', vol. 219, no. 3, pp. 44-45. Sept. 1968. Retrieved 2025-10-29. Tho...

HP Time-Shared BASIC ( HP TSB ) es un intérprete del lenguaje de programación BASIC para la línea HP 2000 de minicomputadoras de Hewlett-Packard, que utilizaban sistemas de tiempo compartido . TSB es históricamente conocido por ser la plataforma que lanzó las primeras versiones públicas del juego Star Trek .

El sistema implementa un dialecto de BASIC, así como una cuenta de usuario rudimentaria y una biblioteca de programas que permite que varias personas lo utilicen simultáneamente. Estos sistemas fueron muy populares a principios y mediados de la década de 1970 y generaron una gran cantidad de programas. HP mantenía una base de datos de programas aportados por la comunidad, y los clientes podían solicitarlos en cinta perforada por un precio simbólico.

La mayoría de los lenguajes BASIC de la década de 1970 tienen su origen en el BASIC original de Dartmouth de la década de 1960, pero las primeras versiones de Dartmouth no manejaban variables de cadena ni ofrecían funciones de manipulación de cadenas. Los proveedores añadieron sus propias soluciones; HP utilizó un sistema similar al de Fortran y otros lenguajes con segmentación de matrices , mientras que DEC introdujo posteriormente estas MID/LEFT/RIGHTfunciones.

A mediados de la década de 1970, con la llegada de los microordenadores al mercado, surgieron numerosos BASIC nuevos que basaban sus analizadores sintácticos en la sintaxis de DEC o HP. Altair BASIC , la versión original de lo que se convertiría en Microsoft BASIC , se inspiró en BASIC-PLUS de DEC. Otros, como Integer BASIC de Apple , Atari BASIC y North Star BASIC, se basaron en el estilo de HP. Esto dificultaba las conversiones entre estas plataformas al trabajar con cadenas de caracteres.

Nomenclatura

El software también era conocido por su nombre de versión, vinculado a la versión del hardware en el que se ejecutaba, como HP 2000C Time-Shared BASIC , y el sistema operativo venía en diferentes variedades  : 2000A, 2000B, 2000C, High-Speed ​​2000C, 2000E y 2000F.

HP también se refería al lenguaje como "Access BASIC" en algunas publicaciones. Esto coincidía con la nomenclatura de las máquinas en las que se ejecutaba, conocidas como "2000/Access" en algunas publicaciones. Esta terminología parece haber sido utilizada solo brevemente cuando se lanzó la plataforma.

Detalles de la plataforma

A excepción de los sistemas 2000A y 2000E, el sistema se implementa mediante una arquitectura de doble procesador . Un procesador HP serie 2100 completamente configurado se utiliza para la ejecución de la mayor parte del código del sistema y todo el código de usuario, mientras que un segundo procesador HP serie 2100, de menor tamaño, se utiliza para gestionar las líneas serie RS-232 a través de las cuales se conectan los usuarios de tiempo compartido . Dependiendo de la configuración de hardware, el sistema admite hasta 16 o hasta 32 usuarios remotos simultáneos.

El terminal habitual para un sistema TSB era un Teletipo Modelo 33 ASR, conectado directamente al procesador de E/S o mediante un módem o acoplador acústico . Los nombres de cuenta se componen de una letra seguida de tres dígitos decimales, por ejemplo , B001. Las cuentas privilegiadas comenzaban con la letra "A" y disponían de capacidades adicionales de almacenamiento de comandos y programas. La cuenta de superusuario es A000. Este esquema permite hasta 26 000 cuentas de usuario.

Durante la ejecución, los programas de usuario se transfieren a una unidad de cabezal fijo  (físicamente un disco, pero que funciona como un tambor magnético ). Cuando no se ejecutan, los programas de usuario se almacenan en discos de carga por cartucho o paquete de cabezal móvil . Los usuarios con privilegios también pueden almacenar programas en el tambor, que es mucho más rápido. Se realizó una copia de seguridad del disco duro en cinta magnética .

Los nombres de programas y archivos constan de una combinación de hasta seis caracteres alfabéticos (AZ) y números (0-9). Los programas se almacenan en formato tokenizado mediante el comando SAVE. También pueden almacenarse en formato semicompilado mediante el comando CSAVE, lo que permite una ejecución más rápida. Dado que el sistema estaba estrechamente vinculado al uso de teletipos comunes, los finales de línea en los archivos consistían en el carácter de retorno de carro (ASCII CR, 0D hexadecimal), seguido del carácter de salto de línea (ASCII LF, 0A hexadecimal).

Sintaxis

El lenguaje es una implementación bastante estándar de BASIC, que proporciona un entorno de edición y ejecución integrado. Las instrucciones se analizan para comprobar su sintaxis correcta a medida que se introducen y luego se almacenan en forma tokenizada. Cada instrucción BASIC debe estar en una línea numerada de forma única, por ejemplo

10 IMPRIMA "HOLA MUNDO"

Los números de línea son obligatorios y las instrucciones se colocan automáticamente en secuencia numérica ascendente. Las líneas TSB pueden contener una instrucción; no se admite encadenar varias instrucciones con los dos puntos como en MS BASIC. Se permiten asignaciones de variables múltiples, por ejemplo , . Como en la mayoría de las versiones de BASIC, el uso de la palabra "LET" era opcional.20LETA=B=C=42

En la versión más antigua (2000A), el lenguaje admitía las siguientes características. [ 4 ] Las versiones posteriores añadieron muchas más características. [ 5 ]

  • Control de flujo de programa incondicional mediante GOTOsentencias y subrutinas mediante sentencias GOSUBAND .RETURN
  • Control de flujo condicional mediante IF/THENsentencia
  • Control de flujo calculado mediante las declaraciones GOTO/OFyGOSUB/OF
  • FORBucle de bloque y NEXTsentencias basadas en variables
  • Almacenamiento de datos en el código mediante las declaraciones DATA, READ, yRESTORE
  • Entrada y salida del usuario o de un archivo de disco mediante las instrucciones INPUT, READ #, PRINT, PRINT #, yIF END #
  • Variables numéricas de la forma "A" o "A n " (donde A es una sola letra y n es un solo dígito opcional).
  • Variables de cadena del tipo "A$" (donde A es una sola letra), que almacenan de 1 a 255 caracteres según su dimensión. (Véase más abajo). (O bien: variables con nombres "A0$" o "A1$", pero nunca con más de estos dos dígitos).
  • Variables matriciales (arrays) unidimensionales o bidimensionales de la forma "A[x]" o "A[x,y]".
  • Operaciones matriciales mediante sentencias ( MAT READ, MAT INPUT, MAT PRINT, MAT=) y operaciones ( +, -, *, ZER, CON, IDN, INV, TRN)
  • Operadores booleanos ( AND, OR, NOT) y operadores relacionales ( )<, <=, =, #, <>, >=, and >
  • Funciones matemáticas integradas que incluyen trigonométricas ( SIN, COS, TAN, ATN), logaritmos ( LOG, EXP), raíz cuadrada ( SQR), generador de números aleatorios ( RND), otras ( ABS, INT, SGN, MIN, MAX), y funciones definidas por el usuario
  • Operaciones con cinta perforada mediante terminales remotas de teleimpresora electromecánica Teletype Modelo 33.

Manejo de cadenas

En TSB, las cadenas se tratan como una matriz de caracteres, en lugar de un único objeto multicaracter. Por defecto, se les asigna un carácter en memoria, y si se necesita una cadena de mayor longitud, debe especificarse antes de su uso. Por ejemplo, se configurará una cadena que puede contener un máximo de 10 caracteres. La longitud máxima de una cadena en TSB es de 255 caracteres. [ 6 ]DIMA$[10]

Se accede a las subcadenas dentro de las cadenas mediante una notación de " segmentación ": o , donde la subcadena comienza con el carácter más a la izquierda especificado por el índice L y continúa hasta el carácter más a la derecha especificado por el índice R, o la forma donde la subcadena comienza en el carácter más a la izquierda especificado por el índice L y continúa hasta el final de la cadena. TSB acepta () o [] indistintamente. Los índices de los arrays y las subcadenas comienzan con 1.A$(L,R)A$[L,R]A$[L]

Esto contrasta marcadamente con los BASIC que siguen el patrón DEC y que utilizan funciones como LEFT$(), MID$(), y RIGHT$()para acceder a subcadenas, aunque ANSI BASIC continúa utilizando una sintaxis de subcadenas similar a la introducida por Hewlett-Packard. La notación de HP también se puede utilizar en el lado de destino de una instrucción LET o INPUT para modificar parte de un valor de cadena existente, por ejemplo o , lo cual no se puede hacer con las primeras implementaciones de LEFT/MID/RIGHT.100A$[3,5]="XYZ"120B$[3]="CHANGE ALL BUT FIRST TWO CHARS"

La principal ventaja de este estilo de acceso a cadenas es que elimina la necesidad de una gestión de memoria compleja que, de otro modo, se requeriría cuando cambian las longitudes de las cadenas. MS BASIC tenía una extensa biblioteca para gestionar la compresión de memoria eliminando el espacio muerto en el montón de cadenas cuando el sistema se quedaba sin memoria. También era notoriamente lenta y se modificó varias veces a lo largo de su existencia para mejorar el rendimiento o corregir errores. [ 7 ] La desventaja del estilo TSB es que la cadena siempre ocupa la cantidad total de espacio DIMed incluso si la cadena en su interior está vacía, y tareas simples como la concatenación pueden potencialmente desbordar la cadena a menos que se haya establecido con un tamaño grande desde el principio.

Las versiones posteriores de Dartmouth BASIC sí incluían variables de cadena, basadas en el mismo patrón que se encuentra en BASIC-PLUS y MS BASIC. Sin embargo, esta versión no utilizaba las funciones LEFT/MID/RIGHT para manipular cadenas, sino que utilizaba el CHANGEcomando que convertía la cadena a y desde valores ASCII equivalentes. HP incluyó una funcionalidad idéntica, cambiando solo el nombre a CONVERT. [ 8 ] [ a ] ​​Además, se podía usar la comilla simple para convertir una constante numérica a un carácter ASCII, lo que permitía construir una cadena por partes; producía la cadena "ABCDEF", sin necesidad de la función. [ 9 ]A$='65 '66 '67 "DEF"CHR$()

Comandos MAT

Las versiones posteriores de Dartmouth BASIC incluían un conjunto de MATcomandos que permitían realizar operaciones en matrices completas con una sola instrucción. Estos también estaban disponibles en versiones posteriores de TSB. En su forma más simple, se MATutiliza como una forma alternativa de LET, aplicando una expresión a todos los elementos de una matriz. Por ejemplo:

100 DIM A ( 20 ), B ( 20 ) ... 200 MAT A = A + B

Se sumará el valor de cada valor en B a cada entrada en A, de la misma manera que:

100 DIM A ( 20 ), B ( 20 ) ... 200 PARA I = 1 HASTA 20 210 A [ I ] = A [ I ] + B [ I ] 220 SIGUIENTE I

Además de hacer el código más corto y claro, estos comandos también tienen la ventaja de estar altamente optimizados, superando fácilmente el uso de FOR/NEXT. [ 10 ] Las funciones y sentencias adicionales modifican PRINTy INPUT, invierten matrices y construyen matrices identidad y similares en una sola sentencia. [ 11 ]

Otras diferencias

TSB también incluye una serie de diferencias menores con otros dialectos. Entre las más importantes se encuentran:

  • #es una forma opcional de la comparación de desigualdad, idéntica a <>[ 12 ]
  • ON...GOTO/GOSUBNo se admite computed-goto usando la sintaxis. En su lugar, realiza la misma función seleccionando un número de línea de la lista según su posición ordinal. Por ejemplo, siempre irá a la línea 10, mientras que se ramificará a diferentes líneas si el valor de A es 1, 2 o 3. [ 13 ]GOTO expression OF 1,2,3...GOTO1OF10,20,30GOTOAOF100,200,300
  • Los operadores booleanos y relacionales se pueden usar en cualquier expresión matemática, devolviendo 0 para falso o 1 para verdadero, lo cual era inusual para los lenguajes BASIC de ese momento, pero popular en lenguajes como C. Por ejemplo, se saltará a la línea 1600 si C o D son mayores que cero, porque la expresión se evaluará como 'verdadera' en el . Si C y D son ambos cero, se evaluará como 'falsa' y no se tomará la bifurcación.IFC+DTHEN1600C+DIFIF
  • TSB incluye ENTERuna variación de la INPUTinstrucción estándar que continúa después de que se alcanza un límite de tiempo. ENTERTiene tres entradas: un límite de tiempo en segundos, una variable de retorno que contiene el tiempo real transcurrido (o un código de estado) y, finalmente, la entrada del usuario. Por ejemplo, esperará 15 segundos a que el usuario escriba un solo carácter. T contendrá el tiempo real que tardó, -256 si el temporizador expiró, o -257 o -258 para indicar problemas con la terminal. [ 14 ]ENTER15,T,A$[1,1]
  • Al imprimir constantes de cadena (literales), no se necesitan puntos y coma dentro de la línea. Por ejemplo, no se requieren puntos y coma entre las constantes de cadena y la variable A. [ 15 ] Algunos otros BASIC, incluido MS, también admitían esta sintaxis. Otros, como Atari o Integer, no.PRINT"THE NUMBER IS"A", TRY A LARGER VALUE."
  • Las comas en PRINTuso separan cada 15 caracteres, dejando 12 al final de la línea para un total de 72. [ 16 ]
  • La LINfunción opera como una contraparte vertical de TAB. insertará tres retornos de carro, potencialmente en la línea existente si había un punto y coma o coma al final, mientras que el caso especial siempre avanzará a la siguiente línea. [ 17 ] Integer BASIC tenía una característica similar, llamada .LIN(3)LIN(-1)VTAB

Véase también

Notas

  1. Wang BASIC también lo usabaCONVERT, pero convertía números en cadenas, como laVALfunción.

Referencias

Citas

  1. Anuncio de HP: "una medida de progreso" . Scientific American , vol. 219, n.º 3, págs. 44-45. Septiembre de 1968. Consultado el 29 de octubre de 2025.
  2. Thomas C. Poulter, Jr. (julio de 1968). «Un sistema informático práctico de tiempo compartido» . Hewlett-Packard Journal , vol. 19, n.º 11, págs. 2-7. Archivado el 6 de diciembre de 2011. Consultado el 29 de octubre de 2025.
  3. "Historia de los sistemas informáticos de BTI" . Sistemas informáticos de BTI. Consultado el 29 de octubre de 2025.
  4. HP 2000A - Guía del usuario, agosto de 1969 Número de pieza 02000-90002,Consultado el 9 de mayo de 2016.
  5. HP 2000/Access BASIC - Manual de referencia, número de pieza 22687-90001,Consultado el 9 de mayo de 2016.
  6. Ref. 1976 , pág. 4-3.
  7. "Crea tu propia versión de Microsoft BASIC" .
  8. Ref. 1976 , págs. 4-6.
  9. Ref. 1976 , pág. 4-2.
  10. Ref. 1976 , págs. 11-50.
  11. Ref. 1976 , págs. 11–49, 11–55.
  12. Ref. 1976 , págs. 2-5.
  13. Ref. 1976 , pág. F-4.
  14. Ref. 1976 , págs. 2-15.
  15. Ref. 1976 , págs. 2-10.
  16. Ref. 1976 , págs. 2-9.
  17. Ref. 1976 , págs. 2-11.

Bibliografía

  • Manual de referencia de HP 2000/Access BASIC (PDF) . Hewlett Packard. Mayo de 1976., Número de pieza 22687-90001
  • HP 2000/Access Learning Timeshare BASIC (PDF) . Hewlett Packard. Mayo de 1976., Número de pieza 22687-90009
  • www.bitsavers.org  — Documentación archivada de HP (escaneada en formato PDF)
  • Intérprete básico compatible con HP 2000
  • Museo de Informática HP
  • Historia de los sistemas informáticos de BTI