APPLICATIONSDIVERS ★ UM SCROLL SUAVE COMO SEDA (AMSTRAD MAGAZINE) ★

Um Scroll Suave como Seda (Amstrad Magazine)Applications Divers

HÁ algum tempo tivémos oportunidade de ver um programa de demonstração a correr num Commodore 64, que fazia o scroll duma mensagem até ao fundo do ecrã duma maneira muito invulgar. O texto era maior que o normal, e o deslize era suave como seda.

Mas não foi isto que nos impressionou, nem mesmo a alta velocidade a que se processava a operação - muitos programadores já o conseguiram. Esta rotina tinha qualquer coisa a mais, um efeito de paralaxe; ou, para o dizer de outra forma, a mensagem deslizava a uma velocidade (rápida) enquanto um padrão debaixo do texto deslizava noutra velocidade(lenta).

DESLIZAR QUADRO A QUADRO

O que quer que o Commodore 64 consiga fazer, o CPC 464 pode fazer melhor - ou quase. Por isso criámos uma rotina para os CPC 464, 664 e 6128. Para termos a certeza de que o programa era rápido e suave tivemos que o fazer deslizar quadro a quadro. Como se sabe, em cada 50 avos do segundo é criado um quadro, que só permanece durante 20 milisegundos -por isso o código tem que ser o mais rápido possível.

O primeiro problema a resolver foi o de decidir quantas linhas se poderiam fazer deslizar no tempo atribuído, tendo em consideração que teríamos que actualizar a mensagem ao mesmo tempo. Depois de um período de tentativas decidimo-nos por um total de 5 linhas, desde que se conseguisse fazer umas habilidades com a posição do ecrã.

Como se tratava de 5 linhas, cada uma com oito pixels de altura e 80 bytes de comprimento, podíamos fazer o scroll em oito blocos de 400 bytes, cada bloco movido com uma instrução LDIR do Z80.

Infelizmente a instrução LDIR não era suficientemente rápida. Recorrendo então ao Assembler, utilizámos o bloco LDI. Isto implica a criação de uma série de LDIs na memória, uns a seguir aos outros, e neste caso, precisávamos de 400.0 programa instala-os no início e põe uma instrução de retorno no fim, podendo assim ser chamados como subrotinas.

Tudo o que era necessário agora era que os endereços da fonte e do destino fossem colocados respectivamente antes de serem chamados os LDI's. Isto tinha que ser feito oito vezes, uma vez para cada linha de pixel's, para se conseguir mover a totalidade das cinco linhas de caracteres.

ACRESCENTAR CARACTERES

O problema seguinte envolvia a actualização' dos caracteres no lado direito do ecrã. Da mesma forma, esta rotina necessitava de ser bastante eficiente. Para manter uma alta velocidade utilizámos um dos truques favoritos dos programadores do Spectrum. O stack pode ser posicionado em qualquer sitio da memória do computador. E isto inclui a memória RAM do ecrã. Utilizando o comando PUSH é muito fácil transferir dados para o stack. Assim, apenas foi necessário colocar o ponteiro do stack no início do ecrã e executar o PUSH, “empurrando” os blocos que constituem as letras para o ecrã. Trata-se de uma maneira muito rápida de transferir dados dentro da memória, que tem ainda a vantagem de escrever dois bytes para a memória num só trajecto.

Tivémos de pensar ainda um bocado para saber qual a ordem a dar aos dados, uma vez que foram escritos com o byte alto no endereço baixo de memória.

Para acabar com esta dificuldade, as matrizes dos caracteres foram armazenadas ao lado deles, de maneira que quando um byte era recuperado só precisávamos de rodar o byte e, se 1 caia no carry ja'sabíamos que a célula do caracter estava preenchida.

A seguir bastou trabalharmos até à ponta do ecrã, rodando o byte de cada vez, até completar totalmente as cinco linhas. Isto conduziu-nos ao problema de conseguir criar o efeito de paralaxe, que, surpreendentemente, se tornava muito fácil de conseguir.

Quando uma célula do caracter a ser impresso está vazia, em vez de deixarmos a célula vazia, foi escrito no ecrã um padrão de linhas verticais. Isto foi feito nas cores 2, 3,4 e 5, da esquerda para a direita e percorrendo a célula. Bastava agora executar ciclos nas cores de maneira a dar a ilusão de movimento.

Isto significava que ficámos com um texto a deslizar em saltos de quatro pixels, enquanto as linhas verticais em fundo só se moviam em saltos de dois pixels. Tudo OK? Nem por isso. Existia ainda um problema: não se conseguia fazer tudo isto a tempo. Já não existiam mais truques para se poderem acelerar as rotinas, de maneira que se resolveu este problema movendo o ecrã mais para baixo umas linhas. Agora havia mais tempo disponível antes que o varrimento acabasse de desenhar o quadro.

Finalmente, falta agora escrever o programa, mas da seguinte maneira:

  • Se estiver a utilizar uma unidade de disquetes, digite apenas a Listagem 1 e faça-a correr. Isto irá criar o código máquina para o scroll.

A seguir escreva e faça correr a Listagem 2, que lhe permite escrever a mensagem e vê-la deslizar.

  • Se utilizar a cassete, escreva Listagem 1 e grave-a. Escreva a Listagem 2 e grave-a exactamente a seguir à Listagem 1.

Tome nota do número no contador do gravador e volte atrás com a fita até ao início do a Listagem 1. Carregue a Listagem 2, mas NÃO a faça correr.

Avance com a fita para a posição marcada atrás e faça correr a Listagem 1. A seguir volte outra vez atrás com a fita até ao início da Listagem 2 e faça-a correr.

E pronto, é tudo. Bom Scroll...

Amstrad Magazine

★ PUBLISHER: Amstrad Magazine (Publinfor)
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Um  Scroll  Suave  como  Seda    (Amstrad  Magazine)    LISTING    PORTUGUESEDATE: 2021-02-02
DL: 208
TYPE: PDF
SiZE: 384Ko
NOTE: 5 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Traducteur de Fichier Genekar
» Applications » Routine Caps - Horloge (CPC Revue)
» Applications » Business Star
» Applications » RSX Display
» Applications » Amgraph (Amstrad Magazine)
» Applications » RSX Clock (Happy Computer)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 509 millisecondes et consultée 1016 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.