Applesoft BASIC

AjustarCompartirImprimirCitar
Dialect da Microsoft Linguagem de programação BASIC

Applesoft BASIC é um dialeto do Microsoft BASIC, desenvolvido por Marc McDonald e Ric Weiland, fornecido com a série de computadores Apple II. Ele substitui o Integer BASIC e é o BASIC em ROM em todos os computadores da série Apple II após o modelo Apple II original. Ele também é referido como FP BASIC (de ponto flutuante) por causa do comando Apple DOS usado para invocá-lo, em vez de INT para Integer BASIC.

O Applesoft BASIC foi fornecido pela Microsoft e seu nome é derivado dos nomes da Apple Computer e da Microsoft. Funcionários da Apple, incluindo Randy Wigginton, adaptaram o interpretador da Microsoft para o Apple II e adicionaram vários recursos. A primeira versão do Applesoft foi lançada em 1977 em fita cassete e não tinha suporte adequado para gráficos de alta resolução. O Applesoft II, que foi disponibilizado em cassete e disco e na ROM do Apple II Plus e modelos posteriores, foi lançado em 1978. É esta última versão, que tem algumas diferenças de sintaxe e suporte para os modos gráficos de alta resolução do Apple II, que geralmente são sinônimos do termo "Applesoft."

Um compilador para Applesoft BASIC, TASC (The Applesoft Compiler), foi lançado pela Microsoft em 1981.

História

Quando Steve Wozniak escreveu o Integer BASIC para o Apple II, ele não implementou suporte para aritmética de ponto flutuante porque estava interessado principalmente em escrever jogos, uma tarefa para a qual inteiros sozinhos eram suficientes. Em 1976, a Microsoft desenvolveu o Microsoft BASIC para o MOS Technology 6502, mas na época não havia nenhum computador de produção que o utilizasse. Ao saber que a Apple tinha uma máquina 6502, a Microsoft perguntou se a empresa estava interessada em licenciar o BASIC, mas Steve Jobs respondeu que a Apple já tinha uma.

O Apple II foi apresentado ao público na West Coast Computer Faire em abril de 1977 e ficou disponível para venda em junho. Uma das reclamações mais comuns dos clientes sobre o computador era a falta de matemática de ponto flutuante do BASIC. Para tornar as coisas mais problemáticas, o computador pessoal rival Commodore PET tinha um interpretador BASIC com capacidade de ponto flutuante desde o início. Como Wozniak - a única pessoa que entendia o Integer BASIC bem o suficiente para adicionar recursos de ponto flutuante - estava ocupado com a unidade Disk II e o controlador e com o Apple DOS, a Apple recorreu à Microsoft.

A Apple supostamente obteve uma licença de oito anos para o Applesoft BASIC da Microsoft por uma taxa fixa de $ 31.000, renovando-a em 1985 por meio de um acordo que deu à Microsoft os direitos e o código-fonte da versão Macintosh da Apple do BASIC. O Applesoft foi projetado para ser compatível com versões anteriores do Integer BASIC e usa o núcleo da implementação 6502 BASIC da Microsoft, que inclui o uso do comando GET para detectar pressionamentos de teclas e não exigir espaços nas linhas do programa. Embora o Applesoft BASIC seja mais lento que o Integer BASIC, ele possui muitos recursos que o antigo BASIC não possui:

  • Cordas atômicas: Uma string não é mais uma matriz de caracteres (como em Integer BASIC e C); é, em vez disso, um objeto coletado de lixo (como em Scheme e Java). Isso permite arrays de strings; DIM A$(10) cria uma matriz de onze variáveis string numeradas 0–10.
  • arrays multidimensionais (números ou strings)
  • Variáveis de ponto flutuante de única precisão com um expoente de 8 bits e uma capacidade matemática significativa e melhorada de 31 bits, incluindo trigonometria e funções logarítmicas
  • Comandos para gráficos de alta resolução
  • DATA declarações, com READ e RESTORE comandos, para representar valores numéricos e strings em quantidade
  • CHR$, STR$e VAL funções para converter entre cadeia de caracteres e tipos numéricos (ambos os idiomas tinham o ASC função)
  • Funções definidas pelo usuário: funções simples de uma linha escritas em BASIC, com um único parâmetro
  • Erro: permitindo que os programas BASIC manuseem erros inesperados através da subrotina escrita em BASIC

Por outro lado, a Applesoft não possui o operador MOD (restante) do Integer BASIC.

