Programação com Integer BASIC



Integer BASIC
Programação com Integer BASIC



Um pouco da história do Integer BASIC

No último ano do ensino médio, o professor de eletrônica de Steve Wozniak providenciou para que os principais alunos da turma tivessem vagas em empresas de eletrônicos locais. Wozniak foi enviado para Sylvania onde programou em FORTRAN em um IBM 1130.

Alguns anos depois, Wozniak estava trabalhando na Hewlett-Packard (HP) executando simulações de projetos de chips e layout lógico para calculadoras. Por aproximadamente $ 100.000, pode-se construir uma máquina razoavelmente equipada que pode suportar entre 16 e 32 usuários executando programas BASIC. A HP seguiu isso com o HP 9830, uma máquina do tamanho de um desktop por US$ 10.000 que também executava o BASIC, ao qual Wozniak tinha acesso.

Em janeiro de 1975, o Altair 8800 foi anunciado e desencadeou a revolução do microcomputador. Em março, Wozniak participou da primeira reunião do Homebrew Computer Club e começou a formular o projeto de seu próprio computador. Um dos softwares mais importantes para o Altair, e um dos mais pirateados, foi o Altair BASIC da recém-formada Microsoft. Wozniak concluiu que sua máquina teria que ter um BASIC próprio, que seria, esperançosamente, o primeiro para o processador MOS 6502. Como a linguagem precisava de 4 kB de RAM, ele fez disso a memória mínima para o projeto.

As rAs referências de Wozniak para BASIC eram uma cópia de 101 BASIC Computer Games e um manual do HP BASIC. Ele não sabia que o BASIC da HP era muito diferente da versão DEC BASIC usada em 101 Games, que também era a base do Microsoft BASIC para o Altair.
Com base nessas fontes, Wozniak começou a esboçar a sintaxe para a linguagem. O projeto inicialmente incluía suporte para números de ponto flutuante, mas na esperança de conseguir publicar o primeiro BASIC para o 6502 e se tornar "uma estrela", ele decidiu abandonar o ponto flutuante e escrever um sistema apenas com números inteiros para economizar algumas semanas de tempo de programação.

Wozniak mais tarde descreveria sua linguagem como "destinada principalmente a jogos e usos educacionais".
Referindo-se à linguagem durante todo o desenvolvimento como "GAME BASIC", Wozniak escreveu o código à mão, traduzindo as instruções do código assembler em seus equivalentes de código de máquina e, em seguida, enviando o resultado para seu computador. Sem nenhum treinamento sobre como escrever uma linguagem de computador, ele usou sua experiência em calculadoras HP para implementar uma máquina de pilha para interpretar expressões. Uma vez que as rotinas básicas estavam funcionando, ele trabalhou nos outros comandos um por um, de forma modular. A cada visita ao clube Homebrew, ele demonstrava mais alguns recursos adicionados no último mês.

Nos anúncios do início de 1976 para seu computador Apple I, a Apple Inc fez as afirmações de que "nossa filosofia é fornecer software para nossas máquinas gratuitamente ou a um custo mínimo" e "sim pessoal, o Apple BASIC é gratuito". Isto foi impresso logo após a infame Carta Aberta de Bill Gates aos Hobbyists que sugeria que as pessoas o estavam roubando e copiando versões do Altair BASIC.

Wozniak ajudou Jobs, que trabalhava para a Atari, a reformular o jogo Breakout. Em algum momento posterior, ele decidiu ver se alguém poderia escrever o jogo em BASIC. Ele adicionou comandos para ler controladores paddle, em uma série de rápidas edições, teve uma versão do jogo em funcionamento. Para melhorar sua jogabilidade, ele adicionou um alto-falante para fazer cliques quando a bola batesse nas coisas. Ao mostrá-lo a Steve Jobs, Wozniak demonstrou que poderia mudar rapidamente as cores que seu jogo usava, apenas alterando o código-fonte. Wozniak escreveu mais tarde que havia provado que "o software era muito mais flexível que o hardware" e que ele e Jobs perceberam que "agora, qualquer um poderia criar jogos de arcade sem ter que projetá-lo em hardware"./>
Wozniak completou uma biblioteca de ponto flutuante para o 6502 e a publicou na edição de agosto de 1976 do Dr. Dobb's. Esta biblioteca foi posteriormente incluída nas ROMs do Apple II. Wozniak começou a trabalhar no back-porting do código de ponto flutuante para o Apple BASIC, mas se desviou na tarefa para projetar um controlador de disquete para o que se tornou o Disk II. Mike Markkula disse que a empresa iria à Consumer Electronics Show em Las Vegas se o sistema de disco estivesse pronto a tempo. Então Wozniak e Randy Wigginton trabalharam nele sem parar durante as férias de 1977.

