HP Time-Shared BASIC - HP Time-Shared BASIC

HP Time-Shared BASIC
Paradigma imperativo
Desenvolvedor Mike Green
Apareceu pela primeira vez antes de 1969 ; 52 anos atrás ( 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/RIGHTfunçõ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 GOTOinstruções e sub - rotinas por meio de instruções GOSUBeRETURN
  • Controle de fluxo condicional via IF/THENinstrução
  • Controle de fluxo calculado por meio das instruções GOTO/OFeGOSUB/OF
  • Loop de bloco baseado em variável FORe NEXTinstruções
  • Armazenamento de dados em código via DATA, READe RESTOREdeclarações
  • Entrada de e saída para o usuário ou um disco de arquivos via INPUT, READ #, PRINT, PRINT #, e IF 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 CHANGEcomando 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 MATcomandos 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 PRINTe INPUTinvertem 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/GOSUBsintaxe 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,30GOSUB 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 1600C+DIFIF
  • O TSB inclui ENTERuma variação da INPUTinstrução padrão que continua após um limite de tempo ser atingido. ENTERtem 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 PRINTtabulação em uso para muito 15 caracteres, deixando 12 no final da linha para um total de 72.
  • A LINfunção funciona como uma contrapartida vertical para TAB. 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

Referências

Citações

Bibliografia

links externos