A adaptação do BASIC para o Apple II foi um trabalho tedioso, pois a Apple recebeu uma lista de fontes para o Microsoft 6502 BASIC, que provou ser cheia de erros e também exigia a adição de comandos Integer BASIC. Como a Apple não tinha o montador 6502 disponível, a equipe de desenvolvimento foi forçada a enviar o código-fonte pelas linhas telefônicas para a Call Computer, uma empresa que oferecia serviços de compilação. Este foi um processo extremamente tedioso e lento e depois que o Call Computer perdeu o código-fonte devido a um mau funcionamento do equipamento, um dos programadores, Cliff Huston, usou seu próprio computador IMSAI 8080 para montar o código-fonte do BASIC.

Recursos

Applesoft é semelhante ao BASIC 2.0 do Commodore, exceto pelos recursos herdados do Integer BASIC. Existem algumas pequenas diferenças, como a falta de operadores bit a bit da Applesoft; caso contrário, a maioria dos programas BASIC que não usam recursos dependentes de hardware serão executados em ambos os BASICs.

A instrução PR# redireciona a saída para um cartão de expansão e IN# redireciona a entrada de um cartão de expansão. O número do slot do cartão é especificado após PR# ou IN# na instrução. O computador trava se não houver cartão no slot. PR#0 restaura a saída para a tela de 40 colunas e IN#0 para o teclado.

A instrução PR# pode ser usada para redirecionar a saída para a impressora (por exemplo, 10 PR# x:IMPRIMIR"Olá!") onde x é o número do slot que contém o cartão da porta da impressora. Para enviar uma lista de programas BASIC para a impressora, o usuário digita PR# x:LISTA.

Usar PR# em um slot com uma unidade de disco (geralmente no slot 6) faz com que a Applesoft inicialize a unidade de disco. Usar PR# em um slot com um cartão de 80 colunas (geralmente no slot 1) alterna para o modo de texto de 80 colunas.

Como no Commodore BASIC, as variáveis numéricas são armazenadas como ponto flutuante de 40 bits; cada variável requer cinco bytes de memória. O programador pode designar variáveis como inteiras seguindo-as com um sinal de porcentagem, caso em que elas usam dois bytes e estão limitadas a um intervalo de -32768 a 32767; no entanto, o BASIC os converte internamente de volta ao ponto flutuante ao realizar cálculos, enquanto cada sinal de porcentagem também leva um byte adicional de código de programa; portanto, na prática, esse recurso é útil apenas para reduzir o uso de memória de grandes variáveis de matriz, pois não oferece nenhum benefício de desempenho.

A função RND gera um número fracionário pseudoaleatório entre 0 e 1. RND(0) retorna o número aleatório gerado mais recentemente. RND com um número negativo irá pular para um ponto na sequência determinada pelo número negativo específico usado. RND com qualquer valor positivo gera o próximo número na sequência, independentemente do valor real fornecido.

Como outras implementações do Microsoft BASIC, a Applesoft descarta espaços (fora de strings e comentários) nas linhas do programa. LIST adiciona espaços ao exibir o código para facilitar a leitura. Como LIST adiciona um espaço antes e depois de cada palavra-chave tokenizada, geralmente produz dois espaços em uma linha onde um seria suficiente para facilitar a leitura.

O prompt padrão para INPUT é um ponto de interrogação. PRINT não adiciona um espaço antes dos números.

Limitações

Através de vários modelos anteriores do Apple II, o Applesoft BASIC não suportava o uso de letras minúsculas em programas, exceto em strings. PRINT é um comando válido, mas print e Print resultam em um erro de sintaxe.

A Applesoft não possui vários comandos e funções comuns à maioria dos interpretadores BASIC não-6502 da Microsoft, como:

  • INSTR (procurar uma substring em uma string)
  • PRINT USING (números de formato na saída impressa)
  • INKEY$ (verifique para um keypress sem parar o programa; embora um PEEK para a localização $C000 atinge esta ação)
  • LPRINT (saída a uma impressora em vez da tela)

A Applesoft não possui comandos para manipulação de arquivos ou discos, exceto para salvar e carregar programas via fita cassete. O sistema operacional de disco Apple II, conhecido simplesmente como DOS, aumenta a linguagem para fornecer tais habilidades.

Apenas as duas primeiras letras dos nomes das variáveis são significativas. Por exemplo, "BAIXO" e "PERDA" são tratados como a mesma variável, e tentar atribuir um valor a "PERDA" substitui qualquer valor atribuído a "LOW". Um programador também deve evitar letras consecutivas que sejam comandos ou operações da Applesoft. O nome "SCORE" para uma variável é interpretado como contendo o operador booleano OR, renderizado como SC OR E. "FUNDO" contém GR, o comando para invocar o modo gráfico de baixa resolução e resulta em um erro de sintaxe.

Som e gráficos

O único suporte de som integrado é a opção de IMPRIMIR um caractere de campainha ASCII para soar o bipe de alerta do sistema.