QuanQuando voltou ao tópico de ponto flutuante no BASIC, Jobs reclamou que estava demorando muito. Sem Wozniak estar ciente, a Apple já havia conseguido uma licença com a Microsoft para receber sua versão 6502 recém-concluída do código Altair. Examinando o código da Microsoft, Wozniak decidiu que era mais fácil adicionar suporte gráfico ao código do que adicionar ponto flutuante ao seu próprio BASIC, já que o posterior exigia correção manual do código da máquina original enquanto o da Microsoft era escrito em assembler e mais facilmente modificado.
O desenvolvimento do BASIC da Apple terminou e se tornou o Applesoft BASIC. Wozniak observou mais tarde: "Minha maior decepção foi para as terríveis funções de string como LEFT$(VAR, 5) e MID$(VAR2,5,3) em vez das minhas".

Quando o Apple II foi lançado no verão de 1977, o Integer BASIC foi fornecido em ROM, enquanto o Applesoft BASIC foi enviado em cassete. Com o lançamento do Apple II Plus em 1979, ocorreu a troca e o Applesoft foi fornecido em ROM.

Edição do programa


Como a maioria das implementações BASIC da época, o Integer BASIC trabalha tanto como o interpretador de linguagem quanto como o ambiente de edição de linha. Quando o BASIC estava em execução, um prompt de comando ">" era exibido onde o usuário podia inserir instruções.
No Apple 1, ao contrário dos outros computadores domésticos, ele iniciava no modo monitor e não no ambiente BASIC. Para iniciar o BASIC era necessário pressionar Ctrl+B + Return.

As instruções que são inseridas com números iniciais são armazenadas como um progrma para "execução adiada", e podem ser novas linhas ou substituindo qualquer uma que tenha o mesmo número anteriormente. Os números de linha podem ser de 0 a 32767, e as linhas podem conter até 128 caracteres de comprimento.
As instruções que são inseridas sem um número de linha são executadas imediatamente.

Integer BASIC também incluiu o comando AUTO, para inserir automaticamente números de linha partindo de um número inicial, como em AUTO 100, adicionando 10 ao último número a cada nova linha. AUTO 300,5 começaria a numerar na linha 300 com incrementos de 5; 300, 305, etc. A numeração automática é desativada digitando MAN.

Uma característica interessante do editor era que uma seção da tela poderia ser reservada como a "janela", onde as atualizações ao vivo aconteciam. Esta era normalmente a tela inteira, mas poderia ser limitada a uma área menor inserindo valores POKE nos locais de memória 32 a 35. Este recurso poderia ser usado para criar uma área de texto editável enquanto o resto da tela estava no modo gráfico.

Depuração


Como na maioria dos BASICs, os programas são iniciados com o comando RUN e, como era comum, podiam ser direcionados para um número de linha específico, como RUN 300. A execução pode ser interrompida a qualquer momento usando Ctrl+ C e continuada com o comando CON, ao contrário do comando mais típico CONT.

Para execução passo a passo, a instrução TRACE pode ser usada no prompt de comando ou colocada dentro do próprio programa. Quando ativado, os números de linha são impressos para cada linha executada pelo programa. O recurso pode ser desativado novamente com NOTRACE.

Um recurso um tanto incomum foi o comando DSP (para "exibir"). Quando encontrado em um programa, a partir desse ponto, qualquer alteração no valor de uma variável seria exibida. Por exemplo, DSP X exibe o valor de X toda vez que for alterado, junto com o número da linha em que a alteração ocorreu. Assim como no TRACE, o DSP foi desligado com NODSP.

Matemática


Integer BASIC, como o próprio nome indica, usa inteiros como base para seu pacote matemático. Estes são armazenados internamente como um número de 16 bits, little-endian (como é o 6502). Isso permite um valor máximo para qualquer cálculo entre -32767 e 32767; embora o formato também possa armazenar o valor -32768, o BASIC não pode exibir esse número. Os cálculos que resultaram em valores fora desse intervalo produziram um ERR >32767.

Operadores incluídos +(adição), -(subtração), *(multiplicação), /(divisão), MOD (resto) e expoente usando o caractere ^.
Operadores binários incluídos AND, OR e NOT. As comparações binárias incluem o conjunto padrão de operadores: =, >, <, >=, <=, <> e o (inspirado no HP) #, que é equivalente a <>.

