HP Time-Shared BASIC - HP Time-Shared BASIC
Paradigma | imperativo |
---|---|
Desenvolvedor | Mike Green |
Apareceu pela primeira vez | antes de 1969 |
SO | HP 2100 |
Influenciado por | |
Dartmouth BASIC | |
Influenciado | |
Cf. SDS BASIC , Integer BASIC , Atari BASIC , muitos outros |
HP Time-Shared BASIC ( HP TSB ) é uma linguagem de programação BASIC intérprete para Hewlett-Packard 's HP 2000 linha de minicomputadores baseados de tempo compartilhado sistemas de computador. TSB é historicamente notável como a plataforma que lançou as primeiras versões públicas do jogo Star Trek .
O sistema implementa um dialeto de BASIC, bem como uma conta de usuário rudimentar e biblioteca de programa que permite que várias pessoas usem o sistema ao mesmo tempo. Os sistemas foram uma grande força do início a meados da década de 1970 e geraram um grande número de programas. A HP mantinha um banco de dados de programas contribuídos e os clientes podiam encomendá-los em fita perfurada por uma taxa nominal.
A maioria dos BASICs da década de 1970 remonta ao Dartmouth BASIC original da década de 1960, mas as primeiras versões de Dartmouth não lidavam com variáveis de string e os fornecedores adicionavam suas próprias soluções. Isso levou a dois estilos gerais; O DEC introduziu as MID/LEFT/RIGHT
funções, enquanto o TSB usava um sistema mais parecido com o Fortran e outras linguagens com divisão de array .
Quando os microcomputadores começaram a entrar no mercado em meados da década de 1970, surgiram muitos novos BASICs que baseavam seus analisadores na sintaxe de DEC ou HP. Altair BASIC , a versão original do que se tornou o Microsoft BASIC , foi padronizado no BASIC-PLUS do DEC . Outros, incluindo Integer BASIC da Apple , Atari BASIC e North Star BASIC foram padronizados no estilo HP. Isso tornava as conversões entre essas plataformas um tanto difíceis se o manuseio de strings fosse encontrado.
Nomenclatura
O software também era conhecido por seu nome com versão, vinculado à versão do hardware em que era executado, como HP 2000C Time-Shared BASIC e o sistema operacional vinha em diferentes variedades - 2000A, 2000B, 2000C, High-Speed 2000C, 2000E, e 2000F.
A HP também se referiu ao idioma como "Access BASIC" em algumas publicações. Isso correspondia à nomenclatura das máquinas nas quais era executado, conhecido como "2000 / Access" em algumas publicações. Esta terminologia parece ter sido usada apenas brevemente quando a plataforma foi lançada pela primeira vez.
Detalhes da plataforma
Exceto para os sistemas 2000A e 2000E, o sistema é implementado usando uma arquitetura de processador duplo . Um processador HP série 2100 totalmente configurado é usado para a execução da maior parte do código do sistema e todo o código do usuário, enquanto um segundo processador HP série 2100 menor é usado para lidar com as linhas seriais RS-232 através das quais o tempo -sharing usuários conectados. Dependendo da configuração do hardware, o sistema suporta até 16 ou até 32 usuários remotos simultâneos.
O terminal usual para um sistema TSB era um Teletype Model 33 ASR e conectado diretamente ao processador de E / S ou através de um modem ou acoplador acústico . Os nomes das contas são uma combinação de um caractere alfabético, seguido por três dígitos decimais, por exemplo , B001. As contas privilegiadas começavam com a letra "A" e tinham alguns comandos adicionais e recursos de armazenamento de programa. A conta de superusuário é A000. Este esquema permite até 26.000 contas de usuário.
Durante a execução, os programas do usuário são trocados por uma unidade de cabeça fixa - fisicamente um disco, mas operando como um tambor magnético . Quando não estão em execução, os programas do usuário são armazenados em um cartucho de cabeça móvel ou em um armazenamento em disco carregado com pacote . Os usuários privilegiados também podem armazenar programas no tambor muito mais rápido. O disco rígido foi armazenado em fita magnética .
Os nomes de programas e arquivos consistem em uma mistura de até seis caracteres alfabéticos (AZ) e números (0-9). Os programas são armazenados em um formato tokenizado , usando o comando SAVE. Eles também podem ser armazenados em um formato semi-compilado, usando o comando CSAVE, que lhes permite iniciar mais rápido. Como o sistema estava intimamente ligado ao uso de teleimpressoras comumente disponíveis, as terminações de linha nos arquivos consistiam no caractere de retorno de carro (ASCII CR, 0D hexadecimal), seguido pelo caractere de alimentação de linha (ASCII LF, 0A hexadecimal).
Sintaxe
A linguagem é uma implementação razoavelmente padrão do BASIC, fornecendo um ambiente integrado de edição e execução. As instruções são analisadas quanto à sintaxe correta à medida que são inseridas e, a seguir, armazenadas em forma de token. Cada instrução BASIC deve estar em uma linha numerada exclusivamente, por exemplo
10 PRINT "HELLO WORLD"
Os números das linhas são obrigatórios e as instruções são colocadas automaticamente em seqüência numérica crescente. As linhas TSB podem conter uma instrução, o encadeamento de várias instruções com dois pontos, como no MS BASIC, não é suportado. Várias atribuições de variáveis são permitidos, por exemplo , . Como na maioria das versões do BASIC, o uso da palavra "LET" era opcional.
20 LET A=B=C=42
Na versão mais antiga (2000A), a linguagem suportava os seguintes recursos. Versões posteriores adicionaram muitos outros recursos.
- Controle de fluxo de programa incondicional por meio de
GOTO
instruções e sub - rotinas por meio de instruçõesGOSUB
eRETURN
- Controle de fluxo condicional via
IF/THEN
instrução - Controle de fluxo calculado por meio das instruções
GOTO/OF
eGOSUB/OF
- Loop de bloco baseado em variável
FOR
eNEXT
instruções - Armazenamento de dados em código via
DATA
,READ
eRESTORE
declarações - Entrada de e saída para o usuário ou um disco de arquivos via
INPUT
,READ #
,PRINT
,PRINT #
, eIF END #
declarações - Variáveis numéricas da forma "A" ou "A n " (onde A é uma única letra e n é um único dígito opcional) armazenadas como números de ponto flutuante de 32 bits
- Variáveis de string da forma "A $" (onde A é uma única letra), armazenando de 0 a 72 caracteres
- Variáveis de matriz (array) unidimensional ou bidimensional da forma "A [x]" ou "A [x, y]"
- Operações de matriz por meio de declarações (
MAT READ, MAT INPUT, MAT PRINT, MAT=
) e operações (+, -, *, ZER, CON, IDN, INV, TRN
) - Operadores booleanos (
AND, OR, NOT
) e operadores relacionais (<, <=, =, #, <>, >=, and >
) - Funções matemáticas integradas, incluindo trigonométricas (
SIN, COS, TAN, ATN
), logaritmos (LOG, EXP
), raiz quadrada (SQR
), gerador de números aleatórios (RND
), outros (ABS, INT, SGN, MIN, MAX)
e funções definidas pelo usuário - Operações de fita perfurada usando terminais remotos teletipo eletromecânico modelo 33
Manuseio de cordas
Strings no TSB são tratadas como uma matriz de caracteres, em vez de um único objeto de vários caracteres. Por padrão, eles recebem um caractere na memória e, se uma string de comprimento maior for necessária, eles devem ser mencionados antes do uso. Por exemplo, irá configurar uma string que pode conter no máximo 10 caracteres. O comprimento máximo de uma string no TSB é de 72 caracteres.
DIM A$[10]
Substrings dentro de strings são acessadas usando uma notação de " fatiamento ": ou , onde a substring começa com o caractere mais à esquerda especificado pelo índice L e continua até o caractere mais à direita especificado pelo índice R, ou a forma em que a substring começa no caractere mais à esquerda especificado pelo índice L e continua até o final da string. TSB aceita () ou [] de forma intercambiável. Os índices de matriz e substring começam com 1.
A$(L,R)
A$[L,R]
A$[L]
Isso está em nítido contraste com os BASICs que seguem o padrão DEC que usam funções como LEFT$()
, MID$()
e RIGHT$()
para acessar substrings, embora ANSI BASIC continue a usar uma sintaxe de substring semelhante àquela introduzida pela Hewlett-Packard. A notação da HP também pode ser usada no lado de destino de uma instrução LET ou INPUT para modificar parte de um valor de string existente, por exemplo ou , o que não pode ser feito com as primeiras implementações de LEFT / MID / RIGHT.
100 A$[3,5]="XYZ"
120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS"
A principal vantagem desse estilo de acesso à string é que ele elimina a necessidade de gerenciamento de memória complexo que, de outra forma, é necessário quando os comprimentos das strings mudam. O MS BASIC tinha uma biblioteca extensa para lidar com a compactação da memória, removendo o espaço morto no heap da string quando o sistema ficava sem memória. Ele também era notoriamente lento e foi modificado várias vezes ao longo de sua vida útil para melhorar o desempenho ou corrigir bugs. A desvantagem do estilo TSB é que a string sempre ocupa todo o espaço DIMed, mesmo se a string dentro estiver vazia, e tarefas simples como concatenação podem potencialmente estourar a string, a menos que ela tenha sido definida para um tamanho grande para começar.
Versões posteriores do Dartmouth BASIC incluíam variáveis de string, com base no mesmo padrão encontrado em BASIC-PLUS e MS BASIC. No entanto, esta versão não usa as funções LEFT / MID / RIGHT para manipular strings, mas em vez disso usa o CHANGE
comando que converte a string para e a partir de valores ASCII equivalentes. A HP incluiu funcionalidade idêntica, mudando apenas o nome para CONVERT
. Além disso, pode-se usar aspas simples para converter uma constante numérica em um caractere ASCII, permitindo construir uma string em partes; produziu a string "ABCDEF", sem a necessidade da função.
A$='23 '64 '49 "DEF"
CHR$()
Comandos MAT
Versões posteriores do Dartmouth BASIC incluíam um conjunto de MAT
comandos que permitia operações em arrays inteiros ( matrizes ) com uma única instrução. Eles também estavam disponíveis em versões posteriores do TSB. Em sua forma mais simples, o MAT
é usado como uma forma alternativa de LET
, aplicando uma expressão a todos os elementos em um array. Por exemplo:
100 DIM A(20),B(20)
...
200 MAT A=A+B
Adicionará o valor de cada valor em B a cada entrada em A, da mesma forma que:
100 DIM A(20),B(20)
...
200 FOR I=1 TO 20
210 A[I]=A[I]+B[I]
220 NEXT I
Além de tornar o código mais curto e óbvio, esses comandos também têm a vantagem de serem altamente otimizados, superando facilmente o uso de FOR / NEXT. Funções e instruções adicionais modificam PRINT
e INPUT
invertem matrizes e constroem matrizes de identidade em uma única instrução.
Outras diferenças
O TSB também inclui várias diferenças menores com outros dialetos. Entre os mais importantes estão:
-
#
é uma forma opcional de comparação não igual, idêntica a<>
-
computed-goto usando a
ON...GOTO/GOSUB
sintaxe não é compatível. Em vez disso, o executa a mesma função, escolhendo um número de linha da lista com base em sua posição ordinal. Por exemplo, sempre irá para a linha 10, enquanto que irá ramificar para linhas diferentes se o valor de A for 1, 2 ou 3.GOTO expression OF 1,2,3...
GOTO 1 OF 10,20,30
GOSUB A OF 100,200,300
- Booleana e operadores relacionais pode ser usado em qualquer expressão matemática, retornando 0 para falso ou 1 para verdadeiro, o que era incomum para as línguas básicas de que o tempo, mas popular em linguagens como C . Por exemplo, irá desviar para a linha 1600 se C ou D forem maiores que zero, porque a expressão será avaliada como 'verdadeira' no . Se C e D forem ambos zero, o avaliará como 'falso' e o desvio não será obtido.
IF C+D THEN 1600
C+D
IF
IF
- O TSB inclui
ENTER
uma variação daINPUT
instrução padrão que continua após um limite de tempo ser atingido.ENTER
tem três entradas, um limite de tempo em segundos, uma variável de retorno contendo o tempo real decorrido (ou um código de status) e, finalmente, a entrada do usuário. Por exemplo, esperará 15 segundos para que o usuário digite um único caractere. T conterá o tempo real que eles levaram, -256 se o cronômetro expirou, ou -257 ou -258 para indicar problemas com o terminal.ENTER 15,T,A$[1,1]
- Ao imprimir constantes de string (literais), os pontos-e-vírgulas não são necessários na linha. Por exemplo, não requer ponto e vírgula entre as constantes de string e a variável A. Alguns outros BASICs, incluindo MS, também suportam esta sintaxe. Outros, como Atari ou Integer, não.
PRINT "THE NUMBER IS"A", TRY A LARGER VALUE."
- A
PRINT
tabulação em uso para muito 15 caracteres, deixando 12 no final da linha para um total de 72. - A
LIN
função funciona como uma contrapartida vertical paraTAB
. irá inserir três retornos de carro, potencialmente na linha existente se um ponto-e-vírgula ou vírgula final estiver ativo, enquanto o caso especial sempre avançará para a próxima linha. Integer BASIC tinha um recurso semelhante, chamado .LIN(3)
LIN(-1)
VTAB
Veja também
- Rocky Mountain BASIC , outro dialeto muito diferente do BASIC criado na Hewlett-Packard
Referências
Citações
Bibliografia
- Manual de referência HP 2000 / Access BASIC (PDF) . Hewlett Packard. Maio de 1976., Parte No. 22687-90001
- HP 2000 / Access Learning Timeshare BASIC (PDF) . Hewlett Packard. Maio de 1976., Parte No. 22687-90009
links externos
- www.bitsavers.org - Documentação arquivada da HP (digitalizada em PDF)
- Intérprete básico compatível com HP 2000
- HP Computer Museum
- BTI Computer Systems History