sexta-feira, 13 de julho de 2012

Adaptação de jogos de fita para Beta 48 (parte 3)

Na parte 2 eu prometi comentar os esquemas de proteção de jogos gravados em fitas cassetes mas, como interlúdio, abordarei um assunto igualmente importante: o consumo de memória. 


Uma das dificuldades encontradas na adaptação de programas origina-se no consumo maior de RAM pelo Beta DOS (TRDOS). Quando o sistema é inicializado, 112 bytes são consumidos, para conter as diversas variáveis necessárias ao funcionamento. As operações com disco consomem temporariamente 256 bytes do buffer de impressora e, no caso de comandos como COPY e MOVE, mais 256 a 4096 bytes são alocados, dependendo da memória disponível.

No caso do Motos, a instrução CLEAR 24575 faz com que haja 821 bytes disponíveis para o BASIC, sem o DOS. Descontando os 112 bytes das variáveis do TR-DOS, restariam apenas 709 bytes, o que é um espaço muito pequeno. Portanto o programa BASIC deve ser otimizado para consumir menos memória possível.

Existem alguns procedimentos que economizam memória, quando for escrever um programa BASIC:
  • cada linha de programa consome 5 bytes, portanto se deve colocar o máximo de comandos na mesma linha, separados por dois pontos (:);
  • cada constante numérica possui associada 6 bytes ocultos da listagem, portanto é interessante que seja substituída por string correspondente (por exemplo, a constante 24575 deve ser substituída pela expressão VAL "24575"); 
  • deve-se evitar o uso de variáveis com nome maior que uma letra;
  • a constante 0 pode ser substituída por NOT PI;
  • a constante 1 pode ser substituída por SGN PI;
  • a constante 2 pode ser aproximada por SQR PI;
  • a constante 3 pode ser aproximada por PI ou INT PI;
  • a constante 10 pode ser aproximada por PI*PI;
  • a constante 23 pode ser aproximada por EXP PI.
Seguindo as recomendações, a listagem abaixo:

10 CLEAR 24575
20 RAND USR 15363: REM : LOAD "MOTOS1"CODE 16384
30 INK 0: PAPER 0: PRINT AT 0,0;
40 RAND USR 15363: REM: LOAD "MOTOS2"CODE
50 RANDOMIZE USR 32768

torna-se:

10 CLEAR VAL "24575" : RAND USR VAL "15363": REM : LOAD "MOTOS1"CODE 16384
20 INK NOT PI: PAPER NOT PI: PRINT AT NOT PI,NOT PI;
30 RAND USR VAL "15363": REM: LOAD "MOTOS2"CODE
40 RANDOMIZE USR VAL "32768"

Não se pode deixar todos os comandos na mesma linha por causa do USR 15363 que invoca as rotinas do TR-DOS, pois o que vem depois de REM não seria interpretado pelo BASIC. Por outro lado, a linha 20 pode ser suprimida, pois serve só para evitar que a tela seja arruinada durante o carregamento da fita. Como este problema não ocorre no carregamento do disco, pode ser deletada e economizar mais memória:

10 CLEAR VAL "24575" : RAND USR VAL "15363": REM : LOAD "MOTOS1"CODE 16384
30 RAND USR VAL "15363": REM: LOAD "MOTOS2"CODE
40 RANDOMIZE USR VAL "32768"

Para saber a quantidade de memória ocupada por um programa BASIC, digite o comando:
PRINT PEEK 23627+256*PEEK 23628-PEEK 23635-256*PEEK 23636

Nenhum comentário:

Postar um comentário

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