★ APPLICATIONS ★ DIVERS ★ O QUARTO MODO ★ |
RSX Mode 3 (Amstrad Magazine) | Applications Divers |
É um facto muito pouco conhecido que o AMSTRAD CPC é capaz de utilizar outro modo de ecrã. Para nossa maior conveniência vamos chamar-lhe “Modo 3”. A diferença em relação aos outros é que pode ter dados no ecrã sem serem vistos, e que, contudo, estão lá. “Para que serve isso?” adivinha-se em uníssono a pergunta dos nossos leitores. É disso que vamos tratar já de seguida. I STO é mais útil do que se poderia imaginar. Suponhamos que você escreveu um programa que requere instruções muito complexas mas que você não quer que apareçam no ecrã nem quer reimprimi-las quando delas necessite. Bem, pode tê-las escondidas, mas sempre no ecrã, e torná-las visíveis quando for necessário, tornando-se invisível o que estava no ecrã durante o processo. Você lê as suas instruções e esconde-as novamente. O que temos é, com efeito, dois ecrãs num único. A um vamos chamar-lhe ecrã "Frontal” e ao outro ecrã “Posterior”. Alguns jogos utilizam este modo. Todo o trabalho de apagar e redesenhar o cenário realiza-se no ecrã Posterior, onde você não o pode ver, e é devolvido ao ecrã Frontal quando está pronto, enquanto que o apagamento e redesenha mento continua no que agora é o novo ecrã Posterior. Este modo tem as suas limitações. Só se podem ter quatro cores e os pixels são do mesmo tamanho que no modo 0. Isto quer dizer que só irá dispor de 20 letras em cada linha. Mesmo assim torna-se muito divertido. Felizmente a maioria dos comandos normais de impressão podem utilizar-se nele, e algumas instruções “PEN” escreverão no ecrã Posterior, outras no Frontal, agumas em ambas ao mesmo tempo e outras também em ambas mas com cores diferentes em cada uma. As instruções “PEN” que escrevem só no ecrã frontal são as 1, 2 e 3. As instruções “PEN” que só escrevem no ecrã posterior são as 0, 4, 8 e 12. A instrução “PEN 15” vê-se da mesma maneira nos dois. As restantes 5, 6, 7, 9,10,11,13 e 14 escrevem em ambos os ecrãs mas em cores diferentes quando observamos o Frontal e quando observamos o Posterior. Se escrever e executar o programa apresentado esperamos que consiga a mensagem “Ready” e descubra que tem uns novos comandos. Se encontrar uma mensagem de erro esta dir-lhe-á qual a linha que tem que corrigir para que as coisas funcionem. O programa reserva para si certa memória e situa-se por cima de HIMEM, não importando onde esteja situada esta variável. Os novos comandos são:
O comando |PRINT tenta fazer a mesma coisa que o PRINT normal mas sem sobreescrever o que tem por baixo. Mais tarde explicaremos como o faz. Para o utilizar, ponha simplesmente o que quer imprimir numa variável alfanumérica e execute a rotina. Por exemplo: LET a$="OLA":PEN 4:LOCATE 10,10: |PRINT.a$ e também: LET c$="ADEUS":PEN 1 :LOCATE 10,10: |PRINT,c$ Pode utilizar qualquer variável para lhe colocar texto, mas se usar uma que esteja vazia irá obter uma mensagem de erro. Agora se escrever os seus comandos |BACK e |FRONT encontrará o texto intacto em ambos os ecrãs. Isto só irá funcionar, contudo, se utilizar as instruções “PEN” que só escrevem num ecrã ou noutro, mas não em ambos. Para apagar só uma parte do ecrã e não todo. pode utilizar o método habitual de imprimir espaços onde necessite. Desde logo, desta forma apagará nos dois ecrãs de cada vez. Se só quer apagar num dos ecrãs, reescreva simplesmente as mesmas letras sobre as que quiser apagar nesse ecrã, quer seja no frontal, quer no posterior. Resumamos e clarifiquemos todo este tráfico de Frontais e Posteriores. Temos dois ecrãs, um deles visível, a que chamaremos frontal, com “f” minúsculo, e o outro invisível, a que chamamos posterior, com “p” minúsculo. Pode intercambiá-los com os comandos |FRONT e |BACK, de modo que ao primeiro que virmos depois de um comando |MODE vamos chamar-lhe Frontal, com “F" maiúsculo. Da mesma maneira, chamaremos ao outro Posterior, com “P” maiúsculo. Para além destes comandos, toda a impressão e apagamento se efectuam no ecrã visível frontal ou posterior, que pode ser ou não visível no momento de executar o comando. De seguida vamos tentar explicar como funciona este modo. Um byte é composto de oito bits, e no modo 0 quatro destes bits são utilizados para a informação de cor do pixel esquerdo e quatro para a do pixel direito. Por exemplo: Um byte = 11111111 Estes são os bits para os pixel esquerdo: Esquerdo = 10101010 E estes os bits para o pixel direito: Direito = 01010101 Com quatro bits podem obter-se 2*4 = 16 cores para cada pixel, que é exactamente o que temos no modo 0. No modo 3 a distribuição é diferente. São estes os bits para o pixel esquerdo posterior: Esquerdo posterior = 00000011 E estes para o pixel esquerdo frontal: Esquerdo frontal =00001100 Estes são os bits para o pixel direito posterior: Direito posterior = 00110000 E estes para o pixel direito frontal: Direito frontal = 11000000 Se numerarmos os bits deste modo: Número de bit 7,6,5,4,3,2 1,0 Byte 1,1,1,1,1,1,1,1 podemos ver que embora os bits 7,6, 5 e 4 sejam 1, só dois deles, 7 e 6, influirão no ecrã frontal e os bits 5 e 4 falo-ão no posterior. A isto se deve o facto de só termos quatro cores já que, em cada ecrã, um pixel só tem 2*2 = 4 números diferentes. Por isso, ao imprimir texto num ecrã se apaga o texto do outro se forem utilizados os métodos normais. Estes usam os quatro bits para cada pixel embora só dois sejam 1, e apagam os outros dois. |PRINT, contudo, realiza uma operação XOR com o texto, de modo que, se só dois bits estão a um no ecrã posterior e imprimir-mos texto no ecrã frontal, estes combinam-se e permanecem intactos. A regra de XOR é, como já deve saber: 1100 1111 Como podem ver, na primeira soma os bits combinam-se e se se trata novamente de fazer XOR com o segundo número obtém-se o número com que se começou. A razão para isto é que, ao utilizar-se o comando |PRINT duas vezes com o mesmo texto acaba-se por apagá-lo. Desde logo, se se utiliza |PRINT com algo que apareça nos dois ecrãs de uma só vez, como pode acontecer com a instrução “PEN 15", pode destruir-se tudo, ou, pelo contrário, pode encontrar-se algo, pelo que se apaga o texto de um ecrã mas este permanece no outro.
|