Apenas arrays unidimensionais eram permitidos, limitados em tamanho apenas pela memória disponível. As funções matemáticas eram escassas; apenas ABS (valor absoluto), SGN (sinal) e RND (número aleatório) foram suportados.
No caso da função RND, em contraste com as versões derivadas da Microsoft, onde o parâmetro era ignorado e RND sempre retornava um valor 0..<1, o Integer BASIC utiliza o efetivamente o parâmetro. Exemplo: RND(6) retorna um inteiro de 0 a 5.

Strings


A manipulação de string do Integer BASIC foi baseada no sistema no HP BASIC. Isso tratava as variáveis ​​de string como matrizes de caracteres que precisavam ser dimensiondas antes antes do uso. Isso é semelhante ao modelo em C ou Fortran 77. Isso contrasta com os BASICs do tipo Microsoft, onde as strings são um tipo intrínseco de comprimento variável.
Antes das versões BASIC do Microsoft se tornarem o padrão de fato, esse estilo não era incomum; North Star BASIC e Atari BASIC usaram o mesmo conceito, assim como outros.

Strings em Integer Basic usavam uma quantidade fixa de memória, independentemente do número de caracteres usados ​​dentro delas, até um máximo de 255 caracteres. Isso tinha a vantagem de evitar a necessidade de coleta de lixo do heap que era notoriamente lento no BASIC Micosoft, mas significava que as strings menores que o comprimento declarado eram desperdiçadas.

O acesso à substring foi fornecido por meio da sintaxe de fatiamento de matriz. Por exemplo, PRINT A$(0,5) imprime os primeiros seis caracteres de A$, caracteres de 0 a 5. A concatenação foi fornecida usando o mesmo sistema, A$(5)="ABC" substituindo quaisquer caracteres começando na posição 5 pela string "ABC".
Isso contrasta com a manipulação de strings no estilo DEC/Microsoft, que usa funções de string como MID$ para acessar substrings e + para concatenação.

Como muitos dos recursos que seriam fornecidos por funções de string foram fornecidos pelo fatiamento de array, a seleção de funções de string foi reduzida. LEN retorna o comprimento de uma string e ASC retornou o código numérico ASCII para a primeira letra em uma string. Faltava um equivalente do CHR$ que retornava o caractere ASCII com um determinado código numérico.

Gráficos e som


Quando lançado, o único controlador de jogo para a Apple era o controlador paddle, que tinha dois controladores em um único conector. A posição do controlador pode ser lida usando a função PDL, passando o número do controlador, 0 ou 1, como em A=PDL(0):PRINT A, retornando um valor entre 0 e 255.

As máquinas da Apple não incluíam hardware de som dedicado, apenas um simples "bipe". A produção de sons é realizada pela instrução PEEK numa localização mapeada da memória do alto-falante, -16336. Uitilizando o PEEK repetidamente com esse valor produzia tons, e o manual sugeria usar uma expressão matemática para fazer isso, como S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336).

O suporte para gráficos foi mais detalhado. O modo gráfico é ativado com a instrução GR e desativado com TEXT. O desenho normalmente começava com a emissão de um comando para mudar a cor, o que era feito definindo uma pseudo-variável COLOR. Para mudar a cor para verde claro, COLOR=12.
Para produzir um único ponto na tela, utiliza-se a instrução PLOT. Para desenhar um ponto na linha 10 e coluna 10, PLOT 10,10. Para desenhar uma linha horizontal na linha 20, HLIN 0,39 AT 20. Para desenhar uma linha vertical mais curta na coluna 7, VLIN 5,15 AT 7.
Para saber qual a cor de um ponto na tela, utiliza-se A=SCRN X,Y,onde X é a linha e Y a coluna da tela.

Nomes de variáveis


Onde Dartmouth BASIC e HP-BASIC limitaram os nomes de variáveis ​​a no máximo dois caracteres (uma única letra ou uma letra seguida por um dígito) e onde o MS-BASIC permitiu uma letra seguida por uma letra ou dígito opcional (ignorando os caracteres subsequentes), o Integer BASIC era incomum no suporte a qualquer nome de variável de comprimento (por exemplo, SUM, GAMEPOINTS, PLAYER2). A única ressalva era que os nomes das variáveis ​​não podiam conter palavras reservadas; por exemplo, THISCOLOR e COLORFUL eram nomes de variáveis ​​inválidos porque continham a palavra-chave COLOR, um comando do sistema. Além disso, as linhas eram limitadas a 128 caracteres, portanto, os nomes das variáveis ​​não podiam exceder esse comprimento.



Guia rápido do Integer BASIC



Declarações e Linhas

Uma linha digitada sem número inicial, será executada imediatamente.
Já as linhas digitadas com um número inicial, serão armazenadas em memória
e serão executadas com o comando RUN.

:
     Separa instruções na mesma linha

REM [comentario]
     Inicia um comentário. O restante da linha é ignorado.