A Applesoft suporta desenho nos modos de baixa resolução e alta resolução do Apple II. Existem comandos para plotar pixels e desenhar linhas horizontais e verticais em baixa resolução. A alta resolução permite linhas arbitrárias e tabelas de formas baseadas em vetores para desenhar objetos dimensionados e girados. A única provisão para misturar texto e gráficos são as quatro linhas de texto na parte inferior de uma exibição gráfica.

A partir do Apple IIe, uma "alta resolução dupla" modo tornou-se disponível em máquinas com 128k de memória. Esse modo basicamente duplica a resolução do modo de alta resolução original, mas inclui todas as 16 cores da paleta de baixa resolução. A Applesoft não fornece suporte direto para este modo. Os modos específicos do Apple IIGS também não são suportados.

Extensões

O Applesoft BASIC pode ser estendido de duas maneiras: o comando e comercial (&) e a função USR(). Esses são dois recursos que chamam rotinas de linguagem de máquina de baixo nível armazenadas na memória, o que é útil para rotinas que precisam ser rápidas ou requerem acesso direto a funções arbitrárias ou dados na memória. A função USR() aceita um argumento numérico e pode ser programada para derivar e retornar um valor de função calculado, a ser usado em uma expressão numérica. & é efetivamente uma abreviação para CALL, com endereço pré-definido. Ao chamar rotinas na ROM Applesoft, é possível para rotinas de e comercial analisar valores que seguem o e comercial. Vários pacotes comerciais de terceiros estavam disponíveis para estender a Applesoft usando rotinas de e comercial.

Erros

Uma deficiência com interceptação de erro via ONERR significa que a pilha do sistema não é redefinida se uma rotina de tratamento de erro não invocar RESUME, levando potencialmente a uma falha. A função interna do gerador de números pseudo-aleatórios RND é capaz de produzir uma série previsível de saídas devido à maneira como o gerador é semeado ao ser ligado pela primeira vez. Esse comportamento é contrário ao modo como a documentação da Apple descreve a função.

Desempenho

Wozniak originalmente se referia ao seu Integer BASIC como "Game BASIC" (tendo escrito para que ele pudesse implementar um clone Breakout para seu novo computador). Poucos jogos de ação foram escritos em Applesoft BASIC, em grande parte porque o uso de números de ponto flutuante para todas as operações matemáticas degrada o desempenho.

Os programas Applesoft BASIC são armazenados como uma lista encadeada de linhas; um GOTO ou GOSUB leva tempo linear. Alguns programas possuem as sub-rotinas na parte superior para reduzir o tempo de chamada.

Ao contrário do Integer BASIC, a Applesoft não converte números literais (como 100) no código fonte para binário quando uma linha é inserida. Em vez disso, a string ASCII é convertida sempre que a linha é executada. Como a pesquisa de variáveis geralmente é mais rápida do que essa conversão, pode ser mais rápido armazenar constantes numéricas usadas dentro de loops em variáveis antes que o loop seja inserido.

Exemplo de código

Olá Mundo, com vídeo inverso e personagem sino, execute então listado

Hello World no Applesoft BASIC pode ser inserido da seguinte forma:

10.TEXTO:HOME20.?HELLO WORLD

Vários comandos podem ser incluídos na mesma linha de código se separados por dois pontos (:). O ? pode ser usado no Applesoft BASIC (e em quase todas as versões do Microsoft BASIC) como um atalho para "PRINT", embora soletrar a palavra não seja apenas aceitável, mas canônico—Applesoft convertido "?" em programas inseridos para o mesmo token como "PRINT" (portanto, nenhuma memória é realmente salva usando "?"), portanto, aparece como "PRINT" quando um programa é listado. O programa acima aparece em um comando LIST como:

10. TEXTO : HOME20. PRINTEIRA HELLO WORLD

Quando o Applesoft II BASIC foi inicialmente lançado em meados de 1978, ele vinha em fita cassete e podia ser carregado na memória por meio do monitor de linguagem de máquina do Apple II. Quando o Apple II+ aprimorado substituiu o II original em 1979, o Applesoft agora estava incluído na ROM e inicializava automaticamente na inicialização se nenhum disquete inicializável estivesse presente. Por outro lado, o Integer BASIC agora foi removido da ROM e transformado em um arquivo executável no disco DOS 3.3.

Evolução precoce

