segunda-feira, 21 de janeiro de 2013

Menor valor de RAMTOP com Beta 48/128

Uma das aplicações de compressores como Lerm Code Compressor 1 ou o mais recente ZX7, é liberar espaço para o carregador BASIC. Sobra a pergunta: qual espaço mínimo é necessário para o programa BASIC?

Fonte: Wikipédia

O endereço de início do programa BASIC no TK90X é dado pela variável de sistema PROGBAS (PROG na nomenclatura da Sinclair), cujo conteúdo pode ser examinado com: 
PRINT PEEK 23635+256*PEEK 23636

Para um TK90X sem expansões, este endereço é 23755. Alguns periféricos alteram este valor por usar parte da RAM para armazenar dados e variáveis. O DOS da interface Beta (TR-DOS) usa 112 bytes e portanto empurra o início do programa BASIC para 23867. Portanto qualquer linha que for digitada será adicionada a partir deste endereço.

O limite superior da RAM usada pelo sistema BASIC é dado pela variável de sistema RAMTOP, cujo conteúdo pode ser visto com:
PRINT PEEK 23730+256*PEEK 23731

Este valor pode ser definido com o comando CLEAR. Por exemplo: 
CLEAR 24999
estipula que o sistema BASIC deixará intocada a RAM entre 25000 a 65535 (último byte do TK90X de 48KB).

Neste exemplo, com o TR-DOS, o sistema BASIC terá um espaço entre 23867 a 24999 disponível para armazenar o programa, as variáveis, os dados da calculadora, os dados do editor de linhas e os dados da pilha do Z80. Seriam 1133 bytes, que comportaria com certa folga um programa de carregamento.

Um programa que emprego comumente como carregador seria algo como:

10 POKE 23693,0 : BORDER 0 : POKE 23624,0 : CLEAR 24999
20 LET d=15363: IF PEEK 15363<>195 THEN LET d=15619
30 RAND USR d : REM : LOAD "EXEMPLO$"CODE
40 RAND USR d : REM : LOAD "EXEMPLO%"CODE
50 RAND USR 25000

Tal programa ocuparia 180 bytes que caberia confortavelmente com este valor de RAMTOP.

Qual seria o limite mínimo de RAMTOP para que um programa carregador como o acima continue funcionando? Fiz alguns testes com emuladores e, no caso da Beta 48, o limite inferior é de 24190; abaixo deste valor, o programa acusa erro de falta de memória e trava. 

Para Beta 128 o limite fica bem acima, ficando em 24453. O motivo desta diferença é que esta versão do TR-DOS usa 256 bytes extras nas operações de leitura ou escrita, como buffer temporário para guardar o equivalente a um setor do disco.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.