Controle de Fluxo

GOTO numLinha
     Ir para o número da linha

GOSUB numLinha
     Ir para a sub-rotina no número da linha. Retorna para a próxima linha que chamou.

RETURN
     Retorno da sub-rotina

POP
     Remove um endereço de linha da pilha de retorno

FOR var = aexpr TO aexpr [ STEP aexpr ]
     Loop com variável de contador

NEXT [ var  ]
     Fim do loop para a variável [var]

IF <expr> THEN declaração
     Condicional; se <expr> for verdadeiro, executa as declarações

END
     Finaliza a execução do programa BASIC

STOP
     Para a execução do programa BASIC

CON
     Continua a execução do programa BASIC, interrompido por um erro ou o comando STOP


Entrada/saída de texto

PRINT expr [ [;,] expr ... ] [;]
     Texto de saída. [;] concatena, [,] avança para a próxima parada de tabulação. Um [;] suprime a quebra de linha.
     [expr] pode incluir avançar por vários espaços SPC (aexpr) ou avançar para a coluna TAB(aexpr).

INPUT [string ;] var [, var ...]
     Leia a linha de entrada delimitada por vírgulas, com prompt opcional

HTAB numColuna
     Posicione o cursor de texto horizontalmente (coluna 1...40 ou 1...80)

VTAB numLinha
     Posicione o cursor de texto verticalmente (linha 1...24)

INVERSE
     Defina o modo de saída para preto sobre branco

NORMAL
     Defina o modo de saída para branco sobre preto

TEXT
     Muda para o modo texto. Não limpa a tela


Gráficos de baixa resolução

GR
     Defina a exibição para o modo gráfico de baixa resolução/misto com texto ("Lo-res") e limpa a tela

COLOR= numCor
     Define a cor a ser utilizada (0...15)

PLOT lin, col
     Desenha um ponto (bloco em Lo-res) (x = 0...39, y = 0...39/47)

HLIN col1, col2 AT linha
     Desenha uma linha horizontal em uma determinada linha

VLIN lin1, lin2 AT coluna
     Desenha uma linha vertical em uma determinada coluna

SCRN(lin,col)
     Retorna a cor do ponto em lin,col


Diversos

TRACE
     Ativa o modo "trace" (imprime o número da linha que foi executada)

NOTRACE
     Desativa o modo "trace"

PDL(num)
     Retorna o valor do paddle num, entre 0 e 1


Comandos Interativos Diretos

HIMEM: aexpr
     Define o limite superior da memória para variáveis

LOMEM: aexpr
     Define o limite inferior da memória para variáveis

IN# slot
     Direciona entrada direta do slot

PR# slot
     Direciona saída direta para o slot

DSP v1,v2...
     Mostra o conteúdo das variáveis v1, v2, ... sempre que o conteúdo for alterado



Manipulação Direta na Memória

PEEK( posMem )
     Retorna o valor de uma posição de memória

POKE posMem, valor
     Muda o valor da posição de memória

CALL posMem
     Executa uma rotina em linguagem de máquina iniciada no endereço

PR# numSlot
     Saída direta para o slot
     PR#0 — set 40 column mode
     PR#3 — set 80 column mode



Funções

Funções Numéricas

ABS( aexpr )
     Valor absoluto do número

RND( aexpr )
     Gerador de números pseudo-aleatórios. Se aexpr for
     positivo, retorna um número aleatório de 0 a 0,999.... Se aexpr for
     zero, repete o último resultado. Se aexpr for negativo, propaga novamente o gerador.

SGN( aexpr )
     Sinal do número (-1, 0, 1)


Funções com String

LEN( sexpr )
     Quantida de caracteres na string

ASC( sexpr )
     Código ASCII para o primeiro caractere da string



Operadores

Operadores de Comparação

=
     Igualdade

<
     Menor que

>
     Maior que

<=
     Menor ou igual

>=
     Maior ou igual

#
     Não igual


Operadores Booleanos

AND
     Conjunção

OR
     Disjunção

NOT
     Negação


Operadores Aritméticos

^
     Exponenciação

*
     Multiplicação

/
     Divisão

+
     Adição

-
     Subtração



Precedência de Operadores

Os operadores são listados verticalmente em ordem de precedência, do maior para o menor.
Os operadores na mesma linha têm a mesma prioridade e em uma expressão são executados da esquerda para a direita.
Essa ordem difere da ordem em alguns outros dialetos do BASIC, mas corresponde ao Integer Basic.

( )
+ - NOT (operadores unários)
^
* /
+ -
= # <= >=
AND
OR



Copyright © 2012 ~ 2022, Apple2Pro.com.br. Todos os direitos reservados.
#217219