O Applesoft original, armazenado na RAM conforme documentado em seu Manual de Referência de novembro de 1977, possui um código interpretador menor do que o Applesoft II posterior, ocupando 8½ KB de memória, em vez dos 10 KB usados pelo Applesoft II posterior. Consequentemente, ele carece de vários recursos de comando desenvolvidos para a versão mainstream posterior:

  • Todos os comandos suportam os gráficos "alta resolução" da Apple (9 total)
  • Erro com ONERR...GOTO e RESUME
  • Machine-routine shorthand call "&"
  • HOME de limpeza de tela (uma chamada para um sistema ROM rotina)
  • Controle de saída de texto NORMAL, INVERSE, FLASH e SPEED
  • A função de espaço de impressão SPC() está listada entre as palavras reservadas no manual, mas não é documentada de outra forma (a função de impressão TAB() o documentado)
  • Armazenamento de fita cassete de arrays numéricos: STORE E RECALL
  • Resposta do dispositivo: WAIT

bem como vários que a versão posterior teria, que já estavam presentes no Integer BASIC da Apple:

  • Eliminação da linha do programa: DEL
  • Acesso à máquina-rotina: CALL
  • Acesso ao dispositivo periférico: IN# e PR# (embora IN sem "#" esteja listado entre as palavras reservadas)
  • Controle da faixa de memória: HIMEM: e LOMEM:
  • Rastreamento de execução para depuração: TRACE e NOTRACE
  • Posicionamento de tela: HTAB e VTAB
  • Subrotina abortando POP
  • Funções PDL() para ler os controladores analógicos e SCRN() para ler a tela gráfica de baixa resolução (ambos a acessar rotinas de sistema ROM)

Além disso, seus comandos gráficos de baixa resolução têm nomes diferentes de seus equivalentes Integer BASIC/Applesoft II. Todos os nomes de comando estão no formato PLTx, de modo que GR, COLOR=, PLOT, HLIN e VLIN são chamados de PLTG, PLTC, PLTP, PLTH e PLTV, respectivamente. O comando para retornar ao modo texto, conhecido como TEXT em outras versões, é simplesmente TEX, e carrega a condição de que seja a última instrução em uma linha de programa.

O Applesoft BASIC 1.x estava mais próximo do código BASIC 6502 original da Microsoft do que o Applesoft II posterior; manteve o tamanho da memória? prompt e exibiu um aviso de direitos autorais da Microsoft. Para manter a consistência com Integer BASIC, o botão "Ok" prompt do código da Microsoft foi substituído por um caractere]. O Applesoft 1.x também perguntava ao usuário, ao carregar, se ele desejava desabilitar a instrução REM e a palavra-chave LET nas instruções de atribuição em troca de comandos gráficos lores.

A função USR() também é definida de forma diferente, servindo como um substituto para o comando CALL ausente. Seu argumento não é para passar um valor numérico para a rotina de linguagem de máquina, mas sim o endereço de chamada da própria rotina; não há "gancho" para pré-definir o endereço. Todos os vários exemplos no manual usam a função apenas para acessar "ROM do monitor do sistema" rotinas ou rotinas de usuário curtas para manipular as rotinas de ROM. Nenhuma menção é feita a qualquer código para calcular o valor retornado pela própria função; a função é sempre mostrada sendo atribuída a "dummy" variáveis, que, sem ação para definir um valor pelo código do usuário, apenas recebem um valor sem sentido devolvido a elas. Mesmo as rotinas de ROM acessadas que retornam valores (nos exemplos, aquelas que fornecem o serviço das funções PDL() e SCRN()) simplesmente têm seus valores armazenados, por rotinas de usuário, em locais que recebem PEEK separadamente em uma instrução subsequente.

Ao contrário de Integer BASIC e Applesoft II, os operadores booleanos AND, OR e NOT executam operações bit a bit em valores inteiros de 16 bits. Se eles receberem valores fora desse intervalo, ocorrerá um erro.

Os termos OUT e PLT (e o mencionado IN) aparecem na lista de palavras reservadas, mas não são explicados em nenhum lugar do manual.

BÁSICOS relacionados

A Coleco alegou que o SmartBASIC de seu computador doméstico Adam era compatível com o código-fonte da Applesoft.

A Microsoft licenciou um BASIC compatível com a Applesoft para a VTech para seu clone Laser 128.

Contenido relacionado

Apple Talk

AppleTalk é um conjunto proprietário descontinuado de protocolos de rede desenvolvidos pela Apple Computer para seus computadores Macintosh. O AppleTalk...

Laboratório de Propulsão a Jato

O Laboratório de Propulsão a Jato é um centro de pesquisa e desenvolvimento financiado pelo governo federal e um centro de campo da NASA na cidade de La...

Padrão de criptografia avançada

O Padrão Avançado de Criptografia também conhecido por seu nome original Rijndael é uma especificação para a criptografia de dados eletrônicos...
Más resultados...
Tamaño del texto: