segunda-feira, 27 de abril de 2026

Limites do ZX Spectrum


Tamanho máximo de uma linha


É do conhecimento geral que o ZX Spectrum usa 2 bytes para armazenar o tamanho de uma linha BASIC. Como 2^16 = 65536, podemos pensar que conseguimos ter uma linha BASIC que ocupe toda a memória disponível. Ora, o ZX Spectrum (versão 48K) tem 48K de RAM, subtraindo a memória de écran e mais algumas coisitas ficamos com cerca de 41K. Mas, se tentarmos escrever a linha no teclado, o editor usará metade da memória disponível como memória temporária e, portanto, apenas conseguiremos escrever uma linha com cerca de 20739 bytes (se não removermos os caracteres UDG da RAM).

No entanto, existe outro limite para uma linha BASIC...

Número máximo de comandos numa linha


Pouca gente fala disso, mas, uma linha BASIC pode ter no máximo 127 comandos separados por ":" dois pontos. Quando os engenheiros criaram o ZX Spectrum nunca pensaram que alguém iria ser tão maluco que tentasse colocar mais de 127 comandos em apenas uma linha. O ZX81 permite apenas um comando por linha e isso já é suficiente.
Portanto, se quisermos escrever um programa bem grande tal não vai ser possível porque estamos limitados a 127 comandos.
Podemos tentar fazer truques como este mas não iremos muito longe:

Em vez de:

IF win=1 THEN PRINT "You win!"
IF win=-1 THEN PRINT "You lose!"
IF win=0 THEN PRINT "You draw!"


Podemos escrever:

PRINT "You win!" AND win=1;"You lose!" AND win=-1;PRINT "Draw!" AND win=0

Número máximo de linhas


O ZX Spectrum usa 2 bytes para armazenar o número de uma linha BASIC. Como 2^16 = 65536, podemos pensar que conseguimos ter 65536 linhas diferentes. Mas, na realidade apenas conseguimos ter no máximo 16384 linhas (2^14). Pelo teclado apenas conseguimos ter linhas de 1 até 9999. Mas, com POKE podemos ter a linha 0 e ter linhas desde 10000 até 16383.

Com o comando LIST podemos obter uma listagem com este aspecto:
   0 REM line 0
   1 REM line 1
9999 REM line 9999
:000 REM line 10000
;111 REM line 11111
<123 REM line 12123
=555 REM line 13555
>789 REM line 14789
?888 REM line 15888
@383 REM line 16383

Nota: Na tabela ASCII os caracteres têm esta sequência: 
0123456789:;<=>?@

Número máximo de caracteres num identificador


O ZX Spectrum permite ter nomes de variáveis com 256 caracteres (sem contar com espaços).

No ZX Spectrum podemos usar espaços nos nomes de variáveis.

Exemplo:

LET We have six = 6

Mas, atenção: os espaços são ignorados pelo interpretador BASIC.
Portanto, este comando é equivalente a:

LET WeHaveSix = 6

Exemplo com uma variável comprida:

10 LET This identifier represents a five byte variable capable of storing millions of integers and real numbers enabling large scale numerical data processing in complex computer systems = 12345.6789

20 PRINT This identifier represents a five byte variable capable of storing millions of integers and real numbers enabling large scale numerical data processing in complex computer systems


Identificadores em comandos GO TO / GO SUB


A maior parte das linguagens BASIC não permitem usar variáveis em comandos GO TO.

Então, temos que escrever algo como:
 
100 GO SUB 1000 : REM print list

Pode ser muito útil usar identificadores nas invocações das rotinas.
Mas nós estamos com sorte: no ZX Spectrum, isto é possível  e podemos escrever:

10 Let print list = 1000
100 GO SUB print list


Nota: O emulador BASinC fica confundido quando usamos palavras reservadas.
Neste caso, ele confunde "print list" com os comandos "PRINT LIST". Para evitar isto é melhor escrever:
GO SUB PrintList

Download


Podem aqui fazer download de alguns pequenos programas que foram usados para testar estas limitações.

Sem comentários:

Enviar um comentário